AutoHotkey スレッド part8

このエントリーをはてなブックマークに追加
432名無しさん@お腹いっぱい。
、、、と思ったらできそうW
http://www.autohotkey.net/~daonlyfreez/tutorials/3p/Veil/fnkey.htm

DLLを使って、生のHIDデータを使って、キーが押されたのを認識するんかな?
と思いつつ英語なのでいまいちよくわからんかったりW
433名無しさん@お腹いっぱい。:2009/07/15(水) 22:06:42 ID:EPlDwuqf0
>>429
StringLen, OutputVar, InputVar
を使って、桁数を数えて0を足せばいいんですかね?
434名無しさん@お腹いっぱい。:2009/07/15(水) 22:11:01 ID:0bQiTwD20
>>433
SetFormat
435名無しさん@お腹いっぱい。:2009/07/15(水) 22:22:50 ID:ZstWjcqp0
>>434
(∀`*ゞ)テヘッ
436名無しさん@お腹いっぱい。:2009/07/15(水) 22:32:32 ID:pL9tudGt0
>>430
ありがとうございます。無事に動きました。
組み込み変数ってとこに乗っていたんですね。もっとよくサイトを見て回るべきでした。
437名無しさん@お腹いっぱい。:2009/07/15(水) 22:48:08 ID:EPlDwuqf0
>>434
>>435
ありがとうございました。
438名無しさん@お腹いっぱい。:2009/07/15(水) 23:30:24 ID:RsN7t4Tx0
lengthとらんでも数値範囲でいいのでわ

index := A_Index<10 ? "00" . A_Index : A_Index<100 ? "0" . A_Index : A_Index
439423:2009/07/15(水) 23:46:12 ID:FhFUja4C0
>>424
再変換とautohotkeyの組み合わせを全く考えていませんでした
勉強になりました
ありがとうございます!
440425,426,431,432:2009/07/16(木) 00:20:36 ID:hU26z2kV0
無事、Windowsでは認識しないEjectキーをホットキーにすることができた
>>432の英文の意味がわからなくて2時間ぐらい悩んだw
AutoHotKeyすげー、なんでもできるね

Windows/Mac兼用のキーボード買って
Mac用のイジェクトキーがついてたけどWindowsでは何のキーコードも吐かないし
使えないものかと思ってたけど、粘って調べまくったら、
ちゃんとやり方が見つかって、使えちゃうんだもんなあ、、、。

買ったキーボード、何のドライバも必要なくて
WindoowsデフォルトのHIDドライバで動くキーボードだけど
マルチメディアキーのアサインを変更/設定するソフトが付いてなくて
残念に思ってたけど、AHKのおかげで、全部のマルチメディアキーを、
好きな機能のホットキーとして使えてすごくありがたい。
441名無しさん@お腹いっぱい。:2009/07/16(木) 00:24:35 ID:9RBITyjp0
>>440
その成果、見せていただきたいものだ(`・ω・´)
442名無しさん@お腹いっぱい。:2009/07/16(木) 00:45:51 ID:y0dtBMxl0
>>440
俺も知りたい。リンク先荒読みしたけど難しすぎる。
概要でいいので解説頼みます。

もしかして、ノートPCのFnキーや、多ボタンマウスのチルト傾斜とかも
専用ドライバ無しでHIDの標準ドライバ経由で直取りできるってこと?

そうなら、チルト機能を認識させるために現状入れざるを得ない、
諸悪の根源「ロジクールSetpoint」と、おさらばできることになる。
ものすごく夢が広がる・・・
443名無しさん@お腹いっぱい。:2009/07/16(木) 01:30:28 ID:hU26z2kV0
>>441 >>442
>もしかして、ノートPCのFnキーや、多ボタンマウスのチルト傾斜とかも
>専用ドライバ無しでHIDの標準ドライバ経由で直取りできるってこと?

うん、多分できるんではないかと思う。
でも、俺は超初心者なので、自分がやりたいことがトライ&エラーと勘で、
たまたま実現できちゃっただけなのでw、本当にできるかどうかよくわかってないっすwww
できなかったらごめんwでもつかっているDLLはそんな系統のもののようなのでできるんじゃないかと。





とりあえず、>>432に書かれている通りに、これをダウンロードして解凍
http://www.autohotkey.net/%7EMicha/HIDsupport/AutohotkeyRemoteControl.rar

それから、>>432のページからはリンク切れだけど、
違うサイトから探してきた、これもダウンロード(FnMapper.ahk)
http://uawks.googlecode.com/issues/attachment?aid=5614292902990076938&name=FnMapper.ahk
ダウンロードしたら、上で解凍したフォルダの中に移動する(DLLと同じディレクトリに)

AutoHotkeyRemoteControlDLL.ahkをダブルクリックして起動させ、
ウィンドウ上に出てきたUSBデバイス一覧の中から、「1.HID」あたりを適当に選択
まず、「Register」ボタンをクリックしてから、これからホットキー登録したいデバイス(キーボードなど)の、
Windowsでは認識しないキーやFnキー、Fnキーコンビネーションなどを押す。
ウィンドウ下の欄に表示される数字などが、変化すればOK.
変化したら、Usage欄とUsagePage欄の数値をメモる。
変化しないなら、ウィンドウ上から別のものを選択してやりなおし。終わったら終了する。
444名無しさん@お腹いっぱい。:2009/07/16(木) 01:32:55 ID:hU26z2kV0
次に、FnMapper.ahkを編集する。

まず、EditUsage := 1 EditUsagePage := 12という部分を探して、
それぞれの数値を、さっき調査したUsageとUsagePageの数値に書き換える。
俺はそのまま変更しないでOKだった。

