VC 通过进程ID获得主窗口句柄

VC 通过进程ID获得主窗口句柄,第1张

通过进程名称结束 进程

BOOL FindProcessHandleAndKill(const CString &cs_WndName)

{

HWND hWnd;

DWORD ProcessID;

HANDLE hProcess;

hWnd=::FindWindow(NULL, cs_WndName);

if(hWnd==NULL)//テサモミユメオスエーソレ

{

return FALSE;

}

else

{

if(GetWindowThreadProcessId(hWnd, &ProcessID)==0)//ハァーワ

{

return FALSE;

}

else

{

hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcessID);

if(hProcess==NULL)

{

return FALSE;

}

else

{

if(TerminateProcess(hProcess, 0))

{

return TRUE;

}

else

{

return FALSE;

}

}

}

}

}

窗口1取窗口句柄() 取进程PID (窗口1句柄, 当前进程PID)版本 2DLL命令 取进程PID, 整数型, "user32", "GetWindowThreadProcessId", 公开, 获取与指定窗口关联在一起的一个进程和线程标识符

参数 hwnd, 整数型, , 指定的窗口句柄(窗口)

参数 lpdwProcessID, 整数型, 传址, 用作装载返回的PID变量

没有很直接的办法,我能想到的就是遍历窗口,并用GetWindowThreadProcessID函数获取pID,并与你的pID进行比对,相同则这个窗口就是你要的窗口,请参考>

#include <windowsh>

#include <stdioh>

#include <tlhelp32h>

void main()

{

PROCESSENTRY32 ProcessEntry = { 0 };

MODULEENTRY32 ModuleEntry = { 0 };

HANDLE hProcessSnap;

HANDLE hModuleSnap;

ProcessEntrydwSize = sizeof(PROCESSENTRY32);

ModuleEntrydwSize = sizeof(MODULEENTRY32);

hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);//给系统内的所有进程拍一个快照

BOOL bRet = Process32First(hProcessSnap,&ProcessEntry);// 遍历进程快照,轮流显示每个进程的信息,先获得第一个

while(bRet)

{

printf("\n%s\n",ProcessEntryszExeFile);//输出该进程可执行文件名(包括路径)

Sleep(200);

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,ProcessEntryth32ProcessID);//循环给每个进程的所有模块拍一个快照

bRet = Module32First(hModuleSnap,&ModuleEntry);// 遍历模块快照,轮流显示每个模块的信息,先获得第一个

while(bRet)

{

printf("\t%s\n",ModuleEntryszExePath);

Sleep(200);

bRet = Module32Next(hModuleSnap,&ModuleEntry);//下一个模块

}

bRet = Process32Next(hProcessSnap,&ProcessEntry);//下一个进程

}

}

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

char str[]="wmic process where name=\"notepadexe\" get handle,processid,name";

system(str);

上面命令,列出名字叫 notepadexe 的 所有的 进程 的 handle, processid, name

若用:

wmic process where name=\"notepadexe\" get handle,processid,name > atxt

就能把屏幕输出存入 atxt, 写程序打开,读入,很简单。handle 数值 就是句柄。

强制转换是肯定不行的,我想了个笨方法。在获得某进程的Id后,获取桌面上每个窗口的进程Id,再与先获得的进程Id进行比较,然后就能知道哪个窗口属于哪个进程的了。

另外网上找的一篇文章:>

以上就是关于VC 通过进程ID获得主窗口句柄全部的内容,包括:VC 通过进程ID获得主窗口句柄、易语言如何取自身进程ID 和 句柄、请问根据进程名或PID获得窗口句柄用VB6怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9589401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存