AutoHotkey スレッド part25 [無断転載禁止]©2ch.net

1名無しさん@お腹いっぱい。 転載ダメ©2ch.net (ワッチョイ f977-fKjf)2017/09/14(木) 11:52:40.84ID:uijNj4qb0

■配布元
http://ahkscript.org/download/

■前スレ
AutoHotkey スレッド part24
http://egg.2ch.net/test/read.cgi/software/1487149472/

■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
Autohotkey専用うpろだ
http://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
http://pastebin.com/

■派生版
IronAhk (.NET製、クロスプラットフォーム)
https://github.com/polyethene/IronAHK
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)

「空気読め!」ってお叱り受けるのを覚悟で言っちゃう

>>35
サンプルコード集
http://ahkwiki.net/SampleCodes
で解決するよ

>>34
https://ux.getuploader.com/autohotkeyl/download/123
勝手にIME.ahkを修正してみたけどこんな感じかな? 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)

>>38
WPARAMにUPtrすばらしい

4035 (ワッチョイ 1387-+ACF)2017/09/16(土) 19:46:44.50ID:aHU7hLXq0
一応、ElseじゃなくReturn で繋いで双方のコードを引き込まなくなった(タイミングは調整中)

しかし、ボスが来た自体に問題が出てることが発覚
どうやらプログラムによって発動までにラグがあったり、何度か押さないと反応が無い
あれ? 単独スクリプトでもっとしっかり動いてたはずなんだけどなぁ
特にFirefoxの反応が悪すぎる。それに対して動画プレイヤーは素直に反応する
音楽プレイヤーはちょっと遅れ気味で反応
SetKeyDelay,を10から-1にしても変わらず...
クラスを1個づつに分けて試したけど反応悪い
直接のショトカは問題ないので何か悪さしてるのかな

サンプルコード集の例を元にして1度押しと2度押しで動作を分けてみたけど
Pauseキーだと10回に1回くらい2度押し判定がスカってaがsendされることがある

#UseHook ;ホットキーラベルの定義で、常にフックを使用するようにする
Pause:: ;無変換
KeyWait,Pause
KeyWait,Pause,D T0.2 ;0.2秒対象キーが押されるのを待つ
If(ErrorLevel)
{
;ここに任意のコマンド 1度押し
Send, a
KeyWait,Pause
Return
}
;ここに任意のコマンド 2度押し
Send,b
KeyWait,Pause
Return


他のキーだと2度押し判定ミスすることないからキーボードの仕様なのかな
まあPauseはそういう使い方想定してないから2度押ししたいなら素直に別キー使った方が良いんだろうね

>>41
検証ありがとうございます
現在、F13キーにして検証中
ボスキーの反応がキーによってまちまちです
もう、わけわからんのでショトカの割り当て含めて組み直しですね

MusicBee
MusicBeeのショトカをグローバル設定に変えてControlSend,,を使わず直接Send, +{f8}で送ってみた結果、レスポンスとしては全く問題なし。
それ以外の機能のショトカをControlSend,,で送ったところMusicBeeはレスポンスが非常に悪いようです
一度反応した後は間をあけないと2回目以降ラグが出てしまう?遅延しやすい感じ
分けて使ってる時はたまたま運が良かったみたい?。ボスが来なくてよかった...

Firefox
F13で反応無し、#F13で確実にレスポンスよく反応する

MPC-BE
どのキーでも確実にレスポンスよく反応する

発動キーを2キー以上使えば行けそうな気がしてきましたが
そうなるとコードをひとまとめにして簡単にしてやろうという当初の目論見から少しズレてしまうだよね
ってかFirefoxどうしたんだって感じです。もともと1キーでテキパキ反応してたんだけど

もうちょい頑張ってみます

◯::
DetectHiddenWindows,On
ControlSend,,^w,ahk_class MozillaWindowClass
Return

F13:: まったく動作せず
#F13:: アクティブの時動作せず
^F13:: アクティブでも非アクティブでも動作する
F13長押し まったく動作せず
^F13長押し アクティブの時動作せず
#F13長押し アクティブの時動作せず

うん。心が折れた
^F13でいこう。そしてボスキーは他のコードと分けようかな...
ってか面倒くさいから普通にボスキーアプリ拾ってこいって話だよな

F13をどこに割り当ててんだ?

>>44
割当じゃなくキーコード自体がF13キー
元々はAppsKey

46名無しさん@お腹いっぱい。 (ワッチョイ c977-fKjf)2017/09/17(日) 09:43:50.02ID:ZslvSlHV0
AHKのスクリプトから簡単に使える文字コード変換ライブラリって、何があります?
AHKネイティブでも、あるいはDLLになっているものでも構いません。
環境はXP 32bit版、Windows 7 64bit版、Windows 10 32bit版(いずれも日本語版)の
3つで動くことが前提、Ahk2ExeでUnicode 32bitのEXEファイルにして持ち歩くことも想定中。

