怎样通过一个exe的文件名获得它的handle? 有API可以用吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我要在程序甲中用SendMessage向程序乙发消息,要用到乙的handle,已知乙的文件名,怎样才能得到它的handle? 枚举系统中所有的进程,找到这个进程后用OpenProcess取得句柄。 按楼主的意思应该知道了乙的进程名了,那么枚举一下进程,你可以看下MSDN里的CreateToolhelp32Snapshot这个函数,相应的它有一篇Taking a Snapshot and Viewing Processes的代码片段,里面可以得到句柄的。我试过的,呵呵,祝好运~ 多谢楼上两位老大!可是OpenProcess得到的是进程的Handle,怎么能通过进程的Handle得到窗口的Handle呢? 搞定了!送给后来人:PROCESSENTRY32 pe;HWND hwndFind = NULL;BOOL FindExe(WCHAR* exeName){ HANDLE hSnapshot; hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); pe.dwSize=sizeof(PROCESSENTRY32); Process32First(hSnapshot,&pe); do { if (0 == wcscmp(pe.szExeFile,exeName)) { return TRUE; } } while(Process32Next(hSnapshot,&pe)); CloseHandle(hSnapshot); return FALSE;}//在头文件中声明成:static BOOL CALLBACK CMyDlg::YourEnumProc(HWND Wnd,LPARAM lParam);BOOL CALLBACK CMyDlg::YourEnumProc(HWND Wnd,LPARAM lParam){ DWORD dwProcessId; GetWindowThreadProcessId(Wnd,&dwProcessId); if(dwProcessId==(DWORD)lParam) { hwndFind = Wnd; return FALSE; } return TRUE;}FindExe(_T("You Want Find.exe"));EnumWindows(YourEnumProc,(LPARAM)pe.th32ProcessID);::SendMessage(hwndFind,WM_XX,1,0); 节点模拟? MFC窗口,点击最大化时,程序就会报错 如何消除警告--数据类型转换问题 求获取系统发出的“保存文件”消息的方法 增强winamp功能,简捷地复制歌曲到MP3 截获webbrowser控件的newwindow2消息 关于显示模式的设置和播放大型wav文件的问题(求代码) 高分求教:用ATL写的ActiveX控件,怎么获得它的上层容器的文档的接口? 想与vc 和com方面的高手交个朋友 一个遍历句柄关闭互斥句柄达到双开游戏的程序,一直出错。注入程序运行这段代码就错 初学MFC 静态成员变量的问题?帮忙解释以下!
我试过的,呵呵,祝好运~
可是OpenProcess得到的是进程的Handle,怎么能通过进程的Handle得到窗口的Handle呢?
送给后来人:
PROCESSENTRY32 pe;
HWND hwndFind = NULL;
BOOL FindExe(WCHAR* exeName)
{
HANDLE hSnapshot;
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); pe.dwSize=sizeof(PROCESSENTRY32);
Process32First(hSnapshot,&pe);
do
{
if (0 == wcscmp(pe.szExeFile,exeName))
{
return TRUE;
}
}
while(Process32Next(hSnapshot,&pe));
CloseHandle(hSnapshot);
return FALSE;
}
//在头文件中声明成:static BOOL CALLBACK CMyDlg::YourEnumProc(HWND Wnd,LPARAM lParam);
BOOL CALLBACK CMyDlg::YourEnumProc(HWND Wnd,LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(Wnd,&dwProcessId);
if(dwProcessId==(DWORD)lParam)
{
hwndFind = Wnd;
return FALSE;
}
return TRUE;
}FindExe(_T("You Want Find.exe"));
EnumWindows(YourEnumProc,(LPARAM)pe.th32ProcessID);
::SendMessage(hwndFind,WM_XX,1,0);