1

У меня есть два открытых и не свернутых окна (Autoit help и RelianceNetconnect). И текущий фокус с файлом блокнота. Это мой скрипт Autoit:

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

Это работает, и окно autoit jelp фокусируется. Окно сообщения печатает это 0x00046ce .

Это мой второй скрипт Autoit:

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

Это не работает, то есть окно доверия netconnect не фокусируется. MessageBos печатает 0x002C01DC .
Эта ссылка говорит, что WinActivate либо возвращает дескриптор запрашиваемому окну в случае успеха, либо возвращает 0 в случае неудачи.
Во втором случае он возвращает ненулевое значение. Тогда почему окно не сфокусировано?

1 ответ1

3

Проблема заключалась в том, что 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .