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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows cmd定时关机命令

    windows cmd定时关机命令windowscmd定时关机命令#7200为倒计时关机时间,单位秒shutdown-S-T7200

    2022年5月14日
    43
  • 网页音乐播放器总结[通俗易懂]

    网页音乐播放器总结[通俗易懂]总结一下Vue实战的网页音乐播放器首先是设计出主体的整个框架分为四个部分最左边的歌曲列表,中间的唱片,最右边的热门评论显示以及下方的播放条然后开始准备进行功能的实现首先是需要导入Vue的依赖以及axios的js网络依赖库<!–开发环境版本,包含了有帮助的命令行警告–><scriptsrc=”https://cdn.jsdelivr.net/npm/vue/dist/vue.js”></script><!–官网提供的axio

    2022年6月17日
    37
  • 散列的基本概念

    散列的基本概念散列的基本概念什么是散列?为什么需要散列?散列是一种思想。与已经学过的其他数据结构相比较,向量是采用循秩访问(callbyrank)的访问方式,列表是采用循位置访问(callbyposition)的访问方式,二叉搜索树是采用循关键码访问(callbykey)的访问方式,散列与他们都不一样,是采用循值访问(callbyvalue)的访问方式。举个例子,你现在身处同济大学嘉定…

    2022年5月15日
    39
  • WinRAR怎么去广告

    WinRAR怎么去广告每次使用WinRAR都弹出一个广告,实在是烦人,遂破之。我使用的版本是:5.60(64位)目前最新版本是5.61第一种方法(本人亲测不可用):既然不可用,为什么还要说呢,可能是之前的老版本可用,现在的新版本就算注册了也会弹广告,如果你用的是老版本,不妨试一下这个方法,毕竟此方法最简单新建一个文本名字为rarreg.key,内容如下:RARregistrationdataFede…

    2022年6月7日
    24
  • 关于sources.list和apt-get [转载]

    关于sources.list和apt-get [转载]

    2021年11月16日
    50
  • Python模块-random模块[通俗易懂]

    Python模块-random模块

    2022年3月13日
    157

发表回复

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

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