200分求助 MFC findwindow如何连续查找窗口

200分求助 MFC findwindow如何连续查找窗口,第1张

你说是“第一出现”的串口附不上去,我想问下,这个窗口出现后消失了吗?或者退出了,最小化之类的?我经常用findwindow,我想不太可能是findwindow找不到窗口的缘故。请检查下,findwindow的参数是否正确,特别是“空格”是否少了。

如果findwindow没问题,那么问题只能出在附窗口的代码上了。

方案一

开始——控制面板——计划任务——新建任务——每一分钟——TASKKILL /F /IM QQexe /T

方案二

使用编程软件没分钟检测QQexe的PID,如果不为0,则说明正在运行,则运行TASKKILL /F /IM cmdexe /T结束QQ进程

一个窗口有2个部分组成,1个是窗口的类名,一个是窗口的窗口名称。通常情况下,我们自己做的窗口类名和窗口名称都是知道的,因为是自己给它们加上去的。但对于模板窗口,我们一般是不知道它的类名的,但它的窗口名称是可以知道的,就是显示在标题栏中的标题,就是它的窗口名称。 当有2个窗口在桌面上时,一个窗口有个编辑框,而另一个没有编辑框。当我们想要用那个有编辑框的窗口时,必须先得到那个窗口的句柄,FindWindow就是帮助我们取得这个窗口句柄。 我们可以任意指定FindWindow中两个参数的其中一个,或同时2个都指定来找到那个带有编辑框的窗口,然后FindWindow就会返回这个窗口的句柄(hwnd)。 窗口类名好比人的小名,窗口标题名称好比是人的大名。 我们一般知道一个人的大名,但不太清楚他的小名如对话框的类名#32776。FindWindow给了我们两个参数,以便我们在不知道一个人小名的情况下,可以通过大名来找到该人。 vbNullString可以指定为NULL/0变量名怎么会取这样的名字难道是从VB里挖来的代码可VB又不是这样的语法! PS大名一样的人肯能会有不至一个,小名也如此,这个时候还会涉及到路径算法。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetForegroundWindow Lib "user32" () As Long

'可以通过查看前景窗口是否为指定窗口判断

hwd1 = FindWindow("#32770", "QQ用户登录")

'获得指定窗口句柄

hwd2 = GetForegroundWindow

'获得前景窗口句柄

If hwd1 = hwd2 Then MsgBox "指定窗口为活动状态!"

'判断是否相同

'可以通过ModifyMenu修改系统菜单来禁止移动,但并不适用所有窗体,有的窗体不具有系统菜单(BorderStyle=0)

'但通过子类化仍可以实现系统菜单具有的功能,新建窗体,添加command1,复制粘贴下段代码

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long

Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Private Const SC_MOVE = &HF010&

Private Const MF_BYCOMMAND = &H0&

Private Const MF_ENABLED = &H0&

Private Const MF_GRAYED = &H1&

Private Sub Command1_Click()

hwind = FindWindow("#32770", "QQ用户登录")

'获取窗体句柄

hMenu = GetSystemMenu(hwind, False)

'获取该窗体系统菜单句柄

ModifyMenu hMenu, SC_MOVE, MF_BYCOMMAND Or MF_GRAYED, -10, "禁止移动"

'设置移动菜单项不可用,并指定新ID为小于0的-10以防止系统重新加载该菜单,新标题为“禁止移动”,成功返回非0,失败0

'ModifyMenu hMenu, -10, MF_BYCOMMAND + MF_ENABLED, SC_MOVE, "移动(&M)" '恢复移动菜单

SendMessage hwind, WM_NCACTIVATE, True, 0

'发送WM_NCACTIVE消息到指定窗体刷新非客户区(标题栏)

End Sub

以上就是关于200分求助 MFC findwindow如何连续查找窗口全部的内容,包括:200分求助 MFC findwindow如何连续查找窗口、vb应用程序中如何自动获取当前窗口的名称、怎样通过FindWindow找到没有标题栏的窗口 20kwovex等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/10167352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存