C++ 获取进程句柄问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 获取进程句柄问题相关的知识,希望对你有一定的参考价值。

大家好 我是个初学
问个问题可以么
如果知道了一个进程的名称,比如NOTEPAD。EXE ,有什么方法可以直接获得这个进程的句柄呢
用API
HWND hwnd = :: FindWindow(NULL,TEXT(新建文本文档。TXT- 记事本));我现在这样

用C++很繁琐。其实直接用DOS命令wmic process ..,自己再稍做点工作就可以了,清楚,易懂。

char str[]="wmic process where name=\"notepad.exe\" get handle,processid,name";
system(str);
上面命令,列出名字叫 notepad.exe 的 所有的 进程 的 handle, processid, name

若用:
wmic process where name=\"notepad.exe\" get handle,processid,name > a.txt
就能把屏幕输出存入 a.txt, 写程序打开,读入,很简单。handle 数值 就是句柄。
参考技术A http://www.cnblogs.com/andtt/archive/2011/08/19/2146089.html
HWND MyProc::GetXHandle(LPCWSTR procName)  //procName 被调用进程名称

DWORD iProcID=0;

PROCESSENTRY32 pEntry=sizeof(PROCESSENTRY32);

HANDLE hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
if(hSnapshot!=INVALID_HANDLE_VALUE)

if(Process32First(hSnapshot,&pEntry))

while (Process32Next(hSnapshot, &pEntry))

if(lstrcmpi(procName, pEntry.szExeFile) == 0)

iProcID=pEntry.th32ProcessID;
CloseHandle(hSnapshot);
break;





HWND hwnd=::GetTopWindow(NULL);
while(hwnd)

DWORD pid=0;
DWORD dwProcessId=GetWindowThreadProcessId(hwnd,&pid);

if(dwProcessId!=0)

if(pid==iProcID)

return hwnd;



hwnd=::GetNextWindow(hwnd,GW_HWNDNEXT);

return NULL;

先获取进程的ID,然后通过窗口获取即可!!!
附上获取进程句柄的例子!!!

//获取对应进程名的ID
DWORD GetSpecifiedProcessId(const char *pszProcessName)

DWORD id;
//获得系统快照句柄 (通俗的讲, 就是得到当前的所有进程)
HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0) ;
PROCESSENTRY32 pInfo; //用于保存进程信息的一个数据结构
pInfo.dwSize = sizeof(pInfo);
//从快照中获取进程列表
Process32First(hSnapShot, &pInfo) ; //从第一个进程开始循环
do

//这里的 pszProcessName 为你的进程名称
if(strcmp(strlwr(_strdup(pInfo.szExeFile)), pszProcessName) == 0)

id = pInfo.th32ProcessID ;
break ;

while(Process32Next(hSnapShot, &pInfo) != FALSE);
return id; //id 就是你要的进程PID 了..

先获取进程ID,然后使用HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, pID );类似的语句打开进程,之后就可以获取进程句柄了,但是需要注意句柄和进程是相关的,所以同一个进程的句柄在不同的进程中式不同的。
参考:http://baike.baidu.com/view/1280137.htm
http://zhidao.baidu.com/question/90086285.html

以上是关于C++ 获取进程句柄问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 win32 进程获取线程句柄列表?

怎样在C++中取得WPF窗体的句柄

C++ 如何使用 CreateProcess 来处理进程?

获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄

获取当前进程(程序)主窗体句柄并设置wpf的父窗体为此句柄

windows 下在进程中使用createprocess创建一个窗口进程,并获取这个窗口HWND句柄