win32 获取窗口句柄的方法
2013-12-25 12:37
423 查看
win32获取窗口句柄的方法
第一种方法是根据窗口句柄值获取窗口句柄
使用spy++获取指定窗口的窗口句柄值,因为句柄值是16进制数,所以前面加0x,然后进行强制转换为HWND类型。
HWNDhWnd=(HWND)0x00280726;
第二种方法是使用FindWindow或者FindWindowEx根据窗口类名和窗口标题找到相应的窗口句柄
HWNDFindWindow(LPCTSTRlpClassName,LPCTSTRlpWindowName)可以接受捕捉对象的类名或者窗口标题之一,作为参数,返回一个HWND。
HWNDFindWindowEx(HWNDhwndParent,HWNDhwndChildAfter,LPCTSTRlpClassName,LPCTSTRlpWindowName)
第三种方法是获得当前鼠标位置的窗口句柄
BOOLGetCursorPos(LPPOINTlpPoint)//获取当前光标的位置,得到的坐标是以屏幕坐标表示
HWNDWindowFromPoint(POINT&Point)
第四种方法是枚举所有屏幕上的顶层窗口,并将窗口句柄传送给应用程序定义的回调函数。回调函数返回FALSE将停止枚举,否则EnumWindows函数继续到所有顶层窗口枚举完为止。
BOOLCALLBACKEnumWindows(WNDENUMPROClpEnumFunc,LPARAMlParam)
BOOLCALLBACKEnumWindowsProc(HWNDhwnd,LPARAMlParam)
BOOLCALLBACKEnumChildProc(HWNDhwnd,LPARAMlParam)
BOOLCALLBACKEnumChildWindows(HWNDhWndParent,WNDENUMPROClpEnumFunc,LPARAMlParam)
例子:#include<iostream>
#include<windows.h>
usingnamespacestd;
BOOLCALLBACKMyEnumProc(HWNDhwnd,LPARAMlParam)
{
charszTitle[100];
memset(szTitle,0,sizeof(szTitle));
GetWindowText(hwnd,szTitle,100);
if(!strcmp(szTitle,"QQ2013"))
{
MessageBox(NULL,szTitle,szTitle,0);
returnFALSE;
}
returnTRUE;
}
intmain()
{
BOOLret=EnumWindows(MyEnumProc,0);//调用EnumWindows,传入MyEnumProc的函数地址作为第一个参数,
return0;
}
第五种方式根据进程名或进程ID获取窗口句柄
HANDLEGetProcessHandle(intnID)//通过进程ID获取进程句柄
{
returnOpenProcess(PROCESS_ALL_ACCESS,FALSE,nID);
}
HANDLEGetProcessHandle(LPCTSTRpName)//通过进程名获取进程句柄
{
HANDLEhSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(INVALID_HANDLE_VALUE==hSnapshot)
{
returnNULL;
}
PROCESSENTRY32pe={sizeof(pe)};
BOOLfOk;
for(fOk=Process32First(hSnapshot,&pe);fOk;fOk=Process32Next(hSnapshot,&pe))
{
if(!_tcscmp(pe.szExeFile,pName))
{
CloseHandle(hSnapshot);
returnGetProcessHandle(pe.th32ProcessID);
}
}
returnNULL;
}
VC由进程ID获取窗口句柄
HWNDGetWindowHandleByPID(DWORDdwProcessID)
{
HWNDh=GetTopWindow(0);
while(h)
{
DWORDpid=0;
DWORDdwTheardId=GetWindowThreadProcessId(h,&pid);
if(dwTheardId!=0)
{
if(pid==dwProcessID/*yourprocessid*/)
{
//herehisthehandletothewindow
returnh;
}
}
h=GetNextWindow(h,GW_HWNDNEXT);
}
returnNULL;
}
HWNDGetHwndByPid(DWORDProcessId)//进程ID取窗口句柄
{
WINDOWINFOWinInfo1[255];
HWND_hwnd=0;
DWORDaa=EnumWindowInfo(WinInfo1);
for(inti=0;i<aa;i++)
{
if(WinInfo1[i].dwProcessId==ProcessId)
{
_hwnd=WinInfo1[i].hwnd1;
if(0==::GetWindowLong(WinInfo1[i].hwnd1,GWL_HWNDPARENT))
{
returnWinInfo1[i].hwnd1;
}
}
}
return_hwnd;
}
回调函数找
typedefstructtagWNDINFO
{
DWORDdwProcessId;
HWNDhWnd;
}WNDINFO,*LPWNDINFO;
BOOLCALLBACKYourEnumProc(HWNDhWnd,LPARAMlParam)
{
DWORDdwProcessId;
GetWindowThreadProcessId(hWnd,&dwProcessId);
LPWNDINFOpInfo=(LPWNDINFO)lParam;
if(dwProcessId==pInfo->dwProcessId)
{
pInfo->hWnd=hWnd;
returnFALSE;
}
returnTRUE;
}
HWNDGetProcessMainWnd(DWORDdwProcessId)
{
WNDINFOwi;
wi.dwProcessId=dwProcessId;
wi.hWnd=NULL;
EnumWindows(YourEnumProc,(LPARAM)&wi);
returnwi.hWnd;
}
相关文章推荐
- win32 获取窗口句柄的方法
- Delphi获取其它进程窗口句柄的3种方法
- QT里,windows下获取窗口句柄的方法
- C#获取窗口句柄概念和方法实例
- Delphi获取其它进程窗口句柄的3种方法
- VC中获取窗口句柄的各种方法
- 易语言当前窗口或组件的窗口句柄获取方法
- MFC中获取各个窗口之间的句柄或者指针对象的方法
- 获取窗口句柄(VC)的几种方法
- VC中获取窗口句柄的各种方法
- WIN32 API获取窗口句柄
- win32api win32gui win32con 窗口句柄 发送消息 常用方法
- python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作
- VC中获取窗口句柄的各种方法
- VC++中,获取窗口句柄的常用方法
- VC中获取窗口句柄的各种方法
- Delphi获取其它进程窗口句柄的3种方法
- Delphi获取其它进程窗口句柄的3种方法
- MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法
- 窗口句柄浅析和获取窗口句柄的方法