0

アプリケーションの実行中にユーザーによる Ctrl、Alt、および Windows キーの使用をブロックする方法として、AutoHotkeys をテストしています。これを行うために、コードをコンパイルしました。

LAlt::return
RAlt::return
LControl::return
RControl::return
RWin::Return
LWin::Return

AutoHotkeys に付属のコンパイラを使用して .exe に変換します。

私の問題は、通常、(TerminateProcess(,) を使用するコードまたは手動で) .exe ファイルを閉じたときに、キーがすぐに解放されないことです。たとえば、Windowsキーは、細かく「ロック解除」されて再び使用できるようになるまでに10秒ほどかかる場合があり、私にとってはこれは受け入れられません.

だから私は2つの質問を得ました:

  • この問題を解決する方法はありますか? .exe が閉じられるとすぐにキーが解放されるようにするにはどうすればよいですか?
  • コードで同じ機能を取得しようとした場合、改善はありますか? または、自分でフックを作成すると、AutoHotkeys で発生しているのと同じ問題が発生しますか?

ありがとう、

モメルギル

4

2 に答える 2

2

AutoHotkeyには、ExitAppスクリプトを終了するための組み込みコマンドがあります。
この例ではEsc、終了をホットキーにします。

Esc::ExitApp

発生している遅延は、プロセスが終了するまでにかかる時間に関連している可能性があるようです。#Ifコマンド*を使用してホットキーを条件付きにすることができます
(つまり、ホットキーは次の場合にのみブロックされFlag = 1ます)。次に、を使用し
て、スクリプトで直前のコンテキストをすばやく変更できます。OnExitサブルーチンは、スクリプトが何らかの手段で終了したときに呼び出されます(「タスクの終了」などによって強制終了された場合を除く)。コマンドを使用して、ホットキーを使用してサブルーチンを呼び出すことができます。ExitAppOnExitGoSub

Flag := 1
OnExit, myExit

Esc::GoSub, myExit

#If Flag
LAlt::return
LCtrl::return
x::return
#If

myExit:
Flag := 0
Exitapp

*この#IfコマンドにはAutohotkey_Lが必要です。
より冗長になりますが、AHKベーシックで機能するもう1つのオプションは、hotkeyコマンドです。


もう1つのオプションは、AutoHotkeyにターゲットアプリケーションを実行させることです。アプリケーションが終了すると、AutoHotkeyも終了します。これがメモ帳の例です。ユーザーがメモ帳を閉じると、スクリプトは正常に終了します。

RunWait, Notepad.exe
ExitApp ; Run after Notepad.exe closes

LAlt::return
RAlt::return
LControl::return
RControl::return
RWin::Return
LWin::Return
于 2012-08-15T19:59:53.597 に答える
1

これらのキーを無効にするには、winactiveを使用します。この例では、「Evernote」のモディファイアキーが無効になっています。別のプログラムに切り替えるとすぐにキーが復元され、Evernoteに戻ると、修飾キーが再び無効になります。

SetTitleMatchMode, 2 ; Find the string Evernote anywhere in the windows title
#ifWinActive Evernote
    LAlt::return
    RAlt::return
    LControl::return
    RControl::return
    RWin::Return
    LWin::Return
#ifWinActive
于 2012-08-16T08:08:38.780 に答える