C++ 获取进程句柄问题

大家好我是个初学问个问题可以么如果知道了一个进程的名称,比如NOTEPAD。EXE,有什么方法可以直接获得这个进程的句柄呢用APIHWNDhwnd=::FindWindo... 大家好 我是个初学
问个问题可以么
如果知道了一个进程的名称,比如NOTEPAD。EXE ,有什么方法可以直接获得这个进程的句柄呢
用API
HWND hwnd = :: FindWindow(NULL,TEXT(新建文本文档。TXT- 记事本));我现在这样
展开
 我来答
金色潜鸟
推荐于2016-06-15 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5632万
展开全部
用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 数值 就是句柄。
街角哦祝福
2013-06-24 · TA获得超过533个赞
知道小有建树答主
回答量:306
采纳率:0%
帮助的人:359万
展开全部
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
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式