窗口的枚举与查找

①、使用 GetWindow 进行窗口枚举:
TCHAR titleText[MAX_PATH] = {0};

HWND nHwnd = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
while(nHwnd != NULL) {
::GetWindowText(nHwnd, titleText, MAX_PATH);
if (_tcslen(titleText) > 0) MessageBox(titleText);

nHwnd = ::GetWindow(nHwnd, GW_HWNDNEXT);
}

②、使用 FindWindowEx 进行窗口枚举:
TCHAR titleText[MAX_PATH] = {0};

HWND nHwnd = ::FindWindow(NULL, NULL);
while(nHwnd != NULL) {
::GetWindowText(nHwnd, titleText, MAX_PATH);
if (_tcslen(titleText) > 0) MessageBox(titleText);

nHwnd = ::FindWindowEx(0, nHwnd, NULL, NULL);
}

③、使用 EnumWindows 进行窗口枚举:
EnumWindows(EnumWindowsProc, NULL);
……
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
TCHAR titleText[MAX_PATH] = {0};
::GetWindowText(hwnd, titleText, MAX_PATH);
if (_tcslen(titleText) > 0) AfxMessageBox(titleText);

return TRUE;
}

④、使用 EnumChildWindows 进行子窗口的枚举:
EnumChildWindows 照比 EnumWindows 只是多了一个指定父窗口的窗口句柄的参数,
所以这个函数的使用算是留给大家的一个小作业,自己课后实践一下!

⑤、使用 FindWindow 进行窗口的查找:
HWND hCalc = ::FindWindow(_T("SciCalc"), _T("计算器"));
if (hCalc){
::SetWindowText(hCalc, _T("VC驿站 专用计算器!"));
}

⑥、使用 FindWindowEx 进行子窗口的查找:
HWND hCalc = ::FindWindow(_T("SciCalc"), _T("计算器"));
if (hCalc){
::SetWindowText(hCalc, _T("VC驿站 专用计算器!"));
HWND hEdit = ::FindWindowEx(hCalc, NULL, _T("Edit"), NULL);
::SetWindowText(hEdit, _T("1234567890"));
//::SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)_T("1234567890"));
}

⑦、鉴于 FindWindowEx 找子控件的不确定性,
可以使用 GetDlgItem 来获取对话框内部的子控件窗口句柄:

HWND hEdit = ::GetDlgItem(hCalc, 0x193);

⑧、其他 Window 操作相关 API 函数:
⑨、获取窗口的进程ID:GetWindowThreadProcessId

posted @ 2013-06-04 22:06  weare  阅读(866)  评论(0编辑  收藏  举报
  • 看雪论坛
  • 吾爱破解
  • 一蓑烟雨