在 Autoit 中获取系统托盘中应用程序的窗口焦点

在 Autoit 中获取系统托盘中应用程序的窗口焦点

我打开了两个窗口,不是最小化(Autoit 帮助和 RelianceNetconnect)。当前焦点是记事本文件。这是我的 Autoit 脚本:

DIM $s=WinActivate("AutoIt Help")
MsgBox(0,"Check",$s)

这有效并且 autoit jelp 窗口成为焦点。消息框打印此内容0x00046ce

这是我的第二个 Autoit 脚本:

DIM $s=WinActivate("Reliance Netconnect")
MsgBox(0,"Check",$s)

这不起作用,即 Reliance NetConnect 窗口无法获得焦点。MessageBos 打印0x002C01DC
link 表示WinActivate如果成功则返回请求窗口的句柄,如果失败则返回 0。
在我的第二种情况下,它返回一个非零值。那么为什么窗口没有获得焦点?

答案1

问题是“Reliance Netconnect”是一个系统托盘应用程序即它驻留在系统托盘中。您无法使用 WinActivate 来获取它们的焦点。它们必须重新绘制。这对我来说有效

#Include <GuiToolBar.au3>
#include "SysTray_UDF.au3"
WinSetState("Reliance Netconnect" ,"",@SW_RESTORE)
DIM $index=_SysTrayIconIndex("Reliance Netconnect", 1)
;MsgBox(1,"index",$index)
_GUICtrlToolbar_ClickIndex(ControlGetHandle('[CLASS:Shell_TrayWnd]','','ToolbarWindow321'), $index, "left",False,2)
WinActivate("Reliance Netconnect")
WinWaitActive("Reliance Netconnect")
send("{ENTER}")
send("!c")
WinSetState("Reliance Netconnect" ,"",@SW_MINIMIZE)

您可以下载系统托盘_UDF这里。如果您之前声明为“Const”时遇到错误,请将 SysTray_UDF.au3 的第一行更改为:

;~ Const $TB_DELETEBUTTON = 1046
;~ Const $TB_GETBUTTON = 1047
;~ Const $TB_BUTTONCOUNT = 1048
Const $TB_GETBUTTONTEXT = 1099
Const $TB_GETBUTTONINFO = 1089
;~ Const $TB_HIDEBUTTON = 1028 ; WM_USER +4
;~ Const $TB_GETITEMRECT = 1053
;~ Const $TB_MOVEBUTTON = 1106 ; WM_USER +82
Const $WM_GETTEXT = 13 ; Included in GUIConstants
;~ Const $PROCESS_ALL_ACCESS = 2035711
Const $NO_TITLE = "---No title---" ; text that is used when icon window has no title

相关内容