web-dev-qa-db-ja.com

システムトレイのアプリケーションのAutoitでウィンドウフォーカスを取得

2つのウィンドウを開いてnotを最小化しました(AutoitヘルプとRelianceNetconnect)。そして現在の焦点はメモ帳ファイルです。これは私のAutoitスクリプトです:

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

これが機能し、autoitjelpウィンドウに焦点が当てられます。メッセージボックスはこの0x00046ceを出力します。

これは私の2番目のAutoitスクリプトです:

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

これは機能しません。つまり、reliancenetconnectウィンドウにフォーカスが移りません。 MessageBosは0x002C01DCを出力します。
This リンクは、WinActivateが成功した場合は要求されたウィンドウへのハンドルを返すか、失敗した場合は0を返すことを示しています。
私の2番目のケースでは、ゼロ以外の値を返します。では、なぜウィンドウがフォーカスされないのですか?

1
Ashwin

問題は、「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)

SYSTRAY_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
3
Ashwin