C++ 获取进程句柄问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 获取进程句柄问题相关的知识,希望对你有一定的参考价值。
大家好 我是个初学
问个问题可以么
如果知道了一个进程的名称,比如NOTEPAD。EXE ,有什么方法可以直接获得这个进程的句柄呢
用API
HWND hwnd = :: FindWindow(NULL,TEXT(新建文本文档。TXT- 记事本));我现在这样
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++ 获取进程句柄问题的主要内容,如果未能解决你的问题,请参考以下文章