もしまだなければ自分で書くしかないのかなと思っていますけど、
既にあるようなら教えていただきたく。

具体的にやりたい操作としては、文字列が与えられたときに、
・全角英数字をすべて半角にする
・ASCII文字のうちファイル名に使えないものを、すべて対応する全角文字に置き換える
・カタカナの全角⇔半角を一括して切り替える
・ひらがなをすべて全角カタカナに変換する
という操作ができればOKです。

秀丸エディタを持っているので、その変換モジュールを使うという手もあるのですが、
そのまま使うには色々とネックがあります。
・秀丸の32bit DLL呼び出しはWINAPIV規約なので、WINAPI規約を前提にしたAHKの
 DLL呼び出し機能で呼ぶには、ラッパーDLLをひとつ書く必要がある
・秀丸の変換モジュールの内部コードはCP932で、Unicode文字は独自の内部表現にして
 渡す必要があるので、Unicode文字の入った文字列の場合には注意を要する

…やっぱり、tr() 関数を自分で書くのが手っ取り早いでしょうか?
ざっと見た限りではJavaScriptにも tr() はないようですし、いちど一念発起して作っておけば
使い回しがきくかも、とは思っているのですが、もし既に存在してBSDライセンスなり
LGPLなりで自由に使えるなら、わざわざ自作するのも馬鹿らしいので…。

そのどれもそんなたいした手間かかるものじゃないんで
みんな自分で書いてるんじゃないの

過去ログのどっかにありそうだな

https://msdn.microsoft.com/en-us/library/microsoft.visualbasic.strings.strconv(v=vs.110).aspx

俺は知識のない人間だからよくわからんけどこれは使えないのだろうか


5146 (ワッチョイ c977-fKjf)2017/09/18(月) 15:18:21.15ID:30s93rv60
>>46です。皆さんありがとうございます。

>>47
まあ、そういわれればそうですね。書いても大した手間じゃないと思ってはいます。

>>49
.NETでDLLをひとつビルドする必要がありますね。
Visual Studioが今は無料になったとはいえ、もしかしたらWindows 2000とか
98とかのVMにAHKを入れて使う可能性があるので、.NETは避けたいです。
#単に.NETに対してアレルギーがあるだけなんだけど。

>>48 >>50
けっこう面倒臭そうですね。

*   *   *

というわけで、大した手間じゃないので自分で書くことにします。
tr() って、いろんな言語で汎用的に使いそうな関数ですから、
著作権フリーの自前のものを手元に持っておいたほうが、
あとあと融通がききそうですし。

マウスのホイールで加速
ってAHK単体で実現できますか?

Webブラウザで超縦長ページを高速スクロールさせたいとき、ホイールを高速で回すと10数ページぐらい移動とか・・・

拾ってきたAccelerated Scrollingてのを少しいじってメインに組み込んでる

>>52
ホイールスクロール - eamat @Cabinet - アットウィキ
https://www6.atwiki.jp/eamat/pages/30.html
WheelScroll.ahkはどうだろう
一応日本人作だから日本語の説明だから分かりやすいかと
10数ページ一気に移動とか可能か分からないけど・・・

素早いレスをありがとうございます
AHKの万能さに感動しました

自分は加速ではなく
サイドボタン1&ホイール上下でHome/End
サイドボタン2&ホイール上下でPageUP/PageDown
を割り当ててる
とりあえず一番上か一番下に飛びたいことが多いのでHome/End割り当てるのが効率良いです

デスクトップのなにもないところ(ウインドウも、アイコンも無い壁紙部分)をダブルクリックすると、特定のアプリを起動する
って事はAHKで出来ますか?

出来ると思います

LOOP中にキーボードAを押したらLOOPから抜けるようにするにはどうすればいいですか?

>>59
Loop間隔が短いならGetKeyStateでif分岐してBreak

Loop間隔が長いならAキーに変数指定を割り当てといて
Loop中にその変数の値でif分岐してBreakとか

あとはUntilかWhile

>>60
>>61
ありがとうございます

横からだけど>>57って出来るのか気になる
デスクトップのアイコンの有無ってどうやって判別したら良いんだろう?

例えば、コピー送ってクリップボードに入るかどうか、とか

AHKにSendMessageでポインタを渡す機能があればLVM_HITTESTを送る
-1が返るとアイコンなし

6657 (ワッチョイ 39d9-SGtB)2017/09/20(水) 05:36:41.50ID:1u+zkbMh0
色々調べたけど殆ど分からない
user32.dllを読み込んで何かのイベントを貰えれば良いのだけど、それについての情報が殆ど無いですよね
やり方もわからないし…

