获得当前窗口的hwnd的方法整理

来源:互联网 发布:这个男人来自地球 知乎 编辑:程序博客网 时间:2024/06/05 04:32

获得当前窗口的hwnd的方法整理

我已知获取hwnd的方法有如下一些:  

HWND GetActiveWindow(VOID);
GetActiveWindow()

GetTopWindow()

AfxGetMainWnd()->m_hWnd//得到自身的。
HWND hWnd=::FindWindow(NULL,"腾讯QQ系统广播");//查找窗口

GetSafeHwnd()

GetForegroundWindow()

从CWnd类继承的类都有一个m_hWnd的公共成员变量,如果是从CWnd继承过来的窗口直接用HWND操作符就行了
主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。
      AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使主窗口最大化.
1. m_hWnd和GetSafeHwnd()这是本程序的hwnd,而我要的是任意一个当前激活的程序窗口的hwnd
2.  GetActiveWindow(), 这个也是获得与本程序有关线程的程序窗口的hwnd
  比如本程序开了另一个窗口,我想可以用这个函数获得那个窗口的hwnd
3. 而FindWindow()就更有点问题了,它必须要知道窗口的名字。而要的是一个未知的窗口。

最后我用了::GetForegroundWindow(),它倒是可以获得当前窗口的hwnd,但它甚至得到了desktop的hwnd,而我在实际操作过程中不要desktop这个hwnd,我只要当前窗口的hwnd。如何做?

根据敞口




wstring GetProcessNameByHandle(HWND nlHandle)
{
wstring loStrRet=L"";
//得到该进程的进程id
DWORD ldwProID;
GetWindowThreadProcessId(nlHandle,&ldwProID);
if(0==ldwProID)
return L"";
HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(handle==(HANDLE)-1) 
{




//AfxMessageBox(L"CreateToolhelp32Snapshot error");
return false;
}
PROCESSENTRY32 procinfo;
procinfo.dwSize = sizeof(PROCESSENTRY32);
BOOL more=::Process32First(handle,&procinfo);
while(more)
{
if(procinfo.th32ProcessID==ldwProID)
{
loStrRet=procinfo.szExeFile;
CloseHandle(handle);
return loStrRet;
}
more=Process32Next(handle,&procinfo); 
}
CloseHandle(handle);
return loStrRet;
}

0 0
原创粉丝点击