■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)][ひらがな][全角/半角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報を正しく返してこないのでAHKのみで対処は無理です。
レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする(例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。(
http://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード(0x0064はF13)が表示されるので覚えておき「終了」をクリック。
「ひらがな」キーをクリックすると「【ひらがな】キーをどのキーに変更しますか?」という
ウィンドウが表示されるので右上の「Scan code」をクリック。
覚えておいたスキャンコード(0064)を入力し、「OK」ボタンをクリック。
「登録」をクリックし、Windowsを再起動する。
Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
^1::Send, {Esc}
Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
sc07B & I::Send, {Blind}{Up}
sc07B & K::Send, {Blind}{Down}
sc07B & J::Send, {Blind}{Left}
sc07B & L::Send, {Blind}{Right}
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
#UseHookで全部にキーボードフックを適応する方法でも可。
Q5:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…
A5:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
Q6:ジョイスティックのリマップがうまくいきません!!助けて
A6:ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。
× Joy1::Esc
○ Joy1::Send, {Esc}
Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
Q8:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A8:AutoHotkeyではできない。
Q9:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A9:AHKが原因の場合とそうでないときがある
○AHKが原因の場合
AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
例) ^W::Send, {w 30}
これを回避するためには、以下の方法をとればよい:
・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
#HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
○AHK以外が原因の場合:
環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)
・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている
■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:
http://www6.atwiki.jp/eamat/pages/17.html の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)
■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:テキストエディタでキーワードの色づけなどをしたいんだけど。
A2:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q3:GUI作るのめんどくせ〜〜
A3:公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。
Q4:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A4:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
※ AutoHotkey_H(AutoHotkey.dll)を利用すると真のマルチスレッドが利用可。
Q5:AHK、AHKLx86、AHKLx64の共存は出来る?
A5:それぞれを違うフォルダ(ディレクトリ)にインストールすれば共存できます。
但し、インストーラーを使って最後にインストールしたAutohotkey(Normal or x86 or x64)
に対してahkファイルの関連付けが行われますので、レジストリエディタ(Regedit.exe)や
FileTypesMan等のツールを使って関連付を変更してください。
ahkファイルをAHK Normal、ahlファイルをAHKLx86、ah6ファイルをAHKLx64といったように
別々の拡張子に関連付けが可能です。
それぞれに関連付けしたファイルに対してドラッグアンドドロップを有効にするにはレジストリの
[HKEY_CLASSES_ROOT\ファイルタイプの名前\ShellEx\DropHandler]
の (規定) のデータを {86C86720-42A0-1069-A2E8-08002B30309D} にする。
Q6:Windows7(以降)の特定ウィンドウでAHKが効かないんだけど?
A6:XPは管理者(Administrator)としてログインすれば全てのソフトが「管理者権限」で起動して
いましたが、Win7からは管理者でも基本的に「標準ユーザー」として起動するようになりました。
これを回避する方法はAutohotkey.exeを右クリックして「管理者として実行」する。
常に管理者として実行したいならAutohotkey.exeを右クリックしてプロパティを開き、「互換性」
タブの一番下にある「管理者としてこのプログラムを実行する」にチェックを付けて「適用」。
ちなみにユーザーアカウント制御(UAC)を無効にするとXPと同様に全てのソフトを常に管理者権限
で実行できますが、セキュリティを著しく低下させる行為なので非推奨です。
>>8 Q6:
A6内で、多分、
>これを回避する方法はAutohotkey.exeを右クリックして「管理者として実行」する。
ー> これを回避する方法はAHKファイル上で右クリックして「管理者として実行」する。
ではないかと
>>10 ご指摘の通り間違ってますね
次スレ建てる方は修正お願いします
autohotkey_lって名称はまだあるの?
autohotkey.comのトップページのdownloadからは_Lつきのファイルをダウンロードできるけれど
そのトップページには_Lつきの情報が書いていない
980を超えてから24時間レスがなければ自動的にdat落ちするからこっちでいいかと
>>14 現行が終わるまで次スレで書かないのが普通。
> Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
> A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
これ本当に何とかしてほしい。この仕様のために、わざわざ
4ボタン多いジョイスティックの購入を余儀なくされているし。
>>8 前スレの969です。早速これをテンプレに入れてくれてありがとうございました
あのあといろいろとやってて気づいたことがあります
それは自動記録で、AutoItなのですが、AutoItのexeファイルをすべて「互換性」で「管理者としてこのプログラムを実行する」としたのですが、なぜか、秀丸のドキュメント上では自動記録が出来ずにメモ帳のドク上では出来るという現象が発生しています
AutoItの自動記録はAu3Record.exeですが、これも管理者として実行するにチェックを入れています。
XPでは問題なく秀丸上で記録できるのですが、Win7では出来ません。
AutoHotKeyにも自動記録用のツールが別途用意されているようですが、わたしはそちらは使う予定はないのでしませんが、もしかしたら、そっちにも同じような影響があるかもしれないと思い書きました
AutoItを使い出してこんなにすばらしいツールがあったのかともっと早く知ってればと思います
GhostTracerで出来ることはもちろんさらに拡張性の高いツールだと思います
なぜかAutoItのスレは相当寂れているのですよね。向こうにこの現象を書きたかったのですが、みんな知らないのかなあ
教えて頂いた方にはほんとに感謝しています。AutoItはexeファイルにコンパイルできます
AutoItとAutoHotKeyを併用すれば100倍力かもしれませんね。はじめたばかりの初心者の一言でした
それと、アプリの種類によってAutoHotKeyが有効に動く場合と動かない場合があるというのはどうしてなのでしょうか
私はXPでVisualC++6.0でプログラミングをしてきましたが、そんな設定したことがないし存在すら考えたこともありませんでした
最新版のVC++ではそんなセキュリティの設定とかあるのでしょうかね
>>18 管理権限の問題はVista以降導入された ユーザーアカウント制御(UAC)の仕業。
対応してないソフトでは設定など記録が保存されない問題がある、あとは自分でググろう。
取り回しが悪すぎるので慣れた人は別のセキュリティーソフトに切り替えている。(性能的にも向上する)
>>17 この問題ですが、自己解決しました
秀丸を起動するとき、秀丸のショートカット上で右クリックで管理者として実行を
選択すると、問題なくAutoItでも記録できました
一般のtxtファイルをダブルクリックしたりして秀丸を起動すると駄目です
またtxtファイル上で右クリックしても管理者として実行する項目は出てきませんね
そのときは秀丸自身のexeファイルの互換性設定のところでチェックをつけておくしかないのは
なんだかなあw
管理者権限でスクリプトを動かすのなら
スクリプトの初めのほうに
if not A_IsAdmin
{
Run *RunAs "%A_ScriptFullPath%" ; Requires v1.0.92.01+
ExitApp
}
を入れてれば管理者権限で動いてくれるみたい
(少なくともUACの確認窓は出てくる)
あとは、autohotkey.exeのショートカットを作って、そのショートカットに対して
互換性タブで管理者権限で実行するように設定するとか。
(コマンドラインまで指定したショートカットで管理者権限つけておくと便利)
全然試してないし、信用できるのかどうかもわからないんだけど指定したプログラムの実行時に
UACを要求されても自動で許可してくれるプログラムってのも今見つけた
http://winaero.com/comment.php?comment.news.152
うーん、異常な速度のクリックの内容を破棄する、ってできないですかね?
ようするにチャタリングをどうにかしたいんです
チャタリングキャンセラー キーボード
チャタリングキャンセラー マウス
のどっちか好きな方でググる
>>23 ahk上でできないと干渉しちゃって役に立たないのです
ahk上でどうにかできれば希望が見えるんですが
出来ないことはないだろうけどチャタしているボタンに関わるもの全てで
スクリプトが面倒くさいことになると思う。
一番手っ取り早いのはチャタリングしているデバイスを買い換える。
安価で済ませたいなら(部品交換が可能なものなら)キーやスイッチだけを交換。
たしか、マウスジェスチャーの中に類似コードを見かけた記憶がある
物理的な原因でチャタリングが起きてるならとっとと新品を買うか修理する
ソフトで誤魔化してもチャタリングは直らないしひどくなるだけ
mouse debounce ahkあたりでググればなんか出てくる
でもahk以外で干渉してるのにahkでは干渉しないと思う理由がわからん
チャタじゃなくて キーリピートな悪寒
任意キー押下でマウスクリックとか、
もしくはタイマーでアプリ側の処理待ち未考慮でガンガンクリックしてるとか
ソース張ってないから何ともいえんがここしばらくの質問内容見るに(同一人物だよね?)
本人が認識してる問題点からが違ってる可能性が高そう
今ちょっとMGLに組み込める慣性スクロール作ってるんですけど、これ再起動したら0x0って出るのはなんで何でしょう?
再起動直後ホイール回転で初回だけ出るんですよね。その後は普通に使えるんですが……
Inertia_wheel(){
global axl,scroll
If(A_Priorhotkey = A_thishotkey && A_TimeSincePriorHotkey<220)
axl++
else{
axl = 0
StringTrimLeft,scroll,A_ThisHotkey,1
send,{%scroll%}
return
}
SetTimer,Slip,20
}
Slip:
If(axl>0)
{
Send,{%scroll% %axl%}
If(axl>2)
axl-=0.2
else
axl-=0.1
}Else
SetTimer,Slip,Off
Return
スクリプトをexe化した場合、GUIのチェックボックス内容を再起動後も保存するのって、
iniとかの外部ファイルを使うしかないですか?
>>30 頭で考えただけだから可能かどうかは分からないし、かなり強引だが、
iniやレジストリ使わず再起動後にも変更内容を反映させる方法として大まかに言うと、
exeと同じフォルダ(じゃなくてもいいが)にソースahkを置いとく。
→exe終了時にソースahkを書き換える。
→書き換えたソースahkをexe化する。
なんてどうだろうか。
ちなみに、Command Line Parameters:
Ahk2Exe.exe /in infile.ahk [/out outfile.exe] [/icon iconfile.ico] [/bin AutoHotkeySC.bin]
>>27があったんで関連質問OKかなと思い投稿。
SciTE4AutoHotkey v3.0.05.01を数日前にアップデートしたんだけど、
検索系が小窓タイプからツールバータイプに変わり、
尚かつウインドウ下に表示されてちょっと使いにくい。
元の小窓タイプに戻す方法、またはウインドウ上に表示する方法ないですかね?
インストするときの選択にclassicとかなんたらあったような気が
関係ないかな
>>31 ウルトラCな方法ですね…
現実的にはやはり外部ファイルを使うのが王道ですかね。
ありがとうございました。
>>33 レスサンキュー。
>インストするときの選択にclassicとかなんたらあったような気が
おそらくそれは、背景色や文字フォントなど予め設定されたスタイルを選ぶものだと思う。
あれからSciTEGlobal.properties見て関係ありそうな設定いじってみたけど進展無しだった。
新仕様に慣れるかバージョン落とすか、今考え中。
>>34 王道もなにもini(ファイル)かレジストリしかないんじゃないかなぁ。(自分はこの他には思いつかない)
>>34 急に別の方法思いついた。(設定を記憶するんじゃないが)
GUIのチェックボックスが幾つ有るのかとかどういうスクリプトなのか知らないけど、
コマンドラインオプション別にチェック有り無しを分けて起動する、なんてどうだろう?
例えばチェックボックスがAとBの二つあるとして、
何も付加せず起動→チェックボックスAB共にチェック無しにして起動
p1(プリセット1)を付加してexe起動→チェックボックスAをチェック有り、チェックボックスBをチェック無しにして起動
p2を付加してexe起動→チェックボックスAをチェック無し、チェックボックスBをチェック有りにして起動
p3を付加してexe起動→チェックボックスAB共にチェック有りにして起動
>>29 俺には何がダメなのかわからん
むしろ便利に使わせていただきますありがとう
>>36 頭柔らかいですねえー
たしかにそれが実現できると色々応用聞いてオモシロそうですね
>>30 exeのAlternate Data Streamに格納するとか
素直にiniに書いておいたほうがiniいじりだけで問題解決することもあるだろうしそのほうがよくないか?
てかそもそもexe化のメリットが俺よくわかんない。ポータブル化ならahk本体ごと持ちあるけばいいんじゃないかなと思うし
やったことないから出来るかわからんが、自分のexeファイルをバイナリでオープンして
一番最後に付け加えておくとか
起動時にそこを読み込んで、終了時にそこを書き換える
exeの最後ならなんか付け加えても動作には影響ないんじゃね
やったことないからわかんねえwww
Autohotkey.ahkしか使わないならそれでいいかもしれんけど
exe化したいってことは独立系ソフトとして切り離して使いたいってことでしょ
そういうのを毎回autohotkey.exe hoge.ahkとか面倒くさくね?コマンドライン引数とかあると更に厄介
他人に配布するならexe単体のほうが身軽だし
U64環境でANSI版時代の古AHK使いたい場合とかでも
A32.exe指定してahk2exeで固めてしまえば互換性で悩まなくて済む
考えられるシチュエーションはいくらでもあると思うんだが
なんでわざわざexe化わかんないとか言いたいのかわかんない
設定関係はiniにしとけには同意、
これはahkの場合でもスクリプト内部を弄らなくて済むようになるから有効だと思う
42は>40へのレスね
スクリプト自身のファイル名書き換えるとか
「なんでiniじゃダメなの?」って最初に聞くべきだったよこれ
その理由次第で解決法も変わってくるかもしれないし
「何となく外部ファイル作りたくない」とかだったら回答する価値もない
LButton::
if( xxx )
{
動作
}
else
{
Send, {LButton}
}
というプログラムを作りました。で、xxx以外のときは、通常の動作をすると思ったら駄目でした
たとえば、ウインドウのタイトルを左クリックで押した状態で動かすとかこのプログラムでは動きません
多分、このプログラムでは左クリックを押して放すところまでをやってしまうからなのでしょう
解決策はありませんか
WEBで探しているのですが、なかなかマウス動作に関しては見つかりません
たとえば、
LButton Down:: とか
LButton Up::
みたいなことは出来ませんか
>>46 例えばこういう風に書けば希望通りに動作はするけど、左ボタンの動作をカスタマイズしようと
すると他のアプリの左クリック割り当てと競合して別問題が起きる(希望通りに動作しない)。
そしてその問題を回避するのに再び試行錯誤してスクリプトがごちゃごちゃになってかなり面倒くさいことになる
なので左ボタン以外に割り当てたほうがいい。
中ボタンや(5ボタンマウスなら)xbutton1 または xbutton2 に割り当てることをオススメする。
if ( xxx )
{
動作
} else {
click, left, down
while getkeystate("lbutton", "P")
sleep, 10
click, left, up
}
if( xxx )がどんな条件なのか知らんけど#Ifで分岐できるんなら
#If ( xxx )
LButton::
動作
Return
#If
でいいんじゃないの?
>>48 待つだけにWhileループを使うのは負荷かかるだけだぞ。
>>47 ありがとうございました
LButton::
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
xxx
return
このようなプログラムを作り、xxxのところでしたいことを書けばLButtonUpのときに動くようになるだろうと思ってやってみたら、新たな問題に直面しました
上記でxxxのない、単純な
LButton::
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
return
だけのプログラムでやってみたところ、Win7ではうまくウインドウを動かすことが出来たのですが
WinXPで全く同じプログラムを動かしてみたら、ウインドウを動かすことが出来ません。
我が家ではパソコン2台あって1台はセキュリティを考えWin7にしましたがもう1台はXPのままでこちらは家庭内LANのみの接続でWEBやメール等は全く使わなくしています
で、XPとWin7で動きが違いますよ。なんじゃいな
>>49 マウスの位置がある範囲内のときという条件です
やっぱりWin7ではこの方法で希望の動作が出来そうなのですが、WinXPでは駄目ですねえ
なんでかな
左クリックだとデスクトップ上にあるいろいろなウインドウを動かしたり出来なくなるので、右クリックで代用しますか
要するにクリック押下した状態で動かすってことが出来なくなるので、右クリックなら被害は少ないですからね
今日はここまでにします。教えてくださった方、ありがとうございました
::の左側にマウスダウン、マウスアップってのをずっと探していて見つけられませんでした
>>53 ありがとうございました。相対座標でも出来ますか
それについては、また今後やってみますね
自分は極力
>>49のいう、
#IF 関数_xxx()
LButton::
動作
return
#If
関数_xxx(){
if (条件満たす){
return true ;または、return 1
}else{
return false ;または、return 0
}
}
てな感じにしてる。
見た目スッキリするし、関数にしとけば汎用的に使えるから。
ま、自分の好きなようにすればいいんだけどね。
余計なお世話でした。
>>53 あ、それと、51の単純スクリプトでは
#UseHook
をつけています
試しに仮想環境のXPで動作させたが左右クリックどちらも問題なし
他の原因じゃない?
#UseHook
RButton:: ;右クリック
Send, {LButton Down}
KeyWait, RButton ;右クリック
Send, {LButton Up}
return
>>50 スリープ入れてるんで負荷は高くないですよ
負荷云々もあるけど、DownしてからUpまで自前スクリプトでやるとスレッドひとつ消費。
イベント起きたときにWinから通知してもらう方がスマート。
ただ、人によっては複数イベントになって可読性が落ちると思う人もいるかもしれない。
また、#If の条件が変わってうまく Up が拾えなくなることもありうる
一行目以外どういうことだかわからん
すこしサンプル書いてみてよ
マウス キーボード 共有 でググれば同機能のソフトは出てくるよ、ShareMouseおすすめ
コマンドラインだがahkスクリプトに直接ファイルD&Dだとスペース分断されるな、めんどい
Loop %0%
MsgBox, %A_Index%
test.ahkにエクスプローラから "c:\hoge\ho ga.txt" を D&D → "c:\hoge\ho" と "ga.txt" に分断
test.exeにエクスプローラから "c:\hoge\ho ga.txt" を D&D → "c:\hoge\ho ga.txt"
プロンプトで >start test.ahk "c:\hoge\ho ga.txt" → "c:\hoge\ho ga.txt"
ショートカット "autohotkey.exe test.ahk" を作ってD&D → "c:\hoge\ho ga.txt"
XP & ANSI時代はうまくできてたような気がしたけど気のせいかな
win8.1 x64 / AHK v1.1.14.04 U64
そのどこドアで他のPCにも同じようにahkは入ってるの?
たとえば1PCのなかにahk常駐してて、そのスクリプトが走ってても2PC目でahk走ってなかったらそりゃ動かないと思うけど
今リモートでほかのPCで遠隔側でもahk走らせたら遠隔操作上でもちゃんと動いたし
それとLbutton::のとこ
#USEHOOK
~Lbuttonか
~$Lbuttonにした方がいいんじゃね?
>>65 そっちの方がいいね
毎度~$の存在を忘れてしまうのをどうにかしないとw
>>66 d
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"NtfsDisable8dot3NameCreation"=dword:00000000
で8.3有効
PC再起動後に作ったファイルは "c:\hoge\ho~1.txt" なショートファイル名で取れました
ショート名付いてない既存ファイルは依然ちぎれたままだけど
既存ファイルのショート名作成はファイルコピーとかで一旦ファイル作り直しするしかないのかな
>>64 今日は簡単に
教えて頂いてありがとうございました
ShareMouseさっそくDLして使ってみようとしたのですが、私はパソコン2台モニタ3台なので最初少しだけ使えた後、フリーでは使えなくなってしまいました
なので、Mouse without Borders(MWBと略)をインストしてみましたよ
今までのどこドアでは、クリップボードの共有とかキャプチャー画像の共有が出来なかったのでこれは便利です。ところで話は戻って、下記のスクリプトを作って試してみました
ーーーーここからーーー
#UseHook
LButton::
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
MsgBox, aa
return
t::
Click
return
ーーーここまでーーー
パソコンA(Win7)でのみこのAHKを実行するとA上ではちゃんと動きます
で、AのみでこのAHKを実行した状態で、パソコンB(XP)で、
左マウスダウン → 動かす → 左マウスアップ
とするとアップしたときにB上ではなく、A上にMsgBoxが出てきました
パソコンB(XP)のみでこのAHKを実行した状態でB上で
左マウスダウン → 動かす → 左マウスアップ
をしようとすると、ダウンした瞬間にMsgBoxが出てきます
Aでは何も起きません
この症状は、MWBでもどこドアでも同じでした。サーバーはWin7、クライアントがXPです
あとはまた明日
if "%PROCESSOR_ARCHITECTURE%" == "x86" (
if "%PROCESSOR_ARCHITEW6432%" == "AMD64" (
start /b %~dp0..\AutoHotkeyU64.exe %*
) else (
start /b %~dp0..\AutoHotkeyU32.exe %*
)
) else (
start /b %~dp0..\AutoHotkeyU64.exe %*
)
バッチファイルで以上のようにして32bit、64bitで違う実行ファイルを起動させています
今はホットキーで上のバッチファイルを経由して実行しているのですが、これをAutohotkey上で関数にして他にも使いやすくしたいのですがどのようにすればよいでしょうか?
processrun("32bitで走らせたいパス","64bitではしらせたいパス")
関数
processrun("pass32","pass64"){
If(A_Is64bitOS = 0){
run,%pass32%
}else{
run,%pass64%
}
}
1つずつでいいならこんな感じじゃねーだろうか
TargetString := Target[n]
IfInString, TargetString, %SearchString%
と
if RegExMatch(Target[n], SearchString)
は(全く)同じ動作をすると考えていいですか?
始めは前者で記述してたんですが、
なるべく余計な変数を使いたくないのと、
行数も少なくなる方が良いと思ったのです。
ならないよ、SearchStringの中に\などの正規表現解釈文字が含まれてると破綻する
単純に文字列比較したいなら Instr()使うといい
>>72 要するに
ターゲットの全文を持ってきて変数にぶち込んで必要な形にトリムする
のと
ターゲットを部分検索する
ってことだよな?
同じ結果が得られると思うよ。タイトルマッチモードが他に作用しない限りは
>>72 Instr()の存在を忘れていました。
>>73 なるほど、分かりました。
SearchString内容は単純な文字列なので、
わざわざRegExMatch()使う必要ないようです。
今回はInstr()を採用します。
>>72>>74 ありがとうございました。
>>75 訂正です。リンク先がめちゃくちゃなのでもう一度書き直します。
>>73 Instr()の存在を忘れていました。
>>74 なるほど、分かりました。
SearchString内容は単純な文字列なので、
わざわざRegExMatch()使う必要ないようです。
今回はInstr()を採用します。
>>73-74 ありがとうございました。
質問です
IEとChromeのみマウスジェスチャを有効にしたいのですがうまくいきません
SetTitleMatchMode Regex
#ifWinActive ahk_class Chrome_WidgetWin_1|IEFrame
{
Send, !{Left}
}
return
#ifWinActive
としたんですがどこか間違っているのでしょうか?
宜しくお願い致します
>>77 #IfWinActiveの使い方がおかしい
その書き方じゃ、ホットキーも指定せずいきなり{から書き始めてることになる
#IfWinActive ahk_class 〜
(ジェスチャ)::Send, !{Left}
#IfWinActive
こんな風に書く
特定のホットキーラベルの中身を書いてるんだとしたら#は要らない
>>78 ありがとうございます
やってみたんですがエラー出たりしてうまくいきません
IfWinActive ahk_class Chrome_WidgetWin_1
←::Send, !{Left}
IfWinActive
return
こんな風に書いたんですが駄目でした
目的としてはChromeとIEで戻る(Alt+←)を使いたいです
宜しくお願い致します
最後が ] になってるや } に変更しといて。
82 :
名無しさん@お腹いっぱい。:2014/05/05(月) 21:45:00.82 ID:Q352F66l0
チマチマせずにMGL使えば良くない?と思った
ああ、前レスを読んでなかった、マウスジェスチャーでやりたいのか
>>82のいうとおりMGL使ったほうがいい。
自分で一から作ろうなんて無謀なことは考えないほうがいい。
>>71 ありがとうございます
A_Is64bitOSなんて組み込み変数があったのですね、AutoHotkeyJpで見つからなかったのでないと思っていました
呼び出しを以下のようにしたらとりあえず希望のとおりに動きました
processrun(A_ScriptDir . "32bit相対パス",A_ScriptDir . "64bit相対パス")
""の中に%A_ScriptDir%だと動かなかったので、式のところを見てやったのですが、文字列をつなげるのは上のようにスペースドットスペースという形式でいいのでしょうか?
わかりました
MouseGestureLでやってみます
ありがとうございました!
foo = あいうえお
bar = かきくけこ
これを二重引用符で囲って間に半角スペースを入れて連結させるとき
baz = "%foo%"
baz = %baz% "%bar%"
または
baz := """" foo """"
baz .= " """ bar """"
どっちのやり方が好き?
実際の用途は受けを取った引数を別のアプリに渡して起動させるランチャー用に考えてるんだけど
"""" ←これ嫌い
なるべくChr(0x22)とか使う
文字コードよく分かんね
>>88 まーね、不格好だよね
Loop, %0% {
Args .= (A_Index = 1) ? Chr(34) %A_Index% Chr(34) : A_Space Chr(34) %A_Index% Chr(34)
}
じゃあこれにしようかな
> 905 名前:名無しさん@お腹いっぱい。:2014/04/04(金) 18:25:26.58 ID:EmtUIrig0
> Quote := """"
> var := Quote . "hoge" . Quote
>
> 引用符の扱いはこんな感じでやってる
Chr(0x22)よりこっちのがいいな
俺はNotepad++のシンタックスハイライトで読みやすくなるから変数名を「A_Quote」にしてるけど
個人的に「=」は好きじゃないので「.」で結合する
式がシンプルなら """" を使うけど、複雑になるなら
>>91 かな
Chr() は可読性が低いのであまり使いたくない
エディタの設定で""を強調表示して使ってるわ
複雑になるとどうやってもわかりにくいけどね
Chr()使うなら中身は16進で指定だな、文字コードの10進表記はいまいち気持ち悪い
>>84 スペースドットスペースでもいいし ドット無しでスペース一個でもおk
exe化する時、バージョン情報がAHKのバージョンになりますが、
任意のバージョン番号を与えることって出来ますか?
>>94 Resource Hackerで変更する
【質問】
Numpad0 Up::Send, {Numpad0}
Numpad0 & Numpad3::処理
このように「Numpad0」を修飾キーにしてるため、テンキー0のキーリピートが効かなくない
キーリピート出来るようにするにはどうすればいいですか?
>>95の質問ですけど、誤爆が激しくなりそうなので質問を取り下げます(メインキーの0使い増すんで)
あと、どうでもいいけど、「キーリピートが効かなくない」は「キーリピートが効かない」の間違いでした
とにかく、スレ汚し澄みませんでした
前スレ
>>952ですが、悪化したようです
400個ほどのファイルをリネームしようとしたらパソコンがフリーズしました……
>>96 ていうかそれ、アップローダーのNewOSMで全部解決してる気が……
ウィンドウタイトルバーのクラス的なものを取得する方法ってなかったですかね?
具体的にはタイトルバー上で右クリックしたりミドルクリックすることでアクションを発生できるような。
>>99 超簡単な方法はマウスジェスチャーLにお任せ
一応は指定できるけどクリック関係ならそれが一番手っ取り早い
指定はできるはずだがやり方は忘れた
102 :
99:2014/05/08(木) 13:18:38.89 ID:U9WEUh+g0
>>95に関連する(逆の?)質問なんすけど…
>>95を例にして説明すると、
長押しでキーリピートしないのは良いんだけど、長押しからリリースした瞬間「0」が1個入力されてしまうのは困る。
修飾キーとして使おうと思って「0」キー押したが暫く考えてやっぱり止めた…という時に「0」が入力されないようにしたい。
こんな場合どう書けば良いの?
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
Return
}else{
Send, {Numpad0}
}
Return
としても「0」が入力されてしまい、だめだったです。
>>103 スクリプトの実行ログ見れば分かると思うが、キーリピートが最後に実行されている。
リピート止めていないのが原因。
それとは別に、フックを使わないとSendにも反応して無限ループする。ダメな例:Numpad0::Send,{Numpad0}
#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
KeyWait, %A_ThisHotKey%
Return
}else{
Send,{Numpad0}
}
Return
ていうか修飾キーとして&使っちゃうと元のキーとしての機能が失われるんよ。それはAHKの仕様
だからGetkeystateで分岐するほうが問題が少ない。
Numpad0の機能は殺して、Numpad0 upでsend,0するのは正しいけど、こうしないとダメ
Numpad0::
keywait,Numpad0
return
Numpad0 up::
if{flag==1){
flag:=0
}else{
send,{Numpad0}
}
Numpad0+Numpad3で処理をさせたいなら
Numpad3::
if (getkeystate("numpad0","p")){
flag:=1
処理
}else{
send,{Numpad3}
}
でやるべき。
&使うのはもともと修飾キーだったwinやaltやctrlやshiftのほうがいいぞ
>>104 レスありがとう。
>>104単独ではうまく行くのですが、
>>103の目的が達成されません。
#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel = 1) {
KeyWait, %A_ThisHotKey%
Return
}else{
Send,{Numpad0}
}
Return
;例として[Numpad0]+[Numpad3]で「a」を送る
Numpad0 & Numpad3::Send, a
こうすると長押しでも「0」が送られます。
なかなか難しいすね。
てかうpろだのNewOSM落として改造してみては?
Numpad0::Hotkey(1,0)
Numpad0 up::DefKeyShot("{Blind}{Numpad0}")
Numpad3::("{blind}{Numpad3}","処理ラベル")
処理ラベル:
処理
return
とか
>>105 レスありがとう。
修飾キー以外もいじる必要あって何かかなり複雑になるみたいすね。
>>104-105 素直に普通の修飾キー使うか、
長押しでキー送られても問題ない状況でこういう修飾キー使おうと思います。
ちがった。こうか
ちょっと関数分かりにくいなコレ
Numpad0::Hotkey(1,1)
Numpad0 up::DefKeyShot("{Blind}{Numpad0}")
Numpad3::Keypush(,"aaa")
aaa:
msgbox,A
return
>>107 参考にさせてもらいます。
ありがとう。
>>ID:i7jGPQu60
何が聞きたいのかハッキリしてほしいな、コンビネーションキーの事も聞いていたのか。
普段使わないF13等のキー以外はコンビネーションキーの機能で割り当てない方がいい。
#Ifを使えばキー機能無効化せずに割り当てできる。
#UseHook
Numpad0::
KeyWait, %A_ThisHotKey%, T0.5
If (ErrorLevel) {
KeyWait, %A_ThisHotKey%
}else{
Send,{Numpad0}
}
Return
#If GetKeyState("Numpad0","P")
Numpad3::Send, a
#If
>>111 >>103で
>>95を例に質問したつもりだったんですけど、分かり難かったみたいでスンマセン。
要は、修飾キーにしたテンキー0を押してそのまま何キー(テンキー3)も押さないで
暫くしてテンキー0を放した時に「0」が送られないようにしたいと言う質問でした。
>>111のコードで目的が達成できたと思います。
ありがとう。
>>109 作った人だけどたしかに区切り多くて難しいカモ
うーんどうしよう……なんかいい方法ないかな
タスクトレイでNumlockとかの状態が見れるスクリプトってどうすればいいんだろう
わざわざキーボードのランプ見たくない
>>115 Numlockの状態はGetKeyStateで取得できる
タイマー監視して状態変化時にトレイアイコン変更すれば一応目的は達成できる
>>115 タイマーでキー状態を取得してアイコン切り替えるだけ、簡単だから自力で作れ。
#NoEnv
って今のPCだとあんま体感できんよね
それでもプラシーボ効果で軽くなった気がして付け加えてしまう
NumLock::
If(GetKeyState("NumLock","T") == 0)
{
SetNumLockState, on
Menu,Tray,icon,icon0
}else{
SetNumLockState, off
Menu,Tray,icon,icon1
}
keywait,%A_ThisHotkey%
return
タイマーすら必要なかったありがとう
教えて下さい
質問文が長いので分割させていただきます
array1 := Object()
array2 := Object()
array1[1] := "hoge"
array2[1, 1] := ["あああ", "いいい", "ううう"]
array2[1, 2] := ["かかか", "ききき", "くくく"]
array1[2] := "hage"
array2[2, 1] := ["わわわ", "ををを", "んんん"]
(実際は更に続く)
上のよう設定としてにスクリプト内に直に書いてた物を
iniファイルから読み込むようにしようかと改造中なんですが
行き詰まってしまいました
次のレスへ
>>120からの続き
----- Config.ini -----
[hoge]
1=あああ, いいい, ううう
2=かかか, ききき, くくく
[hage]
1=わわわ, ををを, んんん
-----------------------
次のレスへ
>>121からの続き
array1 := Object()
array2 := Object()
IniRead, Section, %A_ScriptDir%\Config.ini
Loop, Parse, Section, `n
{
n1 := A_Index
array1[n1] := A_LoopField
Loop,
{
n2 := A_Index
IniRead, key, %A_ScriptDir%\Config.ini, % array1[n1], %n2%
array2[n1, n2] := key
if (key = "ERROR") {
break
}
MsgBox, % n1 "-" n2 "`n" key "`n" array2[n1, n2] ;(1)
Loop, Parse, key, `,
{
array2[n1, n2, A_Index] := A_LoopField ;(2)
}
}
}
MsgBox, % array2[1, 1, 1] ;(3)
(1)でarray2[n1, n2]には確実にデータが入ってるのですが
(2)でarray2[n1, n2, A_Index]にデータが入らないらしく
(3)で見ると空っぽなのです(「あああ」と表示して欲しい)
何処が間違ってますか?
>>122の一部修正します
Loop, Parse, key, `,
↓
Loop, Parse, key, `,, %A_Space%
画像ファイルのサイズ(ピクセル)を取得するにはどうしたらいいですか?
>>120-123 array2[n1, n2] := key
の時点で array2[n1, n2] が文字列になっているのが原因じゃないかな
その行を消したらきちんと代入されたよ
>>125 120-123です
期待通りの結果になりました
これで設定をiniファイルに移すことが出来ます
ありがとうございました
>>126 勝手にまとめ
obj1 := Object()
MsgBox, % obj1[1] := "あ" ;あ
MsgBox, % obj1[1, 1] := "い" ;失敗
MsgBox, % obj1[1, 1, 1] := "う" ;失敗
obj2 := Object()
MsgBox, % obj2[1, 1, 1] := "う" ;う
MsgBox, % obj2[1, 1] := "い" ;い
MsgBox, % obj2[1] := "あ" ;あ
続き
MsgBox, % obj2[1, 1, 1] ;失敗
MsgBox, % obj2[1, 1] ;失敗
MsgBox, % obj2[1] ;あ
>>124 画像の高さ/幅取得
裏でGUI作成、サイズ取得して破棄。
Gui, Add, Picture , vPID, パス/ファイル名
GuiControlGet, Var, Pos, PID
MsgBox % VarW "`n" VarH
Gui, Destroy
Return
>>129 ありがとうございます
こんな手があったとは思いもよりませんでした!
Gui, Add, DropDownList
で、1-100くらいまでの数字を表示させたいんですが、
1つずつ打っていくしか手はないのでしょうか?
正規表現もここでは使えないぽくて…
Loopで回せばいいんちゃう?
>>118 #NoEnvはメモリ効率向上というより誤爆よけだと思うけど
関数やローカル変数がなかった頃は よくpath、tmpあたりのグルーバル変数をうっかり作って
おかしな結果になってたわ
キーボードショートカットで、
Windowsの普通のMDIアプリケーションの親ウィンドウをスクロールさせたいのですが可能でしょうか?
たいていのMDIアプリケーションって、マウスのスクロールホイールに反応しませんよね?
>>135 他の人でも試せるように具体的にどれのことを言ってるのか書いてほしい。
>>136 こういうタイプのアプリです(これはテキストエディタ)
http://www.vector.co.jp/soft/dl/win95/writing/se234397.html 親ウィンドウがあり、新規ドキュメントで、親ウィンドウの中に子ウィンドウをつくります
子ウィンドウが親ウィンドウをはみでると、親ウィンドウにスクロールバーがでます
私がやりたいのは、この親ウィンドウのスクロールバーを
ショートカットキーや、特定のキー+マウスホイール上下左右に動かしたいんです
私が実際にやりたいのは市販の音楽ソフトなのでみなさま試せないので
シンプルな昔ながらのMDI型のテキストエディタを例として挙げさせていただきました
Windows7や8でも動きます。
リダイレクトホイールの要領で行けると思う
MDIの背景領域のクラスを取得して
WM_MOUSEWHELL(0x20A, 0x20E)
WM_HSCROLL(0x114) /WM_VSCROLL(0x115)
あたりをSendMessageで投げる
>>137 親 Send、ControlSend ahk_parent有無
親、子 対象のClass調べて SendMessage
あとは動かすキー操作送るだけ。
もちろん動くか動かないかはアプリの仕様次第。
>>138 >>139 ありがとうございます!
でも
>>137のアプリでも自分が試したいアプリでも、うごかないっす。。。orz
とりあえず
>>137のアプリの親ウィンドウのスクロールバーをなんとか動かせないでしょうか?
試し方ですが、
>>137のアプリで、ファイル>新規作成 をしてドキュメント(子ウィンドウ)を作って
親ウィンドウからはみだすように配置すると、親ウィンドウにスクロールバーが出ます。
2つ新規ドキュメントを作って下と右にはみだすように配置すれば親ウィンドウの右と下にスクロールバーがでます。
そのスクロールバーを動かしたいのです。
キー送信しても子ウィンドウのスクロールバーしか動かないのです。。。。
MDI親ウィンドウの外側のスクロールバーは、PgUpやPgDnやマウスのスクロールホイールなどでは動かないのですが、それでもAHKで動かすことはできるのでしょうか?
スクロールバーにマウスクリック送信とかの裏技的やりかたをしないと厳しいでしょうか?
>>140 スクロールバーを特定できないなら
座標か画像認証で▲まで瞬間移動してクリック送信
スマートじゃないから最終手段だが・・・。
>141
WheelScrollの最新版ていつもどのあたりで入手できるんでしょうか?
>>143 スレ内でホイールやスクロール系の質問が来た時に保存期間の長いあぷろだに適当に上げてます
前は IME.ahkとかと一緒の @wikiのftpサーバーに置いてたんだけど
ハッキング騒ぎでウィルス怖い書き込みがあったので
>114にある通りMouseGestureLにはGesture組込み用のWheelAccel改が同梱されてるっぽく今はそっちが主流な感じかな
一応 WheelScrollにもWheelAccelの機能は盛込み済だけどMouseGestureLとの連携は考慮してないもんで
寝落ち用に作っているのだけれど
A_TimeIdlePhysicalでタイマーセットして
Run, %ComSpec% /c powercfg -x -monitor-timeout-ac 1
これで電源オプションのディスプレイの電源を切るまでの時間を1分に変更して
スクリプトが終了するときに元の間隔に戻すという感じにしてて
不意に電源がオンになっても1分で切れるようにまではできたけど
これをなんとか1分未満、秒単位に出来る方法はないかな
>144 >145
ありがとう、参考になりました!
>>146 SendMessage, 0x112, 0xF170, 2,, Program Manager ; 0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER.
ちゃうねん
電源の状態を確認してオンだったらオフる動作をしたいねん
画面の縦が狭いノートをずっと使っているんだが、
画面の一番下をクリックするとタスクバーが消える/表示をトグルする単純なスクリプト作ったがとても便利
もっとはやくつくればよかったw
タスクバーを自動で隠すのとどう違うの?
自動で隠すと、出てほしくない時に出てきたりするからすごい邪魔なときある
そもそもタスクバーがなくなったら困らないかという気もしなくもない俺のタスクトレイはインジケーターまみれ
さいしょAHKで試行錯誤してたけど
俺は「タスクバーをほかのウィンドウの手前に表示する」のチェックを外すだけで解決した
うちは横置き&小さいタスクバーボタン
アイコンだけじゃなくウィンドウタイトルも表示されるので分かりやすい
156 :
名無しさん@お腹いっぱい。:2014/05/14(水) 13:40:45.04 ID:ryadNrAh0
どうしてもやり方が分からないので知りたいのですが。
bmpでボタン作りたいのですがやり方どうすれば良いのでしょう?
別窓では無くイメージとしては アプリ開いている状態で画面の一部にbmpを上乗せして(濃度%いじれると良い)
クリックするとsend遅れたりするけどフォーカスは下のアプリの方(使っているアプリ)のままって感じですね。
bmp表示する方法は分かってもボタン化が分からないんですよね・・・
マウスオーバーでgui時に判別が基本だろうけど
ていうかそういうのってもうビジュアルベーシックとかCのほうが早くねぇか?
159 :
名無しさん@お腹いっぱい。:2014/05/14(水) 15:48:30.51 ID:ryadNrAh0
どちらも疎いので・・・何とか分かる範囲でコレで行けるならこれでやれればなと言うのも有りまして。
ああ、ひょっとして、F1からF12のことではなくて、キーボードの左手前にあるFnキーのことですか
なんかありましたねえ
Fn(ファンクション)キーってわざわざファンクションとかって書いてあるし、なんかややこしい
もう少しちゃんと書いてほしいです
でもよくわかりませんが
1.人がキーを押す
2.キーボードが押されたキーの情報をパソコンに送信する
3.パソコン(Windows)が受け取る
4.Windowsが対象ウィンドウにキー情報を送る
5.AutoHotkeyが暗躍する
6.ウィンドウがキー情報を受け取って反応する
本来この順でキーを押したことがウィンドウに通知されますが、
2でキーボードが「Fnキー+○キーは×キーにする」という処理を行います。
Windowsが受け取るのは×キーのキー情報だけでFnキーや○キーのキー情報はWindowsには届きません
と書いてあります。では、この処理後の×キーのキー情報で動作を行うことって出来ないのかな
まあ、Fnキーは使うことはないと思うので余計なお世話かもしれませんが
gui,add,pictureの縮小拡大でアルゴリズムの指定はできないの?
サイズ変えると糞きったなくなるんだけど
>>159 ラベル指定すると画像クリックしたときの動作を指定できるけど
それじゃ駄目なのけ
>>162 できると思うよ
トリガーキーのトグル動作でキーリマップを切り換えるスクリプト作成中なんですが、
リマップAからリマップBにした時、何らかの視覚情報で知らせられたらと思っています。
一応、リマップBにした時にタスクトレイにアイコンを表示するだけのスクリプトを走らせ、
リマップAに戻した時そのスクリプトを終了する、というのは出来たのですが、
それよりもCaretの色または太さを変える方がより視認性が高いのではないかと思い始めました。
そこで質問です。
Caretの色または太さはどうすれば変更できるんでしょうか?
また、この他にアイデア有りましたら教えていただけないでしょうか。
tooltipで表示するのがいいんでない?
俺は何かを切り替える系での告知はtooltipでやってる
>>165 なまずIME あたりが参考になるかも
中見てないけどAHKにはキャレットをカスタマイズする機能は(たぶん)ないので
GUIでキャレット位置に貼り付けてるんじゃないかな
>>166-167 回答ありがとうがざいました。
>キャレットをカスタマイズする機能は(たぶん)ないので
そうですか、わかりました。
なまずIMEのスクリプト流し読みですが、ちょっと見かなり複雑な処理してる見たいですね。
お二人の意見を参考にスクリプト書いてみます。
>>156 よくわらんがGui,Add,Buttonの上に Gui,Add,Picureでbmp貼って
GuiControlでbmpをDisableにしとけばいいんちゃう?
透明指定は WinSet,Trans とか WinSet,TransColor あたり
ボタンの形のbmp使うからButtonオブジェクトいらんってことなら
OnMessage() でWM_LBUTTONDOWNイベント発生させる
#ClipboardTimeoutの値を一つの処理(スレッド?)でのみ変更する方法ってありますか?
171 :
168:2014/05/14(水) 23:44:02.72 ID:fDgDPOOw0
以下のようにしてCaretの位置へToolTip表示させれるようになったのですが、
秀丸エディタではCaretの位置へToolTip表示させることが出来ませんでした。(ウインドウ枠の所に表示される)
秀丸エディタでは無理なんですかね?
それから、ToolTipを半透明で表示させることって出来ますか?
;keyLayout_ChangeはリマップBになったかのフラグ
Indicator(keyLayout_Change) {
if (keyLayout_Change) {
SetTimer, Indicator_ToolTip, 1000
}else{
SetTimer, Indicator_ToolTip, Off
ToolTip,
}
}
Indicator_ToolTip:
CoordMode, ToolTip, Relative
CoordMode, Caret, Relative
ToolTip, ., A_CaretX - 10, A_CaretY - 16
CoordMode, ToolTip, Screen
CoordMode, Caret, Screen
return
172 :
名無しさん@お腹いっぱい。:2014/05/15(木) 00:56:11.64 ID:gvWGefzm0
>>164,169
ん!
何となく分かった気がしますありがとう御座います。
頑張ってみます
>>162 > 処理後の×キーのキー情報で動作を行う
はできるけど、もとの×キーの動作も変えてしまう
Fn単独の動作を変更できたら便利だけど、AHKではできないって意味だな
FnキーのFnがfunctionだから(ファンクション)と書かれてるのも間違ってないな
ということで君がおばかさんだったってことだ
174 :
168:2014/05/15(木) 04:19:57.92 ID:2vMbrIyM0
以下のように改良して秀丸エディタでも確認できるようになりました。
;keyLayout_ChangeはリマップBになったかのフラグ
Indicator(keyLayout_Change) {
if (keyLayout_Change) {
SetTimer, Indicator_ToolTip, 500
}else{
SetTimer, Indicator_ToolTip, Off
ToolTip,
}
}
;ウインドウ枠左端に縦長のToolTipを表示(ウインドウに追従し、ウインドウサイズによりToolTip縦サイズを調整する)
Indicator_ToolTip:
WinGetPos, X, Y, Width, Height, A
c := Round(Height/22)
Loop, %c% {
str .= "`n"
}
ToolTip, % str, X, Y + Round(Height/5)
str := ""
return
昔はTooltipとかキャレットとかやったけど今はSoundBeep使って音階で識別してる
というのもトグル状態の確認が必要で情報表示するけど、
うざくて消したくなるから一定時間で消すような仕込みをした
でも一定時間操作してないと状態がどうなってるかよく分からなくて
再度キー押したりして本末転倒になった
今はやりたい操作は指連打と音で判断するようにしてる
*vk1Dsc07B::KeyCounter()
KeyCounter() {
global $KeyMap
static keyCount
ListLines, Off
$KeyMap:=keyCount:=(A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) ? keyCount+1 : 1
SoundBeep, $KeyMap * 400, 10
KeyWait, % RegExReplace(A_ThisHotkey, "^\W+", "")
$KeyMap:=0
}
#if ($KeyMap = 1) ;
h::Left
j::Down
k::Up
l::Right
#If ($KeyMap = 2)
; Home, End, PgUp, PgDn とか
#If ($KeyMap = 3)
; WinMoveとか
このように書けば問題ないのですが、表示名が「TestToggle&Check」じゃなく、「TestToggle Check」と「半角空白」を使いたいのです
Menu, tray, add, TestToggle&Check
TestToggle&Check:
Menu, tray, ToggleCheck, TestToggle&Check
Return
でも、ラベルに半角空白含む名前は使えないらしくエラーになります
Menu, tray, add, TestToggle Check
TestToggle Check: ;<<<<<ここでエラーになる
Menu, tray, ToggleCheck, TestToggle Check
Return
何とかメニュー名に「半角空白」使えませんかね?
「全角空白」では間延びしたような見栄えでちょっとよくないです
無理なら諦めます
A_Space
>>178 レスありがとうございます
すいません、どうしても分かりません。
間違ってる所を指摘して下さい
Menu, tray, add, TestToggle%A_Space%Check ;<<<<<ここでエラーになる
TestToggle%A_Space%Check:
Menu, tray, ToggleCheck, TestToggle%A_Space%Check
Return
>>108 ありがとうございます
解決しました
一応そのwikiのサンプルコード使って格闘してたんですが
そのコードに肝心の「Menu, tray, add, MenuItemName, Label」の例が無く
メニュー名=ラベル名になるものと思い込んでいました
MGLスレかどっちか迷ったんだけど、こっちで質問。
キーのリマップスクリプト(ホットキー)を一時的に無効化するのに「Suspend」使うと思うけど、
リマップスクリプトをMGLのプラグインとして使ってると、他プラグインと共にMGLがSuspendしてしまう。
他プラグインとMGLに影響出ないようホットキーのみ一時的に無効化させる方法何か有る?
あ、MGLは再起動させたくないです。
何らかのキー::
if(flag_hotkey <> 1)
flag_hotkey = 1
else
flag_hotkey =
return
#if (flag_hotkey)
〜
ホットキー、
キーリマップ
〜
#if
レスサンクス。
でも、パターン(1)の場合、「#If (flag_hotkey)」は無視されてうまく行かない。
で、パターン(2)のようにすれば問題なく動く。
しかし、「#If (flag_c) && (flag_hotkey)」みたいに一つ一つ書いていくのはつらい。
何か簡単な方法ないものか。
flag_hotkey := 0
flag_a := 1, flag_b := 1, flag_c := 1, flag_d := 1
return
;パターン(1)
#If (flag_hotkey)
#If (flag_a)
a::MsgBox, a
#If (flag_b)
b::MsgBox, b
#If
;パターン(2)
#If (flag_c) && (flag_hotkey)
c::MsgBox, c
#If (flag_d) && (flag_hotkey)
d::MsgBox, d
#If
わかりにくかったかな。例えば以下のようにすると、
ctrl+spaceを押すと#ifで囲まれているホットキーがonになってもう1回押すとoff(サスペンド)
ONOFFスイッチのキーは好きな奴に変えて
^Space::
if(flag_hotkey <> 1)
flag_hotkey = 1
ToolTip, HotKeyON, 1710, 0
else
flag_hotkey =
ToolTip
return
#if (flag_hotkey)
a::Msgbox, a
b::Msgbox, b
c::Msgbox, c
#if
ifのところで{}忘れてたわ
>>185-186 レスサンクス。
何度も申し訳ない。こっちも質問の仕方が悪かったかもしれない。
とりあえず、flag_hotkeyのフラグ切り替えの方法は理解しました。
問題は
>>185の例みたいに、元々のホットキーに条件が付いてない場合はうまくいくが、
#if (flag_hotkey) ;リマップが有効か無効か
a::Msgbox, a
・
・
>>184のパターン(1)ように元々のホットキーに条件が付いてる場合うまくいかない。
#if (flag_hotkey) ;リマップが有効か無効か
#If (flag_a) ;←元々付いてる条件
a::MsgBox, a
・
・
で
>>184のパターン(2)のようにすれば、条件に忠実に動くようになる。
#If (flag_a) && (flag_hotkey)
・
・
でも、一つ一つ「 && (flag_hotkey)」を付け足していくのはつらい。
一つ一つに「 && (flag_hotkey)」を付け足していくのではなく、何か他に簡単な方法はないか…というのが
>>184の質問でした。
#If (flag_a) && (flag_hotkey)←こういう方法しか無いですかね?
俺もMGLかこっちか迷ったんだけどこっちで質問
;選択範囲をコピー
Lclickcopy(){
MouseGetPos, x0,y0 ;クリックした時の座標取得
keywait,Lbutton ;離すのを待つ
MouseGetPos, x1,y1 ;クリックを離した時の座標軸
if (x1-x0 > 5 or x1-x0 < -5 or y1-y0 > 5 or y1-y0 < -5){
clipnow := ClipBoardAll ; save old clipboard
send,^{c}
ClipWait 1, 1
IfEqual ClipBoard,, SetEnv ClipBoard, %clipnow%
return
}
}
こんな関数を作ったんだけどMGLのLbuttonに設定したらエラー吐く。
かといって
~Lbutton::Lclickcopy()
としたらロッカージェスチャのRB_LB__が動いてくれない
八方ふさがりなんだけどどうしよう(´・ω・`)
>>187追加
いわゆる「入れ子?」が#ifでは出来ないって言うことなんかな?
なら、#If (flag_a) && (flag_hotkey)←こういう方法しか無いみたいね。
元々の考えを改めて別の方法捜してみるわ。
>>185-186 お騒がせしました、あありがとう。
せっかく専スレあるんだからあっち使ってあげなよ
>>189 あーそういうことか。
だったら&&で繋げるくらいしかないかな。
代替案としてはサスペンドしたいホットキーだけで別にahkスクリプト作って独立させて
その作ったスクリプトを起動、終了するホットキーを今まで使ってた本体ahkに登録すればいいかもしれない
ホットキーを有効にしたいなら別ahkを起動、サスペンドしたいなら別ahk終了、みたいな感じで
hoge = 1*2/3
このように変数の中に式が文字列で格納されてるのを計算するにはどうやるの?
このあと
:= hoge + 1
などと計算しようとしてもエラーになる
式のように見えて単なる文字列なんで、
「文字列を数式として評価(計算)する」機能はAHKにはない
(なので、文字に数字を足しても計算できないので空白になる)
とはいえ、どうにかする方法は一時ファイルに書き出して実行して結果を得るとか
色々あるけど、面倒なのでその手のが得意なやつにやらせてしまうのが楽
; example
exp = 1*2/3
oScr := ComObjCreate("ScriptControl")
oScr.Language := "JScript"
MsgBox, % exp " = " oScr.Eval(exp)
※ x64だと ScriptControl が無いので、32ビット版(U32かA32)で動かすか、
互換ライブラリ(↓)を使う
http://www.eonet.ne.jp/~gakana/tablacus/scriptcontrol.html?0020
>>194 なるほど
単純にはできないんだね
参考になりました、ありがとう
>>195 hoge = 1*2/3 でなくて hoge := 1*2/3 したら計算できたけど、
こういうことじゃないってんなら無視して構わないよ。
hoge := 1*2/3
hige := hoge + 1
MsgBox, % hige
入力した計算式を取得してそれを元に処理したかったんだ
言葉足らずでごめん
AutoHotkeyで作ったGUIの座標っておかしくない?
たとえばx0 y0 に表示させるとすると縁が画面外にめり込んでズレる
たぶん5pxくらい
199 :
名無しさん@お腹いっぱい。:2014/05/20(火) 16:15:59.92 ID:bG70dH5O0
MGLってLボタンは使えないんですか?
MGLのスレがないのでこっちで聞きます
>>198 タイトルバーと枠線はOSが自動で追加するのでその分ずれる。
設定やOS毎に幅が違うので取得したいならAPI関数使えばいい。
消したいならウィンドウスタイルで指定。
>>201 よくわからないのがGui, +Resizeを設定するとx0 y0が画面のワークエリアぴったりの位置になる
でもリサイズできても空白領域が広がるだけで意味ないからあんまりこのオプションは使いたくないね
dbg(msg)
{
; (なければ)デバッグ表示用のメモ帳を開く
IfWinNotExist AHK_DEBUG ahk_class Notepad
{
Run,notepad
WinWaitActive,無題 - メモ帳
WinSetTitle,AHK_DEBUG
}
; 頭に時刻をつけてデバッグ文字列を表示して改行
ControlSend,,[%A_Now%] %msg%{Enter},AHK_DEBUG ahk_class Notepad
}
a=hello,world
b:=3*10
s=%a% %b%
dbg(s)
標準のMsgBox, OutputDebug, ListVarsは使いづらいので
デバッグ表示用の関数作ってみたんですが表示が遅いのでもうちょっとマシな方法ないですか?
あと
s=%a% %b%
dbg(s)
を1行にまとめて書く方法あったら教えて下さい
>>203 ControlSendではなくControlSetTextを使おう
あと、メモ帳である必要がなければGUI作ってそこへ表示すればいいんじゃないか?
a=hello,world
b:=3*10
dbg(a " " b)
Return
DbgWndGuiClose:
ExitApp
dbg(msg)
{
Gui, DbgWnd:Font, s9, Verdana
Gui, DbgWnd:Add, Edit, w500 h500, [%A_Now%] %msg%`n
Gui, DbgWnd:Show
}
XPのときに、
SoundSet, +1, , mute
で、音量をミュートしてましたが、Wn7になってから
このコマンドが使えなくなりました
やりたいことは、オンオフです。ボリュームの大きさ調整はしなくてもいいです。
Win7ではどうやればいいのでしょうか
206 :
名無しさん@お腹いっぱい。:2014/05/21(水) 15:26:16.65 ID:hJN+7GyD0
SoundSet, +1, , MUTEでできるぞ
AHKのバージョン古いんじゃね?
SendでMuteキーを送る
あれ?ほんとだ。今は出来ますねえ。なんでだろ。この前はできなくてネットずっと探してわからなくて
わざわざ音量ミキサースピーカーのウインドウを立ち上げてそこのミュートボタンを押すみたいなのを作ってやってたのですが
おかしいなあ、すいませんでした
>>208 1.1.10.00 - 2013/05/11
Sound系がWindows Vista以降対応に。
210 :
名無しさん@お腹いっぱい。:2014/05/26(月) 21:26:12.14 ID:91mT5Uy+0
WinGetClass, class, ahk_id %id%
if(class=AAA)
と記述しているんですがif条件が無視されてしまいます
ただ
if class=AAA
と記述すればきちんと判定されます。なぜでしょうか?
() 内は式。よって変数「AAA」を参照してるとみなされる
if(class="AAA")
にすれば下のと同じになる
A_ScriptDirはあるのにA_AhkDirがないのが解せぬ
初手SplitPath,A_AhkPath,,AhkDirは基本だよね
本体の位置が必要になるケースが俺の使い方では思い付かない
A_ScriptDirのA_って何を意味しているの?
absoluteじゃね
さあA_IndexのAは何だ, ハイ制限時間10秒!!
AHKのAだと思ってたわwww
aliasのAだよ
とりあえず区別するためにアルファベットの最初の奴をくっつけただけかと思ってた
冠詞やろ
新2chの方に書き込んでたんですが、何故か回答貰えなくて変だなと思ってたら、こっちに反映しないんですね
ですんで再投稿します
obj[1] := "はげ"
obj[2] := "ひげ"
obj[3] := "ほげ"
(obj[n]には重複する文字列は存在しません・・・というか、重複してobj.Insert()しないよう調べたいのです)
とある時、obj[n]に「ひげ」という文字列が存在するか調べる場合、Loop使うしかないんでしょうか?
Loop, % obj.maxindex()
{
if (obj[A_Index] = "ひげ") {
MsgBox, % A_Index " : " obj[A_Index]
break
}
}
Instr()のように簡単に調べる方法はありませんか?
whileやuntilを使えばもう少し短くはなるかもしれない
>>224.
なるほど・・・いずれにせよループ系コマンドで回すしかないんですね
即答ありがとうございました
^c::の処理中に元々のコピー(Send, ^c)をしたいのですが、そのままだと無限ループになります。
元のキーを実行させる方法はあるでしょうか?
フック使うか、Hotkeyコマンドでsendの直前だけoffにするか かな
あたしにゃフックてのが何なのかさっぱりわからんのだけど
とりあえずなんでもかんでもフックにしといて平気なのかな?
フック使わないほうがいい場合もあるんですかね?
$^c::
>>227 ソフトウェアで送られたキー操作にホットキーが反応するかしないか。
Sendやマウスの付属ツールでのキー操作(ホットキーではなく、KeyWait系の押し下げ上げ判定)に影響が出る場合がある。
ゲームのチート対策でAPIやRegisterHotkey()を使用したら落とされるときの回避策。
判定以外はONでもOFFでも特に変わらない誤差範囲。
もしプログラムが無限ループに入ったとき、ブレークする方法ってありますか
これから失敗したらそうなる可能性のあるソフトを作ろうとしているので事前に知っておきたいです
>>230 Pause ExitApp を任意のホットキーに割り当て
とりあえずタスクマネージャさえ起動できればなんとかなる
233 :
230:2014/05/30(金) 02:33:22.28 ID:hCwc3jJY0
AutoHotKeyに最初からビルトインされている方法はないのですね
どっかのキーにブレイクアプリを作って割り当てるしかないのか
タスクマネージャを使うのならkillのバッチファイルを作って落とす方が楽かもね
今なにげなく、右下のタスクトレイにあるアイコンを右クリックしたら
PauseScriptってのがあったのですが、これをクリックしたら止まりませんか
無限ループになってしまったらそもそもこのアイコンを右クリックもできないくらい
暴走してしまうのかな。でも多分インタープリタで動いてると思うので(コンパイルしてない)
必ずイベント取り込みが入れば大丈夫な気もするのですが
正直やってみるのが一番早いと思う。
んでおかしかったらPCごと再起動でいいじゃん
ああ、そもそもタスクトレイのアイコンを右クリックできるのなら、そのままEXITも出来るはずですよね
AutoHotKeyは疑似スレッドで動いてるという話なので出来るんじゃないかな?
>>235 ですねえ。でもなんか再起動するの抵抗あったので多分みんな一度や二度は経験してるだろうと
思って聞いてみました
Gui, Add, Text, ,フォルダ
Gui, Add, Edit
Gui,Show
↑のようなスクリプトを書いてGUIを表示させた時
Gui,Add,Textで表示させるテキストに「フォルダ」や「パス」などの単語が含まれてると
GUIを表示させるたびにシステム警告音が鳴ってしまうので
(テキスト内容を変更せず)音が鳴らないようにしたいのですがどうすればよいでしょうか?
また、音が鳴ってしまう原因等の情報も教えていただけるとありがたいです
>>238 環境とテスト用のスクリプトを丸ごと書こう。
>>239 OS:WinXP SP3(32bit)
AutoHotkey本体ver:1.1.14.4
スクリプトは上記の3行のみです
>>237 ただの無限ループくらいならタスクトレイからpauseもexitもできるよ
タスクマネージャ云々書いたのはフックやホットキー使ってるスクリプトだと
下手うつとマウスやキーボードでの操作を一切受け付けなくなるようなものも作れちゃうから
>>241 マウスやキーボードでの操作を一切受け付けなくなったらタスクマネージャも使えなくなるんじゃない?
例えば
blockinput, on
msgbox, test
blockinput, off
と書いたスクリプトを実行すると2行目で止まってインプットデバイス(キーボードやマウス)
の操作を受け付けなくなるけど、ctrl+alt+del だけは効くので
XPならタスクマネージャーが起動して操作を受け付けるようになる。
Win7ならルートメニュー画面が開くけど、そこで2回クリックすると反応するようになる。
但し、上記以外でマウスやキーボードの一部キー(ボタン)が押されっぱなしになっていると
一部ウィンドウで操作を受け付けなくなったりするので
uwscでキーコードの1〜511(実際は255まででいいけど念のため511まで)の
どれかが押しっぱなしになってたらupを3回送る。
更にそれを3回ループするようにしてるけどこれで殆ど回復する。
これをマウスジェスチャーとランチャーのどちらでも実行出来るようにしておくと
マウスorキーボードのどちらかの操作しか効かない場合に助かる。
それでも極稀に回復しない場合があるのでそのときはWindowsの再起動。
uwscで回復させている理由は、ahkで似たようなものを作ってたんだけどそれで回復しないことがあり、
試しにuwscのを実行したら回復したので今でも使ってる。
ahkをやり始めた頃に作ったので欠陥があった可能性が高いと思うけど。
両方いっぺんにやっちゃったらアウトかもね
マウスあぼーんでキーボードのみ効くとか、逆の場合とか
Ctrl+Alt+Del だけは効くパターンとが
Busyでむちゃくちゃ反応鈍くなってるがけど一応はキー拾ってるパターンとか
色々やったけど大抵は多少の救いはあるもんだ
リロってなかった
244は>242へのレス
>>240 仮想環境のXPで確認してみたが問題なし再現しない。
スクリプトの多重起動時の ポップアップ+音 の事ではないのなら。
AHKの問題ではなく他のアプリ(セキュリティーソフト系)が特定のワードに反応してるのかも?
セーフモードでテストしてみよう、それで問題が無いなら原因はその他のアプリ。
※XPはサポート終了、OSの更新はお早めに
マウスジェスチャ系のツールやらマウスユーティリティやらAHKやらを組み合わせて使ってるせいで
謎のタイミングでCtrl,Alt,Shift,Winが押しっぱなしになるから困る
MGLにプラグインって形で機能追加することで俺は回避した
249 :
182:2014/06/01(日) 00:29:22.51 ID:0S/bsvos0
MGLのプラグインとして導入してるリマップの有効/無効について一応自己解決した
最終的に初期の頃考えた構想は一部諦めて、
リマップ用スクリプトを別の拡張子に変更(*.ahk ←→ *.bak)
↓
MGLを再起動する
という方式で落ち着いた
ま、力技ではあるけど、自分の場合これが一番無難な方法であった
そこまでしてプラグイン方式にこだわる意味がわからない
再起動してるところをみると情報や変数を他のスクリプトと共有してるから仕方なくとかじゃないっぽいし
マウスカーソルの位置にある(ウィンドウではなく)コントロールを
アクティブにするにはどうすればいいですか?
今は
MouseGetPos,x,y,h,cしてcの文字列で分岐して
Send,{LButton}かSend,{RButton}{ESC}の害の少ない方を送るという
強引なことをやってます
ControlFocus
ウィンドウもアクティブにしたいなら ついでに WinActivate
ありがとうございます
うまくいきました
254 :
名無しさん@お腹いっぱい。:2014/06/01(日) 16:56:22.00 ID:XSDCSJFg0
下記動画再生プレイヤーでホイールシークに左右キーを割り当ててシークをしたいと思っています
http://www.mirillis.jp/products/splashpro とりあえず実験で
WheelUp::left
WheelDown::right
としましたがメモ帳ではホイールでカーソルが左右に動いてくれましたが、
動画プレイヤーではシークしてくれませんでした
どのようにしたいいのでしょうか?
環境
v1.1.15.00 Unicode 64-bit
Windows8.1 x64
>>254 とりあえずそれの試用版インストールして適当な動画再生してみた
シークってのが←→キーで10秒戻ったり進んだりするやつのことなら
WheelUp::Send, {Left}
WheelDown::Send, {Right}
で動いた(Win8.1でも動くかは知らん)
256 :
名無しさん@お腹いっぱい。:2014/06/01(日) 18:23:08.88 ID:XSDCSJFg0
>>255 教えていただいた方法で無事希望通り動作しました
ありがとうございます
Gui, Add, Button, x0 y0 w50 h20 gSelect_window, ボタン 1
Gui, Add, Button, x50 y0 w50 h20 gSelect_window, ボタン 2
Gui, Add, Button, x100 y0 w50 h20 gSelect_window, ボタン 3
ボタン3つ作った後で一つ(例えば、「ボタン 3」)を削除したいのですが、やり方が分かりません。
個別削除は無理ですか?
Gui,Destroyして作り直すしかないんですか?
>>257 3つのボタンで同じ「gSelect_window」になってますが気にしないで(無視して)下さい、コピペミスです。
質問内容と直接関係ありません。
完全に消す方法はないんじゃね
GuiControl,Hide で非表示にするか、Disable にするか
常駐でIMEを10秒経ったら自動でオフにしたいのですがうまくいきません。
どこがおかしいか教えて下さい。
#include IME.ahk
#persistent
settimer,getIMEMode,10000
return
getIMEMode := IME_Get()
if (%getIMEMode% = 1) ;IMEオンの時
{
IME_SET(0) ;IMEオフ
return
}
>>260 どううまくいかないのか書いてないけど、それコピペミスじゃなければ
settimerで設定したサブルーチンのラベルないよね?
あとIMEオンならIMEオフにするってのは、
if IME_Get() ;IMEオンの時
IME_SET(0) ;IMEオフ
の2行だけでいいんじゃない?
getIMEModeラベルに上の2行を指定でとりあえず動くけど、
そのままだとIMEオンになったタイミングによってはすぐオフにされるよ。
10秒間隔で回ってるタイマーの9秒目とかにオンになったときとかw
だからオンを検出してから10秒経過でオフにするとかにしたほうがよさげ。
ありがとうございます
まだラベルの理解ができていないので調べてみます
オン検出してからですね、わかりました。
>>259 どうもありがとう。
完全に消す方法はないんですね。
Gui,Destroyをそのまま使っていきます。
かざぐるマウスに最前面化したウィンドウの境界部分を赤くする機能があるんですが
AHKでそれと似たようなことってできないですかね?最前面化で使うというより、
特定のアプリで特定のフラグが立っている時に境界部分を赤くする、という用途を考えているんですが。
一応できるな
266 :
名無しさん@お腹いっぱい。:2014/06/05(木) 01:16:53.59 ID:a3gkmy250
267 :
名無しさん@お腹いっぱい。:2014/06/05(木) 01:42:16.20 ID:0xkVI64d0
できるみたいですね
>>266 これをincludeして使うとしたらどう設定したらいいんでしょうか?
単純に自分が使っているAHKスクリプトのあるフォルダにAltKGM.ahkを置いて
#include AltKGM.ahkと書き込んでみましたがスクリプトエラーはでませんが
AltKGM.ahkが機能しませんでした。
vk1Dsc07B & F1:: msgbox,0x40,俺的メモ,
(
msgbox,ヒアドキュメント使って簡易ヘルプ仕込んでおくと
AutoHotKeyで何設定したか覚えやすい
)
MGL用プラグインぽいからあっちのスレで聞いたら?
ソース丸ごと貰った挙句組込み方法まで教えろってのは随分というか
個人的には見てわかんないなら諦めろって言いたいところだが
270 :
名無しさん@お腹いっぱい。:2014/06/06(金) 20:12:56.15 ID:itte/Xjr0
AutoHotKey Wikiのサンプルコード集から
「キー連射スクリプト」を少し改変して使っているのだが、
LButton押下中にマウスを動かすとカクカクになってしまうのは何故だ
誰かヌルヌル動かせる方法教えてくれないか?
>>270の補足
>LButton押下中にマウスを動かすとカクカクになってしまうのは何故だ
カクカクになるのは視点の話であって、コンピューターの性能が足りないとかそういう
話ではない。
なんだかマウス操作がぶつ切りになってしまう、という意味だ。
>>271 質問なら、まともな口調で書けよ。
コマンド一行ずつ見ればすぐ分かる。
意味が分からないならリファレンスから出直し。
そういう意味じゃない。他の連射ツールも試してみたがやはりマウスの動きが
制限されたようになってしまう。なぜだろう
ダメだコイツw
つかそういう意味じゃないの意味がわからなさ過ぎてちょっとおもろい
BlockInput使ってるからだろ
不思議がるほど不可解な挙動じゃないし
むしろマウス連打エミュレートの真っ最中にまともにマウス操作できるとなぜ思えるのか
コピペするだけでコード全然読んでないんだろうな
まともな口調で質問もできない時点でお察し
マウスのクリック音がうるさいのでキーボードで左クリック代用しようかと想うんだけどどのキーを使うのが良かろうか
マウスでポインタ移動してそのキーでクリックって感じなんだが、Ctrl+Spaceなんて良さそうだけど空いてないしなぁ
279 :
名無しさん@お腹いっぱい。:2014/06/07(土) 12:09:00.66 ID:dSj9EjvP0
意地悪抜きでマウス買った方がいいんじゃないか
>>278 Wikiのサンプルコード集にある、キーボードでマウス操作を流用すれば?カーソル移動もできるし
自分好みのキーに入れ替えればいいだけ。自分の設定は、無変換+ESDFで移動、無変換+WRで左右クリック
あくまでも代用だけどな。俺の場合はほぼこれで済ませられるようなシンプルなゲーム用w
??
いやマウスは持ってるし結局使うんだけども
まぁここで喜久子とじゃなかったか。スマソ
俺もマウスを買い替えて音のしない(小さい)のにしたほうがいいと思う
マウスクリック音がうるさいような環境だと、キークリック音も十分やかましく感じる
それにマウス左クリックみたいな重要キーはAHKで設定しなおしても、さすがに不具合が出るような気がするわ
CTRL+spaceが空いていたとしても、CTRL+左クリックはどうするの?って話になるしね。
確かに使い始めてまだ数時間だしリファレンスもまともに読んでないし
コマンドも幾つか参照したがこれだというのもいまいちわからない
BlockInputは下のルーチン丸ごと消してるので動作には関わってきていないな
まともな口調?つまり韓国人かなんかだと?そもそも2chROM専なのでと
赤面して反論してみるが意味は無いだろうな
どっちにしても連写中は操作できそうもないってことはわかった、ありがとうおまいら
質問と相談では立場が違ってくるとは思いません鐘?みなさん
原因がはっきりとわかったので追記しておく。
Send,{LButton} / MouseClick LEFT / Click LEFT はいずれも
Click left mouse button at mouse cursor's current positionという
制限があるのでマウス操作がぶつ切りになってしまう。
場所に関わらずただ単にクリックだけしてくれるコマンドがあったらいいのに・・。
ここまでめんどくさいやつは久々だな
至高の連打ツールを探してすでに旅立っただろうからもういいじゃんw
クリックつったら普通はクリックそのままの動作だっつの
お望みのコマンドもあるけどね、ものを聞く態度以前に質問じゃないみたいだから答えないけど
マウス代替はPhotoShop限定で無変換にLbutton割り当て、左親指操作にしてる
音防止目的じゃなくあくまでクリック時の衝撃よけ
片手でドラッグ多用すると腱鞘炎ぽくなるので右手(カーソル移動)と分業にしたら楽になったわ
ペンタブも試したがいまいち性に合わなかった
>>288 音防止でいいこと思い付いたぞ
奥歯にスイッチ埋め込むんだ
奥歯にスイッチ入れてると加速装置がオンになってコントロールし辛くないか?
>>290 M570とrollermouseで一応2台繋いでる
でもクリック衝撃を押さえるにはキーボードのほうが向いてるね
マウスのカチカチだと分業にしても連打時に辛くなっちゃって
>>289 別人だと思うがリファレンスを click で検索
画像検索でヒットした座標から10ピクセル横をクリックするってどうやればいいのでしょうか?
変数のX座標から10とか20を引いた座標をクリックしたいのですが、、おしえてください。
ImageSearch, JcommentX, JcommentY, 0, 500, 1920, 1080, C:\AutoHotkey_L\imageSearch\Jcommentbutton.bmp
if ErrorLevel = 2
MsgBox Could not conduct the search.
else if ErrorLevel = 1
MsgBox sorry.could not find a image.
else
Click, L, , %JcomemntX%, %JcommentY%
JcommentX-20
でいいんじゃない?
>>295 だめだー。エラーも出ない代わりにカーソルもうごかない。%つけないとだめかな。
>>296 理解足りないとおもいます。
ためしに%空白を頭につけてみたけど、だめだ。リンク先読みます。
>>297 多分Clickは座標を式で指定できない
MouseClickを使えばいいよ
MouseClick, L, JcommentX-20, JcommentY
>>297 >>298 適当な事書いてしまったようで申し訳ない。
Clickは仕様が特殊で ,で区切ってもまとめて引数1つとして認識するようだ。
公式ドキュメント - Click %x% %y%
Since click does not support expressions, variables should be enclosed in percent signs.
訳:式は使えない、%で囲む必要有り。
こうすれば式に出来る・・・がオススメできないなw
Click, % "RIGHT," hoge + 50 ",505"
以下のウィンドウ指定たちをandでひとまとめにしたいんですけどどう書けばいいんでしょうか
#ifWinActive, - foobar2000$ ahk_class \{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8\}
#ifWinActive, (Album List|Playlist Manager|Playlist Search( \(\d+ results\))?) ahk_class \{483DF8E3-09E3-40d2-BEB8-67284CE3559F\}
#ifWinActive, (Properties( \(\d+ items\))? - |Edit Value : |Automatically Fill Values|Preferences: ) ahk_class #32770
単純に#ifWinActive, 以降のものをand でくっつけても反応してくれませんでした
すみません、andじゃなくてorです
よろしくお願いしますm(_ _)m
>>300-301 #IfとWinActive()で指定はどう?
#IfWinActive ahk_exe notepad.exe
F1::msgbox
#IfWinActive ahk_exe calc.exe
F1::msgbox
#IfWinActive
↓
#If WinActive("ahk_exe sakura.exe") OR WinActive("ahk_exe Everything.exe")
F1::msgbox
#If
ごめんsakura.exeとEverything.exeはコピペミスw
notepad.exeとcalc.exeに読み替えてください
>>302 出来ました!これ出来たらいいのになぁ〜と前から思ってたことなんでうれしいです、ありがとうございましたm(_ _)m
試してる間に気になったことがあったんですが、
#ifWinActive, 開く ahk_class #32770
~~~
#ifWinActive, ahk_class #32770
~~~
#ifWinActive
とした時って上の方に書いてあるものが優先されると思ってましたが下のものが優先されました
どこの認識が間違ってるんでしょうか。AHK_Lです
> これらの条件は、最後に指定した物一つのみが有効になる。
でしたか……一番下の方に#ifWinActive, ahk_class #32770書いてますわ……
解説不読失礼。落ちます
307 :
240:2014/06/08(日) 15:27:27.57 ID:TjQuA9Xq0
>>246 レスthx&返信めちゃめちゃ遅くなってスミマセン
その後いろいろ試していたら別ソフト(Combineというソフト)でも
同様の現象が再現したのでAHK側の問題ではなかったようです
お手数おかけしました
>>298 >>299 ありがとうございます。MouseClickでやると思ったところをクリックできました!
Clickの仕様とかそういう細かいことヌーブにはわかりません。
%いれればできるらしいけど、299の例みてもそこに%入るの?wって感じで
思ってた箇所とぜんぜんちがった。たすかりました
プロセスの元のCPU優先度って取得できないんでしょうか?
今、アクティブウィンドウの優先度を上げるだけの常駐プログラムをつくろうと思ってるんですけど、下に隠れたウィンドウの優先度を元に戻す方法が思いつきません
今のところ通常優先度にしてますけどこれを元あった優先度に戻したいんです
#Persistent
SetTimer, getwinpid,5000 ;5秒毎に発動
getwinpid:
WinGet,active_Pid, PID, A ;アクティブウィンドウのPIDを取得
now_active_pid := active_Pid
if (Temp_active_Pid != now_active_pid)
{
;msgbox,A
Process, Priority,%now_active_pid%,AboveNormal ;現在のアクティブ
Process, Priority,%Temp_active_Pid%,Normal ;裏側のウィンドウ
}
WinGet,active_Pid, PID, A
Temp_active_Pid := active_Pid
return
うちはAHKで取得する方法わからんかったのでDllcallで見に行ってるわ
;プロセス優先度を返す
; 0x100 Realtime
; 0x80 High
; 0x8000 AboveNormal
; 0x20 Normal
; 0x4000 BelowNormal
; 0x40 Low
;
http://msdn.microsoft.com/ja-jp/library/cc429132.aspx hProcess := DllCall("OpenProcess",Uint,0x400,Int,False,Int,PID)
ret := DllCall("GetPriorityClass", Ptr,hProcess, Int)
DllCall("CloseHandle", Ptr,hProcess)
コメント抜け
OpenProcessのパラメータ
0x400 = PROCESS_QUERY_INFORMATION ね
質問です。IEの閲覧履歴を削除するショートカットキーShift+Ctrl+Delを押した時に
ダイアログが出るので、自動的に削除のボタンも押すスクリプトを書いていますが
うまくいきません。ダイアログは出ますが削除のボタンを押しません。
どうすればいいですか?またForefoxでも同じことをしたいのですができるでしょうか。
+^delete::
+^delete
sleep,2000 ;ダイアログが出るまで待機
{
;↓この部分
;send,d ←ダメだった
;controlsend,削除(&D),d ←ダメだった
;ControlClick [,Control-or-Pos, WinTitle, WinText, WhichButton, …]
;controlclick,削除(&D),閲覧の履歴の削除 ←ダメだった
;controlclick,削除(&D),閲覧の履歴の削除 ahk_class #32770 ←ダメだった
}
return
Firefoxの場合
{
controlclick,今すぐ消去,最近の履歴を消去 ahk_class MozillaDialogClass←ダメだった
}
+^delete::
send, +^{delete}
>>313 とりあえずリファレンスもうちょいよく読むべきかな
OSとかIEとかFirefoxのバージョンがわからんけど
IEはControlClickでbutton8をクリックしてやる(環境によってはbutton8じゃないかもしれん)
FxはそのままSend,{Enter}でよさげ
>>313 複数の問題があるな・・・リファレンス、コマンド読み飛ばした?
スクリプトを書く場合やりたい事を分解してテストするといい。
*ホットキー割り当て
+イベントを乗っ取らない ~
+特定のウィンドウで動作 #if
*「閲覧の履歴の削除」開いたか判定 コマンド>>ウィンドウ
*キーを送信
+ボタンがアクティブならEnter
+ショートカットが割り当てられているなら 対象のキー
+それ以外 ボタンの直接指定 >>ウィンドウ指定の方法
やるべき動作は書いたので後はリファレンス読んで自分で書こう。
>>314,315,316
ありがとうございます。バージョン忘れてました、すみません。
OS XP SP3 IE8 Firefox12.0 です。
リファレンス読みながらやってみたいと思います。
314さんの方法はダメでした。
315さんの IEの controlclick,button8 、FFの send,{enter} 、ダメでした。
316さん詳しい解説ありがとうございます。
1つずつ確認しながら覚えていきたいと思います。
いやだからダメなのは君のやり方だってw
319 :
314:2014/06/09(月) 23:40:26.88 ID:B4e9wrW40
まさかとは思うけどさ
sleep,2000 (←全角);(←全角)ダイアログが出るまで待機
すみません初歩的なことなんですが
autohotkeyのプロセスのスクリプト別に存在するかどうか確認したい場合ってどうすればいいんでしたっけ?
たとえばAHKプロセスが、MGL.AHKと○○.AHKの2つのスクリプトを走らせてるとすべてAHKプロセスでタスク上見えますけど、たしか片方ずつ判別できたと思うんですよ
完全にドわすれしてるので誰か思い出すきっかけをください
AhkTaskMan使えばいいんじゃね
>>321 DetectHiddenWindows, On
WinGet .....
タスクマネージャーで常にスクリプトを区別したいなら、
スクリプトと同じフォルダに「AutoHotkey.exe」をコピーして、
スクリプトと同名にリネームし、それを実行するようにすればいい。
>>321 タイトルがahkファイルのフルパス、クラス名がAutoHotkeyの非表示ウィンドウが出来ているので
DetectHiddenWindows,On
IfWinExist,C:\Sample\0000.ahk ahk_class AutoHotkey
{
MsgBox,C:\Sample\0000.ahk は起動済です
}
ちょっといみわかんない状態に陥ってます
こんなスクリプト書いたんですが
Winget,Name,ProcessName,A
;msgbox,%Name%
If(Name == ("sakura.exe" or "firefox.exe"))
msgbox,OK %Name%
エクスプローラーでもnotepad.exeでも無差別にメッセージボックスが表示されます
なんででしょう?
事故解決しました。判定式変えたら動きました。
ShowPopupMenu(retvar, "&Open,&Edit,&Print,&Exit")
くらい簡単なマウスでもキーボードでも選べるメニュー関数ないですか
なかったら作ったらいいんじゃね
そんなむつかしくないと思うけど
331 :
名無しさん@お腹いっぱい。:2014/06/11(水) 14:46:42.38 ID:FBfP1Dx60
存在しているかどうかがわからないんだから
それより一手前の状況だろう
探して無かったら無いんじゃないの
つか人に存在聞く間に作っちゃったほうが早いレベルじゃないかと
すいませんすいませんちょっと今頭な回らないんで代わりに誰か具体的に考えていただけますか
1. ソフトAに選択中の複数のファイルorフォルダのパスを取得するショートカットキーを送る
2. 入力欄を表示してソフトBのパスを入力する
3. エンターで取得したパスをBに送る
Bは変動します。パスの入力は手打ちかコピペです
>>333 添削やアドバイスなら歓迎だが、スクリプトの作成依頼ならお断り。
説明も推測しないといけない箇所も多し説明不足。
分からない部分だけ聞くか、分かる部分はスクリプトを書いてからまたいらっしゃい。
頭回るときに書けばいいだけだしな
送信先は何となくopenかsaveダイアログっぽい気がするので
DialogHandler.で行けそうな気がしないでもない
GUI,Addなどで作ったウインドウがあるんだが、これがほかのウインドウを操作していると
隠れてしまうので、ある操作をしたときに表に出てくるようにするため下記のスクリプトを書いた
WinGet, active_id, ID, A
GUI, show
WinActivate, ahk_id %active_id%
フォーカスは元のウインドウのままにしたいのでこうした
すると、モニター下のステータスバーに出てるHのアイコンがぴっこんぴっこんしだすんだわ
これなんとかなりませんか
ちなみにこのGUIウインドウのIDをゲットしてこれをguiIDとして
WinGet, active_id, ID, A
WinActivate, ahk_id %guiID%
WinActivate, ahk_id %active_id%
としても同じようにぴっこんぴっこんする
なぜこんなことしたいかというと、ウインドウがA,B,このGUIって3枚あったとき
Bの下にGUIが隠れてるとき、ウインドウAを触りながらこのGUIをBの上に出したいんだ
そのときフォーカスはAのまま変えたくないので。
WinGet, active_id, ID, A
GUI, show
Sleep, 500
WinActivate, ahk_id %active_id%
としたら、ぴっこんぴっこんはしなくなりましたが、
WinGet, active_id, ID, A
WinWaitActive, ahk_id %guiID%
WinActivate, ahk_id %active_id%
だとダメです
原因がわかりました
スクリプトの最初の方に、
#UseHook
というのを入れてるのですが、これをコメントアウトしたらぴっこんぴっこんしなくなりました
でもなんで?
とりあえず一番簡単なスクリプトを作ってみました。下記で、#UseHookをコメントアウトするのとしないので
タスクバーのHアイコンの点滅が変わります
#UseHook
Gui,Add,Text, W100, test
Gui,Show
Return
Space::
WinGet, active_id, ID, A
GUI, show
WinActivate, ahk_id %active_id%
return
>>340 こんな感じにしたら点滅しなくなった
#UseHook
Gui,Add,Text, W100, test
Gui,Show
Return
+F12::SetTimer, label_WinActivate, -1
label_WinActivate:
WinGet, active_id, ID, A
GUI, show
WinActivate, ahk_id %active_id%
return
>>340 最初からまともな口調で書いてくれたら即答したのに。
#WinActivateForce
WinSet, AlwaysOnTop
やりたいのはフォーカス保持みたいだから
常に手前は違うのかなと思ってた
:*?:{Shift}stm::actionみたいに
Hotstringに文字以外のキーを指定したような挙動が欲しくて挫折したのでお助けください
~Shift::return
:*:stm::
GetKeyState, key, Shift
if A_PriorHotkey != "~Shift" || A_TimeSincePriorHotkey > 1000
{
Send, stm
return
}
if key = "D"
{
Send, +s+t+m
return
}
MsgBox, action
return
条件にするとこんな感じです
・Shiftが単体で押し上げられると受け付けが始まる
・受け付け中に文字以外のキーが押されたら解除する
・終了文字はない
>>341 おお、ありがとう。これで解決しましたわ。なんか不思議だね。理由がわからんのが気持ち悪いですが
>>342 常に手前ってのは違うわ
>>343 >>345 どう考えてもGUIが一瞬最前面に出ないようにする配慮だと思うのだがw
WinSet, AlwaysOnTop, On
...
WinSet, AlwaysOnTop, Off
常に手前にはフォーカス移動抑止効果はないから結局ほかの対策が必要じゃね
>>347 最終的にフォーカスが同じならそこまでこだわらないでいいと思うが。
問題なのは
>>343 を読んで質問者が完全に誤解している事かとw
>>344 Flag = 0
~Shift::
If Flag {
--Flag
SetTimer, KeyCheck, Off
} Else {
++Flag
SetTimer, KeyCheck, On, 100
}
Return
#If Flag
:*?:aaa::bbb
#If
KeyCheck:
Input, OutputVar, V L1, {LShift}{RShift}-^\@[]./ ;任意の終了キー
If (ErrorLevel != "Max") {
--Flag
SetTimer, KeyCheck, Off
}
Return
訂正:いらない判定削除
~Shift::
++Flag
SetTimer, KeyCheck, On, 100
Return
いろいろテストしたら残念な事になっていたので書き直し。
Flag = 0
Shift::
Send, {Shift Down}
KeyWait, Shift
Send, {Shift Up}
If Flag
--Flag
Else {
++Flag
SetTimer, KeyCheck, On, 100
}
Return
#If Flag
:*?:aaa::bbb
#If
KeyCheck:
Input, OutputVar, V L1, {LShift}{RShift}-^\@[]./ ;任意の終了キー
tooltip % ErrorLevel
If (ErrorLevel = "EndKey:LShift") || (ErrorLevel = "EndKey:RShift")
SetTimer, KeyCheck, Off
Else If (ErrorLevel != "Max") {
--Flag
SetTimer, KeyCheck, Off
}
Return
351 :
347:2014/06/15(日) 07:35:39.16 ID:BBLMrurN0
>>348 失礼、#WinActivateForceの一行だけで点滅防止になるんだったね
おまけで書かれてるAlwaysOnTopのほうに反応してしまった
うちの環境ではもともと点滅しないなーと思ってたら
Template.ahkに#WinActivateForce 組み込んでた
352 :
337:2014/06/15(日) 09:05:07.05 ID:Zr1Ah1LZ0
>>351 なるほど、私も、#WinActivateForce一行だけ入れて確認してみたら、点滅消えた
でもこれ、解説見てみると
この指令をスクリプトのどこかに書いておくと、WinActivate、WinActivateBottom、GroupActivateによるウィンドウのアクティブ化時に、
穏やかな方法を試みるのを省略して常に強制的な方法でアクティブ化を行う。
性能には変わりは無いが、ウィンドウアクティブ化時にタスクバーアイコンが点滅する現象が起こらなくなる。
って書いてあるよね
強制的なアクティブ化と穏やかなアクティブ化ってのがあるんですねえ
なんか常時入れておいていいものなのか。よくわからんから、下記のようにしてみました
それでもちゃんと動く
この場合、#WinActivateForceの上のスクリプトには影響ないのかな
この指令をスクリプトのどこかに書いておくとって表現が気になる
実際のスクリプトには上にかなり多くのスクリプトがあるので
一番上に書いても影響は多分ないんだろうとは思うけど、一応、ここだけに限定したいので
#UseHook
Gui,Add,Text, W100, test
Gui,Show
Return
#WinActivateForce ;; ここに書いたら上には影響ないのかな
Space::
WinGet, active_id, ID, A
GUI, show
WinActivate, ahk_id %active_id%
return
連投すまん
#WinActivateForceを一番下に書いても点滅消えたので、ダメだね
上の方にも全体に影響するみたいです
あんまりにも独自環境にできるもんだからahk入ってないPC触るとやばいなぁと最近しみじみ思う
コンパイルできるからよかった
ポータブル系のフリーソフトを揃えて全部相対パス化して持ち運べる環境を作ったが
社用PCなんかに勝手に入れられないし、他人のPCに触れる機会なんてないし
リカバリーした時にちょっと面倒が減るくらいのメリットしかなかった
当方はサブのノートや家族のPCに必要な環境を即時構築できる利点もござった
>>358 当方は既に忍ばせてあるからもうまんたい
コンパイルしてUSBメモリに入れとけば会社でもどこでも使えるんじゃね
未成年にはピンと来ないかもしれないが
普通は会社のPCはUSBメモリなんてアクセスできないようになってるし
もちろん勝手にソフトをインストールすることもできない
というかできるできないの前にしてはいけない
狭い世間しか見てないとわからないかもしれないが
会社っていろいろあるんだぜ
この話題になるといつもこの流れになるな
もはやAHK関係ないから他所でどうぞ
364 :
名無しさん@お腹いっぱい。:2014/06/16(月) 22:00:50.79 ID:qC/2qUhi0
会社云々とかどうだっていいわさ。サブノート持ちだって自営業だってたくさんいるんですよ
失礼します。グループの使い方を教えてください。これだと間違いですか?
GroupAdd, test_group, ahk_class Notepad
#IfWinActive, ahk_group test_group
F1::Send, ^S
#IfWinActive
取り上げる必要があるとしたら
>>360の職場環境以外ないな
こんな事情だってあるんですよーなんて言い出したらキリがない
なんにしろそれなりに管理のしっかりした会社なら勝手なソフトなんて使えないし
USBなんてもってのほかw
うち?俺が仕事で使ってるか誰かがエロサイト見てるだけだから何でもありだけど・・・w
GroupActivateとはちゃうの?
>>365 GroupAdd使ってる割には1つしかWindowが登録されてないけど使い方は間違ってないよ
他のスクリプトにその4行追加して使いたいならGroupAddはAuto-executeセクションに記述しないとだめ
あとF1::Send, ^Sは^sじゃなくて^Sでいいの?F1で上書き保存させたいなら^s
^Sだとctrl+shift+sになるよ
ご返信ありがとうございます
>>368 例えばメモ帳かワードパッドの操作中にF1で上書き保存というような機能を実現したいのです
>>369 以上の動機でIfWinActiveの条件にahk_groupを使いたいと思ったのですが、
その他のコマンドにこれは含まれないということですか?
>>370 ゆくゆくはエディタ系を一つにまとめて操作を統一するつもりでした
先に挙げた記述では反応しなかったのでどこか誤っていると思われます
ahk_classによる指定では問題なく動きますがエディタが増えるごとにコピペする手間は防ぎたいです
ちなみに上書き保存の動作は^Sでも動きましたが、直しておきました(AutoHotkeyU32 1.1.15.0)
書き方変えてみました。でもダメだったので静的動的みたいな話ではないんですね
試した限りではWinTitleにahk_classを2個以上書くと最後だけ解釈されるんですよね?
グループじゃなくてもOR条件が使えれば満足なんですが、そんなのありませんか?
ダメならLに追加されたらしい連想配列を使うことにします
GroupAdd, test_group, ahk_class Notepad
$F1::
IfWinActive, ahk_group test_group
Send, ^s
IfWinNotActive, ahk_group test_group
Send, {F1}
Return
>>372 GroupAdd > ウィンドウの条件をウィンドウグループに [追加] する。
違う方法は #If 使えばいい。
GroupAdd, test_group, ahk_class hoge1
GroupAdd, test_group, ahk_class hoge2
GroupAdd, test_group, ahk_class hoge3
GroupAdd, test_group, ahk_class hoge4
GroupAdd, test_group, ahk_class hoge5
#IfWinActive, ahk_group test_group
F1::Send, ^s
#IfWinActive
>>374 GroupAddでグループにウインドウ条件を加えられて、以降はWinTitle引数を持つコマンドにグループ名を指定することで
そのグループに属する全ての条件が対象になるという認識で合っていますか?
だとすれば見たところ
>>365と同じ内容ですが、もしかして
>>365で上書き保存ができないのは自分の環境だけでしょうか?
>>375 ダメと言われても問題のスクリプトが書かれていなければ答えようがない。
>>375 >>370のレスちゃんと読んだ?
>あとF1::Send, ^Sは^sじゃなくて^Sでいいの?F1で上書き保存させたいなら^s
>^Sだとctrl+shift+sになるよ
ところでそのときにメモ帳を開いて物理的にCtrl+Shift+Sを押下してみたんですが
このときは上書き保存できませんでした。それなのに^Sでできたということは
Sendでシミュレートされる同時押しには順序があってCtrl→S→Shiftで押されたってことなんですかね?
>>380 あ、先頭に書いたら動きました。
>>372って間違ってますか?
リマップもホットキー(ホットキーラベル)に含まれるんですね。記述位置がAuto-executeだと思い込んで疑いませんでした
どうりで話が噛み合わないわけです。すみませんでした
実現できてとても嬉しいです。ご協力してくださった方々には足を向けて寝ません
ちなみにKeyHistoryで調べると^SはCtrl→Shift→Sでした
もはやどうでもいいんですがなんで保存できたんだろう
起きた事象は再現されるか再度やってみる
紹介されたページはきちんと読む
言葉が丁寧でも態度は良くない
伸びてると思ったら人の話聞かない子ちゃんが連投してたのか
Windows Media Player(Windows7に付属)
で再生中の位置(時間)を取得する方法ないでしょうか?
コントロールにもテキストが出ません
385 :
名無しさん@お腹いっぱい。:2014/06/17(火) 19:03:49.52 ID:C64t8iwY0 BE:581326833-2BP(1000)
すまん、FileAppendで改行が入らない。
めちゃ初歩だけど誰か教えてください。
例:
FileAppend ,%a%,C:\a.txt
>>384 今WMPそんなことになってんの?
テキストがないなら画像認識すればいいじゃない?
またはプロパティ出させるとか?
スキンをクラシック(あるはずだよね?)にするのが一番簡単そうだけど
すまん `r もいるかも
まあ適当に試してみて
FileAppend便乗させてください
指定したテキストの指定した行に文字列を挿入、もしくは行を削除
ってFileAppendでは無理ですよね
そういうことやってる人いませんか?参考お願いします
>>385 wikiで検索 「改行」
>> ID:Kx2279sK0
調べれば載ってる事を聞いてくる人は調べ方教えないと
何でもかんでも聞いて残念な質問だらけになるぞ。
>>389 変数に読み込み
↓
RegExReplace() 正規表現で置換
または
一行ずつ文字列判定 Loop,Read + If系
↓
最後にFileAppend
なるほど、どうもです
つまらん質問にお答えいただき感謝
>>390 いや、調べなきゃ意味分からん半端な答えを投げたつもりだけど
制御コードの類は知識ないと自分で調べろっても分からんだろうがヒントがあれば逆引きできるでしょ
wikiの該当ページ貼ってやるところまでやってやらなあかんつったら答える側のハードル上がらね?
まあ単にスマホからリンク貼るの億劫だっただけがな
まぁ別に質問者を教育してやる義理もないんで
答えたい人が答えたいようにすればいいと思うよ
増長した質問者が出て来たとしてもそれはそいつが非常識なわけで
回答者様をうまく利用しようと思うなら
せいぜいご機嫌損ねないようにへーこらしておけってこった
396 :
384:2014/06/18(水) 00:32:41.04 ID:fR8OVz180
>>386 サンクスです
画像認識ですか
テキストをOCRみたいに認識するということでしょうか?
ヒントお願いします
#IfWinActiveについてですが、使い方のところには
#IfWinActive [, WinTitle, WinText]
とありますが、使用例には
#IfWinActive ahk_class Notepad
とあります。
これって、
#IfWinActiveのあとのカンマ”,”は、あってもなくてもいいのでしょうか
たとえば、
#IfWinActive タイトル名 でも、
#IfWinActive, タイトル名
でもどちらでもいい?
>>386,397
AHKにOCR機能なんてあったっけ?
ピントの外れた解答した上でそういう誘導の仕方はいくらなんでも酷いと思うが
>>399 ImageSearchとかじゃないの?
再生時間みたいに随時値の変わってくものはImageSearchは無理じゃね?
…と思ったが数時単位ではフォント固定だから0〜9までの画像をあらかじめキャプチャ保存しといて
hh:mm:ssそれぞれの桁位置でImageSearch*10で0〜9のどの画像と一致するか
ぐるぐる回していけばいいのかな
X1〜Y2の位置決めはよほどシビアに指定しないと隣の桁の値取得したりの誤爆しそうだが
唐突にここで質問ですが、Administratorなユーザーで利用していても何故か管理者権限で起動するかでやれることが違わないですか?
例えば、管理者として起動したahkスクリプトのホットキーでfirefoxを起動すると外部アプリからURLが開けませんが、
かといって通常起動すると今度はfirefoxのウィンドウをActivateするキーバインドが時々死にます。
発生タイミングは調査中ですがfirefoxには限らないようです。詳しい方がいたら教えてください。
おま環かもしれないので色々なアプリで確かめたところ、一般に、外部アプリからのファイルオープンだとかD&Dだと通常実行が必要で、
ウィンドウのアクティブ化絡みだと管理者起動が必要となる場合があるようです。
管理者権限用のスクリプトと通常スクリプトを分けるしかないんでしょうか?
統一させる方法があれば知りたいです。
>>386 OCR機能なんて一言も言ってないw
>>397 コマンド見ろよって突っ込みだろ?
>>399 勘違い質問者の言ってる事鵜呑みにしてどうするんだよw
画像認識ってヒントを出してるのにwikiすら調べもしない方がよっぽど酷いがなw
>>398 スクリプトの構成
ttp://ahkwiki.net/Scripts >>402 自分の環境を先に書くべき。
おそらくユーザーアカウント制御 (UAC)絡みの問題だと思う。検索:UAC autohotkey
あまりにも扱いにくいので自分はOFFにして、Comodo Firewall のDefense+で代用している、むしろこちらの方が高性能。
>>404 環境はWindows 8.1でUACはオフにしています。
すみません。1つ知りたいのですがそのように言われるということは私の環境が原因ということですか?
OSはWindows 8.1しか持っていないのでUACのオンオフやアプリやスクリプトの書き方・起動させかたなど色々試したのですが、
>>402の現象が再現されました。他に必要な情報があったら教えてください。
再現されたスクリプトの一例です。
Alt & 5::
If WinExist("ahk_class MozillaWindowClass"){
WinActivate ahk_class MozillaWindowClass
}else{
Run, C:\Program Files (x86)\Mozilla Firefox\firefox.exe
}
return
>>403 すまんね、ImageSearchじゃ無理って思い込みがまずあったので
>386はWMP起動させずに質問ろくに読まないで勘違いレスしてるのかと思ってしまった
今は反省してる
見苦しく言い訳すると>401書いたのも自分だが、一桁づつImageSearchさせるというのは
当初思いつかなかったし、コマンド一覧眺めててもわからないんじゃないか>397
回答者様は無条件で偉いんだよ いちいち意見すんじゃねーよ
>>405 その現象がfirefox限定なら既知の問題「ゾンビプロセス」かと。
ttp://www.mozilla.jp/firefox/30.0/releasenotes/ 裏でいくつもfirefoxが起動して残る問題がある。
それにWinActivate等が反応して結果動作していないように見えている。
余計な物に反応しないようにウィンドウ指定をタイトルの一部まで指定すれば誤動作しないかも。
SetTitleMatchMode, 2
WinActivate, - Mozilla Firefox ahk_class MozillaWindowClass
余談だが、
OCRを見るといつもOCiRiと読んでしまう
>>409 タイトルをそのように指定してみましたが変わりません。
それより不思議なのがあなたの環境では観測されていないようですね。
アクティブ化だけでなく外部からのファイルオープンについても観測されていないですか?
ちなみに、既に書きましたがfirefox限定ではありません。
アクティブ化については繰り返し確認したものだけでPowerShell, gvimでも発生します。
これは「時々死にます」と言ったように、基本的には反応しますがたまに反応しないという程度ですね。
外部からのファイルオープンについては、firefox以外にもgvimの--remote-tab-silentでも発生します。
D&Dについては詳しく調べていませんがCLaunchでは決まって発生することを確認しています。
これらは時々ではなく必ずそうなります。条件を変えてもそうなります。例えば、
!3::
Run, C:\program files\claunch\claunch.exe
return
とだけ書いたスクリプトでも、管理者として起動した場合には必ず再現されます。
なので、少なくともこちらは私の環境の問題じゃないと思えるんですが、情報いただけたらと思います。
>>411 セキュリティーソフトが反応しているのでは?セーフモードで動作確認。
そちらの文字通り受け取るとかなり曖昧で全く意味が違う事になりますが気づいてますか?
>Activateするキーバインドが時々死にます。
*ホットキーが動作しない <文字通りならこれ
*コマンドでエラーを起こしている >ErrorLevel があるならそれで判断
*コマンドは送られているが対象が反応しない
-------------------
こちらの環境 ahk1.1.15.00 win7 x64 UAC/off Avira COMODO
AutoHotkey.exe管理者から実行/なし、コンパイル有/無+管理者から実行/なし、何度やっても問題なし
F1::
Run, C:\Users\*******\Desktop\新しいフォルダー\claunch.exe
return
>>412 確認してくださりありがとうございます。
AutoHotkeyのバージョンはv.1.14.03で、セキュリティソフトはAVG Antivirus 2014 Freeですが、
一時的にAVG保護を無効にするを選んで
>>412と同じようにしてもこちらでは問題の現象が起きます。
つまりD&Dしようとしてもマウスカーソルのアイコンがドロップ禁止を示すものになり、ドロップできません。
確かに曖昧な表現でした。
*コマンドは送られているが対象が反応しない
これだと思われます。
CLaunchそのものは起動しますし、ErrorLevelというものは初めて知ったんですが、
以下のようにしても通知されないのでコマンドでエラーを起こしてもいないと思います。
F1::
Run, C:\Users\*******\Desktop\a\claunch.exe
if ErrorLevel <> 0
MsgBox, %ErrorLevel%
return
ウィンドウが画面外に表示されているとか?
起動したらwinmoveで枠内に強制移動させてみては?
claunchはマウスカーソルのところに移動させる起動オプション /m があるので
Run, C:\Users\*******\Desktop\a\claunch.exe /m
でもいいけど。
>>414 いえ、表示はされます。ですがD&Dによるアイテム登録ができません。
回答者が嫌な奴な場合お礼のレスが付かなくてワロタ
>>415 俺もWin8.1でAutohotkeyからClAdmin.exe使わずにCLaunch起動してるけど、管理者権限でもドラッグ登録問題ないよ
もしMetroアプリ起動するならUAC完全に切れてない
http://erisy.blog.fc2.com/blog-entry-209.html claunchのヘルプ
UAC(ユーザーアカウント制御)の影響により、管理者の権限で実行されているプログラム(アプリケーションのインストーラやタスクマネージャなど)がアクティブ化されているときには、
マウス操作やホットキーによるCLaunchの表示、および登録アイテムの直接起動ができません。
CLaunch自身を管理者の権限で起動することにより、この制約を回避することはできますが、
そうするとエクスプローラなど標準ユーザーの権限で実行されているプログラムから、ドラッグ&ドロップでファイルを受け取ることができなくなります
ClAdmin.exeはこれらの問題を同時に解決するための起動ツールです。
Win8でUACの扱いにくさに磨きがかかっていたのか
高飛車な御回答者様はリアルでは気がちっこくて自分を褒めてもらいたがってるんです
おだててあげなきゃ木に登らなくなりますよw
2ちゃんで逆恨みするタイプって
現実だともっと酷いんだろな
>>420 よかったな、同じようなレスを単発で延々繰り返してやっと触ってもらえたぞ
これを糧にこれからも精進しろよ
答える方も人だし、質問する方も人だからな
質問の仕方ってのもあるけど、諭し方ってのもある
どちらも必要よ、リアルと変わらん
ま、態度があまりにもひどくて筋通ってないのは論外だろうけどな
変な奴はNGIDしてしまえ
● 分からない理由 ●
1. 過去ログを読まない。
2. 読んでても肝心な所が見えてない。
3. 検索能力が低い。
4. そもそも検索する気がない。
5. 類推という概念がない。
6. それ以前に普通に頭が悪い。
<わからない11大理由>
1.読まない …現行スレ、テンプレ、取説などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
10.開き直る …自分の思うようにならないと開き直る。
11.2ちゃんねるをお客様相談室だと思っている。
★教えて君五大要素★
1 読まない (文盲)
2 調べない (能なし)
3 試さない (発想力欠如のアホ)
4 理解力が足りない (馬鹿)
5 人を利用することしか頭にない (死ね)
YES → 【見つかった?】 ─ YES → じゃあ聞くな死ね
/ \
【探した?】 NO → なら、ねぇよ
\
NO → 死ね
■回答できるレベルの人へお願い■
このスレは親切な人が多いと思うけど、もう日記に対する検証&レスは、
たとえ対処法をわかっている人がいても、レスは一切やめにしてくれないか?
こいつがやってることは
「適当にコード作ってみたけど動かない。動かない原因を調べるのも面倒だし、
学習する気もない。どうせここに書けばおまえらが修正するだろうから誰か直して」
ってことだ。しかも、一度だけならまだしも、何度も繰り返している。
これまでに、このスレではこの手の質問者は居なかったと記憶する。
いつまでもこんなクズにつきあう必要はない。
汎用性のないコードでスレが汚されるのは、結果的に良質な情報が
埋もれる原因になって迷惑だし、横から見ていても参考にならないし、
なによりも見ていて不快でしかない。
ある程度はコード晒してもいいと思うけど、程度は考えようねってことだろ。わかってるよ
2chのスレに自分の思い通りの流れでいてほしいなんて無理な話だから諦めろ
一人暇人が紛れてるみたいだな
ファイルコピーするときに目標のフォルダがなかったら勝手に作るような仕様も用意してほしかった
433 :
402:2014/06/20(金) 17:43:28.10 ID:5VKd8epE0
>>418 お返事遅れてすみません。ドンピシャでした。UACが切れていないのが原因でした。
外部からのファイルオープンやD&Dについては多分これで解決しました。
アクティブ化については他にも問題があるようですが、とりあえずトラブルが格段に減りました。
ahkスクリプトも1つに統一することができ、とても助かりました。ありがとうございます。
>>404 UACが切れているという思い込みで手間かけさせてしまってすみません。ご対応ありがとうございました。
UTF-8BOM無しだと使えないのはどう考えてもおかしい
ごみ箱の中身を確認する方法はありませんか?
Run, C:\RECYCLER だとCドラのゴミしか見れないので
やっつけでいいなら
run,c:\gomi.lnk
とか
gomi.lnkはexplorerでゴミ箱へのショートカットを作っておく
ゴミ箱以外でも気軽にリンク張れるから割と便利
shell:recyclebinfolder
>>436 なるほど…目からウロコです
>>437 こちらでも開けるのを確認しました
お二方とも即レス感謝です
>>439 なんかすごそう。あとでやってみるかな
virtual desktopsって使ったことないしよくわからんけど、UNIX系であるように、画面を切り替えて複数の別の仕事が
同時に出来るみたいなやつかな?
話変わって、下記のスクリプトを作ってみたら、なんか異常な動きをするので、教えてください
これを走らせると、大抵のウインドウ上では問題なく左クリックできるし、ドラッグ&ドロップも問題なく出来るのですが
タスクマネージャーのウインドウ上や、一部特定のウインドウ上では、まったく左クリックできなくなります
また、タスクマネージャー上ではスペースキーを押しても全く反応しません
たとえばタスクマネージャーの右側にあるスクロールバーを動かすことも出来なくなります
タスクマネージャーウインドウ上で右クリックをしたらフォーカスがこのウインドウに動いて、そうなると左クリックが利くようになります
なんで?
--- 以下、スクリプト
Space::
Click
return
LButton::
Send, {LButton Down}
return
LButton Up::
Send, {LButton Up}
return
再現性なし
ちなみにWin7、バージョンは1.1.14.04です
頭に#UseHookをつけてもつけなくても同じです。書き忘れててごめん
444 :
441:2014/06/27(金) 08:04:11.05 ID:YFIu4QGg0
>>441です
わたしのWin7はまだ買って3か月くらいなのですが、パソコンを再起動してやりなおしてみたら、
タスクマネージャーのウインドウ上では問題なく動きました。申し訳ありません
でも、AutoItというソフトを使っていて、これのエディタにSciTE4AutoIt3っていうのがあって
これのウインドウ上では再起動直後でも
>>441の簡単なスクリプトでやっぱりおかしくなります
もともとは、AutoItスクリプトを編集しようとしてウインドウにフォーカスできなくなって気づきました
それでいろいろやってたら、タスクマネージャー上でも同じ症状が起きたので、
>>441の質問になったのですが
SciTE4AutoIt3は使ってない人も多いと思うので、一旦この質問は取り下げますね
446 :
441:2014/06/27(金) 15:56:39.47 ID:77zvSBeR0
>>445 お返事ありがとう。わたしもこの前まで使ってたXPでやってみました。ちゃんと動きましたね
でも、Win7ではやっぱりダメです。プラットフォームによって動きが違うとか、なんかめちゃいやですねえ
AutoItは最近知って使い始めました。以前はGhostTracerを使ってました。こんな便利ですばらしいものがあったなんて
もっと早く知ってればとほんと悔しい思いをしましたよw
なんで日本でもっとメジャーにならないのかほんと不思議でなりませんww
ああ、これかあ。ありがとうございました
AHKファイル上で右クリックで管理者として実行ってやったら問題なく動きました
>>439 これ、やってみたけどなかなか面白いねえ
でもデスクトップ上に置いてあるアイコン等も一緒に変えられたらもっといいね
これは単にウインドウを表示したり隠したりしてるだけなんだな
450 :
名無しさん@お腹いっぱい。:2014/06/29(日) 09:46:40.92 ID:vZXQ1YPC0
文字列のカンマの置き換え、やり方解る人いますか?
StringReplace, Clipboard, Clipboard, ",", +, All
だと期待通りに動きません。
あ、なんかスマートじゃないけどComma = , で変数にしてやれば動きました。
えすけーぷ
453 :
名無しさん@お腹いっぱい:2014/06/29(日) 12:19:55.29 ID:t1j+j0Hm0
アプリ起動時に(起動直後のみ) 1回だけ 自動的に ahkをreload
させる命令を送りたいのですが上手くいきません。
#IfWinActive ahk_class ○○
Reload This Script
Return
a::b
Return
c::d
Return
#IfWinActive
この記述だと、永久的にReloadを繰り返している?ようで、
タスクバーのAHKアイコンが点滅し続け、スクリプトも機能しません。
どなたかアドバイスください。
454 :
名無しさん@お腹いっぱい。:2014/06/29(日) 12:29:33.92 ID:0BrASA2P0
一度iniにフラグを書きだそう
inireadとiniwriteの合わせ技でフラグを外に置いてifで分岐すればいい
ifexist, _rld
{
filedelete, _rld
}
else
{
fileappend,, _rld
reload
return
}
ファイルをフラグ代わりにしてもいい
456 :
453:2014/06/29(日) 12:55:56.12 ID:t1j+j0Hm0
>>455 早速のアドバイスありがとうございます。
inireadとiniwriteの合わせ技というのが良くわからず、
単純にahkファイルに記述したのですが、reloadしないようです。
>>456 >inireadとiniwriteの合わせ技というのが良くわからず、
iniの読込にはinireadコマンドを、iniの書き込みにはiniwriteコマンドを使いなさい。
ってことじゃないの
>>454が言いたいのは。
例えば、hoge.iniというiniファイルを用意して以下の通り記述したとする。
[WinExist]
winclass_○○=0
このスクリプトの起動時、inireadで「winclass_○○」の値を読み取りフラグ変数に代入する。(autoexecセクションに記述する)
「ahk_class ○○」のウインドウが存在し、尚かつアクティブで、尚かつフラグ変数の値が「0(false)」なら、
iniwriteで「winclass_○○」の値を「1」に書き換える。
次に、「ahk_class ○○」のウインドウが存在しなくなったら、
iniwriteで「winclass_○○」の値を「0」に書き換える。
これをsettimerで定期的にウインドウを監視すれば良いんじゃないか?
※頭で考えただけで、実際に動作確認してないので間違ってる可能性有り。
あと、
>>453のスクリプトはリマップとその他のスクリプト(通常のスクリプト?)とがごっちゃになってるみたいだから、
リマップはリマップだけでまとめて書いた方が後々見やすいと思う。
やり方指導とは関係ないが、何故起動時にreloadが必要なの?
理由次第ではreloadよりいい方法があるんではないかな
的外れなレスしたみたいだから455は無視してね
>>453 SetTimerで監視すればいい。
初回起動(Auto-executeセクション)対象があるなら↓3:開始
1:対象が無いなら適当に500msでタイマー監視開始
2:見つかったらタイマーOff
3:対象が終了するのをタイマー監視開始
4:対象が終了したら1:を開始.....
>>458 も言ってるが、まず最初に何がしたいのか書いてほしい。
*以降推測
対象がホットキー系の機能を使用している場合、後に起動した方が優先される。その為のReload?
APIフック使わずにAHKフック(#UseHook)使えば解決する場合がある。
元々のショートカットキーCtrl+f,Ctrl+bをCtrl+@をはじめに押してか
ら次に押すまでCtrl+Alt+f,Ctrl+Alt+bに置き換えたくてスクリプトを
書きましたがうまく行きません。
C-f,C-bはテキストエディタのカーソルの左右移動として、
C-M-f,C-M-bは左右の文字の選択として使おうと思っています。
アドバイスいただけないでしょうか
Loop{
Sleep, 1000
KeyWait, ctrl, D
KeyWait, @, D
MsgBox, start
Loop{
if(GetKeyState("Ctrl", "f"))
Send,^!f
else if(GetKeyState("Ctrl", "b"))
Send,^!b
else if(GetKeyState("Ctrl","@")){
MsgBox, end
Break
}
}
}
>>461 ホットキーに登録:Ctrl+f Ctrl+b Ctrl+@
Ctrl+@:押す度に変数(例:Flag)増減 Flag + 1 、Flag - 1
Ctrl+f Ctrl+b:変数の値で発行するキーを変更 If+send
CUIを動かすGUIソフトを使っていて基本的に後ろで動かしたいのですが、そのGUIにCUI実行中の画面を非表示・最小化にする機能がなくて、次の作業にうつるたびに現在使用中のウィンドウのフォーカスが奪われてしまいます
フォーカスを奪われないようにしたいのですが、色々と常駐させているのでsettimer以外でWinSetで最前面に表示するをトグルさせるようにしたいのですが実装する方法はありますか?
464 :
453:2014/06/30(月) 00:25:43.66 ID:mtL6XQ+L0
皆さん、レスありがとうございます。
AutoHotkeyを起動後、Notepadを起動、
Notepadにて作業、作業終了後、Notepadを終了。
その後、Notepadを新規に開き、作業を始めようとすると、
AutoHotkeyが起動している(タスクバーに存在)にもかかわらず、
リマップが効かなくなっていることがしばしばある。
そんな時はAutoHotkeyをReloadすると、リマップが有効になる。
AutoHotkeyを終了し、再起動しても同じく有効になる。
よって、やりたいことは、
Notepadを新規に開いた時に、自動的にAutoHotkeyをReloadしたいのです。
よろしくお願いします。
>>464 既に答えが出てる試した?
>>460 言ってる意味が分からないならリファレンスを読み直そう。
>>463 最小化も非表示もOSの機能だから呼び出せば?
ソフト側の想定外の状態だろうから処理エラーが出るかも。
非表示 WinHide + WinShow
タイトルバーを表示 WinSet +-0x00C00000
最小化の許可 WinSet +-0x00020000
>>463 OnMessage()でWM_ACTIVATEあたりを拾ってみるのはどうだろう?
>>464 それは対症療法でどうにかするんじゃなく、リマップが効かなくなる理由のほうを直さないと
原因とは関係ないけど>453のおかしい所
> #IfWinActive ahk_class ○○
> Reload This Script
> Return
#IfWin〜は特定の条件下でホットキー効かせるためのもの
ホットキー指定なしで Reload指定しても有効にならない
現状でリロードループに陥ってるのはAuto-executeセクションとして認識されてるから
http://ahkwiki.net/Scripts#Auto-execute > a::b
> Return
リマップにはReturn書かない
http://ahkwiki.net/Remap こういうことの積み重ねでどっかで止まってるんだと思われ
>>6のQ9みたいな事例はまだ経験したこと無いんですが、
いつ何時起こるか分からないので、その時にパニックに陥らないよう、
いざという時↓のスクリプトを走らせようかと書いてみたのですが、
これで十分ですか?足りない部分が有ればご指摘下さい。
Send, {Alt Up}
Send, {LAlt Up}
Send, {RAlt Up}
Send, {Ctrl Up}
Send, {LCtrl Up}
Send, {RCtrl Up}
Send, {Shift Up}
Send, {LShift Up}
Send, {RShift Up}
これはなんで最後 数値に変換されてしまうのでしょう?
x = 1と参照はしてるけど、xの値は変わってないのに
(o.Insert("" . x) とすれば回避できますが、どういう時にこういうことが起こるのか知りたい)
versionはv1.1.14.03
o := Object()
x := "0xf"
msgbox, % x ; 0xf
o.Insert(x)
msgbox, % x ; 0xf
msgbox, % o[1] ; 0xf
if (x = 1) {
}
msgbox, % x ; 0xf
o.Insert(x)
msgbox, % x ; 0xf
msgbox, % o[2] ; 15
>>469 それでもいいけど
この1行でいいんじゃね?
send,{Lctrl up}{Rctrl up}{Lshift up}{Rshift up}{Lwin up}{Rwin up}{LAlt up}{RAlt up}{Lbutton up}
>>470 ifでx参照する際に10進数の数値として扱われているのが原因?・・・。
*対策
文字列として扱う x = "0xf"
出力する際に16進数として扱う SetFormat, IntegerFast, h
474 :
450:2014/07/01(火) 22:45:04.80 ID:Dl4eSanY0
以前質問したものですが、当方の環境だとなぜかエスケープが使えないようです。
例えば
MsgBox, 4, , This is the 3-param method, non-escaped commas ok.`n`nContinue?
これだとエスケープが効かずに文字がそのまま出てしまいます。
原因解る方いますか?
475 :
450:2014/07/01(火) 22:54:57.00 ID:Dl4eSanY0
自己解決しました。
コピーしてきたスクリプトの中に#EscapeCharが紛れてました。
LButton::
Send, {LButton Down}
return
LButton Up::
Send, {LButton Up}
return
この簡単なスクリプトを入れただけで、下記のおかしな動作になることがわかりました
AからBフォルダーにファイルをコピーするときに、Ctrlキーを押してからAのファイルを左クリックして
ドラッグ&ドロップでBフォルダーに移すとちゃんとコピーされるが、
Aのファイルを左クリックしてからCtrlキーを押してBフォルダー上へ移すと、ツールチップはBへコピーと表示されるが、コピーされずに移動になる
Aのファイルを左クリックしてBフォルダーへ移すと、ツールチップはBへ移動とでる。そのままBフォルダー上でCtrlキーを押すと
ツールチップはBへコピーに変わるが、実際はコピーはされずに移動になる
一体何をしようとしてるのかよくわからんのだが、左クリックの機能を残したいの?
フックはしてみた?
そもそもキー機能を残すだけなら~を先頭に付けたほうが安定するよ
478 :
461:2014/07/04(金) 22:05:42.31 ID:XeY95yY60
461です。下で思っていた動作はしたのですがRightを^f,Leftを^bとしたとき動作しませんでした。わかる方いらっしゃいませんか
^f::
if(flag = 1)
Send,^!f
if(flag = 0)
Send,{Right}
Return
^b::
if(flag = 1)
Send,^!b
if(flag = 0)
Send,{Left}
Return
なんか書き方まずいなそれ
^@::
flag:=!flag
return
これでフラグをトグルして
^f::
if(flag = 1)
{
Send,^!f
}
else
{
Send,{Right}
}
return
こうじゃね?
>>478 フックを使わないとSendで発行したキーにもホットキーが反応する。
ttp://ahkwiki.net/-UseHook 意図した動作をしない場合は右下のHアイコンダブルクリックして
スクリプトやキー操作履歴を見よう。
以下のコマンド必須
#InstallKeybdHook
#InstallMouseHook
あーそっちか
ファイルの先頭に#Usehook書くのはクセにしておいたほうがいろいろといいよ
もしくは先頭に$か
>>480 うまくいきました。操作履歴とフックを使うのを忘れないようにします
>>481 ^@::でifを2回使ってたのですが使わずにできるのですね
お二方、ありがとうございました
>>482 横から申し訳ないけど、条件毎に分けるこういう書き方はどうでしょう?
#IF (flag = 1)
^f:: 〜
^b:: 〜
#IF ;この行無くても良い?
#IF (flag = 0)
^f:: 〜
^b:: 〜
#IF
>>477 実際はもっと複雑な分岐等の入ったスクリプトになってる中で、問題が起きたのでいらない部分をそぎ落としただけですよ
UseHookはつけてもつけなくても変わりません
〜はつけてやってみたら、ファイルコピーは問題なくできたけど、ダブルクリックが出来なくなったり(UseHookつけてもつけなくてもダメ)
エディター上で左クリックをしただけでワード単位で選択されたりして、使えませんね
マウス左ボタン係は下手にいじらんほうがいいよ、鬼門だ
カーソル遅延とかドラッグとかどうしても生動作ほどスムーズにはできない
単純なスプリントでは代替できないと思っといた方が良い
×スプリント
○スプリクト
>>483 if(flag=)で最初書いててうまく行かなかったんですけど#ifと書けばよかったんですね。かなり行数減らせました。ありがとうございます
>>485 マジか? 俺だけ?
>>486 ありがとう。AutoHotKey使い始めてまだ日がないんだけど、いろいろ癖になれるまではトラブりそうです
Ctrlキーを押したらツールチップは移動からコピーに変わったからコピーされてると思ってたらコピーされてなくて
元の大事なファイルを亡くしてめちゃ痛い目に会いました。ちょっと報告しておこうと思いました
スクリプトの全体像が見えないとなんにも言えねぇ
AHKでテキストフィールドにフォーカスがあたっているかどうかのイベント取得はできるんでしょうか?
C-hでのBSやC-mでのEnterを、テキスト入力時のみに限定したいのです
検索の仕方が悪いのか、ぐぐっても情報が見つからず・・
http://ahkwiki.net などは調べています
イベントは状態じゃないので、1行目の書き方はおかしいが、
まぁ、なんとなくいいたいことは分かる。
まじめにフォーカスの移動を検知してキーマップ変えたいなら以下を参照に
https://sites.google.com/site/agkh6mze/howto/winevent でも、フォーカスが当たったところが入力エリアかどうかは自分で判定してやる必要がある。
擬似的にやるなら、キャレットの有無や位置でやる。
これも一般的なテキスト入力欄には効くけど、
最近のブラウザはキャレット処理自体も自前なのでほぼ太刀打ちできない。
いずれにせよ、完璧に制御する決定打は無いんじゃないかな。
494 :
名無しさん@お腹いっぱい。:2014/07/06(日) 02:22:58.51 ID:XPp6jgfj0
MouseGetPos,,,,OutputVarControl
If (OutputVarControl = "GeckoPluginWindow1") or If (OutputVarControl = "GeckoPluginWindow2")
うーん、firefoxプラグインのコントロール上でだけ別の操作ってのは完成したんだが、この
If (OutputVarControl = "GeckoPluginWindow1") or If (OutputVarControl = "GeckoPluginWindow2")
の行のGeckoPluginWindow2とかワイルドカードにできないかな。
最後の数字だけが違うだけで何行も書き連ねなきゃいけないのはスマートに思えない
>>494 If RegExMatch(OutputVarControl, "^GeckoPluginWindow\d+$")
関数の戻り値を利用、関数は式なので覚えておこう。
>>495 こんな方法があったのか……
If式として使えるのは初めて知ったよありがとう
498 :
491:2014/07/06(日) 15:21:36.46 ID:8fexpNHQ0
>>492-493,497
ControlGetFocusを用いる方法は、ClassNNの文字列で入力エリアかどうか判別するという理解で良いですよね?
試してみたのですが、入力エリアを一意に判別できるキーワードが見つからず、断念しました
(捉え違えていたらすみません)
そこで、A_CaretX/Yを用いて以下の様な仕組みにしてみました
エクスプローラなど一部のソフトでは入力エリア以外でもキャレットの値が帰ってきてしまうため
まだ改良が必要だとは思いますが・・・
ありがとうございました!
~Ctrl & H::
If (A_CaretX != 0 && A_CaretY != 0)
{
Send,{BackSpace}
Return
}
>ControlGetFocusを用いる方法は、ClassNNの文字列で入力エリアかどうか判別するという理解で良いですよね?
ボタンやラベルなら文字列判別でもいいけどEditBoxではそれは無理
Edit1 とかのClassNN名称で指定する
ごめんSetFocusと勘違いした、499は忘れてちょ
こんなところで聞くことじゃないけど、MSDNってどこで勉強できる?
calldllとかイミフすぎる
アンカーを付けてほしい、ログで見るときにすごく見にくい。
アンカーツリー文化はニフティの衰退と共に滅びたと思ってたが
>>491 そもそも論で悪いんだが、何故入力エリア限定のリマップしたいわけ?
誤動作が怖いのなら、適用させる(させない)ウインドウを指定する形にすれば良い気がするけど。
例えば、適用"させない"ウインドウを指定してリマップ
#IfWinNotActive, ahk_class Notepad
^h::send,{BS}
複数のウインドウを指定したいならGroupAddでグループ作って、
#IfWinNotActive, ahk_group グループ名
^m::send,{ENTER}
頓珍漢な事言ってたらご免。
>>487 ×スプリント
×スプリクト
○スクリプト
(ノ∀`) アチャー
507 :
491:2014/07/07(月) 01:35:18.74 ID:qshqbG/d0
>>504 仰る通りです、はい
建前(というか言い訳?)としては、仕事柄いろいろなソフトを使う機会があるので
なるべく保守性・汎用性の高いものを…という思いがありました
「テキストエリアのみ」ルールが小一時間で作れるのであれば良かったのですが、なかなか難しいものですね
アドバイス頂いたとおり、誤作動のたびにGroupAddにウィンドウ名を書き足す形で運用したいと思います
ありがとうございました!
>>501 いろいろな言語で利用する物だから、教本がそろっている言語で勉強してから
AHKで読み解くのが一番深く理解できると思う。
「AutoHotkey 関数名」とかでググれば先人たちの使い方見て何となく分かるので不自由ないがw
一瞬スクリプトなのかスプリクトなのか
分からなくなったじゃねえか
>>501 Micro SoftのMSDNのページだったか、開発者向けのページだったかに、Windows Programmingの
説明が普通の入門書レベルで一冊分くらいなかったっけ?
そんな入門編はいらねーぜ!とか、もう読んだよっていうなら、MSDNの中を検索しながらうろつくことに
なると思う。
calldllとかその辺の関数は、それなりにまともな開発言語を使えないと意味わからないと思うから
C#とかC++(MS推奨言語w)をざっと勉強してからのほうがわかりやすいと思うよ。
簡単な""で挟むスクリプトですが
Dq(){
bk := clipboard
send,^x
ClipWait, 0.2
if(ErrorLevel = 0){
send,"
send,^v
send,"
}
clipboard := bk
return
}
期待通りに動作しません。グーグルの検索窓などでこれを実行すると10%くらいの可能性で失敗します。
clipboardのバックアップの行を戻すと失敗率が減ります。何か原因解る方教えてください。
以上はうまくいかない最小構成で、色々機能をつけるとどうも失敗率があがります。
>>511 どんな失敗か書いてないが、Sendの入力速度が速すぎるのかと。
*SetKeyDelay
*Sleep
*入力モード変更
*まとめてから入力
Clipboard = "%Clipboard%"
グーグルの検索窓でテキストにこれを掛けまくると解るのですが、
最初のクリップボードの内容が出現してしまいます。
色々やってみましたがお手上げ状態です。
期待通り→Send,"%Clipboard%"
失敗時 →Send,%bk% バックアップ用の変数
bk関連行なし→空白が戻る
訂正:
bk関連行なしの失敗時→空白が戻る
もらったレスで解決してんじゃん
ClipWait, 0.2のタイムアウトが早すぎるんじゃね
>>514 スクリプト実行前からクリップボード内に何かが入ってると、ClipWaitは
send,^xが失敗したとき、スクリプト実行前のそれを見て成功と見なすよ
>>511 IMEの状態を考慮したらこっちの方がまだ良いと思う。
あなたの環境でまともに動くか分からないけど。
Dq(){
bk := clipboard
clipboard =
send,^x
ClipWait, 2
if(ErrorLevel = 0){
clipboard := """" . clipboard . """"
send,^v
}
clipboard := bk
return
}
もう答え出てましたね、スンマソン
clipboardを空にしておく、ってのが一番の肝だったのですね
これは知ってないとわかりませんね
一言礼ぐらい言えんのかよ
知ってないとわからんも何もClipWaitのExample(s)にそのまんま例が載ってるだろ
知らんでもちょっと読めばすぐ知ることができる情報だ
なんだおめえは。おれは質問者じゃねえよ
じゃあ1行目は質問者に、2行目以降はお前にってことだろ
なんか変な基地外が湧いてるなあ。こんなことで突っかかって
まさかID変えて入ってきたりしてねえよな
自演認定とか勘弁してください
質問者じゃないことも考えたけど省略してすまなかった
だが「知らんとわからん」とか突っ込まれても仕方ない
上のほうで、タイムアウトが早すぎるんじゃねって言ってるやつもいるだろ
だから、ちょっと一行まとめただけだろ。おれは横から見ていて、これはおれも気を付けておこうと思って
なかなかいい流れだったからちょこっと書いただけだよ。あんまり大上段に変ないちゃもんつけんなよ
これ以上このスレ荒らしたくないからここまでにしとくわ。お前もここまでにしといてくれ
ClipboardやClipWaitのExample(s)に書いてある
つまづいた時は関連コマンドのExample(s)コピペして動作確認するといいよ
なんか最近、自分はちゃんと書いてるのにうまく動かないですけど? って感情を押し殺せない感じで
質問してくる人多いな、同一人物かも知らんけど
まあ
>>470あたりはバグっぽいなとは思ったけど、たかを括ってるような聞き方が気になった
ID:WHhO2dKf0 いろいろ過敏な奴だなww
>>528 やりたいことできそうなコマンド見つけたらExample(s)見るといいヒント載ってることが多いよね
あと、やりたいのと違うコマンドだったとしても、Relatedをチェックすると目当てのコマンドが見つかったり
説明書みたいなもんなんだから、いきなり全部読めとは言わんがわからんかったら読めよと
言われるより先に相手をキチガイ扱いしたからといって
自分のキチガイぶりが打ち消されたりはしませんよ
532 :
名無しさん@お腹いっぱい。:2014/07/09(水) 14:31:18.80 ID:y63RGsRUi
殺伐としたスレにryのAA↓
>528は
>>521へのレスのつもりだったが
リロードしないで書き込だら追い打ち的な感じになってて焦ったわ
何やら朝からエキサイトしてたんだな
528の後半にも書いたけど自分はあまりいい流れには感じてなかったな
>521は敬語じゃなかったら質問者と混同されることはなかったと思う
なんだ、このスレも下らない連中が多いんだな
今日はちょっと蒸し暑いからな
台風のせいで電波が乱れてるんだろ
どれ、川を見に行ってくるか
>>538 お前さんは空気読めないって言われないか?
また殺伐とさせたいのかい?
ブーメランwww
>>534-537でスレチな話を展開しているところに
>>538で更にそのスレチな話についての話をすることで完全に流れを脱線させるというスレ嵐の初等テクニックでつね
油断ならないな
543 :
名無しさん@お腹いっぱい。:2014/07/09(水) 22:59:33.68 ID:Y7qNo3Ym0
調べてもわからんかったので聞きたい
MG_RB_Enable:
Hotkey,*RButton,MG_RB_DownHotkey,On
Hotkey,*RButton up,MG_RB_UpHotkey,On
return
MG_RB_Disable:
Hotkey,*RButton,MG_RB_DownHotkey,Off
Hotkey,*RButton up,MG_RB_UpHotkey,Off
return
MGLのコンフィグの中のこれって結局何をしとるの?
autohotkeyでローカルにあるファイルを削除するためだけの.ahkを作成したいのですが、
一行だけ
FileDelete,"E:\work\XRecode_II_v1.0.0.rar"
とやっても削除してくれません。なにかしら前後に必要な行を足さないといけないのでしょうか?
初心者です。おしえてください
>>545 すいません。"" 取ったら動きました...
>>545 Autohotkey使い始めて1年ぐらいしか経ってないため、スクリプトで文字列や変数扱う時に未だにハマること多い。
出来ることなら「文字列は必ず "" で括る」とか「変数は必ず %% で括る」に統一して欲しい。
それと、 = 、:= の使い方(使い分け)もホントややこしい。
=は使わず:=のみ
if分は必ず()を使う
コマンドの引数で文字列をとるところは必ず% を使う
っていう自分ルール決めればそうそう間違える事はない
そこらへんはJScriptをほんの少しだが齧ったら型だとか式だとかの意識が付いたから大丈夫だが
()を付けないif文だとifと同じ行に中括弧を置けないのが地味に嫌
エラーが出るのが嫌でどっちの場合でも違う行に置くようにしちゃったけど
やたら長ったらしくなる
550 :
511 514:2014/07/10(木) 03:11:41.22 ID:L+vfDYnb0
>>517 >>518 ありがとうございます。ClipWaitの仕様を知りませんでした。
>>519 試させてもらいましたが、失敗率40%ぐらいでダメでした。
クリップボードを空にしてもダメでした。これは以前から確認していました。
もしかしたらこちらの環境に原因あるのかもしれません。
結局ClipWait使わない、”Send,^x”を信頼せずに、重そうなプロセスわけと、Send,^cを組み入れることで保険をかける仕様にしました。
スレが荒れてしまったようですみません。
()が無いのはコマンド。
If A = 0 ← If A > 0
IfEqual, A, B ← IfGreater, A, B
で、コマンドは大抵は、第一引数が操作・参照したい変数で
残りはリテラル(書いてあるものをそのまま値として解釈する)
要は↓とかと同じ解釈。
WinGet, hwnd, ID, ahk_class NotePad
コマンド 変数 リテラル リテラル
>>551 括弧以外は完全に間違った覚え方だな。
←がイミフ
>>548でいいじゃん
自分基準でいいいから混同して間違えそうな記述は徹底的に避けるって決めとけば何とかなる
554 :
476:2014/07/11(金) 12:12:37.56 ID:Abdt0Ssg0
>>476 この問題ですが、下記のように、Blindを入れることで解決することがわかりました
初めはGetKeyStateを使ってなんとかならないかと考えたのですが、Blindという便利なものがあったんですね。
LButton::
Send, {LButton Down}
return
LButton Up::
Send, {Blind}{LButton Up}
return
556 :
名無しさん@お腹いっぱい。:2014/07/13(日) 05:13:19.39 ID:Px3b/hQV0
緊急地震速報のソフトがアクティブになったら音量を規定値まで上げたいと思っています
http://www.estrat.co.jp/download.html 下記のように設定したのですがahkを実行するとボリュームが変更されてすぐに閉じてしまいます
#IfWinActive, SignalNowExpress ahk_class WindowsForms10.Window.8.app.0.33c0d9d
Send,{Volume_Down 50} ;一旦音量を0に
Send,{Volume_Up 8} ;指定の音量まで上げる
#IfWinActive,
どこが間違っていますでしょうか?
>>556 #Persistentで常駐する。
SetTimerで定期的にwindowを監視する。
label内では、#IfWinActiveじゃなく、IfWinActiveを使う。
こんな感じにすれば良いんじゃないですかね?
>>557 3行目の、「label内では、」という文言は特に気にせずに。
普通、「#If 〜 」はリマップやホットキー登録するとき使うんで、覚えといた方が良い。
#IfWinActive〜 はホットキー指定用の設定であってイベントトリガにはならないから
>557のいうとおりSetTimerで定期チェックするか、OnMessageでWM_ACTIVATE拾うとかする
あとボリュームセットは、SoundSetWaveVolume ってコマンドがあるよ
>>557-559 ありがとうございます
下記のように実現できました
#Persistent
SetTimer Volume,500
return
Volume:
IfWinActive, SignalNowExpress
{SoundSetWaveVolume, 10
}return
おれは音量セットは、SoundSetを使ってた。あとSoundGetと一緒に
お尋ねさせてください。
変換キー、無変換キー、任意のキーの同時押しにアクションを割り当てたいのですが
以下のように記述してみても上手くいきません。
vk1Dsc07B & vk1Csc079::
If GetKeyState("w","P")
send {" 2}{Left}
return
2行目をコメントアウトすると動きますが、3つ目のキーを組み合わせようとすると
何も起きなくなってしまいます。
どなたか、改善方法をご存じの方がおられましたら教えていただけないでしょうか。
OS: Windows7 x64 SP1
AHK: AutoHotkey_L v1.1.15.02
KeyWaitなりLoopなりで3つ目のキー入力を待つ処理を入れないと駄目じゃない?
レスありがとうございます。
>>563 Inputを使う方法で同時押しができるようになりました。
教えていただき、どうもありがとうございます。
>>564 KeyWaitを使い、以下のようにしてみましたが上手くいきませんでした。
vk1Dsc07B & vk1Csc079::
KeyWait,w,T0.5
If(ErrorLevel)
{
If GetKeyState("w","P")
send {" 2}{Left}
return
}
return
恐縮ですが、お差し支えなければ改善点を教えていただけませんでしょうか。
566 :
564:2014/07/14(月) 00:29:33.97 ID:eXHlKKmg0
>>565 うん、すまない思い付きで書いただけなんだ
KeyWaitだとDオプション付けても、wキーが入力されてしまうから使えないね
変換・無変換が押し下げられている間だけ、wキーのホットキーを有効にするとか
vk1Dsc07B & vk1Csc079::
vk1Csc079 & vk1Dsc07B::
Hotkey, w, hk_w, On
While (GetKeyState("vk1Dsc07B", "P") && GetKeyState("vk1Csc079", "P"))
Sleep, 10
Hotkey, w, hk_w, Off
Return
hk_w: ; HotkeyがOnの時にwキーで実行される
Send {" 2}{Left}
Return
$w::
While(GetKeyState("vk1Dsc07B", "P") && GetKeyState("vk1Csc079", "P"))
Sleep,10
Send {" 2}{Left}
Return
たぶんこれでいい
おっと、失敬囲ってなかった
$w::
While(GetKeyState("vk1Dsc07B", "P") && GetKeyState("vk1Csc079", "P")){
Sleep,10
Send {" 2}{Left}
}
Return
570 :
562:2014/07/14(月) 21:21:28.35 ID:BAqRoTZA0
レスありがとうございます。
Inputコマンドを使って同時押しする方法では、1つのキーに複数行の操作は割り当てられないのですね。。
>>567-569で書き込んでいただいた方法でも上手くいかず途方に暮れていましたが
たまたまwではなく他のキーを割り当ててみた所、すんなりと同時押しできるようになりました。
色々試してみたのですが、どうも自分の環境ではキーボードの左端2列のキーとGetKeyStateの組み合わせは上手く機能しないようでした。
ですので、それ以外のキーとGetKeyStateの組み合わせで対処いたしました。お騒がせして申し訳ありません。
これまでレスをいただいた方々、どうもありがとうございました。
タスク切り替えをしたいんですけど
vk1Dsc07B & 1::
If winactive ahk_class TaskSwitcherWnd
send,{left}
else
send,{Alt down}{tab}
return
vk1Dsc07B & 2::
If winactive ahk_class TaskSwitcherWnd
send,{right}
else
send,{Alt down}{tab}
return
~vk1Dsc07B up::
If winactive ahk_class TaskSwitcherWnd
send,{Alt up}
関数化したいのでAlttabは使いたくないんですけどうまく動いてくれません
切り替えどころかAlt downのままになってしまいます
なんででしょ?
>>571 コンビネーションキーの起点にしたキー(無変換キー)については
そのキー単独(up含む)に割り当てが出来なくなる。
なのでやるとしたら例えば settimer 等を使わないと無理。
vk1Dsc07B & 1::
Ifwinactive ahk_class TaskSwitcherWnd
send,{left}
else
send,{Alt down}{tab}
settimer, labelhoge, 50
return
vk1Dsc07B & 2::
Ifwinactive ahk_class TaskSwitcherWnd
send,{right}
else
send,{Alt down}{tab}
settimer, labelhoge, 50
return
labelhoge:
if !getkeystate("vk1Dsc07B", "P") {
send, {alt up}
settimer, labelhoge, off
}
return
マウスボタン混ぜたコンビネーションホットキー(2-hooks)が急にSendでも反応するようになった
ホットキーの起動キー名を変数で指定するにはどうすれば良いのでしょうか?
変数 = a
%変数%::b
とかはダメみたいですけど
Hotkeyっていうまんまの名前のコマンドがあるからwiki見れ
できました
ありがとうございました
とりあえずほんのちょっとスレさかのぼってみればいいんじゃないかな
まるっきり同じ勘違いしてるみたいだし
>>556-560読み飛ばしてました
これなら出来そうです。ありがとうございました。それと失礼しました
GetDir(Str){
msgbox %Str%
i := 1
StringSplit, Array_, Str, \,
msgbox %Array_0%
loop,%Array_0%{
Str2 = %Str2%%Array_i%\ ←これのiを変数としたい
}
msgbox %Str2%
}
フルパスからディレクトリを取りたいのですが、
配列の添字を変数にする方法が解りません。誰か分かりますか?
SplitPathじゃだめなの?
SplitPathでよさそうだね
とりあえず変数の動的な指定の仕方は
Str := Str2 Array_%i% "\"
もしくは
Str = % Str2 Array_%i% "\"
あちゃー、そんな便利な関数が。
ドキュメント探したつもりだったんだが・・・。
いずれにせよありがとうございました。助かります。
必要なドキュメントを探しだすことも
技術の一つなのよ
procexp.exeとからプロセスが使用しているファイル一欄がわかりますが、AutoHotKeyでこれと同じように任意のプロセスの使用ファイル一覧は取れるでしょうか?
>>585 http://ahkwiki.net/Process の「Process」ページに、以下の例文があった。
後は自分の使いやすいように改造すればいいんじゃない?
例5: COMを利用してプロセス一覧を得る。MSDNを参照。
Gui, Add, ListView, x2 y0 w400 h500, Process Name|Command Line
For process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process")
LV_Add("", process.Name, process.CommandLine)
Gui, Show,, Process List
587 :
名無しさん@お腹いっぱい。:2014/07/17(木) 11:56:48.76 ID:8yaW/hEv0
#Ifで囲ったホットキーが実行されたら自動的に変数に数字を入れる、とか無理なんでしょうか?
#IF hoge=1
hige := 1
A::msgbox,A
#IF
のように#If条件が整ったら即higeに変数にフラグを入れたいんですができませんか?
>>587 これ1行目と最後の行で意味違うけどどっちがやりたいんだろ
1行目がやりたいならA::の下にmsgbox,Aとhige := 1持ってくるだけでよさそうだし
最後の行がやりたいなら毎度おなじみの#If系の勘違いなので
>>578 hogeを1にするのが誰でどんなときなのかわからんが、
その時ついでにhigeも1にできるのならhogeを監視する必要すらなさそうだけど
>>589 #If中にホットキーを大量に登録するんでその判別フラグとして使いたいんですよね
で、条件中のホットキーがどれを押されてもhigeを1にしたいんですよ
#IF hoge=1
A::
B::
C::
D::
E::
#If
#if関係ない
ホットキーが実行されたら変数入れたいってんだから
ホットキースレッドで変数入れりゃいいだけ
>>591 つまりホットキースレッド全部に変数を入れる行をかけということですか
了解です
もしくは↓みたいにするか
#IF hoge=1
A::
B::
C::
D::
E::
hige := 1
if (A_ThisHotkey == "A") {
}
else if(A_ThisHotkey == "B") {
}
return
#If
逆に行数多くなってるし視認性が・・・
普通に1回1回書くか、もしその判別フラグとやらの管理が長くなるなら
素直に関数化かラベル化して1回1回飛んだ方が良さげ
hoge := 0
hige := 0
#If (hoge == 1) && (hige:=1 || TRUE)
F2::MsgBox, hige = %hige%
#If
F2::hoge := 1
>>595 いいね
#If (hoge == 1) && ((hige:=1) || TRUE)
のがいいんじゃね?Lの環境内からわかんないけどもしも0入れたくなったら使えないかも?
>>598 悦に入りたいだけのレスをやめて
訂正してくれるほうが無駄なレスが減ると思うんだけど?
「い」と「え」の区別が出来ないようなやつにかまっても意味ないだろ
おれなら関数にするかな
#IF hoge=1
A::nanika("{A}")
B::nanika("Bラベル")
#If
こっちが関数
nanika(key){
hige:=1
if (islabel(key)) ;分岐させる
gosub % key
else
Send % key
}
>>589が前半に言ってるようにした方がシンプルで分かりやすいような気がする。・・・(1)
もし、「hige := 1」のところが複数行なら、そこだけ関数にするかサブルーチンへ飛べば良いと思う。・・・(2)(3)
#IF hoge=1
A:: ;(1)
hige := 1
msgbox,A
return
B:: ;(2)
hige_func()
WinActivate, 電卓
return
C:: ;(3)
gosub,hige_sub
Send, {F1}
return
#If
hige_func(){
hige := 1
処理
}
hige_sub:
hige := 1
処理
return
年月日を入れたら、曜日が出てくるような関数ってありますか
それと、1900年1月1日を1日目として通し番号を出してくれる関数ありますか
こちらがあれば、それを7で割った余りで曜日もわかるし、何月何日から何月何日までは何日間という計算も出来るのですが
自分で作らないとないのかな