2

「PolyEdit」スクリプトを作成したいと考えています。以下はスクリプトです。

!M::
IfWinActive, ahk_class TMainForm
{
sleep 2000
Send Now is the time
Return
}

スクリプトの目的は次のとおりです。

テキスト ファイルを開くために、キーストロークとマウス クリックを既定のプログラムに送信します。そのデフォルトのプログラムは「PolyEdit」と呼ばれます。

しかし、ホットキーを定義せずにスクリプトを実行する必要があります。

現在、ホットキーが定義された現在の形式では、問題なく動作します。

私の質問は:

ホットキーを定義せずに、スクリプトを自動的に実行するにはどうすればよいですか?

4

2 に答える 2

2

Armin が既に書いたように、#Persistent を使用します。また、特定のアプリケーションがフォーカスされているときにのみアクティブになるホットキーを作成する場合は、次のようにします。この場合、スクリプトは起動時に実行されなくなりますが、ホットキーを押したときにのみ実行されます...

#Persistent
#SingleInstance
#IfWinActive, ahk_class TMainForm
!M::
    sleep 2000
    Send Now is the time
Return
!n::SoundBeep, 500, 500
!o::MsgBox, OK
#IfWinActive

このように、3 つの (ダミー) ホットキーはすべて、アプリケーションがフォーカスされている場合にのみアクティブになります! 別のアプリケーションに同じホットキーを定義できます。コードを繰り返すだけで、#IfWinActive, ahk_class TMainForm行内の別のアプリケーションの場合は ID を使用できます。

アプリケーションがアクティブなときに 2 秒ごとにメッセージを送信する場合は、次のようにします。

#Persistent
#SingleInstance
SetTimerMatchMode, CheckApp, 2000
Return

CheckApp:
IfWinActive, ahk_class TMainForm
{
    Send, Now is the time
}
Return

アプリケーションを (再) アクティブにする (フォーカスを入れる) たびに (2 秒ごとではなく) スクリプトを実行する場合は、次を使用します。

#Persistent
#installKeybdHook
#SingleInstance

Gui +LastFound 
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,Hwnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage" )
Return

ShellMessage( wParam )
{
    If (wParam = 4)
    {
        IfWinActive ahk_class TMainForm
        {
            Send, Now is the time
        }
    }
}
Return
于 2013-03-27T15:54:11.917 に答える
1

スクリプトを実行し続ける#Persistentを見てください。

このディレクティブがスクリプトのどこかに存在する場合、そのスクリプトは自動実行セクション (スクリプトの上部) が完了した後も実行を続けます。

于 2013-03-27T14:56:20.763 に答える