web-dev-qa-db-ja.com

AutoHotKeyを使用してキーを再マップする

最近、GOG.comからRayman2を購入しました。ゲームは古いため、キーを再マップするオプションはありません。今日使用しているものに少し近づけたいと思います。

Here's a screenshot from the manual with the key bindings.

基本的には、WSADで通常の動きをしたり、スペースでジャンプしたり、マウスの左クリックで撮影したりします。また、レイマンウィンドウがアクティブな場合にのみキーを再マップしたいのですが。以下のスクリプトを作成しましたが、正しく動作しません。

AHKを使ったのはこれが初めてなので、どうしたらいいかわかりません。スクリプトを正しく構成するにはどうすればよいですか?

このスクリプトをアクティブにすると、次のようになります。

  • スクリプトは、ウィンドウがアクティブかどうかは言うまでもなく、Raymanが開いているかどうかに関係なくアクティブです。 (ウィンドウ名はRayman IIまたはRayman2のいずれかです。)
  • W:前方に移動し、カメラを右に向けます
  • S:意図したとおりに機能します
  • A:左に移動してジャンプします
  • D:意図したとおりに機能します
  • LButton:意図したとおりに機能します
  • スペース:シュートとジャンプ

スクリプト自体:

IfWinActive, Rayman2
{
    w::up
    s::down
    a::left
    d::right
    space::a
    LButton::space
}
3
vaindil
  1. まず、間違ったコマンドを使用しています。使用する #IfWinActive。これはスクリプト全体です。選択したコマンドは、スクリプト内でウィンドウがアクティブかどうかを確認します。
  2. 次に、WindowSpyでウィンドウのahk_classが何であるかを確認します(これはウィンドウのタイトルが変更された場合に役立ちます)。 WindowSpyはAutoHotkeyのインストールに含まれています。
  3. 最後に、別の方法を試してください SendModes 。詳細が異なるものがいくつかあります。さまざまな送信コマンドの詳細については、 ここ を参照してください。

コードは次のようになります。

#IfWinActive, ahk_class xyz ; put your ahk_class instead of xyz
SendMode Play ; try all of the following: Input|Play|Event|InputThenPlay

    w::up
    s::down
    a::left
    d::right
    space::a
    LButton::space

資格:使用しているWindowsのバージョンに応じて、キー押下のシミュレーションが機能する場合と機能しない場合があります。 Windows 7までは機能していましたが、Windows8では機能しなくなる可能性があります。それは私にも起こりました、そして私はまだAutoHotkey内の代替案を見つけていません。

別のマクロソフトウェア(AutoIt、PhraseExpress、Macro Express)を試す必要があるかもしれません。

4

循環呼び出しを引き起こす可能性のあるキーが相互にマップされているようです。各キーの前に$を置いてみてください。それはその問題を防ぎます。

例:

$w::up

ソース

IfWinActiveの問題については、代わりにahk_exeを使用することをお勧めします。タスクマネージャーでプロセス名を検索し、すべてのホットキーの前に次の行を配置するだけです。

#If WinActive("ahk_exe rayman.exe")  ; Rename exe to whatever it really is

ソース

1
Elliot DeNolf