MFC 获取窗口句柄

MFC 获取窗口句柄1、使用FindWindow函数获取窗口句柄示例:使用FindWindow函数获取窗口句柄,然后获得窗口大小和标题,并且移动窗口到指定位置。#include<Windows.h>#include<stdio.h>#include<string.h>#include<iostream.h>intmain(intargc,char*argv[]){ //根据窗口名获取QQ游戏登录窗口句柄 HWNDhq=FindWind

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

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

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

#include <Windows.h>
#include <stdio.h>
#include <string.h>
#include <iostream.h>
 
int main(int argc, char* argv[])
{
	//根据窗口名获取QQ游戏登录窗口句柄
	HWND hq=FindWindow(NULL,"QQ2012");	
 
	//得到QQ窗口大小
	RECT rect;  
	GetWindowRect(hq,&rect); 	
	int w=rect.right-rect.left,h=rect.bottom-rect.top;
	cout<<"宽:"<<w<<" "<<"高:"<<h<<endl;
	
	//移动QQ窗口位置
	MoveWindow(hq,100,100,w,h,false);
	
	//得到桌面窗口
	HWND hd=GetDesktopWindow();
	GetWindowRect(hd,&rect); 	
	w=rect.right-rect.left;
	h=rect.bottom-rect.top;
	cout<<"宽:"<<w<<" "<<"高:"<<h<<endl;
	
	return 0;
}

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

示例:

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <iostream.h>
 
//EnumChildWindows回调函数,hwnd为指定的父窗口
BOOL CALLBACK EnumChildWindowsProc(HWND hWnd,LPARAM lParam)
{
	char WindowTitle[100]={0};    
	::GetWindowText(hWnd,WindowTitle,100);
	printf("%s\n",WindowTitle);
    
	return true;   
}
 
//EnumWindows回调函数,hwnd为发现的顶层窗口
BOOL CALLBACK EnumWindowsProc(HWND hWnd,LPARAM lParam)
{
	if (GetParent(hWnd)==NULL && IsWindowVisible(hWnd) )  //判断是否顶层窗口并且可见
	{
		char WindowTitle[100]={0};    
		::GetWindowText(hWnd,WindowTitle,100);
		printf("%s\n",WindowTitle);
 
		EnumChildWindows(hWnd,EnumChildWindowsProc,NULL); //获取父窗口的所有子窗口
	}
	
	return true;   
}
 
int main(int argc, _TCHAR* argv[])
{
	//获取屏幕上所有的顶层窗口,每发现一个窗口就调用回调函数一次
    EnumWindows(EnumWindowsProc ,NULL );
 
	return 0;
}

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

示例:

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include <string.h>
#include <iostream.h>
 
int main(int argc, _TCHAR* argv[])
{	
	//得到桌面窗口
	HWND hd=GetDesktopWindow();
 
	//得到屏幕上第一个子窗口
	hd=GetWindow(hd,GW_CHILD);
	char s[200]={0};
 
	//循环得到所有的子窗口
	while(hd!=NULL)
	{
		memset(s,0,200);
		GetWindowText(hd,s,200);
		/*if (strstr(s,"QQ2012"))
		{
			cout<<s<<endl;
			SetWindowText(hd,"My Windows");
		}*/
		cout<<s<<endl;
		
		hd=GetNextWindow(hd,GW_HWNDNEXT);
	}
	return 0;
}

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jq tmpl输出编码html,jQuery tmpl 讲解「建议收藏」

    jq tmpl输出编码html,jQuery tmpl 讲解「建议收藏」2016-07-0114:30陈铭竑1、什么是jQuery-tmpl(1)jQuery的一个类库(2)一个轻量级的前端模板引擎(vue.js也是一种前端模板引擎)(3)可以在模板中实现逻辑运算2、jQuery-tmpl的语法(1)占位:${变量}或{{=变量}}注:=和变量之间一定要有空格(2)循环{{each(i,obj)objs}}…{{/each}}(3)选择{{if条件}}….

    2022年6月16日
    43
  • HttpURLConnection_浅析情绪管理的方法技巧论文

    HttpURLConnection_浅析情绪管理的方法技巧论文前言申请CSDN账号大概是四年前的事情了,想想的确的有点历史久远的感觉,只不过这段历史中,我的博客却是历史空白的,主要原因是,当时只是因为是计算机专业,而沽名钓誉的申请了个高大上的CSDN—中国最大的中文IT社区账号,中间经历了稀里糊涂匆匆大一、稍稍有点叱诧风云、指点江山的给力大二、紧接着铮铮铁骨、血性火热的绿色军营,辗转几个春夏轮回,我又回到了曾几何时的“历史舞台”,重新开始了我“武林秘…

    2022年9月11日
    2
  • 十进制数负三的二进制数补码为_-8的补码

    十进制数负三的二进制数补码为_-8的补码十进制转二进制补码(正负都可)指针初学将一个十进制正(负)整数转换为对应的二进制补码(用指针完成十进制转二进制:1.先判断该整数是正数还是负数如果是正数则二进制补码首位为1,且对应的二进制补码就是原.如果是负数则二进制补码为原码基础上取反且末位加1(加1则涉及进位)代码:#include”stdio.h”#include”Stdio.h…

    2022年10月19日
    1
  • NLB单播和多播区别

    NLB单播和多播区别http yuntcloud blog 51cto com

    2025年7月16日
    4
  • DirectX修复工具使用技巧之三——命令行与配置文件参数介绍

    DirectX修复工具使用技巧之三——命令行与配置文件参数介绍最后更新:2021-10-8DirectX修复工具自V1.0版起即支持通过settings.ini配置文件的方式设置程序配置信息,自V3.7版起支持命令行配置功能。由于命令行与配置文件均需要通过参数设定程序配置信息,本文档详细列出了命令行与配置文件的参数使用方式,供有需要的高级用户参考。命令行与配置文件中约有90%的命令是通用的,部分特殊命令只支持命令行的配置方式,本文件将分别介绍命令行参数与配置文件参数。命令行参数本程序支持命令行参数提示,用户可通过/?或者/h…

    2022年5月22日
    37
  • landsat8不同波段合成图

    landsat8不同波段合成图添加链接描述

    2022年7月23日
    8

发表回复

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

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