窓使いの憂鬱とAutoHotkeyのどちらを今後使うべきか迷っております。

そこで、「AutoHotkeyにできて窓使いの憂鬱にできないこと」と「窓使いの憂鬱にできてAutoHotkeyにできないこと」を教えていただけないでしょうか?
ただし、前提として、窓使いの憂鬱を使う場合、スクリプト機能に相当する部分は、窓使いの憂鬱の&ShellExecute関数に$Clipboardや$WindowTitleNameなどの置換引数を渡して、外部のVBスクリプトファイルやミニ.NETアプリを呼び出す形で実装することを前提としています。
したがって、もっと正確に言うと、「窓使いの憂鬱+外部スクリプトにできて、AutoHotkeyにできないこと」と「AutoHotkeyにできて、窓使いの憂鬱+外部スクリプトにできないこと」というのが、質問の内容になります。

ご教授のほど、よろしくお願いいたします。

回答の条件
  • 1人50回まで
  • 1000 ptで終了
  • 登録:
  • 終了:2006/12/05 12:30:11
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答7件)

ただいまのポイント : ポイント0 pt / 1000 pt ツリー表示 | 新着順
 

窓使いの憂鬱のソースコードでもSetWindowsHookExが使われています。 ふろむだ2006/11/29 15:00:21

窓使いの憂鬱のソースコードのhook.cppというファイルでは、

CallNextHookExやSetWindowsHookExが使われています。

どうも、Windowの最大化、最小化、CAPSキー、NUMLOCKキー、KANAキー、IME制御などの処理をやってるっぽいです。

ということは、AHKと同レイヤの処理もやっているわけなんですかね?

フックメソッドの返値を1にすると、AHKにもイベントは渡らなくなります。 ふろむだ2006/11/29 13:05:00

また、AHKの手前でフックして、フックメソッドの返値を1にして、SendKeysメソッドで、アクティブなアプリに直接キーイベントを送ると、AHKを回避してキーイベントをそのアプリに送ることができました。

どうも、AHKの動作原理の詳細が、いまいちよく分かりません。

AHKのソースコードをハックしてみました。 ふろむだ2006/11/29 13:00:09

窓使いの憂鬱は、Windows Device ModelのUSBクラスドライバとHIDクラスドライバを正規のものとすげ替えて、乗っ取って、定義ファイル通りにキーの置き換えをやったあと、ファイルシステムドライバにわたしてるっぽい。

ファイルシステムドライバは、OSから呼び出されているわけだから、ようは、ハードウェアからの信号が、OSに認識される手前で、変換処理をかける方式っぽい。

この理解で合ってますでしょうか?

AHKは、SetWindowsHookExで、WH_MOUSE_LLとWH_KEYBOARD_LLをフックしている方式。

要するに、OSがメッセージをアプリに配送する手前で、引っかけて、処理をしている。

ということで、どうも、ぜんぜん別レイヤのように思えるのですが、

この理解で合ってますでしょうか?

ちなみに、調べていて、どうも理解できなかったところがあります。

.NETでSetWindowsHookExで、WH_MOUSE_LLとWH_KEYBOARD_LLをフックするサンプルプログラムを書いて、

二つのキーイベントフィルタを同時に走らせて、

どちらのフィルタも、CallNextHookExを呼ばないようにすると、最初に立ち上げた方のフックが効かなくなる。

しかし、AHKを起動した後に、そのサンプルプログラムを実行すると、AHKはキーイベントを拾ってしまうのですね。

AHKのソースコードでは、同じ方式でフックをしているように見えるので、なぜ、そういう動作になるのか、分かりません。

AHKは、ソースコードのどこかで、なにか特別なことをやっているのでしょうか?それとも、.NETで同じことをした場合に、特有の現象なのでしょうか?

ActiveWindowの真ん中にマウスカーソルを持ってくる ふろむだ2006/11/28 16:57:07

ActiveWindowの真ん中にマウスカーソルを持ってくるという操作は、窓使いの憂鬱ではできませんが、AutoHotkeyでは出来るようです。その認識で間違いないですか?

AHKと窓使いの憂鬱は同居が可能? ふろむだ2006/11/28 12:46:32

「AHKと窓使いの憂鬱を両方インストールして使っても、トラブルが起きたという話は聞かない」という書き込みをネットで見かけました。

なぜなら、ソフトを実装するレイヤが違うからだそうです。

つまり

キー入力→窓使いの憂鬱→AHK→アプリケーション

という順序で、キー入力処理が行われると。

また、その場合、キー定義は窓使いの憂鬱で、それ以外はAHKで、という使い分けをする、というスタイルのようでした。

しかし、窓使いの憂鬱のマニュアルには、AHKの併用はトラブルが出るので避けるように、と書いてあります。

この辺、実際のところは、どうなっているのでしょうか?

ご教授いただけると幸いです。

AHKでウィンドウタイトルのマッチングに日本語は使えるのか? ふろむだ2006/11/28 12:33:31

また、以下の点がとくによく分からなかったです。

●AHKでは、ウィンドウタイトルのマッチングに日本語を使った場合、問題なくマッチングできるのか?正規表現を使おうとすると、日本語は使えないみたいだけど、正規表現を使わなければ、日本語でウィンドウタイトルの指定も出来る?

よろしくお願いいたします。

私なりに調べたけど、はっきり分からなかったところ ふろむだ2006/11/28 12:32:01

ちなみに、私なりに調べたところ、どうやら、以下のことが、それらに相当するように思えるのですが、この理解は、正しいのでしょうか?

●AutoHotkeyでは、SandSなどのワンショットモディファイアは、一つの修飾キーしか指定できない。複数の修飾キーで修飾したキーに機能を割り当てたければ、窓使いの憂鬱を使うしかない。たとえば、「SpaceをDownしたまま、かつ、変換をDownしたまま、Kを押す」と、あるアプリが起動する、というようなキー割り当ては、AutoHotkeyではできない。

●窓使いの憂鬱の内部的な独自LockキーでであるLock0~Lock9は、AutoHotkeyではグローバル変数を使用することにより実装できる。

●x64系のマシンを使っている場合、窓使いの憂鬱は使えない。

●マウスジェスチャーに機能を割り当てるのは、AutoHotkeyでできるけど、窓使いの憂鬱ではできない。

 

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません