C++ 获取窗口句柄

C++ 获取窗口句柄1、使用FindWindow函数获取窗口句柄示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置。[html] viewplaincopy#include Windows.h>  #include stdio.h>  #include string.h>  #include iostre

大家好,又见面了,我是你们的朋友全栈君。

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

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

[html] 
view plain
copy

  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 plain
copy

  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\n”,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\n”,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 plain
copy

  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;  


转自:http://blog.csdn.net/dazhong159/article/details/7903382
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158958.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月14日 下午6:36
下一篇 2022年7月14日 下午6:36


相关推荐

  • docker 安装 shipyard(中文版) 集群管理平台

    docker 安装 shipyard(中文版) 集群管理平台1 安装 shipyard 下载依赖镜像 dockerpullre etcddockerpu docker proxydockerp shipyard 将原先脚本修改为中文脚本 wgethttps raw githubuse

    2026年3月18日
    2
  • 计算自然对数的快速算法

    计算自然对数的快速算法引言在 1982 年 Tateaki Sasaki 和 YasumasaKana 发表了一篇论文 PracticallyF PrecisionEva x 在这篇只有四页的论文中 他们介绍了一个计算自然对数的快速算法 实现该算法的 C 程序我们知道 NETFramework 中的 System

    2026年3月19日
    1
  • TB6612FNG 驱动学习笔记

    TB6612FNG是东芝半导体公司生产的一款直流电机驱动器件,它具有大电流MOSFET-H桥结构,双通道电路输出,可同时驱动2个电机。TB6612FNG每通道输出最高1.2A的连续驱动电流,启动峰值电流达2A/3.2A(连续脉冲/单脉冲);4种电机控制模式:正转/反转/制动/停止;PWM支持频率高达100kHz;待机状态;片内低压检测电路与热停机保护电路;工作温度:-20~85℃;SSOP…

    2022年4月7日
    63
  • 软件免杀教程_EXE文件

    软件免杀教程_EXE文件攻击机:win7IP:192.168.32.134靶机:windowsserver2012(安装360、火绒)IP:192.168.32.133第一步:使用njRAT生产一个客户端exe木马输入回连端口号8888,点击start配置客户端木马的回连地址:192.168.32.134将文件保存在桌面开启360杀毒,直接报毒,不免杀1、将生成的客户端木马:Server.exe在EncryptionToolV3.0中以base64加密方式打开打开之后,将base6

    2022年8月20日
    12
  • volatile关键字到底有什么作用

    volatile关键字到底有什么作用提示:更多优秀博文请移步博主的GitHub仓库:GitHub学习笔记、Gitee学习笔记volatile是Java提供的一种轻量级的同步机制。Java语言包含两种内在的同步机制:同步块(或方法)和volatile变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile变量的同…

    2022年5月31日
    35
  • java绘图板

    java绘图板

    2021年12月7日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号