2017-01-05 38 views
0

ポップアップウィンドウの選択をテストするスクリプトを作成します。AutoHotKey選択ポップアップウィンドウが機能しない

SetTitleMatchMode, 2 

winTitle:="RGui (64-bit) ahk_class Rgui Workspace ahk_exe Rgui.exe" 
popWin:="ahk_class #32770 ahk_exe Rgui.exe" 
IfWinExist,%winTitle% 
{ 
    WinActivate 
    send !{F4} 
} 

IfWinExist,%popWin% 
{ 
    WinActivate 
    WinWaitActive, %popWin% 
    WinGetClass, outputvar, %popWin% 
    MsgBox %outputvar% 
} 

このスクリプトは、開かれたR・ウィンドウを閉じて、確認のポップアップウィンドウが発生した場合、ポップアップウィンドウのクラス名を表示するには、ALT-F4を送信することを意図しています。

最初のifブロックが正常に動作します。しかし、送信ifブロックが動作することがあります。

ウィンドウタイトル、クラスおよびプロセス

Question 
ahk_class #32770 
ahk_exe Rgui.exe 

snapshot of the above info

IfWinExist,%popWin%が動作しない理由を私は知らない:アクティブなウィンドウの情報は、ポップアップウィンドウクラス情報があることを示しています。私はpopWin:="ahk_class #32770 ahk_exe Rgui.exe"popWin:="ahk_class #32770"に変更しようとしましたが、それでも動作することがあります。では、ポップアップウィンドウを正しく選択するにはどうすればよいですか?

答えて

1

AutoHotkeyコードを変更して、必要な機能を提供するようにしました。

SetTitleMatchMode, 2 

winTitle:="RGui (64-bit) ahk_class Rgui Workspace ahk_exe Rgui.exe" 
popWin:="ahk_class #32770 ahk_exe Rgui.exe" 

if (hWnd := WinExist(winTitle)) ;this assigns hWnd, it does not compare hWnd with WinExist(winTitle) 
{ 
    ;WinActivate, ahk_id %hWnd% 
    ;send !{F4} 
    WinClose, ahk_id %hWnd% ;WinClose is more direct than Alt+F4 if it works (Send can potentially send key presses to the wrong window if a new window suddenly appears) 
} 

WinWait, %popWin%, , 5 ;wait for window to exist, give up after 5 seconds 
if !ErrorLevel ;if window found within 5 seconds 
{ 
    WinGet, hWnd, ID, %popWin% 
    WinActivate, ahk_id %hWnd% 
    WinGetClass, outputvar, ahk_id %hWnd% 
    MsgBox %outputvar% 
} 

注: ほとんどの場合WinActivateは、ウィンドウタイトル/ hWndはを指定することが必要です。

ポップアップが非常に迅速に表示された場合、IfWinExistがウィンドウを見つけることができますが、ポップアップがゆっくりと表示される場合は、IfWinExistチェックがウィンドウが存在する前に発生するためですしたがって、ウィンドウを見つけることはできません。

関連する問題