zoukankan      html  css  js  c++  java
  • windows获取窗口句柄

    1、使用FindWindow函数获取窗口句柄

    示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置。

    [html] view plaincopy
     
    1. #include <Windows.h>  
    2. #include <stdio.h>  
    3. #include <string.h>  
    4. #include <iostream.h>  
    5.   
    6. int main(int argc, char* argv[])  
    7. {  
    8.     //根据窗口名获取QQ游戏登录窗口句柄  
    9.     HWND hq=FindWindow(NULL,"QQ2012");    
    10.   
    11.     //得到QQ窗口大小  
    12.     RECT rect;    
    13.     GetWindowRect(hq,&rect);      
    14.     int w=rect.right-rect.left,h=rect.bottom-rect.top;  
    15.     cout<<"宽:"<<w<<" "<<"高:"<<h<<endl;  
    16.       
    17.     //移动QQ窗口位置  
    18.     MoveWindow(hq,100,100,w,h,false);  
    19.       
    20.     //得到桌面窗口  
    21.     HWND hd=GetDesktopWindow();  
    22.     GetWindowRect(hd,&rect);      
    23.     w=rect.right-rect.left;  
    24.     h=rect.bottom-rect.top;  
    25.     cout<<"宽:"<<w<<" "<<"高:"<<h<<endl;  
    26.       
    27.     return 0;  
    28. }  

    2、使用EnumWindows和EnumChildWindows函数以及相对的回调函数EnumWindowsProc和EnumChildWindowsProc获取所有顶层窗口以及它们的子窗口(有些窗口做了特殊处理,比如QQ是不能通过这个方法获得的)

    示例:

    [html] view plaincopy
     
    1. #include "stdafx.h"  
    2. #include <Windows.h>  
    3. #include <stdio.h>  
    4. #include <tchar.h>  
    5. #include <string.h>  
    6. #include <iostream.h>  
    7.   
    8. //EnumChildWindows回调函数,hwnd为指定的父窗口  
    9. BOOL CALLBACK EnumChildWindowsProc(HWND hWnd,LPARAM lParam)  
    10. {  
    11.     char WindowTitle[100]={0};      
    12.     ::GetWindowText(hWnd,WindowTitle,100);  
    13.     printf("%s ",WindowTitle);  
    14.       
    15.     return true;     
    16. }  
    17.   
    18. //EnumWindows回调函数,hwnd为发现的顶层窗口  
    19. BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)  
    20. {  
    21.     if (GetParent(hWnd)==NULL && IsWindowVisible(hWnd) )  //判断是否顶层窗口并且可见  
    22.     {  
    23.         char WindowTitle[100]={0};      
    24.         ::GetWindowText(hWnd,WindowTitle,100);  
    25.         printf("%s ",WindowTitle);  
    26.   
    27.         EnumChildWindows(hWnd,EnumChildWindowsProc,NULL); //获取父窗口的所有子窗口  
    28.     }  
    29.       
    30.     return true;     
    31. }  
    32.   
    33. int main(int argc, _TCHAR* argv[])  
    34. {  
    35.     //获取屏幕上所有的顶层窗口,每发现一个窗口就调用回调函数一次  
    36.     EnumWindows(EnumWindowsProc ,NULL );  
    37.   
    38.     return 0;  
    39. }  

    3、使用GetDesktopWindow和GetNextWindow函数得到所有的子窗口

    示例:

    [html] view plaincopy
     
    1. #include "stdafx.h"  
    2. #include <Windows.h>  
    3. #include <stdio.h>  
    4. #include <tchar.h>  
    5. #include <string.h>  
    6. #include <iostream.h>  
    7.   
    8. int main(int argc, _TCHAR* argv[])  
    9. {     
    10.     //得到桌面窗口  
    11.     HWND hd=GetDesktopWindow();  
    12.   
    13.     //得到屏幕上第一个子窗口  
    14.     hd=GetWindow(hd,GW_CHILD);  
    15.     char s[200]={0};  
    16.   
    17.     //循环得到所有的子窗口  
    18.     while(hd!=NULL)  
    19.     {  
    20.         memset(s,0,200);  
    21.         GetWindowText(hd,s,200);  
    22.         /*if (strstr(s,"QQ2012"))  
    23.         {  
    24.             cout<<s<<endl;  
    25.             SetWindowText(hd,"My Windows");  
    26.         }*/  
    27.         cout<<s<<endl;  
    28.           
    29.         hd=GetNextWindow(hd,GW_HWNDNEXT);  
    30.     }  
    31.   
    32.     return 0;  
    33. }  
     
     
  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5113745.html
Copyright © 2011-2022 走看看