次に、 ;MsgBox, Keystatus: %KeyStatus%という行があるけど、
行頭のセミコロンを消す(コメントアウト状態じゃなくする)

以上が終わったら、FnMapper.ahkをダブルクリックで起動する。
何もダイアログが出てない状態で、
これからホットキー登録したいキーやFnキーコンビネーションを押して、
MsgBoxに出た数値と押したキーとの対応をメモる。
必要なキーの数だけ、どんどんメモる。

あとは、;MsgBox, Keystatus: %KeyStatus%の行頭に
またセミコロンをつけて再度コメントアウトして、
それから、
Transform, EjectValue, BitAnd, 8, KeyStatusの直後ぐらいに、
Keystatusに関して判定するif文を書き、該当キーの処理を書く。

たとえば俺の場合、Windowsで認識しないEjectキーを押した場合に
さきほどMsgBoxに表示された数字が64だったので

if Keystatus = 64
{
MsgBox,EjectKey Pressed!!!
}

を挿入したら、Windowsではキーコードすら吐かないイジェクトキーを押したときに
EjectKey Pressed!!!と表示できた。
他にも、スクリプトの中の必要なさそうなところはコメントアウトしたりした。
445名無しさん@お腹いっぱい。:2009/07/16(木) 01:35:13 ID:hU26z2kV0
俺は、全然知識がないので、試行錯誤でなんとかWindowsで認識せずキーコードも吐かない
Ejectキーに処理を割り当てるという目的を達成できたけど、
実際のところ、ただ動いただけで、トライ&エラーいっぱいやって動いただけなので、あんまりわかってないw

なんにもわからず英語すらぜんぜんわかんない俺が勘でできちゃったぐらいなのでw
知識のある人は、Step1〜Step3と、>>432の「Concluding」の部分を読んでてきとうに試せば
いろんなことができるかも。。。

ほんと、超初心者なので書いてあることよくわからなかったらごめんw
使えないEjectキーをなんとか使いたい、という一心で数時間粘った結果うまくいったけど、
他の方もなにか少しでも参考になったらうれしいです。
446名無しさん@お腹いっぱい。:2009/07/16(木) 02:30:50 ID:V4BKOg60P
デスクトップのFnキーで試してみたけどやっぱ無理だった
447名無しさん@お腹いっぱい。:2009/07/16(木) 02:31:29 ID:830f4iJ50
おぉ、ThinkVantageボタン、Fn+F3, Fn+F5, Fn+Home, Fn+End, Fn+Space に機能割り当てでけた

とは言っても FnMapper.ahk じゃキー押しても全部ステータスが 0 だったんで
RemoteController.ahkを実行して、Fn+キーを押すとコードらしきモノをMsgBoxで吐くのでそれをメモって
Ifの羅列の所を書き換えただけだけど。
448名無しさん@お腹いっぱい。:2009/07/16(木) 03:32:30 ID:vsQpHBg60
相当ハードに近い低レベルなところでやらないと無理だって話だったのにすげーな
449名無しさん@お腹いっぱい。:2009/07/16(木) 06:32:18 ID:y0dtBMxl0
>>443
ありがとう、非常に参考になったよ。

RemoteControl.ahkで、マウスMX620でSetpointを使わない状態で
マウス左上の検索ボタンを押したら、0321020000 と表示された。
いろんなHIDデバイスが吐き出す数字の中で、この数字が以下の固定定義に
マッチすると、該当のボタン名を表示するみたいね。

ifequal, Vals, 040100, gosub Homepg
ifequal, Vals, 048000, gosub RED
ifequal, Vals, 040800, gosub GREEN
ifequal, Vals, 041000, gosub GELB
ifequal, Vals, 042000, gosub BLAU
ifequal, Vals, 040200, gosub LineTV
ifequal, Vals, 03800000, gosub Record
ifequal, Vals, 03040000, gosub Radio_
ifequal, Vals, 040010, gosub SAP
ifequal, Vals, 040020, gosub TELETEXT
ifequal, Vals, 040040, gosub LastCH
ifequal, Vals, 040008, gosub Subtitle
ifequal, Vals, 040002, gosub Language
ifequal, Vals, 010001, gosub Angle
ifequal, Vals, 03000400, gosub BACK
 (略)

肝心のホイールチルトは、残念ながらSetpointが居ても居なくても無反応だった。

いままでは、KeyHistoryで拾えない物は全部あきらめてたから、
解析の幅がかなり広がるのは確実だ。すごい情報をありがとう。
450名無しさん@お腹いっぱい。:2009/07/16(木) 07:15:19 ID:w5k/fzsS0
漏れはリモコン関係でその系統のネタ調べてたな。
今のところ
AutoHotkeyRemoteControlDLL.ahk
で、UsageとUsagePageを取得した後は
ttp://www.autohotkey.com/forum/topic23072.html
のLexikos氏のスクリプト使って適当に我流で利用してる。


WM_INPUT(wParam, lParam)
{
;中略
if type = 1 ; RIM_TYPEKEYBOARD
{
;中略
StdOut(vk_a " " sc_a " " act " msg: " msg " flags: " flags " dev: " hDevice)
}
else if type = 2 ; RIM_TYPEHID
{
StdOut((count=1 ? "dev: " hDevice " -- " : "") hex)
}
とかなってるStdOutの直後に
ifequal,hex,03 9C 00 00 00 00 00,GOSUB CHANNELUP
ifequal,hex,03 9D 00 00 00 00 00,GOSUB CHANNELDOWN
とかやって関数外に出して。