问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

只知道窗口标题的一部分,如何找到其句柄

发布网友 发布时间:2023-12-11 08:38

我来回答

1个回答

热心网友 时间:2024-03-04 19:42

这事情我做过。原理是:枚举桌面上所有窗口,取他们的标题看是否符合搜索条件。以下是我的 FindWindowByPart()源程序。

HWND FindWindowByPart(char *str)
str:窗口标题的已知部分;
返回:桌面上第一个符合搜索条件的窗口句柄。

需要说明的是,这个函数假设标题的已知部分是标题的开始部分。如果不一定是开始部分,需要把
if (strncmp(buf, ((MYPARM *)p)->str, strlen(((MYPARM *)p)->str))==0)
修改为:
if (strstr(buf, ((MYPARM *)p)->str)!=NULL)
但要注意不能用我提供的main(int argc, char *argv[])来测试,因为用argv[]传递的话,这个测试程序的标题可能含有目标窗口标题的已知部分,从而返回测试程序的窗口句柄。也就是说不能用argv[]或lpCmdLine传递这个参数。

#include <windows.h>
#include <string.h>

typedef struct {
HWND hwnd;
char *str;
} MYPARM;

BOOL CALLBACK IsNotThisWindow(HWND hwnd, LPARAM p)
{
int len;
char buf[256];
len = GetWindowTextLength(hwnd);
if (len) {
GetWindowText(hwnd, buf, 256);
if (strncmp(buf, ((MYPARM *)p)->str, strlen(((MYPARM *)p)->str))==0) {
((MYPARM *)p)->hwnd = hwnd;
return FALSE;
}

}
return TRUE;
}

HWND FindWindowByPart(char *str)
{
MYPARM pm ;
pm.hwnd = NULL;
pm.str = str;
EnumWindows(IsNotThisWindow, (LPARAM)&pm);
return pm.hwnd;
}

/******************************************************
测试用的主程序:fwin.c
用法:fwin [窗口标题的开头部分]
******************************************************/
int main(int argc, char *argv[])
{
HWND hwnd = NULL;
if (argc>1) hwnd = FindWindowByPart(argv[1]);
if (hwnd) {
char buf[256];
GetWindowText(hwnd, buf, 256);
printf("Found Window, Caption=\"%s\".\n", buf);
}
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
少儿学什么舞蹈 青年学什么舞蹈好 成年人学什么舞蹈 福州企业最低工资标准 2013年厦门的底薪是多少 生产要素的需求有哪些性质 生产要素的需求有何特点? 什么是生产要素需求 微观经济学要素需求什么是条件要素需求?它和要素需求有什么不同?_百度... 养宠物的人遵守规则,是不是就能和别人平安相处呢? 修鞋姑娘阅读理解 原文: 凛冽的寒风把繁华的大街吹得冷冷清清...40 北师大版五年级下册语文天地二 我的摘录笔记20 无地自容是什么意思?1130 紫砂壶中的茶锈和茶垢有区别么2 我在江苏兴化市安丰怎么做车去武汉坐什么车1 《穿越火线》手游魔龙戒指洗练多少次才能看见血量? 江苏兴化去湖北武汉,如何最快?2 cf手游魔龙戒指洗炼哪个会显示敌人的血条? 穿越火线手游片版,大概需要洗练多少次魔龙戒指,才可以获得瞄准...2 穿越火线手游魔龙戒指洗练多少次才能看见血量30 穿越火线手游魔龙戒指洗练多少次才能看见敌人的血量 俄罗斯为什么唯独不吞并蒙古7 2000年是什么世纪什么年代162 怎样判断一个年份是多少世纪2 投资美股如何报税2 小学五年级下册语文我的笔记答案3 急需赵丽宏《母亲和书》片段44 为什么并联防雷器需要串联一个断路器 一个男人为了一个女人,把烟戒掉了,这个男人可靠吗? 投资美国股市的收入如何纳税?24 在美国纳斯达克卖出股票要交税吗,税率多少?12 消防用双电源切换开关应当选用PC级的还是CB级的?有何规范依...42 从北京交通大学到中关村怎么坐公交车,最快需要多久 大学生去当兵了 一年中能有几次假期 或者说能有几次回家的时间...22 从北京科技大学到中关村大厦坐公交怎么走 云石:俄罗斯为什么唯独不吞并蒙古 赵丽宏 母亲与书 原文439 请问黑龙江省考公安这一类一般进入面试需要考到多少分? 黑龙江省考报考的黑河公安,面试要怎么准备 黑龙江公务员考公安局的先体能还是面试? 被冻结了怎么办解冻 被冻结了怎么解冻?20 依波表07155253零件表摆摔坏了,换一个多少钱?能修好吗?在哪修 吸烟引发的火灾有哪些77 火灾发生的一般原因有那几个41 吸烟,火灾,处罚1 每年吸烟造成火灾的经济损失有多少4 工作时吸烟造成火灾,单位有责任吗2 我国刑法规定因吸烟失火造成公共财物损失多少万元的处以几年有期...1 写的是一个男的死了不知怎么在一个全是骷髅的世界复活,他也是骷...1