窗口句柄已經通過EnumWindows得到,如何得到窗口所属进程的ID,名字?
請各位大俠幫忙,謝謝!
請各位大俠幫忙,謝謝!
解决方案 »
- 为何继承CStatic类的对象没有响应OnLButtonDown
- Unhandled Exception in Turbo_ARQ.exe:0xC00000FD:Stack Overflow,请教高手,这个问题怎么解决啊,十分感谢
- 急啊 !
- 送高分请教(给50分)
- 在线等待,急,问在vc中如何通过程序将ms组织图对象插入到一个word文档中??
- 如何收到发往本机的UDP包,要IP完整格式
- 请教高手,定时器TIMER问题
- VC高高手请进来,问个ScrollWindow函数问题
- 招聘兼职VC程序员
- 使用什么函数可以拷贝文件夹,用法????
- 怎样获取CSplitterWnd框架内的CFormView试图
- 如何直接让Dialog上的CEdit响应OnKeyDown事件,
char szProcessName[MAX_PATH] = "unknown";if ( hProcess )
{
HMODULE hMod;
DWORD cbNeeded; if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName) ); //GetModuleFileNameEx( hProcess, hMod, szProcessName,
// sizeof(szProcessName) );
}
}
具体用GetModuleBaseName还是GetModuleFileNameEx,我忘记了,反正应该一个是获得exe名,一个获得全路径不过这两个函数需要
Header: Declared in Psapi.h.
Library: Use Psapi.lib.需要安装sdk
由
GetWindowThreadProcessId
获得进程id
然后由这个进程ID
调用OpenProcess
可以获得进程的HANDLE就是这个hProcess
所以上面的代码你还是可以用的
比如句柄的有效性::IsWindow(hwnd)什么的
{
return FALSE;
}
LPDWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd,lpdwProcessId);if (::IsWindow(hwnd) && ::IsWindowVisible(hwnd) && ((GetWindowLong(hwnd, GWL_EXSTYLE)&WS_EX_TOOLWINDOW)!=WS_EX_TOOLWINDOW) )
//(GetWindowLong(hwnd, GWL_HWNDPARENT)==0))
{
TCHAR szCap[255] = {0}; ::GetWindowText(hwnd, szCap, 255); if (strlen(szCap) == 0)
{
return TRUE;
}
if (lstrcmp(_T("Program Manager"),szCap) == 0)
{
return TRUE;
}
CString str;
str = szCap;
AfxMessageBox(str);
//TRACE( " name = %s\n", szCap );
}
return TRUE;
我的enumproc如上, 為甚麼跟蹤執行一次就報錯了呢,0xcccc,似乎句柄被破壞了
DWORD dwProcessId;
GetWindowThreadProcessId(hwnd,&dwProcessId);这样应该ok了