2017-09-20 13 views
2

SendInputを使用するAutoHotkeyスクリプトを使用しているため、MouseClickコマンドを処理するには速すぎます。私のスクリプトはMouseClickを送信して入力フィールドにフォーカスを当て、フィールドがフォーカスを合わせる前に入力を開始します。AutoHotkeyのSendInputコマンドの間に遅延を追加するにはどうすればよいですか?

SetKeyDelayを使用してスクリプトを少し遅くしてみましたが、これはSendInputでは機能しません。

:SetKeyDelayはSendInputによって守られていません。そのモードでのキーストロークの間に遅延はありません。これは、SendMode入力が有効な場合にSendにも当てはまります。
Documentation for SetKeyDelay

私の現在の回避策は、各入力後にスリープコマンドを使用することですが、これは理想的な未満です。

SendMode Input 
F1:: 
    MouseClick, left, 61, 50   ; select title field 
    sleep 100      ; artificial delay to prevent misfocused inputs 

    SendInput %user_input%{Enter} ; enter job title 
    sleep 100      ; artificial delay 

    MouseClick, left, 67, 408  ; select job 
    sleep 100      ; artificial delay 
Return 

理想的には、毎回手動でsleepコマンドを使用することなく、各SendInputコマンド間に遅延を追加するためのより洗練されたソリューションが必要です。

スリープを繰り返し使用せずに、AutoHotkeyのSendInputコマンド間に遅延を追加するにはどうすればよいですか?

答えて

1

SendInputの代わりにSendPlayを試してみてください。

これは、各documentation for SendPlayから

user_input := "hello world" 
SetMouseDelay 100, Play 
SendPlay {Click 61,50}%user_input%{enter}{click 67,408} 

をクリックし、次の100msの遅延で、テキストやマウスクリックを送信します。

SendPlay

:SendPlayは、スクリプトは管理者として実行されている場合でも、すべてでUACが有効になっている場合は効果がないことがあります。詳細については、FAQを参照してください。

SendInputと同様に、SendPlayのキーストロークには、ユーザーが入力したキーストロークが散在することはありません。したがって、ユーザーがSendPlay中に何かを入力した場合、それらのキーストロークはその後まで延期されます。

SendPlayはSendInputよりもかなり低速ですが、通常はが-1の場合でも、従来のSendEventモードよりも高速です。

SendPlayは、SetKeyDelayとSetMouseDelayの標準設定を使用しません。代わりに、次の例に示すように変更することができ、まったく遅れ、がデフォルト:

SetKeyDelay, 0, 10, Play ; Note that both 0 and -1 are the same in SendPlay mode. 
SetMouseDelay, 10, Play 
+0

私の理解では、SendInputは、それが利用できるように、キーボードとマウスのイベントや遅延を調整しようとしないということですそのようなサポートを持たない高速のオペレーティングシステムコール。 –

関連する問題