第一种方法是根据窗口句柄值获取窗口句柄
使用spy++获取指定窗口的窗口句柄值,因为句柄值是16进制数,所以前面加0x,然后进行强制转换为HWND类型。
HWND hWnd=(HWND)0x00280726;
第二种方法是使用FindWindow或者FindWindowEx根据窗口类名和窗口标题找到相应的窗口句柄
HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName) 可以接受捕捉对象的类名或者窗口标题之一,作为参数,返回一个HWND。
HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)
第三种方法是获得当前鼠标位置的窗口句柄
BOOL GetCursorPos(LPPOINT lpPoint) //获取当前光标的位置,得到的坐标是以屏幕坐标表示
HWND WindowFromPoint(POINT& Point)
第四种方法是枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。
BOOL CALLBACK EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam)
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
BOOL CALLBACK EnumChildWindows(HWND hWndParent, WNDENUMPROC lpEnumFunc,LPARAM lParam)
例子:#include <iostream>
#include <windows.h>
using namespace std;
BOOL CALLBACK MyEnumProc(HWND hwnd,LPARAM lParam)
{
char szTitle[100];
memset(szTitle,0,sizeof(szTitle));
GetWindowText(hwnd,szTitle,100);
if(!strcmp(szTitle,"QQ2013"))
{
MessageBox(NULL,szTitle,szTitle,0);
return FALSE;
}
return TRUE;
}
int main()
{
BOOL ret=EnumWindows(MyEnumProc,0);//调用EnumWindows,传入MyEnumProc的函数地址作为第一个参数,
return 0;
}
第五种方式根据进程名或进程ID获取窗口句柄
HANDLE GetProcessHandle(LPCTSTR pName)//通过进程名获取进程句柄
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot)
{
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe))
{
if (!_tcscmp(pe.szExeFile, pName))
{
CloseHandle(hSnapshot);
return GetProcessHandle(pe.th32ProcessID);
}
}
return NULL;
}
回调函数找
typedef struct tagWNDINFO
{
DWORD dwProcessId;
HWND hWnd;
} WNDINFO, *LPWNDINFO;
BOOL CALLBACK YourEnumProc(HWND hWnd,LPARAM lParam)
{
DWORD dwProcessId;
GetWindowThreadProcessId(hWnd, &dwProcessId);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
if(dwProcessId == pInfo->dwProcessId)
{
pInfo->hWnd = hWnd;
return FALSE;
}
return TRUE;
}
HWND GetProcessMainWnd(DWORD dwProcessId)
{
WNDINFO wi;
wi.dwProcessId = dwProcessId;
wi.hWnd = NULL;
EnumWindows(YourEnumProc,(LPARAM)&wi);
return wi.hWnd;
}