大家好,欢迎来到IT知识分享网。
目录
一、窗口操作
1、FindWindow
1)、搜索窗口
HWND WINAPI FindWindow( _In_opt_ LPCTSTR lpClassName, 类名和窗口名是在先前调用RegisterClass or RegisterClassEx时创建的 如果lpClassName为NULL,他会寻找所有和lpWindowName参数匹配的窗口 _In_opt_ LPCTSTR lpWindowName 窗口的名字也是窗口的title. 如果该参数为NULL,所有窗口名字都是匹配的. ); 该函数通过创建窗口时的类名和窗口名查找窗口并返回该窗口的句柄,函数不会搜索子窗口。该函数区分大小写。
2)、需要注意的情况
FindWindow(L"",L"title"); FindWindow(nullptr,L"title");
是不同的,FindWindow(L””,L”title”); 查找的是类名为“”, 窗口名为title的窗口
FindWindow(nullptr,L”title”); 查找的 无论类名为啥,都不要紧,只要窗口名是title就可以
3)、示例:
char className[]="notepad"; HWND hWnd=::FindWindow(className,NULL); auto hwnd = FindWindow(L"IPTip_Main_Window", NULL); HWND hmsgWnd = FindWindow(L"MsgBox", L"xnwMsgBox");
2、遍历子窗口
1)、EnumChildWindows
BOOL CALLBACK EnumChildProc(HWND hWnd,LPARAM lParam) { char temp1[256],temp2[256]; ::GetWindowText(hWnd,temp1,255); wsprintf(temp2,"hwnd:%x text: %s",hWnd,temp1); MessageBox(NULL,temp2,"cwnd",MB_OK); return true; } ::EnumChildWindows(hWnd,EnumChildProc,0);
2)、GetWindow GW_CHILD 方式
HWND hChild = GetWindow(GetHWND(), GW_CHILD); while (hChild != nullptr) { hChild = GetWindow(hChild, GW_HWNDNEXT); }
3、ForegroundWindow
1)、SetForegroundWindow
将创建指定窗口的线程引入前台并激活窗口。 键盘输入将定向到窗口,并为用户更改各种视觉提示。
系统为创建前台窗口的线程分配的优先级略高于其他线程的优先级。
但是,设置到前台,并不一定Z序TOPMOST
SetForegroundWindow(m_hWnd);
2)、GetForegroundWindow
HWND hForegroundWnd = GetForegroundWindow(); if (hForegroundWnd != nullptr&&hForegroundWnd!=m_hWnd) { if (::GetWindowLong(hForegroundWnd,GWL_EXSTYLE)&WS_EX_TOPMOST) ; }
3、 HWND其它 应用
1)、窗口名
vector<wchar_t> list(255); GetWindowText(hForegroundWnd, &list[0], 255); std::wstring wndText = &list[0];
2)、窗口类名
WCHAR className[256]; GetClassName(hWnd, className, sizeof(className)); if (wcscmp(className, L"ChatroomForm") == 0) continue;
3)、 GetParent 获得指定窗口父窗口的句柄
HWND GetParent(HWND hWnd);
4)、GetOwner
GetWindow(GetHWND(), GW_OWNER);
5)、判断是否Z序最顶层
if (::GetWindowLong(hForegroundWnd,GWL_EXSTYLE)&WS_EX_TOPMOST) ;
6)、GetTopWindow
GetTopWindow 获得指定窗口的第一个子窗口的句柄
GetTopWindow函数检查与特定父窗口相联的子窗口z序,并返回在z序顶部的子窗口的句柄。
HWND GetTopWindow(HWND hWnd);
hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。
返回值;如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。
HWND hChild = ::GetTopWindow(hParent) for(HWND hChild = ::GetTopWindow(hParent); hChild; hChild = ::GetNextWindow(hChild, GW_HWNDNEXT)) { ::ShowWindow(hChild, SW_SHOWNORMAL); }
7)、线程ID、进程ID
DWORD process_id; DWORD dwTheardId = ::GetWindowThreadProcessId(hWnd, &process_id);
8)、GetNextWindow
HWND GetNextWindow(HWND hWnd,UNIT wCmd) wCmd:指明窗口返回的是前一窗口的句柄还是后一窗口的句柄。该参数可以是下列两个值之一: GW_HWNDNEXT:返回在给定窗口的下面窗口的句柄。 GW_HWNDPREV:返回在给定窗口的上面窗口的句柄。 GW_HWNDFIRST = 0; GW_HWNDLAST = 1; GW_HWNDNEXT = 2; GW_HWNDPREV = 3; GW_OWNER = 4; GW_CHILD = 5;
9)、其它相关操作
GetLastActivePopup 针对指定的窗口,取回上一个活动的弹出式窗口的句柄 SetParent 改变任何窗口的父窗口。 BringWindowToTop 使指定的窗口进入可见窗口列表的顶部,如它被部分或全部隐藏,则令其全部可见。同时,该窗口成为当前活动窗口。只有从前台线程调用时,才生效。 ChildWindowFromPoint 在规定的坐标取得某子窗口的句柄(如果有的话),这儿的坐标是指相对于父窗口的客户区坐标。 ChildWindowFromPointEx 与ChildWindowFromPoint相同,功能更强。 ClientToScreen 判断指定点在窗口客户区内的屏幕坐标。 GetClientRect 获得对窗口客户区进行表述的一个矩形(RECT)。这是以像素为单位判断客户区大小的一个简便的方法。 GetWindowPlacement 获得指定窗口的一个WINDOWPLACEMENT结构。该结构说明了窗口的状态。 GetWindowRect 用于获得一个矩形(RECT)结构,它描述了窗体在屏幕坐标系统中的位置。 MapWindowPoints 对某窗口客户区坐标内的一个或多个点进行转换,用另一窗口的客户区坐标表示。 MoveWindow 移动指定窗口的位置,并能改变它的大小。 OpenIcon 将一个最小化窗口恢复为原始状态。 ScreenToClient 针对屏幕内一个指定的点,用某个特定窗口内的客户区坐标表示它。 SetWindowsPos 更改窗口的位置和大小,并能修改它在内部窗口列表内的位置(这个列表起着控制窗口先是顺序)。 SetWindowPlacement 在一个WINDOWPLACEMENT结构的基础上,设置某窗口的特征。该结构描述了窗口的状态,以及它在最小化、最大化或正常显示时的位置。 WindowFromPoint 根据屏幕上一个指定的点,判断哪个窗口正位于它的下面。 GetClassInfo 取得指定窗口的类信息结构 GetClassInfoEx 效果类似于GetClassInfo,但增加了一些功能 GetClassLong,GetClassWord 用于获取窗口类信息 SetClassLong,SetClassWord 用于设置窗口类信息 GetClassName 获取窗口类名 GetDesktopWindow 获取整个桌面(屏幕)的窗口句柄 GetWindowLong,GetWindowWord 获取与窗口有关的信息 SetWindowLong,SetWindowWord 设置与窗口有关的信息 GetWindowText 获得窗口文本。它的效果大致等价于窗体或控件的Text属性 GetWindowTextLength 获得窗口文本的长度,用字符数表示。 IsChild 判断某窗口是否为另一窗口的子窗口或从属窗口。 IsIconic 判断某窗口是否处于最小化状态 IsWindow 判断指定的句柄是否为窗口句柄。 IsWindowEnabled 判断指定的窗口是否处于活动状态。 IsWindowVisible 判断某窗口是否可见。 IsZoomed 判断窗口是否处于最大化状态。 SetWindowText 设置窗口文本。大致等价于窗体或控件的Text属性。 AnyPopup 判断是否存在可见的弹出式窗口 CascadeWindows 令窗口在一个父窗口内层叠显示 CloseWindow 对指定的窗口进行最小化处理(如果它是个钉级窗口)对弹出式及子窗口无效 DestroyWindow 清除指定的窗口以及下属所有子窗口与包容窗口 DrawAnimatedRects 获得窗口打开或关闭的动画效果 EnableWindow 激活或屏蔽(禁用)指定窗口 FlashWindow 令指定窗口的标题闪烁显示 GetUpdateRect 判断需要更新的那个窗口的位置 GetWindowContextHelpId 取得与窗口关联在一起的帮助场景 InvalidateRect 指定窗口内需要更新的全部或部分客户区 IsWindowUnicode 判断一个窗口是否期望文本消息采用Unicode格式 LockWindowUpdate 允许或禁止描绘指定的窗口 RedrawWindow 一个功能强大的函数,用于控制全部或部分窗口重画 ScrollWindow,ScrollWindowEx 滚动显示窗口的全部或部分客户区 SetWindowContextHelpId 设置与窗口关联在一起的帮助场景 ShowOwnedPopups 隐藏或显示从属于指定窗口的所有保容弹出窗口 ShowWindow 用于设置窗口的状态,其中包括窗口的隐藏、显示、最小化、最大化以及激活等 ShowWindowAsync 类似于ShowWindow,增加了对其他进程内的窗口进行操作的能力 TileWindows 令窗口在一个父窗口内平铺显示 UpdateWindow 立即更新窗口内需要更新的任何部分 ValidateRect 指出全部或部分矩形已经更新,毋需再更新
参考资料:
GetWindowThreadProcessId function (winuser.h) – Win32 apps | Microsoft Learn
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120119.html