C++ 获取进程句柄问题
大家好我是个初学问个问题可以么如果知道了一个进程的名称,比如NOTEPAD。EXE,有什么方法可以直接获得这个进程的句柄呢用APIHWNDhwnd=::FindWindo...
大家好 我是个初学
问个问题可以么
如果知道了一个进程的名称,比如NOTEPAD。EXE ,有什么方法可以直接获得这个进程的句柄呢
用API
HWND hwnd = :: FindWindow(NULL,TEXT(新建文本文档。TXT- 记事本));我现在这样 展开
问个问题可以么
如果知道了一个进程的名称,比如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 数值 就是句柄。
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 数值 就是句柄。
展开全部
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询