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. }  
     
     
  • 相关阅读:
    Java编程语言学习01-Java语言概述
    Java复习面试指南-06为什么要进行数据类型转换?什么情况下会进行自动类型转换?
    Java复习面试指南-05简单说一下Java当中的char字符类型?
    Java复习面试指南-04Java语言支持的8种基本数据类型是什么?占用的空间是多少?
    Java复习面试指南03-说一下Java当中标识符与关键字的区别?
    Linq LeftJoin 取不同和想同的对像
    vue父组件异步传递prop到子组件echarts画图问题踩坑总结
    linux下使用openssl生成https的crt和key证书
    css hover延时 解决快速划入划出
    记录时间操作
  • 原文地址:https://www.cnblogs.com/liangxiaofeng/p/5113745.html
Copyright © 2011-2022 走看看