で、https://sites.google.com/site/agkh6mze/howto/winevent
このページ見てて、デスクトップのなにもない所をダブルクリックという作動をよくよく考えてみると、
すべてのフォーカスが外れた状態でダブルクリックイベント
という事なんじゃないかと

その先さっぱり
パラメータの説明はMSにあるけど、無能過ぎてちんぷんかんぷん
Spy++で調べるとデスクトップはFolder viewというFormだということはわかったけど…

>>65
ありがとうございます
まだ良くわかってないけど調べてみるとLVM_HITTESTというキーワードをちょこっと調べるとどうにかできそうな匂いがします
もうちょっと調べてみるです

他にやりようがあるんだからできる範囲で工夫すりゃいいのに

69名無しさん@お腹いっぱい。 (ワッチョイ 814c-O10d)2017/09/20(水) 07:55:16.00ID:VDqFQXZJ0
>>66
検索したらすぐに見つかったけど
https://autohotkey.com/board/topic/82196-solved-double-click-on-the-desktop/

1ページ目に手抜きのコード
2ページ目に実用上ほぼ問題なさそうなきれいなコード(中程のやつ)
これだと問題となるケースがあって、それを除外する努力が3ページ目までつづくけど、
結局は潰しきれないので、好きなやつをどうぞ

>>69
おぉありがとうございます
今は無理なので後で使ってみます
ありがとうございました

7117 (ワッチョイ 4609-dBFo)2017/09/21(木) 14:16:57.34ID:h2uQQOf90
>>34>>38
解析有難うございます
修正版にてようやくエラーが再現しましたが、応答なしになるのは変わらずでした
Win2000+IME2000ではIMEの状態が常にOFFになりました
残念ですが2つ起動することにします

>>71
64bit版で32bitアプリにSendMessageでメッセージは送れないと思うその逆も
タイマー1つにしてまずエラーダイアログ判定して、でなければIMEへ

それと>>25
;ここに特定のClasNNではOFFにせずReturnする例外処理
If (IME_GET()) {
IME_SET(0)
と書けないかな

GetKeyStateで無変換キー(vk1Dsc07B)が取得できないんだけど、何か方法ないかな?

できるけど

>>75
まじ?GetKeyState("vk1Dsc07B", "P")で?
俺の指定方法がおかしいのかな
他のキーは取得できるのにな

どちらかにすれば?
vk1D
sc07B

>>76
それでも"vk1D"でも"sc07B"でも"P"があってもなくても0|1ちゃんと返る

おっかしいなぁ・・・
ならないから多分おま環かも
面倒だし別のキーに割り当てますわ

>>79
キーヒストリー(アイコンダブルクリックでCtrl+K)に何が入っているか気になるね。
レジストリで変更してるとか。

キーを押している間
クリックして
マウスムーブ
クリックして
マウスムーブ を繰り返したいんですが
マウスムーブの値が一定じゃない場合
数珠繋ぎにif文を増やして行けばいいのでしょうか?
キーを離したら停止は出来るんですが
If文の数珠繋ぎにするやり方を教えてください

>>81
質問するならもう少し具体例を挙げるとかとかした方がいいんじゃないかな

>>81
if (式1) {
 ・・・
} else if (式2) {
 ・・・
} else if (式3) {
 ・・・
}

>>83
多分コレジャナイ感

じゃあ
>>81
if (式1) {
 ・・・
}
if (式2) {
 ・・・
}
if (式3) {
 ・・・
}

86名無しさん@お腹いっぱい。 (ワッチョイ a777-LePR)2017/09/24(日) 13:45:20.15ID:vmDjT91J0
>>81
概略こんなコードになるはず。

何か適当な名前の関数()
{
  マウスムーブ1回目を実行
  当該キーの状態を取得
  if (押されていない)
    return

  マウスムーブ2回目を実行
  当該キーの状態を取得
  if (押されていない)
    return
   :
}

で、回数が多いようならこんな感じで1回分の作業単位の関数を書いたほうがいい。
MouseMoveAndKeyCheck(dx, dy, strKeyName)
{
  MouseMove, dx, dy,. , R
  return ( GetKeyState(strKeyName)=="D" )
}

この場合、この関数を
if ( !MouseMoveAndKeyCheck(10,10,"LShift") )
  return
if ( !MouseMoveAndKeyCheck(10,-20,"LShift") )
  return
とかかいて呼び出してやればいい。

#テストしてないので誤字とかあったらごめんね

if (3 < %A% < 5) とかの3項比較すらできないとか何このクソ言語
一つづつ比較しろってのかよ
一々%がついたりつかなかったりもウザいし

新着レスの表示
レスを投稿する