■ リマップ・ホットキー割り当て
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} にする。
前スレが終了しそうなのと、別の話題で盛り上がってるようなので新スレに質問を書きます。 別に急ぎませんので、前スレが終わってからお願いします。 ダイアログウインドウのボタンにMouseMoveしたいと思ってます。 条件として、デフォルトボタンかフォーカスがあるボタンへです。 そこで「ControlGetFocus」や「ControlGetPos」を使おうと思ったのですが、 「ControlGetFocus」はボタンにフォーカスがあればclass名は取得できますが、 ボタンの位置は取得できませんし、ボタンにフォーカスがなければ何も取得できません。 「ControlGetPos」はボタンのclass名が分からないとボタンの位置が取得できません。 何か良い方法無いでしょうか? そもそもデフォルトボタンって取得できマスかね?
>>1 スレ立て乙でした。
ごめんなさい、言い忘れてました。
ダイアログの確認ボタンてフォーカス当たってる場合が殆どかと思ってたけど違うのもあるんか デフォルトボタンの取得方法はわからんが ・「OK」「はい」「再試行」「続行」あたりで適当にあたりつけて取得してみる (Control指定はClassNNの代わりにラベルテキスト文字も使える) ・WinGet ControlListでZオーダーの一番若いButtonコントロールを探しだす ・特殊なダイアログは諦めて個別に決め打ちで対応させる あたりかな
>>11 レスありがとうございます。
それと、前スレまだ終わってないのに答えていただき恐縮です。
なるほどー、色々とやり方有るんですね、勉強になります。
リファレンス改めてよく読むと、タイトルなどの除外指定も有るようで、
autohotkeyってかなーり奥が深いんですね。
逆にその分自分にとっては複雑&難解になってしまう訳ですが・・・
あのー、pert16終了寸前に質問したものです。
そこでお断りしたようにもう一度質問書かせていただきます。(コピペします)
AutoHotkey スレッド part16
http://anago.2ch.net/test/read.cgi/software/1367725658/999-1000 >999 :名無しさん@お腹いっぱい。[sage]:2013/11/04(月) 10:35:59.65 ID:WpkoLKWY0
> MGL使ってるんだけど、pluginのscript内で「menu, tray, icon, 〜」したiconを
> MGL本体のtray iconとは別に独立したtray iconとして表示させる事出来ます?
> (プロセスがMGLの一つに対し、tray iconを二つにする、という意味)
> 今の状態だと、MGL本体のtray iconがpluginのscriptで
> 記述したiconに変わってしまうので宜しくないんですよ。
これ↑お願いします。
アイコン2つは多分できないんじゃないかな プラグイン側のアイコン変更を切るんじゃ駄目なの?
>>14 ありがと、そーかー無理みたいですか。
実は、icon二つ表示したい理由言い忘れたんで書こうとしたら
レスついてたので情報後出しっぽくてあれだけど、
それぞれのiconをindicator代わりにしたかったんですよ。
無理してpluginにするより、独立して起動させるのが無難…と言うより、それしかないか。
やりかたとしては ahkを2つ走らせる、お互いのプロセスを監視する、監視でどちらかが消えたら自分も終わらせる とする感じくらいしか思い浮かばない
>>16-17 レスありがと。
色んなツール(機能)をMGL一本に集中出来れば最高だったんですけど、そう簡単には行きませんね。
>>18 プラグインから別の場所にあるahkをRunすれば起動は同期できる
pluginsフォルダにサブフォルダ作って入れとくとかね
>>19 ありがとう。
>>19 含め
>>16-17 あの…とても言いにくいので黙ってたんですけど、
自分がやりたかったのは、ただ単に、"複数ツールの常駐をMGL一本の常駐で賄うこと"だったんです。
でも、
>>13 での質問と
>>15 での理由説明、更に
>>18 でいい加減なレスと、皆様に誤解を生ませてしまいました。
大変申し訳ありませんでした。
あと各々の貴重なレスは今後の参考にさせていただきます。
要はinclude でまとめたいってことだろうがMGLが組み込み対応になってるかとか知らんし面倒な予感しかしないね
MGLで質問です
↓
住民が詳しすぎるレス
↓
すいませんわかんないんで諦めます
ここんとここんなんが多い気がする
ahk全般の汎用解答してもMGLでの応用方法がわからんので結局解決に至れないし
MGL使用者同士で噛み砕いてのレスの応酬されるのも正直ね
スレ消費早くないからいいじゃんてのも違うと思う
で提案なんだが重複スレのほうをMGL専用として活用してはどうか
AutoHotkey スレッド part17
http://anago.2ch.net/test/read.cgi/software/1383489925/ 前スレには詳しいMGL使いもいたから解答はつくだろうし
質問者も変にこっちで難解レスもらうよりいいでしょ
あっちこっち視るのが増えるだけで面倒だし、こっちだけでいいよ 何故そんなに分けたがるのかわからん フォーラム形式なら分けたほうがいいってのは分かるけど
MGLのプラグインいじり回すのはAHKの勉強にもなるんでこっちでいいとおもうな 俺は現にMGLにincludeで機能増やしていってるタイプで、そのほうが機能のコンフリクトとか気にしなくていいもの ただそのためにMGLをAHKファイルとして理解していく必要はあるけど、わかってくるとなかなか楽しいもんよ
んまあ、確かにAHKのスレで、MGL専門の話を繰り広げるってのは、perlのスレでperlで書かれた 特定のソフトウェアの設定・改良について話が行われているような違和感を覚えるのは確か。 本筋としては、MGLの話題はAHKのスレではスレチだからよそのスレにどうぞ。ってことになるんだろう けど、よそのスレでMGLのAHKスクリプトの話をしてもろくに理解もしてもらえないだろう。 それならこのスレでMGLの話をしてもいいんじゃないかな。 AHKを使ってる人もわざわざここ以外のスレを覗きに行くのは面倒だと思うしね。 って、長文書いたけどさ、自治なんて面倒だし適当でいいんでない?
>23みたいにMGLは入口でahkに興味出た、スプリクト覚えたいて姿勢の人ならいいと思うけど 殆どの人間はカスタマイズがちょっと難解なマウスユーティリティてな認識で使ってるっぽくない? ここはahkで作ったツールの使い方を聞くスレではないと思うし、このままズルズルサポート拠点にされるのは嫌だな あっちこっち見るの大変ていうけど、MGL使ってない人間からしたらそもそもが見る必要ないレスなわけだし
autohotkeyのスクリプトがかなり長くなってしまったので適度に分割しようと思うのですが、 そうするとこれまで一つのスクリプトでやっていたことを複数のスクリプト間で行わなくてはなりません そこで a.ahkからb.ahkにデータを渡して データを処理したb.ahkがa.ahkに処理済のデータを返す こういうことを考えたのですがFileAppendでテキストに書き出してやりとりをする以外に何かいい手はありますか?
管理するだけならそれこそincludeでいいんじゃないだろうか
「AutoHotkeyを流行らせるページ」でDLした、「システムモニタ用関数群」
http://ahk.xrea.jp/myscripts/SystemMonitor.zip の「sample.ahk」
というスクリプトを元に進行状況を表すプログレスバー作ってるのですが、
プログレスバーに反映しないデータがあり、ここで行き詰まっています。
どうしたら反映するんでしょうか?
また、できればこれを関数化したいとも思ってるのですが、
頭が混乱して右往左往しています。
とりあえず、次レスにtestスクリプト晒しますので、
ご協力お願いいたします。
29 :
26 :2013/11/05(火) 15:27:23.88 ID:wJKxtgjw0
説明不足ですみません はい#includeは使ってきました ですがそれを多用するよりもできるだけincludeを使わない方法で保守管理しやすくする方法はないかと思ったのです
col=200 ;barの表示場所左位置 Color=0000ff ;texstとbarの色 BG=000000 ;背景色(透明色) Gui,Color,%BG%,%Color% Gui,Font,C%Color% S36,ms gothic Gui,Margin,2,2 Gui,+LastFound +0x02000000 -0x0CC00000 -Border +ToolWindow +AlwaysOnTop Gui,Add,Text,x0 y200,進行 %count%`% Gui,Add,Progress,x%col% yp+0 BackGround%BG% C%Color% vMyProgress w900 h48 Control,ExStyle,0x00000000,msctls_progress321 WinSet,TransColor,%BG% 180 ;透明度 Gui,Show SetTimer,DrawPerf,1000 DrawPerf: if count > 100 count := 0 count += 10 GuiControl,,MyProgress,%count% ;barの変化を反映させる(?) return フォントが巨大だったり、色が気味悪いとか色々とありますが、test中なのでご勘弁を・・・
肝心なこと書き忘れました。 >Gui,Add,Text,x0 y200,進行 %count%`% の%count%が空っぽで何も表示されません。 「MyProgress」は反映してるのに私には理解できませんでした。
>>31 %count% が空で表示されないのは Gui,Add,Text の時点では
count に値が設定されていないから。
count を変更してもテキストに反映されないのは DrawPerf:
の中でテキストを更新する処理を行っていないから。
後者を修正するには例えば次のようにすればよい
・Gui,Add,Text において v オプションで変数を割り当てる(例:vProgressText)
・GuiControl,,MyProgress,%count% の行の直前か直後に次の行を入れる
GuiControl,,ProgressText,%count%`%
WinSet,Top,,ahk_id %w% これが動作しません・・・(Bottomのほうは動作するのですが) ヘルプには「システムの設定によっては動作しない。」と書いてありますが 動作するように出来るのでしょうか? Win7 x64 AHKL 最新
>>32 ありがとうございます。
Gui,Add,Text,x0 y200,進行 %count%`% の行を
↓
Gui,Add,Text,x0 y200 w200 vProgressText
GuiControl,,MyProgress,%count% の行を
↓
GuiControl,,ProgressText,進行 %count%`%
と変更して希望どうり、進行状況の%表示がされるようになりました。
これで関数化に向けて落ち着いて考えられそうです。
>>34 の訂正です。(ああ、未だ頭が混乱してるかも)
中段の
GuiControl,,MyProgress,%count% の行を
↓
GuiControl,,ProgressText,進行 %count%`%
これは、
GuiControl,,MyProgress,%count% 行の下に
GuiControl,,ProgressText,進行 %count%`% 行を追加
が正しいです。
お騒がせしました。
テンキー0の横の . ←点を変えたくてwindow spyで見て vk6Esc053にしてみたんですが変わらないみたいで間違ってますか?
Numpaddot:: を使えばいい。てかAHKのキー一覧がググれば出てくるんでそれを参考にするといい
>>36 ありがとうございます!
AHK凄い36さん凄い
>>29 関数でどうよ
関数ライブラリ機能使えば楽よー
素朴な疑問。 MouseGestureL使ってる人、これexe化してる?ahkそのまま? それと、exe化して使う場合のメリット/デメリット ahkそのままでのメリット/デメリット どんなのがある?
ahkのままでつかってる。 ahkのままだとahk本体が必要 exeにすると本体不要 でもメンテとかだとahkファイルのままのほうがいいし、ahk本体も持ち運べるからそんなに重要じゃない。引数わたしとか関連付けて走らせなきゃいけないけれど exeは関連付けとか引数渡しとかそういう手間がない。全く拡張せず、完全にツールとしてしまうならexeのほうがお手軽
exe化しても、設定変えるごとに再exe化が必要になるから 実質使い物にならんよ
ahkを知らない他人が使う場合にexe化して渡してる 自分が自分のPCでしか使わない場合はahkのまま使ってる
>>44 iniファイルの読み書きできるし、パラメーター的な設定変更なら再EXE化の必要はないよ
exeで渡したらahkに出コンパイル可能?
デコンパイル不可のオプションつけてなければ戻せる。 コメントやインデントルールまで再現してくれたかは覚えてないが 自分で使う場合も常駐ahkに組み込むもの以外はわりとexe化してるな、設定はini読み コマンドラインで動かすものはahkのままだとパラメータの受け渡しが面倒だし GUI作ったものは普通のツールアプリと変わらんのでexe化したほうがランチャー起動も楽
ようは人によるってことよね AHKをランチャにして使ってる場合AHK上から子AHKファイルを読み出すときはRun,%A_AhkPath%とか使えばいいわけで、他のランチャからならexe化してたほうが楽
ループ中にキーを押されたらスレッドから即座に抜けるようにしたいんですけど可能でしょうか? スレッド内に判定を書くとそこまで待たなければならないため 別のスレッドを割り込ませてExitやExitAppをやってみたんですけど Exitは元のスレッドに戻るだけ、ExitAppはスクリプトの常駐自体も解除されてしまうためうまくいきませんでした
Continuetu 使ったら?
>>51 今やってみましたがContinuetuを別のスレッドで単独で記述するとコンパイルエラーで弾かれるみたいです
Whileで書いて、Getkeystateが1でない間にするとか
>>53 whileも判定は即座にやるわけではないので変わらないと思います
ちなみに現在のコードは
#1::
Loop{
処理1
GetKeyState, state, Esc
if state = D
break
処理2
}
return
で、処理1,2が長いためifで判定するまでキーを押したまま待つ状況です
If (Getkeystate("Esc","P")) = 1 break
知らないから適当なこと書くけど、AutoHotkey.dllならフレッドを途中で終了させるのも可能なんじゃないかな?
>>55 記述を変更してみましたが表面上の動作は同じみたいです
>>56 これからバイトなので帰ってきたら調べてみます
フレッド君は志半ばにしてこの世を去るか……
なんというタイポ、これは恥ずかしい
処理1、2の内容が分からんので何とも言えんが WinWait,WinTitle, WinText, 10 とかやってるなら Loop 10 { if GetKeyState("ESC") { アボート処理 Break } WinWait,WinTitle, WinText, 0.1 } Until ErrorLevel=0 みたいに数行にばらして処理時間を細切れにするとか
>>46 仕組みを理解してないようだな
設定は全てMG_Config.ahkに書き出されてそれをincludeする方法だから
設定変えたら再exe化が必要になるのだよ
そんな頻繁に内容書き換えるんならわざわざコンパイルせんでも。 MouseGesture.ahkの導入ページに書いてある、 AutoHotKey.exeをリネームして、同名、同ディレクトリのahkファイルを読み込むようにする方法じゃあかんの?
>>42 のexe化の話ってMouseGestureL.ahk"だけ"exe化する話じゃなかったのか?
全てのahkファイルをexe化するなんて発想はなかったよ、
>>61 みたいに。
>>63 あ、俺勘違いしてた。
>>61 ホントすまんかった、適当なこと言って。
menu, tray, add, menu&1, menu_1 menu, tray, add, menu&2, menu_2 menu1とmenu2を一つのサブメニュー(submenu)内に入れようと あれこれやってやっとエラー無く起動したコードがこれなんだけど やりたいこととは違う。 Menu, &submenu, add, menu_1 Menu, tray, add, &menu1, :&submenu Menu, &submenu, add, menu_2 Menu, tray, add, menu&2, :&submenu 何がおかしい?どこを直せば良い?
もしAが起動したらBを閉じて、起動していなければBを開く Process,Exist,A.exe If ErrorLevel<>0 Process,Close,B.exe else Run,..\..\B.exe じゃダメなの?難しい
>>67 こういうことしたい?
Process,Exist,notepad.exe
If ErrorLevel=0
Process,Exist,wordpad.exe
if ErrorLevel=0
Run,wordpad.exe
else
Process,Exist,wordpad.exe
If ErrorLevel<>0
Process,Close,wordpad.exe
>>68 ちなみに
Process,Exist,notepad.exe
If ErrorLevel<>0
Process,Exist,wordpad.exe
If ErrorLevel<>0
Process,Close,wordpad.exe
else
Process,Exist,wordpad.exe
if ErrorLevel=0
Run,wordpad.exe
だと
notepad.exe が起動中にも関わらずwordpad.exe が起動してしまうね、何故か。
>>66 やりたいことがよくわからんがこういうこと?
Menu, &submenu, add, menu_1
Menu, &submenu, add, menu_2
Menu, tray, add, &submenu, :&submenu
あと>68-69
慣れないうちはif〜else使う時は全部 { }で囲ったほうがいいよ
>>67 IfとElseどっちが上手く行ってないんだかわからんが、後者だとすると相対パスが怪しい
>Run,..\..\B.exe
A_WorkingDirはどうなってる? 条件分岐なしで起動してちゃんと開けるか確認してみ
>>70 どうもありがとう。
>>66 でも書いてるけど、単純に
>menu1とmenu2を一つのサブメニュー(submenu)内に入れようと
なので、
Menu, &submenu, add, menu&1, menu_1
Menu, &submenu, add, menu&2, menu_2
Menu, tray, add, &submenu, :&submenu
これでサブメニュー化成功したよ。
それから、質問分かり難くてすまぬ。
>>68-69 の件、{}で括り忘れてた。
ご指摘ありがとう。
>>68-70 ありがとう 初めてで何もわからない状態だったから助かった
#Persistent
SetTimer,OnTimer,2000
return
OnTimer:
Process,Exist,A.exe
If ErrorLevel=0
Process,Exist,B.exe
if ErrorLevel=0
Run,..\..\B.exe
else
Process,Exist,A.exe
If ErrorLevel<>0
Process,Exist,B.exe
If ErrorLevel<>0
Process,Close,B.exe
return
で思い通りに動作した 勝手に定期的に実行してくれるわけじゃないのね
色々自動化出来る気がしてきたから頑張ってみる
>>73 >>71 で
>慣れないうちはif〜else使う時は全部 { }で囲ったほうがいいよ
と指摘されてるように(自分が^^)
If 〜
{
処理1
処理2
}
else
{
処理3
}
な感じにしないと思うような結果が得られない場合があるから注意した方が良いよ
If 〜 { 処理 } と If 〜 { 処理 } だと行数が減る分 下の方がわずかに読み込みが早かったりするのかな
>>75 ご指摘ありがとう。
今までは、そういう風にするとエラー出るんで長ったらしく記述してたよ。
んで、改めて他作者スクリプトを良く見てみると、( )付いてるか否かの違いに気付いた。
ということで、
If ( 〜 ){
処理1
}else if ( 〜 ){
処理2
}else{
処理3
}
こう記述すと効率が良いってことかな?
____ / \ / ⌒ ⌒ \ 何言ってんだこいつ / (●) (●) \ | 、" ゙)(__人__)" ) ___________ \ 。` ⌒゚:j´ ,/ j゙~~| | | | __/ \ |__| | | | | | / , \n|| | | | | | / / r. ( こ) | | | | | | ⌒ ーnnn |\ (⊆ソ .|_|___________|  ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
変数名もできるだけ短くした方がいいぞ
AHKは昔 if (式) が使えなかった 進化の仮定で (式)が加わり、)で明示的に式の終わりを指定できるようになったため 改行前の{ も有効になった。 今でも()なしifやLoopなんかは改行しないとエラーになるものもある 改行するしないはプログラム上はCRLFの2バイト挿入されるだけで速度にはほとんど影響ない むしろ↓のようにスペースやコメント文字を入れするほうがバイト数的には増えてることもある if (Expression) { ; ○○の時は△△する 単純に自分が視認しやすい方でよいと思う
>>79 わざわざ直す必要はないみたいだね
ありがとう
そんなことより
>>68 とか、最初のifがfalseだったとき次どこいくと思ってんのかな
式は{}使えっていつも言ってんだろー!!
>>81 インデントがスペース一個で、しかも専ブラで見ると、インデント不明すぎるなw
せめて2スペでないと流し読みするから構文ミス見逃すわ
よく気付いたな…
>>68 なんだけど、弁解じゃないけど一応
>>68 は元々以下の感じでインデントしてたのを貼り付けた。
(下のは全角スペースで疑似インデント)
Process,Exist,notepad.exe
If ErrorLevel=0
Process,Exist,wordpad.exe
if ErrorLevel=0
Run,wordpad.exe
else
Process,Exist,wordpad.exe
If ErrorLevel<>0
Process,Close,wordpad.exe
で、これは
>>70 で指摘された通り、{ }で括り忘れてるので間違ってることは認識してる。(
>>69 についても同じ)
いい加減うざいよね、スマン。
いやそれはわかってる スペース一個じゃインデントしてても見づらいよって話 自分は4タブ(タブ押しでスペース4個分インデント)だが 2タブ、4タブあたりの人が多いんじゃないかね
86 :
名無しさん@お腹いっぱい。 :2013/11/10(日) 09:15:50.43 ID:OuL0Jpyr0
AHKで設定したホットキーが、Window7では正常に動作したのにWindows8では 機能しないことがあります。たとえば、タスクマネージャーがアクティブなとき、 Win+F1を押すと、AHKで設定したものではなく、「Windows ヘルプとサポート」 が立ち上がり、Win+zなどの設定もまったく機能しません。どうしてなんでしょう?
87 :
名無しさん@お腹いっぱい。 :2013/11/10(日) 09:47:44.93 ID:OuL0Jpyr0
スクリプトを管理者として実行する必要があるんですね。分かりました。
>>72 サブルーチンに入ってからThread, Priority,n指定しても割り込まれるだけじゃないかと思ってた
Thread, Interrupt, Duration [, LineCount]と併用するのね。ありがとー
>>87 Windows8だとそんなめんどくさいことになってるのか・・・
ブロックでくくるのは1行だろうとやってるな どういう式なのか視認しやすいから
このスレは行頭に半角空白とタブ付いてると、 それが削除されるからコード見ずらくなるよな。 書き込むだけなら全角使っても良いけど コピペして使う方は一手間いるから、そこがなあ。 全板、全スレそうなのかな?
スレというかhtmlの表示ルールがそうなんでないかと AAもそれ前提に作られてるから専ブラの表示も合わせてあるのが多い
> 変数名もできるだけ短くした方がいいぞ て本当? 処理がわずかでも早くなる? 今まで気ままに付けてた 日曜プログラマーにマジレスお願いします
ところで、AutoHotkeyに付属してるSciTE4AutoHotkeyで TABキー1回押しで半角空白4個挿入するにはどうすんの? それこそスクリプト書けって言われるのが落ち?
簡単やから書いちまえ IME関数でIME状態記録して半角にしてからsend,でスペース4回、その後IMEの状態をもとの書式形態に戻せばいいだけだから
janedoe view使いだけど、別にTABだろうとスペースだろうと ポップアップ表示させればインデント正確に表示されるから気にしてないな
>>94 どうもです。ヒントまで書いてくれて。
エディタ側に設定する所ないなら、そういうスクリプト書くしか無さそうだね。
>>96 エディタ側の設定で出来ればベストなんだけどね。
>>97 そのエディタを使ったことは無いけど、ソースコード編集用エディタでタブをスペースに
置き換える機能がないということは考え難いので、探せば設定項目があると思う
軽く調べた感じでは use.tabs が怪しい
>>87 Windows8では、あるプログラムを「管理者が起動する」のと、
「管理者が管理者として起動する」のでは違うんだそうです。
Windows7でもこの違いはあったようですが、 デフォールトの設定で問題が生じなかったので、 気に留めたことがありませんでした。
>>99 わざわざ調べてくれてありがとう。
webサイトの方に細かいこと書かれてたので、それ参考にいじってみるよ。
なんか、『質問する前に調べろよ、ドアホ』ってみんなから言われそうだけど、勘弁してくれ。
次から気をつけるならいいよ
大昔のリソースが潤沢じゃなかった時代は、実際にそういうことやってメモリ稼いだりとかはあったが 今は見やすさ重視で書くヨロシ 見難いコード書いたせいでバグ誘発したり、メンテナンスに掛かる時間のほうがよほど無駄 カッコのつけ方は一貫性あればいいと思うが 一行で省略できる場合でも、個人的には常につけるべきだと思っている あとで処理を付け足したりしたくなった場合の変更に臨機応変に対応できるのと 変更した時にカッコの付け忘れでのバグ防止、ブロックを明確にするなど メリットのほうが大きいと考える
てーかきれいなGUIとか昨日過多とか裏でわけわかんないもの走らせない限りは他のexeに比べて圧倒的に軽いんだからあんま気にすることでもないと思う
あと、今更ってカンジだけどよく言われるのが、 コメントがなくても分かるコードを書け。とか コメントを信じるな。とか コメントに書いてあることが仕様変更に追従してない場合もあるからな 綺麗なコードはコメントなくても文章のように読める・・・はず
一行で省略できる場合でもカッコ使ったほうがいいんですね 真似してみます If(ahk){ xxx } と If(ahk) { xxx } はどちらがメジャー?
俺上使ってる まぁ、そんなことよりsakuraエディタにAHK色変えプロファイルをインストールすべき
>>109 んなの、[AutoHotkeyフォルダ]\Extras\Editors\[各種エディタ]
内のキーワードファイルからキーワード移植すれば良いだろ?
...\Extras\Editors\EmEditor\ahk.esy
辺りが移植しやすいんじゃないか?
正規表現使いたい場合は自分で作成するしかないかもしれないけどね。
例えば、If WinExist( … )とかじゃなく IfWinExist, … の場合は、{ } はどうしたらいい?
>>110 情報古すぎ、AutoHotkey_Lにはキーワードファイルは付いていません。
そんなことよりいつまで括弧の話題引っ張る気だよ
書き方なんて個人の好みでやればいいだけだろ。
>>113 付属していませんと指摘したんだが。
同一人物だと思うが国語が残念な人、もう少し文章よく読んだら?
wikiにこういうのあったのか Mery用に使わせてもらうわさんきゅー
会話噛み合ってないなぁwとは思ったがそんなキレんでも あとIDというものをご存知か
>>116 時々スレに書き込んでる人で会話にならないのがいる。
少し上にも特徴的なのが・・・。
!?オレもキレられるんだw 同ID相手にわざわざ >同一人物だと思うが とか言うからもしかしたら知らないのかなぁと思ったんだけど もし「仮に」、 >会話噛み合ってないなぁw の方に突っかかってオコなんだったら、それこそ国語が……
どっちもどっちにしか見えないけどな 付属してないって言われて、今ある場所を見つけてきたんだから 間違いを指摘するだけよりもよっぽど有意義だと思うよ
>>118 ああ誤解させちゃったごめんなさいww ID:JduWIw5T0です。
名指しするのもアレだから曖昧に書いたのが失敗だった。
スレ汚し失礼しました。
アンカーミスが混乱をうんでる
誰も彼も混乱してら
蛇足が多すぎ 括弧の話題の方がまだ建設的だ
>>125 ホラ
力抜けばそれだけ楽になるでしょ?
>>111 普通はこう
IfWinExist, , , ,
{
}
邪道だけどこういう書き方ができなくもない(最後の , はIfWinExistとは関係ない)
IfWinExist, , , , , {
}
>>125 なるほどサンキュー、勉強になるよ。
おやすみ(´・ω・`)
マウス(カーソル)の位置じゃなくて カーソルの位置(?)を取得するにはどうすればいいんでしょうか? たとえばブラウザのアドレスバーに何かタイプしてENTERするとき カーソルがアドレスバーの位置にあればALT+ENTERにしたいです
>>127 A_CaretX と A_CaretY かな
ただし、Wiki に
>一部のウィンドウではキャレット座標が実際の位置と異なるものを返す場合がある。
>FireFoxなど独自描画を行っているものはキャレット位置を取得できない事がある。
とあるので、使っているブラウザによってはダメかもしれない
http://ahkwiki.net/Variables
ありがとうございます<(_ _)> 確かにFirefoxでは無理でした Chromeでも正確な値は取得できないみたいです
カーソル(キャレット)の位置より アクティブな(≒その位置にカーソルがある)コントロールのクラス名で判断するのがいいんじゃないかね やったことないけど
そのアイデアだと 日本語入力→変換→ENTER でもALT付きになるじゃないか
うーん、firefoxを一度RAMディスクに書き出してから起動したいんですが書き出し処理の終了を待たずにfirefoxが起動してしまいます run,RAMdisk.ffs_batch ;DropboxからRAMに書き出し。外部アプリケーション SetTitleMatchMode 2 DetectHiddenWindows On Process,WaitClose,FreeFileSync_x64.exe ←どうもこれをすっ飛ばして起動処理に入るようなんです Run,firefox起動処理 Process, Priority, %NewPID%, AboveNormal なにか間違ってますでしょうか
>>132 1行目でRunした後、2-4行目は一瞬だからFreeFileSync_x64.exeが起動する前に4行目が実行されてるんじゃない?
4行目の前に適当にSleep入れるか↓追加でどう?
Process,Wait, FreeFileSync_x64.exe
>>134 お、うまくいきましたありがとうございます
>>135 書き忘れてたけど、RunWaitでうまく処理終了が待てるならそっちの方がいいかも
upボタンを連続して押して特定のアイテムを上に持って行こうとしましたができませんでした ボタンを1回押したらlistviewのアイテムをクリックしないとupボタンが動作しましせん ボタンを押したあと選択箇所が移動しないのもその原因だと思うのですがよくわかりません どこを修正すればいいのでしょうか Gui, Add, ListView, r10, index|number loop, 10 { Random, rand, 1, 10 LV_Add(, A_Index, rand) } Gui, Add, Button, gUp, Up! Gui, Show return Up: Gui, Submit, NoHide below:=LV_GetNext(, "F"), above:=below- 1 LV_GetText(t1,below,2), LV_GetText(t2,above,2) LV_Modify(below,-Select, ,t2), LV_Modify(above,Select, ,t1) return
>>137 後もう少しで完成する、問題点は以下の通りがんばれ〜。
*関数なのでオプション名を "" で文字列にしないと変数参照になっている
*オプション Focus が足りない
*一番上になった場合何もしない処理が足りない
LV_Modify(below,"-Select -Focus", ,t2), LV_Modify(above,"Select Focus", ,t1)
環境が変わってもIEを起動したいんですけど %ProgramFiles%だとファイルが見つからないと言われます おとなしく絶対パス指定しないとダメなんでしょうか?
140 :
名無しさん@お腹いっぱい。 :2013/11/15(金) 13:51:00.01 ID:PErdqdg50
>>139 Run, iexplore.exe
これだけでOKだと思うけど
マジデスタ ありがとうございます助かりました
64bitOSに変えた? 俺も同じ状態になったからとりあえず %A_ProgramFiles% (x86) で代用してるわ "C:\Program Files (x86)"を直で指定する組み込み環境変数ってあるんかな
ifexist,%systemroot%\syswow64 { 64bitOSで走らせる処理 } else { 32bitOSで走らせる処理 } で分岐はできるぞ。 要するにsyswow64が存在するかどうかをチェックしてやればいいわけで これで64bit、32bitそれぞれに分かれてるプログラムの自動起動もできるようになる
なん、だと・・・ ありがたく使わせてもらいます。ありがとう!
なんかのアプリで編集しようとしてnotepad.exeで開こうとしたら サクラエディタに変更させるようなことはできないですか?
これはTerapadの方法だけど、こういうことをやりたいってことでしょ?
http://okwave.jp/qa/q3936777.html リンク先に書かれている tp.ini の中身を他のエディタ(サクラエディタ)のパスに書き換えれば
サクラエディタが起動するようにも出来るんだけどね。
話はそれたけど、ahkで同じようなラッパーを作ってnotepad.exeと入れ替えれば出来るよ
>>148 サクラエディタの関連付け変更すればいい
今日から使い始めてまだ全然使いこなせてないが、 これしゅっごいね 世界が変わったわ
Windows 8.1にしたら Send,!{Tab} とか Send,{Alt Down}{Tab}{Alt Up} なんかが効かなくなったんだけど使えてる人いる? 管理者権限で実行してもダメなんだけど
>>154 いや8.1で使えてる人がいるかどうかだけ聞きたいんだ
他の人が使えてるならこっちの問題だからあれこれ試してみるけど、
8.1で非対応になっちゃったのなら時間の無駄だからね
ちなみに他のキーストロークのSnedは正常動作している
Alt絡みでもね
いやあのね、そうあからさまに自分だけ良ければいいって言われても… これから8.1にしようとしてる人もいるだろうし他の人の参考にもなるんだから ちゃんと情報だそうや せめてAHKのバージョンくらい書くのが礼儀でしょ
UACをOFFにすればいいだけじゃないか?
UACオフとかないわー ひくわー
そりゃUAC OFFにすりゃAHK以外でも色んな問題が解決するわなw 自分がそれで良いと思うならそうすりゃ良いよ だが人には勧めんな
firewallとhipsで管理すりゃ UACとかいらなくね
Windows8の問題っていうより、Vista以降の仕様じゃね
え?みんなUACとかどういう設定にしてる? 当たり前のようにオフにしてたわ
AHK使う上でどうにもならなくてUACは切ることにした
>>157 のパッチは初めて知ったけど、バージョン上がるごとにパッチあてるんじゃめんどいし
このままOFFでいいかな
NortonUACェ……
UACって肝心のセキュリティー性能が低い上に弊害を多発させるからそのまま使う奴の気が知れない。 他のセキュリティーソフトの方が性能良い、弊害無いから普通はそっち使うよなw 自分はCOMODO(Firewall+HIPS フリーソフト)使用。
そもそも自分だけのPCの場合は邪魔だしな でも家族で使うとか会社で使うなら切るべきものじゃない
まあ脱初心者したくらいでみんな通る道かもね>UAC OFF
AHKに関連して語るならまだしも、On/Offに伴うセキュリティ的な話題とかならよそでやれ
firewall と UAC は同列に話すようなもんじゃないが
そういえばUACを回避するパッチをlexikosがフォーラムに出していなかった?
話を元に戻そう ポータブルユーザー向けに「相対パス起動バッチ」を作れるAHKを作ろうと思うが、需要あるかな? まぁ、まだ考えてる途中なんだけども
狭いニッチを埋めるのこそAHKが適してると思うけどね
ホットキー追加したら何時の間にか古いホットキーが動かなくなってたりするのは仕様なんだろうか どっかで奪ってるのかなぁ
>>172 自分も色々トラブった。例えばMouseGestureL.ahkでahk関連付けなしだと
1MouseGestureL.ahk をコンパイルしたMouseGesureL.exe ⇒ 当然駄目
2Autohotkey.exe 直下のAutohotkey.ini に#include MGL.ahk ⇒ 駄目
3Run "%A_ScriptDir%\MGL.ahk" ⇒ (行けると思ったけど)駄目
4結局、MGL.ahkのアイコンをAutohotkey.exe に食わせてしのいでる。
>>172 需要あるからインスコ・関連付けなしにどうにかできるやつ作ってくれ
意外と躓いてる人いるのかな?簡単にメモ書いとく MouseGesture.bat ↓書いてること start ..\AutoHotkey_LPortable.exe MouseGestureL.ahk 実際のところこういう行を書いたbatがあれば使える batがあるフォルダの一つ上の階層のAutoHotkey_LPortable.exeにbatがあるトコと一緒のフォルダに入ってるMouseGestureL.ahkを送って起動する ポータブルAppsにAutoHotkey_LPortable.exeはある アップデートはApp\AutoHotKey_Lの中にAutoHotkey.exe、AutoHotkey64.exeがあって、バージョンアップは本家サイトからDLしたものを直に上書きすればok 64はリネームでおk これでbatを起動すれば関連付けもドライブレターも関係なしでahkがうごかせる
ポータブル環境でやる場合はいくつか方法がある。 どれが最適なのかは各自の環境で判断してほしい。 --exeから起動-- 使用したいスクリプトと同じフォルダ内にAutoHotkey.exeを同名にリネーム(MouseGestureL.ahkの場合) AutoHotkey.exe → MouseGestureL.exe(.ahkと同じ場所に保存) --RunでAutoHotkey.exe指定-- Run,"C:\〜省略〜\AutoHotkey.exe" "C:\〜省略〜\MouseGestureL\MouseGestureL.ahk" --バッチファイル(.bat)から起動-- テキストファイル(.txt)に以下のコマンドを書いて拡張子を変更(.bat) start "C:\〜省略〜\AutoHotkey.exe" "C:\〜省略〜\MouseGestureL\MouseGestureL.ahk"
>>176-177 横からだけど、怒らず聞いて欲しい初心者っぽい疑問だけど、
MouseGestureL.ahkのフォルダにAutoHotkey.exeをコピーして、
そのexeを「MouseGestureL.exe」にリネームし、それを起動する。
これでも駄目ってこと?
先に書かれてしまった…(´・ω・`)ショボーン
追加、おそらくこれで全部 --スクリプトの実行ファイル化-- **.ahk を ahk2exe.exeを使いスクリプトを実行ファイル化 --AutoHotkey.exeにドラッグ&ドロップ-- **.ahk を AutoHotkey.exeにドラッグ&ドロップ
>>178 exeからの起動の例ってもしかして
autohotkey.exeがリネームされていたらその名前.ahkを実行できるってこと?
かなり便利な機能なのに知らなかった
相対パスで思い出したけど、AutoHotkey.exeフォルダ配下に 名前を「include」にしたフォルダを配置すると そこに置いた(関数などの)ahkファイルをインクルードする時に #Include を相対パス指定できるとかの特権はないの? やるとしたら、 #Include %A_AhkPath%\include\kansu.ahk これしかない?まあ、これでも文句はないけど。
Lib
>>184 おう「Lib」とな。
しかも#Includeの記述さえ不要とは…
教えてくれてありがとう。
#Includeなしでいけるのは関数だけじゃなかったっけ? なんにしろLibフォルダからの相対パス指定で#Includeはいけたハズ
知りたいことがあったらまずwikiで該当項目見なさいよ こんなに情報が充実しているフリーソフトなんて珍しいというのに
#include %A_ScriptDir% #include ..\MyScript\hogehoge.ahk で相対指定できてるが
とりあえず魔法の言葉SetWorkingDir,%A_ScriptDir%をおぼえればいい Menu,Tray,icon,%A_ScriptDir%..\..\..\Icon\Icon_169.ico あとこれはアイコンの場所指定なんだけども、この行を見てもらえれば相対パスはイケることがおわかりいただけると思う
気になってたんだが
>>172 の相対パス云々っていったい何をするためのパッチなん?
もしかしてスレ違いになるかもだけど、「..\」とか「\..」(の意味や書き方)がよく分かんない。
>>191 PCのパス指定の基本なのでググって勉強してらっしゃい。
検索ワード:絶対パス 相対パス フルパス
193 :
176 :2013/11/20(水) 23:07:21.26 ID:IViM/TQQ0
SHIFTキーを押されるまで処理を待つ方法なんてありますか? 大量のローカルログをOperaで表示させようとしています。 今まではローカルログをOperaで事前に一つづつ表示させておくスクリプトを AHKで書いていて、多機能マウスの戻るボタンで戻って表示させていたのですが、 ページ数が多すぎてだんだんと遅くなってくるようになってしまいました。 そこでスクリプトを開始した後は、SHIFTキーとCtrlキーが同時に押されている間は ログページを順番に表示させ、押されていない間は待つなんてことができるのでしたら、 やり方を教えて下さい。 今現在押されているキーなんて解る方法はありますか?
autohotkey_Lの一番新しいバージョンを使っています こういうスクリプトを作ったらエラーになりました test() return test(){ Run, www.autohotkey.com } クラスが登録されていません、と出るのですがどこがおかしいのでしょう
>>194 keywaitのオプションつかってエラーレベルで判定
もしくはgetkeystateでいけんじゃないかなー?
198 :
195 :2013/11/20(水) 23:52:58.72 ID:+i0au6Rz0
ブラウザ側の設定を変更したらエラーメッセージが消えました スレ汚し失礼しました
ネトゲのXGENCODEってマクロ・チート対策に引っかかるようになってしまった マクロも使ってないしpause sprictしても落とされる もうやめるわ ネトゲを
>>199 よく言った!それでこそ生粋のホモルーデンスだよ!
>>199 最近、ゲームでAutohotkeyを利用している動画が山ほどツベに載せられてるから
どこもかしこも対策に動き出してるのかもしれん。
autohotkeyのforumにゲーム用のカテゴリが設けられたぐらいだしね
格ゲーも規制されちゃうんかね・・・ キーボードゲーマーなんでHitbox配列作ったんだけどこれも規制されちゃうとこまるなぁ
PCで格ゲーって言うほど盛り上がってなさそうだけど
左右のボタンが押されてる時ニュートラルにするスクリプト便利なんよ ヨガフレイムコマンドの精度あがるんよ
使えなくするなら代わりの物を教えてほしいよね 対策に引っかかる常駐ソフトをゲーム起動時に落とす為にAutohotkey使ってたのに、本末転倒 けどAutohotkeyの便利さがすごいからやめられない止まらない
対策されたゲームが、Autohotkeyのどの部分を見て判断しているのか知らないけど 仮にウィンドウクラスを見ているとしたら、Autohotkey.exeをバイナリエディタで書き換えれば回避出来るよ。 実際はそんな簡単な問題でもなさそうだけど。
LLフックだろうね
連続したホットキーWheelDownの最後にだけ処理を実行するにはどうしたらいいんでしょうか? WheelDown:: MsgBox, ホイールダウン ホイールをまとめて回転してしまうと何回も実行されてしまうのを防ぐため 50ms間ができたら実行というようなことをしたいです
settimer,ラベル,-50 かな
>>210 ありがとうございます
そういうのどうやったらパッと思いつくんですか?
賢いです頭良いです参りましたー
>>209 SetTimerだと経過後実行なのでレスポンス悪くなる。
50msだと問題ないが間隔大きくする場合はこっちの方がいいかも。
TickCount =
Return
WheelDown::
ToolTip
If A_TickCount - 500 > TickCount
ToolTip OK
Else
ToolTip NO
TickCount := A_TickCount
Return
>>212 ありがとうございます
賢いですー
これはホイール回転の最初の1回目に実行する方法ですかね?
>>209 が分かりにくいですがホイールをまとめて回転させた最後に
1回だけ実行させるにはSetTimer方式しかないでしょうか?
勘違いでしたらすみません
#IfWinActive ahk_class hoge はひとつしか登録できないんでしょうか? 複数のahk_classに同じものを登録したい場合まとめて設定できますか?
>>214 #IF winactive("ahk_exe hoge") && winactive("ahk_exe hige")
みたいな
いままで日本語オフにしたいときに IME_OFF("A") って入力してたんですが、バージョンアップかなにかの節目を境に 上のを書き込むと error : call to nonexistent function ってでてエラーがでてしまいます。 IME_Func.ahkはautohotkey.exeがあるフォルダにあります。 日本語オフをするときには今はどうやるのがスタンダードなのでしょうか? おしえてください。
と思ったらただのIMEスプリクトか失礼。
>>219 error : call to nonexistent function
エラー:存在しない関数の呼び出し
置く場所や記述ミスじゃない?
%A_MyDocuments%\AutoHotkey\Lib\
{AutoHotkey.exeのあるディレクトリ}\Lib
%A_ScriptDir%/Lib
8.1 ライブラリディレクトリ
ttp://ahkwiki.net/Function
219です。ありがとうございました。うまくいきました。 ただ二個のことしないと上手く行かなかったように思います。 ・LibフォルダにIME.ahkを入れる ・IME_SET(0)にする (IME_SET(FALSE) だと上手く行かなかった。) 222の保存の方法もあまり分からずテキストコピペしたりして試しましたが IMEオフはなんとかできたっぽいです。
IME.ahkで現在変換中の状態かどうかを取得するにはどうすればいいですか? IME窓(漢字の候補)が出てる状態でなく 「ファイル」みたいな一つしか候補がなくてIME窓が出ない単語でも 変換中かどうか取得できるでしょうか?
メモ帳では正しく取得できるのですが FirefoxやChromeでは常に戻り値ゼロになります Win7x64です何か改善策ないでしょうか
どうもありがとうー
ちょっとなかなか調べても見つからないので聞きたいんですけど、タスクトレイアイコンをダブルクリックした時の挙動を変えるにはどうすればいいでしょう?
Menu, TRAY, Default, MenuItemName
質問です 押す度に順に違うキーを送信したいのですが F1,F2,F3と来て元のF1に戻りません var = 0 PrintScreen:: if (var = 0) { Send, !^+{F1} } else if (var = 1) { Send, !^+{F2} } else { Send, !^+{F3} } var += 1 if (var > 2) var = 0 return どこを直せばいいでしょうか
〜 if (var > 2) var = 0 return
ありがとうございます 次の行に書かないといけないんですね やっと理解しました
>>238 もう少しシンプルに書いた方が
可読性や保守性いいと思うが・・・。
すいません C言語書いてる癖が出てしまいました
謝る必要なんてないよ AHKの構文仕様もあまりほめられたものではないしな
質問です。拡張1でコピー ダブルクリックで選択した文字を即検索は設定してます。
webページや2chブラウザで見る改変できない文字は、Wクリックすると想定通り動きます。
しかし、メモ帳やexcel等文字を入力改変できる状態で使用すると、
「vk1Dsc07B」が入力されてしまい、使い物になりません。
無変換キーを押すと問題なく出来る様にはなってるのですが、どこを修正したらいいでしょうか?
#MaxThreadsPerHotkey,2
XButton1::
If(A_PriorHotkey = A_ThisHotkey) And (A_TimeSincePriorHotkey < 500){
Flag = 0
Send,vk1Dsc07B::
Backup := ClipboardAll
Clipboard =
Send,^c
ClipWait,1
Run,
https://www.google.co.jp/search?q=%Clipboard% Clipboard := Backup
Return
}Else{
Flag = 1
Sleep,50
If(Flag)
Send,^c
}
Return
MsgBoxダイアログを指定した座標に作ることはできないでしょうか? MsgBox作成後に移動しようと思いましたがウィンドウじゃないからなのかWinMoveで移動できませんでした・・・
>>244 MsgBox表示中は現在のスレッドは一時停止される。
別スレッドで監視/移動 または GUIを自分で作ればいい。
F1::
SetTimer,Move
MsgBox
Return
Move:
WinWait,ahk_class #32770
WinMove,ahk_class #32770,,300,300
SetTimer,Move,OFF
Return
>>245 そうなんですね
本当にありがとうございました
ソースコード付属のフリーソフトの改良方法を、フリーソフトを書いた言語のスレで 質問されても本当に困ってしまうわけですが。 その、WheepAccel.ahkと、MGLのソースコードを全部読んで返事してほしいということですか?
>>248 くそ、なんか後味悪い
WA_Throttle()の中身弄ったらいけるんだろ
スクロールが停止する前ってのがわけわからんけどな。
ホイールが停止するのを感知しろとでもいうのか、それともホイールが停止してからも
スクロールのスピードを落としながら停止するまでスクロールしろってことか?
図でいうところのTはホイール操作としてどういう状況なのかがわからんわ
WheelAccel.ahkの元になったWheelScroll.ahkを書いたものですが Scroll.ahkの加速部はここの過去スレで誰かが張ったものを元に制作 Accel.ahkの加速部はIKK…もといmobitan氏が、やっぱりここの過去スレで 別の誰かが張ったものを元に乗せ換えた、という経緯だったと思います つまり加速に関しては各自欲しい物を適当にもってきてるという状態なので 第三の加速方法の実現方法についてはホイールの加速方法に詳しい方に理論指導ののち ご自分で入れ込むのがよろしいかと コード中の具体的な修正箇所はWA_Throttle()を呼び出してる行をコメントにして代わりの加速方法をいれこむか WA_Throttle() の中を丸ごとすげ替えるかすればOKです
ロジクールの高速ホイールつかえばいいんじゃね
252 :
247 :2013/12/03(火) 00:41:20.18 ID:gs5BzMAw0
>>250 サンキューでした。
どこまでやれるかガンバってみるわ。
>>248-249 気分悪くさせてしまったなら悪かった、謝るよ。
それから、あんまり火病ると体に良くないよ。
質問するだけしてレスついても反応なしのやつとか どっかで拾ったソースの改良丸投げ依頼とかそんなの多いね
● 分からない理由 ● 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 → 死ね
■回答できるレベルの人へお願い■ このスレは親切な人が多いと思うけど、もう日記に対する検証&レスは、 たとえ対処法をわかっている人がいても、レスは一切やめにしてくれないか? こいつがやってることは 「適当にコード作ってみたけど動かない。動かない原因を調べるのも面倒だし、 学習する気もない。どうせここに書けばおまえらが修正するだろうから誰か直して」 ってことだ。しかも、一度だけならまだしも、何度も繰り返している。 これまでに、このスレではこの手の質問者は居なかったと記憶する。 いつまでもこんなクズにつきあう必要はない。 汎用性のないコードでスレが汚されるのは、結果的に良質な情報が 埋もれる原因になって迷惑だし、横から見ていても参考にならないし、 なによりも見ていて不快でしかない。
そして誰もいなくなった
ID:pS1lIgy+0のことは個人感情でしかないんで気にしないでもいいんじゃよ
>>253 即使えるコピペコード期待→wkiの該当コマンドページ張られる
or WinMessageとかDllCallとかWinApiとかポインタがどうとか理解外の答え帰ってきた怖い
って感じなんだろう
ただ、クレクレに見えるレスでもとっかかりがわからんだけの初心者さんもいて
説明ページへのリンク張ると頑張りだす人もいるので
いきなり>254-255張って萎縮させるより、煽りながらもヒント出すツンデレスでやるほうがいいと思う
255は言動が明らかにおかしいチラウラ野郎用なので質問お断りみたいな流れでは張るべきじゃないね
×255は >256だった
このコピペが必要になるとはな・・・ みたいな万が一の事態が起きた時の保険用にか
F1:: Hoge := A_TickCount - count tooltip, A_TickCount=%A_TickCount% count=%count% Hoge=%Hoge% count := A_TickCount return 一回目のF1押しでHogeが空になってしまいます static count=0 みたいにしたいのですがコンパイルエラーになります どうすればいいんでしょうか?
>>262 エラーは起こっていないのでコンパイルエラーとは言わない
初回意図しない動作になるのは count の中身が指定されていないから
Hoge := A_TickCount - count → Hoge := 1234 - (空)
式として成り立っていないので (空) が返される。
スクリプト起動時に実行されるAuto-executeセクションで
count = 0 を指定すればいい。
15 スクリプトの起動とAuto-executeセクション
ttp://ahkwiki.net/Scripts --------------------------------------
count = 0
F1::
Hoge := A_TickCount - count
tooltip, A_TickCount=%A_TickCount% count=%count% Hoge=%Hoge%
count := A_TickCount
return
>>263 ありがとうございますm(_ _ )m
なるほどAuto-executeセクションに書けばいいんですね
ちなみに
static count=0を書くと私の環境ではコンパイルできないのですがどうしてでしょうか・・・?
[スクリプト仕様]のページを見ると スタティック変数の例↓のように書かれています
AAA(){
static CalledTimes
CalledTimes++
MsgBox,%CalledTimes%回目
}
関数内じゃないから
よく分かりましたm(_ _ )m
..
GUIのEditコントロールにテキストを追記したいのですが質問があります。 アドバイスもらえませんか。 Windows7 64bit, AHK_L v1.1.13.01 64bit Q1. GuiControlとControlSetTextの違いは? ControlSetText, Edit1, %text%, ahk_class AutoHotkeyGUI GuiControl, , Edit1, %text% Q2. 全部Getしてテキストつなげて再Setだと効率悪そうだけど直接追記の方法ある? ControlGetText, oldtext, Edit1, ahk_class AutoHotkeyGUI ControlSetText, Edit1, %oldtext%%addtext%, ahk_class AutoHotkeyGUI すんませんがお願いします。
>>268 >Q1. GuiControlとControlSetTextの違いは?
Guiコマンドで作成したGUIに対しては細かい指定ができる GuiControl[Get] を使うのが普通。
ControlSetText > 指定したコントロール (GUI、メモ帳なのでもいい)
GuiControl > Guiコマンドで作成したウィンドウ (細かい指定が可能)
>Q2. 全部Getしてテキストつなげて再Setだと効率悪そうだけど直接追記の方法ある?
GuiControlGet,Var,,ControlID
GuiControl,,ControlID,%Var%追加テキスト
処理Aを無限ループさせるスクリプトをGuiで制御させようとしているのですが Pauseが上手く動作しません Gui,Add,Button,,Pause Gui,show Label1: 処理A Gosub,Label1 return ButtonPause: Pause,,Label1 return と言った感じに書いてるのですがGuiのPauseで停止は出来るのですが再開することが出来ません Gui側で停止と再開を制御するにはどのように記述したらいいのでしょうか
>>271 Wiki等説明に書いてあるが Pause はホットキーやホットストリング以外が停止する。
つまりGuiも一時停止しているのでボタンは反応しない、たまたま動いているが Pause 第2引数も間違っている。
ttp://ahkwiki.net/Pause ループ処理は Loop SetTimer を使うべき。
Gui,Add,Button,,Pause
Gui,Show
Var = 1
TEST = 1
SetTimer,Label1,100
Return
Label1:
ToolTip,% TEST++
Return
ButtonPause:
If Var = 1
{
SetTimer,Label1,OFF
Var = 0
}Else{
SetTimer,Label1,ON
Var = 1
}
Return
なるほど!いろいろと勘違いしてたようです。ありがとう
【AutoHotkey スレッド part16】のレス164 >IMEの状態を間違えて打った時に、入力文字の削除、IMEの切り替え、再入力をキー一発で行う というスクリプトを参考にしたAスクリプトと、 「文字入力操作に入ったらマウスアイコンを非表示/動かしたら表示する」、 というBスクリプトが有ります。 そのどちらでもコマンド「settimer」と「input」を使用してます。 これらをCというメインスクリプトで#Includeすると、Bスクリプトが動かなくなります。 原因はどちらでも「input」を使用してるせいだとは思いますが、 「input」以外に文字入力を感知するコマンドを見つけられませんでした。 「input」を代替するようなコマンドとか関数ありませんか?
>>274 ない 作れ。
原因が分かっているなら#Includeせずに競合しないように書き直せ。
アプリのスクリプト言語として組み込むような仕組みありますか?
278 :
名無しさん@お腹いっぱい。 :2013/12/16(月) 23:41:25.41 ID:g9ztIiRs0
>>276 アプリからAutohotkey呼び出せばいいだけじゃね?
今プログラム起動の関数作ってるんですけど、引数受付けてくれないんで困ってます ;プログラム起動処理関数 ;存在するならウィンドウアクティブ ProcessRun(pass,option="",active =""){ SplitPath,pass,exe ;パスを分解してファイル名を取り出す IfExist,%pass% ;exeが存在するかチェック { Process,Exist,%exe% ;プロセスが存在するかチェック。 if (ErrorLevel <> 0){ if(active = 1) WinActivate,ahk_pid %ErrorLevel% }else{ Run,%pass%,,%option% } } } これに”A.exe Bファイル”をいれても動きません 半角スペースから後ろをトリムで切り取るとか出来ませんか?
#If hoge1 := WinExist("ahk_class MozillaWindowClass") or hoge2 := WinExist("ahk_class Chrome_WidgetWin_1") F1:: Tooltip hoge1=%hoge1% hoge2=%hoge2% return どちらのウィンドウも起動している状態でF1を押すと hoge1が常に1 hoge2が常にカラになってしまうのはどうしてでしょうか?
論理和は式のどれかが真になった段階で真が確定する →どれかが真になった段階で式の評価をやめるから
if文の or だの Andだのでつなげた条件は全部実行してから判定してるとは限らんよ 速度優先でTrueを見つけた時点で次の処理に行っちゃう場合が多いと思うけど (コンパイラによって判定順がお尻からだったり頭からだったりもする) 必ず通る前提で複数の変数に格納するのは非常に危険なのでやめたほうがいい
>>282 本当にありがとうございます
条件を#If hoge1 := WinExist("ahk_class MozillaWindowClass")だけにすると
hoge1がウィンドウハンドルになるのですが
2つ条件を指定するとhoge1が0か1になってしまう理由が分からないです・・・何故ですか?
>→どれかが真になった段階で式の評価をやめるから 理由書いてあるのに何故ですかって言われても
#If hoge1 or hoge2 になると思ってるんだろうけど hoge1 := (WinExist() or hoge2) になってるんじゃないの
>>284 #If (hoge1 := WinExist("ahk_class MozillaWindowClass")) or (hoge2 := WinExist("ahk_class Chrome_WidgetWin_1"))
おう、かぶった
AHKで 「”指定した特定のウインドウのみ”、マウスオーバーでアクティブにする」 というような設定はできないでしょうか?
>>286 287
ありがとうございます!
なるほど()が足りなかったんですね
たとえ式が1個でも()カッコつけたほうがいいかもですね
便乗したいんですねわかります
>>279 です
>>280 ありがとうざいました。とりあえず、ファイル起動関数でウィンドウ即閉じ、再起動、アクティブ化できるようにしましたので拙いですがはっておきます
;プログラム起動処理関数
;pass2には引数を指定
;optionにはMIN、MAX、HIDE、active、close、reloadを指定できる
ProcessRun(pass,pass2="",option=""){
SplitPath,pass,exe
IfExist,%pass%
{
Process,Exist,%exe%
if (ErrorLevel <> 0){
if(option = "active"){
WinActivate,ahk_pid %ErrorLevel%
}else if(option = "reload"){
Process,Close,%exe%
Process,WaitClose,%exe%
Run,%pass% %pass2%
}
}else{
If (option = "close"){
Run,%pass% %pass2%,,,pid
Process,Wait,%exe%
WinWaitActive,ahk_pid %pid%
WinClose,ahk_pid %pid%
}else{
Run,%pass% %pass2%,,%option%
Process,Wait,%exe%
}
}
}
}
windowの表示を並べたり重ねたりするショートカットが欲しいんですが、 どうすれば良いでしょうか?? win+b→win→win→AppsKeyの後に、 d・t・i・uのどれかと言う感じのsendはスマートじゃない気がするのですが、 別の方法で「元に戻す」が使える状態での操作って出来ますか?
objShell := ComObjCreate("Shell.Application") Return F1::objShell.CascadeWindows F2::objShell.TileHorizontally F3::objShell.TileVertically F4::objShell.UndoMinimizeALL
>>297 簡潔な回答をありがとうございます。
comに付いての知識があまりなく、使用した事も無かったので勉強になりました。
dllとcomの関係、バイナリ互換とwindows・linuxの違い、comの情報を得るのが若干ハードルが高く、
oleviewがVisual Studioで見当たらなくて、Windows Server 2003 Resource Kit Toolsを知ったり・・・
comとレジストリの関係も結構驚きました。
USBTVチューナーに付属の視聴ソフトを起動すると、autohotkeyのホットキー設定がほとんど無効になってしまいます。 ふたたびautohotkeyのホットキー(スクリプト)を有効にするためには、 TV視聴ソフトを終了させるかもう一度autohotkey.ahkを読み込ませないといけません。 どのようにすればこのような不具合を回避できるでしょうか?おしえてください。 TV視聴ソフトは、DigiBestTVというソフトです。windows7 x64 です。autohotkey_Lはx84版のものです。 スクリプト内容が悪いのかと思い、中身を10行ぐらいのものに変えてみましたが結果は一緒でした。 DigiBestTVの設定項目も見ましたがキーバインドを操作するような項目はありませんでした。
>>300 キーボードフック使ってる?
何がどう反応しないのか書いてないし
スクリプト内容見なきゃ分からん。
多分管理者権限の問題だと思うけど。 そのソフトを起動中でもフォーカスを他の適当なウィンドウに当てたら ホットキー利いたりしない? その場合はahkを管理者権限で実行すれば解決。 管理者権限で起動するのがセキュリティ的に好ましくないahkファイルの場合は無理
>>301 ちょっとわかりませんが、
#InstallKeybdHookっていうのかな。使ってないです。
>>302 autohotkey.exeを右クリして管理者として実行をしてみましたが、変わりありませんでした。
フォーカスを他のウインドウにしても効果ありません。digibestTVが起動してるとahkのホットキーが無効化されます。
反応しないというのは、無変換+J や無変換+G にカーソルやbackspaceを割り当ててるのですが、
そのままJやGを入力してしまいます。しかし一方無変換+Kanaにランチャーを割り当ててるのですが
そちらはちゃんと起動します。.ahkの内容を最小限にしても同じでした。
.ahkファイル上げれば優しいお兄さんたちがいたずら……じゃなかった手取り足取り教えてくれるよ
>>303 とりあえず
>>301-302 で言われたこと試そう。
#UseHook または #InstallKeybdHook をAuto-executeセクションに書く
OSの機能UAC(ユーザーアカウント制御)を無効にしてみる
>>303 Dirt2というゲームをフルスクリーンにしたら
同じようになるので以前このスレを覗いたら
hookは後から実行したほうが有効になるってここで見たので
SettimerでDirt2のウィンドウ状態を監視し、
フルスクリーンになったらahkを再起起動するようにしてた。
恐らく、
>>305 の方法で解決出来そうな気はするけど
winxp sp3 autohotkey_L 32bit バージョン: 1.1.13.01です。 以下のようなWM_COMMAND使う関数作ったのですが、 メモ帳のようにデスクトップにウインドウ開くものは操作できるのに タスクトレイに常駐してるものが操作できません。 どうしてでしょうか? ahk_WM_COMMAND(ahk_win_title, ahk_win_class, ahk_cmd){ SetTitleMatchMode,3 WM_COMMAND = 0x111 WinGet, ahk_hwnd, ID, %ahk_win_title% ahk_class %ahk_win_class% detecthiddenwindows,ON postmessage, WM_COMMAND, ahk_cmd, 0, , ahk_id %ahk_hwnd% } ※インデントは全角空白です ちなみに、AutoIt3で作った同じ関数だと問題なくタスクトレイ常駐のものを操作できます。
detecthiddenwindows,ONを関数の外に出したらどうなる?
303です。 #UseHook または #InstallKeybdHookをスクリプトの一番上においてみましたが変化ありませんでした。 UACは無効です。 スクリプトのautohotkey.ahkは #InstallKeybdHook sc07B & H:: Send,{Blind}{BS} sc07B & i:: Send,{Blind}{Up} sc07B & l:: Send,{Blind}{Right} sc07B & k:: Send,{Blind}{Down} sc07B & j::send,{left} これだけにしてもdigibestTVを起動するとうごきません。 4回に一回ぐらいちゃんとこのホットキーが動くという感じです。
>>309 >動かないでも4回に一回ぐらい動く
どっちなんだよ・・・。
#InstallKeybdHook
sc07B & H::MsgBox
これで確実に動くなら Send の問題だろうな
押し下げ間隔変更してみよう。
SetKeyDelay,,100
ttp://ahkwiki.net/SetKeyDelay 一部のゲームやアプリケーションでは押下と押下解除までの間に一定時間が必要
311 :
307 :2013/12/28(土) 01:13:27.92 ID:0Y0bNe0b0
>>308 アドバイスありがとう。
ご指摘の通りやってみましたが、タスクトレイのものは操作できませんでした。
また、
ahk_WM_COMMAND(ahk_win_title, ahk_win_class, ahk_cmd){
WM_COMMAND = 0x111
WinGet, ahk_hwnd, ID, %ahk_win_title% ahk_class %ahk_win_class%
postmessage, WM_COMMAND, ahk_cmd, 0, , ahk_id %ahk_hwnd%
}
としてみたり、
postmessageをSendMessageに変えてみたりしても同じく駄目でした。
今のところ、AutoIt3で作ったWM_COMMANDスクリプトをRunする方法で補ってるので
早急に解決する必要はないのですが、何かスッキリしない…
>>311 APIのPostMessageをDllCallで呼んでみては?
>>310 それやってみました。確実に動きました。ミスはなかった。
SENDに問題あるのかな。
SetKeyDelay,,100 やってみたけど、効果なし。レスありがと。
>動かない。でも4回に一回ぐらい動く
ってのはたとえば、sc07B & i:: Send,{Blind}{Up} あるじゃないですか?
sc07B & i をそこそこのテンポで押し続けていくと、
3回 i ってのが入力されたあと一回だけ↑の方向キー入力があって、そのあとまたiだけが入力されるっていうかんじ。
ランダム。
315 :
名無しさん@お腹いっぱい。 :2013/12/28(土) 11:25:07.82 ID:Ppn9Obyz0
面倒だけど、DOWNとUPの両方をフックして 別々にキー発行した方が確実だよ
>>312 貴重な意見ありがとう。
DllCallですか?自分にはハードル高過ぎです…第一、数ある"引数"に何を入れるのかが分からない。
PostMessage系は、「VBS+dynwrap.dll」の組み合わせ以来、
「postmessage, WM_COMMAND, ahk_cmd, 0, , ahk_id %ahk_hwnd%」
の形式しか知りません…しかも「WM_COMMAND」以外使ったことないし。
簡単だよ、AHKのPostMessage使うのとほぼ同じ
>>311 の例を置き換えるなら↓
DllCall("PostMessage", Ptr,ahk_hwnd, Ptr,0x111, Ptr,ahk_cmd, Ptr,0)
ただしwParamには上位ワードにWM_COMMANDの詳細コード、下位ワードに
コントロールのIDを、lParamにはコントロールのウィンドウハンドルを指定する
のが本来の使い方なので、あなた関数はメニューのコマンド実行にしか使え
ないと思う
あとタスクトレイのアイコンからは通常WM_NOTIFYで通知を受けるので、いき
なりWM_COMMANDを送っても無視するアプリは当然いると思う
Spy++を使えるなら非表示化されている本体ウィンドウのメッセージを見ながら
トレイアイコンを操作すれば分かると思うけど
>>317 分かりやすい説明をありがとう。
具体例を挙げてくれたお陰で、これとwikiの説明も合わせて読むことで
限定的ではありますが、何となく分かったような気がします。
(PostMessage + WM_COMMANDが使えれば満足なので)
で、DllCall()でPostMessageした結果もこれまでと同じで
タスクトレイにあるものは操作できませんでした。
あと今回は返値とErrorLevel確認してみましたが、何れも正常動作してる値でした。
気休め程度にセキュリティ系を監視無効にしてみましたが、結果は変わらず。
なかなか先が見えません…
ウインドウ指定間違ってるというオチ
>>319 ありがとう。再確認したけど、流石にそれはないです。
同じタイトル、クラスならウインドウが表示されてれば操作可能なのです。(Process Explorerで確認)
ちなみに、WM_COMMAND使うにあたって「タイトル」「クラス」「コマンド」は
UWSC.exe + ChkCtlID.dllでChkCtlID.uwsというスクリプトを動かして取得しています。
(実際に操作して必要なデータが取得できるので、これだけの為にUWSC使ってます)
イロハのイみたいな質問で恐縮ですが… ScrollLockがONの時だけキーリマップされるというスクリプトを作るにはどうすればいいでしょうか? ONでリマップ、OFFの時は本来のキーの機能が働く形にしたくて、リファレンス等を見よう見まねで やってる段階なのですが、こんな形になりました if GetKeyState("ScrollLock","P"){ a::b }else{ Sleep,100 } Return
すみません。長いと怒られたので連投という形に成りますがご容赦を… 上の形で動かすと、ScrollLockがONでもOFFでもAキーがBにリマップされてしまいます それと、Sleepを充てたのもちょっと違うような気が… そもそも、根本的に発想が間違っているのかもしれませんが、いいやり方をご教示下さい
#If GetKeyState("ScrollLock","T") a::b
If(GetKeyState("NumLock","T") == 0) たぶんトグル使えたと思うからそれを使ってみては? Numlock状態をタスクトレイに表示できるスクリプト組んでたからタイムリー
>>323-324 こんなに早く感謝!教えて頂いた方法で、希望の動作ができました
ModeをTにしないといけなかったんですね
#Ifの使い方も勉強になりました
ありがとうございました
ウヒョースゲーpostmessageこれスゲー
>>326 ヤベーよな
使い出したら止められねえわ
ちょっとスレ違いかもしれないんだけれど、 TillaGoto.ahk持ってる人誰かうpしてくれませんか? 公式とか他回ったけど出てこない…
SciTE4AutoHotkey
どなたかMacbookのBootcamp環境上でAHKを運用してるって方おりますでしょうか? 数年前から、Win機に変換・無変換・多ボタンマウスを修飾キーにしたワンショットモディファイア を組み込んだりRoundMenuを使ったりしています。今回、気が向いてMacbook Air+Bootcamp で同様の環境を作ろうとした所、「かな」キーがレジストリでリマップしようがAHKでリマップしようが 必ずトグル動作になってしまい扱いきれず困っています。「かな」キーを普通にモディファイアの修飾キー に出来ている方がいらっしゃったら対処法を教示頂けませんでしょうか?
ポンコツOS積んでるMacとか使うもんじゃないよ
332 :
330 :2014/01/03(金) 15:31:57.17 ID:wDBjnsKG0
もぅ挫折しそう… つかAHKだけじゃ100%無理っぽいです
333 :
名無しさん@お腹いっぱい。 :2014/01/03(金) 16:17:42.99 ID:uHGrc1HW0
というかキーボード規格の問題じゃねーのソレ Fnキーとおなじようなもんで
あ、俺からも質問 postmessageでX-finder終了メッセージ送って常駐の一斉終了に組み込みたいんだけど、リソースハッカーで調べても見つからないんだよね プロセス強制終了だとiniに書き込まないから変更状態保存されないし どっかに情報ないかな
335 :
330 :2014/01/03(金) 16:45:32.03 ID:wDBjnsKG0
うまくいった〜。 レジストリいじるのにChnageKey使ってたんだけど、SharpKeysに変えてみた。 変更元のキーもスキャンコードベースで指定出来るのが決め手だろうなと。 結局元コード弄る必要すらなかったです。 低レベルな悩みでお騒がせしました。
>>334 その書き方だと何を終了させたいのかよく分かんないけど
postmessage使う必要ある?
あ、wincloseでいいか ありがとう
なんかプログラマー気取りのレスがおおいよなあ お前らが使ってるのは言語じゃなくてスクリプトエンジンだから RPGツクールと一緒。
どうした、どこかトラウマを刺激するスイッチでも入ったのか?
クレクレの教えて君の逆恨みかな? 元マーだけど、ここにはおそらく現職のマーや多言語扱える人間が複数常駐してるなと感じることはある だがマー気取りの痛い人というのは別段見たことがない
プログラマーの一人称って安定しないな マーって……
いや一人称では無いだろ
さすがに現役時代でも自分のことをマーと呼ぶ人には出会ったことないわw
むしろム板とマ板がある2chだからじゃない?
スクリプトを編集してreloadした時にでるエラーメッセージをぐぐったりして調べたいんですけど クリップボードにコピーするかテキストに出す方法ってありますか?
>>346 WinGetTextを使った別のスクリプト呼び出すかWindow Spy使えば?
単純に、crtl+cじゃ駄目なんだっけ?
Windows標準の機能だけど意外と知ってる人いないよね
いやそこは「レベル低すぎだろ」って突っ込んであげたほうがいい希ガス こんなもんも知らないんじゃAHKなんて活かし様ないだろ
Ctrl+CでコピーしたらCtrl+Vでパスを貼り付けられるようにしてほしかった
>>354 エクスプローラではできんかった
VistaHomeBasic32bit
AHK関係ないだろ AHKを使ってってことなら余裕で実現可能だし
そりゃそうだw
Send,^{Home} Send,{Ctrl down}{Home}{Ctrl up} この2行って違いあります? 前者だと誤動作することがあって後者に書き換えるとうまくいくことが度々あるんですが
多分差はない。下ほうがうごくならそっちのほうがいいかも ただもし他の処理とかち合ったらctrlが押しっぱなしになるかも・・・?
>ただもし他の処理とかち合ったらctrlが押しっぱなしになるかも・・・? 試しに Sleep,1000 Send,^{Home} としてみたら安定動作しているみたいなので もしかしたら他のキーが一瞬押されているのかもしれません 処理に入る前にCtrl,Alt,Shift,Winあたりの押下状態を調べてUpされるのを待つなり警告出すなりしてみます ありがとうございます
文字コード関係で困って自己解決したので報告です AutoHotKeys_L unicode 64bit 特殊文字を指定するためのコマンド ASC{ nnnn } について。 解説だとnnnnをユニコードで指定できるとなっていますが、実際はキーボード(IME)の言語に依存します。 日本語キーボードならShift_Jis番号として解釈されるます。 Send {ASC 220} は 日本語キーボード だと 「ワ」 USキーボード だと 「ウムラウトの大文字U」 ユニコード番号で指定するためにはこのスタイルで書けばいいみたいです Send {U+nnnn} * nは16進数のユニコード番号
文字列「{a { b } c}」から先頭の「{」と末尾の「}」を取り除き、 「a { b } c」にしようと以下のようにしたのですが、 ret2で末尾の「}」が取り除けません。 Pattern指定のどこが間違っているのでしょうか。 Target := "{a { b } c}" Pattern := "^\{" ret1 := RegExReplace(Target, Pattern) msgbox, % ret1 Pattern := "$}" ret2 := RegExReplace(ret1, Pattern) msgbox, % ret2
Pattern := "}$"
365 :
名無しさん@お腹いっぱい。 :2014/01/08(水) 22:14:01.50 ID:kARE6RtX0
エレコムのM-XG3Gを買ったんですが、専用ドライバーをインストールするとWheelLeftとWheelRightがAHKで拾えなくなります。 ドライバーをインストールしなければ拾えるんですけど、こういう場合、 ドライバーをインストールしたままチルト入力を拾うことってできないもんなんでしょうか? チルト系のスクリプト全部書き直しになると地獄です。
>>365 2.3 マウスにホットキーの割り当てをしても反応しない。
ttp://ahkwiki.net/Faqs 専用ドライバーの設定に対してAutoHotkeyで割り当て
ドライバー(WheelLeft→他のキーに変更)
↓
対象のキーにAutoHotkeyで割り当て
367 :
名無しさん@お腹いっぱい。 :2014/01/08(水) 22:52:22.20 ID:kARE6RtX0
>>366 それしかないですかね?
あいにくここのドライバF13以降の割り当てができないので
なにがしかのキーボードのキー(or プラス修飾キー)を使うことになってしまうんですが。
エレコムのドライバが制御してるキー入力判定を読み取ることとtか無理ですかね?
>>367 ドライバツールの段階でAutoHotkeyで拾えない独自のWheel***になってるのでドライバをどうにかするしかない。
もしかしたらドライバの設定ファイルを直接いじればF13以降も出来るかもしれない。
369 :
名無しさん@お腹いっぱい。 :2014/01/08(水) 23:43:56.71 ID:kARE6RtX0
>>368 そうですか。難しそうですね。
ドライバーのインストールフォルダの中にあったkeyboard.iniの中に
マウスボタンに割り当てるキーボードのキー情報がありました。中にあったF12キーのスキャンコードをF13のスキャンコードに置き換えて
マウスのチルトにF13を割り当ててAHKでF13を制御してみましたがいけました。どうもです。
しょうがないんでWheelleftとWheelrightは全部これで置き換えます。
今現在、SetTimerとWinActiveをループさせながら複数ウインドウの監視してるのですが、
この方法よりも「イベントフック専用APIを利用する」方が無駄のない方法だと知り
https://sites.google.com/site/agkh6mze/howto/winevent 此処にあるサンプルを元にウインドウ出現の監視をしようと思っています。
しかし、今動かしてるスクリプトは当該ウインドウの終了(WinNotExist)も監視してるため
WinNotExistに当たるイベントも取得したいのですがそれらしいのが見あたりません。
WinNotExistに当たる定数は何なんでしょうか?
EVENT_OBJECT_DESTROY = 0x00008001
かな?と思い、
EVENT_SYSTEM_FOREGROUND = 0x00000003
の代わりに指定してみましたが、何か違うような…
ウィンドウを最善面にしたらウィンドウタイトルバーの色を変える(ようは目立たせる) というようなことをしたいです 特定のウィンドウタイトルバーの色を変えることはできますか?
370です。前の疑問がまだ解決してないんですけど、もう一つ質問させて下さい。(欲張ってすいません) SetTimerの第3引数に優先度を指定できますが、特に指定しなければデフォルトの0になると思うんですけど、 その場合のスレッド起動の順番はどういう順番になるのでしょうか? メイン.ahk ┃ ┣━ サブ_1.ahk(メイン.ahkにインクルード) ┃ ┗━ サブ_2.ahk(メイン.ahkにインクルード) スレッド起動の順番は、[メイン.ahk]→[サブ_1.ahk]→[サブ_2.ahk]ですか? また、任意に優先順位を決める場合、数字か大きい順に高いと判断して良いのですか? メイン.ahk(SetTimer, hage, 1000, 3) ┃ ┣━ サブ_1.ahk(メイン.ahkにインクルード SetTimer, turu, 1000, 1) ┃ ┗━ サブ_2.ahk(メイン.ahkにインクルード SetTimer, bozu, 500, 2) 優先順位高い順に(スレッド起動の順番)、[メイン.ahk]→[サブ_2.ahk]→[サブ_1.ahk]と思っていいのでしょうか?
>>370 無いものはないんじゃない?
>>372 例えがおかしい、スレッドはインクルードや.ahkは関係ないスクリプトは上の行から順に開始される。
現在のスレッドより優先度が低い場合、割り込みは行われず、操作は無視される。
ttp://ahkwiki.net/Threads ■通常(優0)
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
■元スレッドの優先順位が高い場合割込無視される待機もしない
> 元スレッド(優2) →→→→→→→→→→→→→→→→→→→→END
> ★割込無視
> 割り込みスレ(優1) ×待機もしない
> ◆割込無視
> 更に割り込み(優1) ×待機もしない
>>375 レスどうもです。
>>370 の件は、地道にSetTimerとWinActiveをループさせときます。
あと、よく見たら、
>>372 の上の図で抜けがありました(すみません)
正確には、それぞれのahkでSetTimerでループ(?)しています。
メイン.ahk(SetTimer, hage, 1000)
┃
┣━ サブ_1.ahk(メイン.ahkにインクルード SetTimer, turu, 1000)
┃
┗━ サブ_2.ahk(メイン.ahkにインクルード SetTimer, bozu, 500)
この場合、どの順序でSetTimerが働くかは読み込まれた順
(メイン.ahkでインクルードを記述した順)で決まるってことなんですね。
また、下の図の優先度云々の件は、割り込みに関係するのであって順番ではないんですね。
お手数お掛けしました。ありがとうございました。
>>376 訂正
X
>>370 の件は、地道にSetTimerとWinActiveをループさせときます。
○
>>370 の件は、地道にSetTimerとWinActive及びWinNotExistをループさせときます。
AHKからVBS(WSH)使う時はScriptControlで出きるけんど、VBSからAHK使う方法手有るのん? 試してないけんど、AutoHotkey.dllっちゅうのでできるんかいの? それから、下のスクリプトのコメントで書いてるように AHK側→VBS側へ変数の中身を渡せないんだけんど、何か方法ないっすか? VBS側でAutoItX3.dllなんか使ってクリップボード介すしかない? obj := ComObjCreate("ScriptControl") obj.Language := "VBScript" ;~ moji := "12345" ;←AHK側で指定してVBS側へ変数の中身を渡す事ができない script = ( moji = "あいうえお" '←ここで直接書く他無い? MsgBox moji ) obj.ExecuteStatement(script)
382 :
380 :2014/01/11(土) 12:14:03.24 ID:L93ysrB90
結局こんな感じで・・・・・ちょっとだけスッキリしますた(´・ω・`) AHKにも文字列を入れた変数を展開先で実行してくれる機能有れば良いのにぃぃぃぃぃ script_before = ( moji = "あいうえお" title_string = "VBSを動かす - WshShell.Popup" ) script_VBS := Exec_VBS(script_before, "d") Exec_VBS(script_VBS) 次レスへ...
383 :
380 :2014/01/11(土) 12:15:03.39 ID:L93ysrB90
>>382 のつづき
;"d":「データ取得モード」でVBSが動くように完全な文字列を取得(戻り値有り)
;モード無指定(実質"c"指定):「実行モード」となり、上で取得した文字列を実行する(戻り値無し)
Exec_VBS(tmp_script, mode = "c") {
if (mode == "c") {
obj := ComObjCreate("ScriptControl")
obj.Language := "VBScript"
obj.ExecuteStatement(tmp_script)
return
}
script =
(
'↑ ここの空白行は、引数の文字列と結合する時の「改行」代わりになるので【必須】
MsgBox moji, 3+32, "VBSを動かす - MsgBox"
Set WshShell = CreateObject("WScript.Shell")
WshShell.Popup "12345", , title_string, 4+64
)
if (mode == "d") {
return (tmp_script . script)
}
}
>>381 オレの場合、実用scriptの数で言うと
VBS(WSH) + AutoItX3.dll > AutoIt > AutoHotKey > UWSC
ファイル/フォルダ扱う処理ならVBS(WSH)がこん中で一番扱いな、個人的に
UWSCはほぼ使わんから知らん
海外ではAHK出る前からある程度AutoItが普及してたんじゃない? 日本内でのAHKの認知度が上がったのはリファレンス訳して流行らせようとした人の功績だし 日本の場合ジワジワ浸透よりマニア推しの働きかけのほうが影響出てるように思う
386 :
名無しさん@お腹いっぱい。 :2014/01/11(土) 13:31:33.31 ID:ezMuEju20
基本的に日本語のリファレンスが充実してる言語しか日本じゃ流行らんし
さきほどここでAutoItを知って、いまAutoIt調べまくってた キーリマップはAHKが強いみたいだからUWSCの代替になるのかと勘案してるんだが 専用スレは落ちて久しいみたいだな
Chromeバージョンアップでマウスホイールでタブ切り替え ControlSend,,^{PgDn}, ahk_id %Win% ControlSend,,^{Tab}, ahk_id %Win% が効かなくなったんですか代替策ないですかね?
>>389 最新版(バージョン 31.0.1650.63 m)で普通に反応するが・・・。
環境と問題のスクリプトぐらい書こう。
すみません Win7 x64とAHKL x64 最新です WheelDown:: MouseGetPos,,,Win ControlSend, , +^{Tab}, ahk_id %Win% ちゃんと非アクティブ時にも動きますか? こちらもアクティブ時は動きますが非アクティブ時に機能しなくなりました
+^{Tab} → ^{Tab} → {Ctrl Down}{Tab}{Ctrl Up} Return がないのでSend以降の行までいっている可能性あり --------------------------------------------- ; SetKeyDelay,,100 ;反応しない場合 WheelDown:: MouseGetPos,,,Win ControlSend, , {Ctrl Down}{Tab}{Ctrl Up}, ahk_id %Win% ; ControlSend, ahk_parent, {Ctrl Down}{Tab}{Ctrl Up}, ahk_id %Win% ;FireFox用 Sleep 90 Return
つまりautoitの日本語訳作れば大逆転なの
>>392 サンクスです!
試したんですがそれだと非アクティブ時もアクティブ時も両方機能しなくなりました・・・
SoundBeepを入れてちゃんとスレッドが実行されていることは確認済みです
ですが
ControlSend, ahk_parent,, {Ctrl Down}{Tab}{Ctrl Up}, ahk_id %Win%
にするとアクティブ時のみ機能します
しかし相変わらず非アクティブ時に動きません
>>394 ユーザーアカウント制御 (UAC)をOFF
フック使う #UseHook
間隔調整 SetKeyDelay,***,***
ahk_parent 有り無しで試す
>>393 AutoItのリファレンス(chmヘルプ)の中見れば分かると思うが
膨大な項目数の割りに一つ一つの説明が簡潔だから
英語が不得意でも全然分かりやすいと思うぞ
それに、ボタン一発でサンプルの動作確認もできる親切設計だ
もし日本語訳リファレンス有るんならオレも欲しい
スレ立ててそっちでやれよ
>>395 サンクスです
ですが何故か非アクティブ時だけどうしても効きません
400 :
名無しさん@お腹いっぱい。 :2014/01/12(日) 04:20:51.54 ID:N0XLrLft0
はじめまして。 NumLockキーを押し間違えるので NumLock::return と書いたのですが、そのあと、本当に必要な時のために #NumLock::Send {NumLock} と書いても動作しません。 どこをどう間違えているのでしょうか?
401 :
名無しさん@お腹いっぱい。 :2014/01/12(日) 04:23:19.43 ID:N0XLrLft0
追記。Windows XP 32bitです。
Execute string in AHK - Support - AutoHotkey Community
http://www.autohotkey.com/board/topic/51532-execute-string-in-ahk/ ここ↑をヒントに文字列を実行する関数作ってみた
所詮素人が作ったものなんで突っ込み所有ると思うので、手直し必要なら教えてちょ(´・ω・`)
Exec_Strings("MsgBox,2,title_test,test test test")
Exec_Strings("WinClose,無題 - メモ帳 ahk_class Notepad")
Exec_Strings("gosub,label_sub")
Exec_Strings(cmd_strings){
Array := StrSplit(cmd_strings, ",")
call_func := % "func_" Array[1]
cmd_strings := RegExReplace(cmd_strings, Array[1]",")
if (InStr(Array[1], "MsgBox")) {
%call_func%(Array[2], Array[3], Array[4], Array[5])
}else if (InStr(Array[1], "WinClose")) {
%call_func%(Array[2], Array[3], Array[4], Array[5], Array[6])
}else if (InStr(Array[1], "gosub")) {
%call_func%(Array[2])
}
}
次レスへ続く
>>403 の続き
func_MsgBox(a, b, c, d) {
MsgBox, % a, %b%, %c%, %d%
}
func_WinClose(a, b, c, d, e) {
WinClose, % a, %b%, %c%, %d%, %e%
}
func_gosub(a) {
gosub, % a
}
label_sub:
MsgBox, sub_sub_sub
return
>>403 Exec_Strings()関数内の「cmd_strings := 〜」の行は不要ですた
関数も文字列として送れるようにした とりあえずこんな感じだけど個人的には満足しとります(リマップ用スクリプトが見た目スッキリした) Exec_Strings("kansu_1(""hoge hage"")", "f") Exec_Strings("kansu_2(""Auto"",""HotKey"")", "f") Exec_Strings(cmd_strings, function = ""){ if (function = "f") { ;引数functionが「f」なら、cmd_stringsは関数と判断する Array := StrSplit(cmd_strings, "(") Pattern := "^""|""|\)$" tmp_Arg := RegExReplace(Array[2], Pattern) }else{ Array := StrSplit(cmd_strings, ",") call_func := % "func_" Array[1] } if (InStr(Array[1], "kansu_1")) { kansu_1(tmp_Arg) }else if (InStr(Array[1], "kansu_2")) { arg := StrSplit(tmp_Arg, ",") kansu_2(arg[1], arg[2]) } } kansu_1(hikisu){ MsgBox, % hikisu } kansu_2(hikisu_1, hikisu_2){ MsgBox, % hikisu_1 hikisu_2 } スレ汚しスマンかった(´・ω・`)
>>406 関数を追加するたびに else if を増やしていくのは面倒くさそう
InStr() で1つずつ調べるより IsFunc() で関数の存在と引数の個数を調べて
分岐するほうが楽じゃないかな
後、MsgBox や WinClose みたいに単体で動作するやつは新規スクリプトに
書き出してそれを実行するほうが好み
引数の個数で分岐する必要が無いし、エラーが発生しても元のスクリプトが
止まらなくてすむ
関数とラベルチェック作るとするじゃん? if (islabel(check)) gosub % check else if(isfunc(check)) この行どうしよう? else Send % check return
やるとしたらこんな感じかな arg1, arg2, ... は適切に設定されているとして n := IsFunc(check) if(n) { if(n==1) %check%() else if(n==2) %check%(arg1) else if(n==3) %check%(arg1, arg2) else if(n==4) %check%(arg1, arg2, arg3) 以下、予想される最大数の n まで }
>>407 ,
>>408 アドバイスありがとう。お陰でかなり洗練されたけど、突っ込み所有れば容赦なく言ってちょ
Exec_Strings(cmd_strings, function = ""){
if (function = "f") { ;引数functionが「f」なら、cmd_stringsは関数と判断する
Array := StrSplit(cmd_strings, "(")
Pattern := "^""|""|\)$"
call_func := % Array[1]
tmp_Arg := RegExReplace(Array[2], Pattern)
n := IsFunc(call_func)
if (n) {
arg := StrSplit(tmp_Arg, ",")
if (n = 1) {
%call_func%()
}else if (n = 2) {
%call_func%(tmp_Arg)
}else if (n = 3) {
%call_func%(arg[1], arg[2])
;中略
}else if (n = 9) {
%call_func%(arg[1], 〜, arg[8])
}
}
;---------------------------------------------------------------------
次レスへ続く
>>410 の続き
;---------------------------------------------------------------------
}else{
Array := StrSplit(cmd_strings, ",")
call_func := % "func_" Array[1]
if (islabel(Array[2])) {
gosub, % Array[2]
}else{
%call_func%(Array[2], 〜, Array[9])
}
}
}
またまた、スレ汚しスマンです(´・ω・`)
突っ込まれる前に一つ分かってることを言っとくと、 Exec_Strings("MsgBox,2,title_test,test") Exec_Strings("MsgBox,test") 上のは問題ないけど、下のだと表示が空になるのでまだまだですわ(´・ω・`) 後はコツコツと時間かけて手直ししていきますです では、おやすみなさい・・・・・(´・ω・`)
可変長引数使ったほうがシンプルだよ
ID:oE7uW8Qb0です
>>413 可変長引数の件はかなり役に立ったよ、ありがとう
>>412 の件は、func_MsgBox()関数内で第2引数以下に値が有るか無いかで
どっちのMsgBox使うか判断するようにしますた
他にも手直しが必要なところを見つけたよ・・・まだまだ先が長いな(´・ω・`)
似たようなのでini に記述されたコマンドを実行するようなマクロスクリプト作ってたわ ahkそのものがテキストベーススクリプタだから激しく車輪の再開発なんだけどね
autohotkeyにreplがあればいいのに
Tてアスキーコードじゃ84じゃん。 そんで小文字のtは116。 でも、どっかのブログの記事だと Send,^+tと Send,^Tは同じになっちゃうとか??受けるアプリによるの?? おかしくね? ^+t はコントロールとシフトを押しながらt(116)となることを通常、 想定するよな? ^+tは内部でコントロール押しながらT(84)となっているの? 初心者な意見ですみません。
文字コードだけでなく、スキャンコード, VKey とか色々とあるんよ とりあえずSendやその周辺のマニュアル読むべし
降順にループしたいんだけど、こんな方法しかない? array := Object() array[1] := "one" array[2] := "two" array[3] := "three" c := 0, n := 0 for Value in array { c := array.Maxindex() - n n ++ MsgBox, % array[c] } とか Loop, % array.Maxindex() { c := array.Maxindex() - n n ++ MsgBox, % array[c] }
>>419 訂正です。
実際はforループでValueの値も使いたいので、こっちので良い(スマートな)方法有ったら教えて下さい。
連投すいません・・・
>>420 の「Valueの値も使いたいので・・・」件は取り消します。
Valueは昇順で処理する場合必要なのであって、降順には不要でした。
422 :
419 :2014/01/19(日) 18:14:49.09 ID:dvav9W940
結局以下のようにして落ち着きました。 降順ループの場合、forだと変数Valueが無駄になるので loopの方がメモリーを無駄遣いしなくて良いのかな・・・なんて思いました。 Loop, % array.Maxindex() { c := array.Maxindex() - (A_Index - 1) MsgBox, % array[c] }
オブジェクト内の要素カウントするのはコストかかるんで、 ループ前にローカル変数増やして対処するのが常套手段だけど、 AHKはどうかなぁ
i := array.Maxindex() + 1 while --i MsgBox, % array[i] とか i := array.Maxindex() Loop { MsgBox, % array[i] } until !--i とかは?
>>423-424 ありがd
知らなかったこと色々勉強した・・・
レスが長くなるとアレなんで簡単に書くと
先ずは、「--i」は(記述されたその行で?)演算後の値になること。(「i--」は次に「i」が使われる時点で演算後の値になる)
上段・・・「while 式」は、式「--i」の評価結果が 0 の時点でループ終了すること。
下段・・・「until 式」は、式「!--i」の評価結果が真(true、つまり 0 以外)になるまでループが続行されること。(この場合、「!」が肝)
今回は、後々のメンテナンスで分かりやすい「while」ループを使うことにしました。
連続だけど、質問。 今まさにWindowsがシャットダウンされようとしてるのは以下の方法で検知できるんだけど、 If A_ExitReason = ShutDown サスペンドやハイバネートを検知するにはどうしたらいいんでしょうか? AHKからサスペンドやハイバネートさせれば、検知など不要なんだけど、 方法如何に関わらず、検知させたいんです。
あ、windowsXP 32bitでAHK_L(1.1.13.01)です。
>>428 ありがd
よく読んで活用します。
しかし、過去スレのpart6と7に有ったのか・・・
一応過去スレ読んどかないと、と思ってpart16・15・・・と遡りながら時間かけて読んできたけど、まだpart11の途中だったよ。
専ブラのJaneStyleで動画が見つからなかった時に ダイアログを自動で閉じるようにしたいんだけど無反応でうまくいきません どこか間違ってますか? SetTitleMatchMode,2 #Persistent SetTimer AutoClose,500 return AutoClose: IfWinExist, StreamingPlayer3 ahk_class #32770 { ControlClick OK, StreamingPlayer3 ahk_class #32770 } return
AutohotkeyL x64 unicode版で動くeucへのURIエンコードスクリプトってありますでしょうか。 UTFへの変換やShiftJIS版でのものなら見つかるのですが、上記の条件だと見当たりません。
マウスカーソルがリンク、入力モード、矢印のどれかであるかを判断する方法はあるでしょうか?
>>432 MouseGestureLの関数丸パクリでこんなのは?
Loop
{
If MG_GetCursor() = 65567
Tooltip, リンク
Else If MG_GetCursor() = 65541
Tooltip, 入力モード
Else If MG_GetCursor() = 65539
Tooltip, 矢印
Else
Tooltip, その他
Sleep,500
}
Return
MG_GetCursor()
{
VarSetCapacity(infCur, 16+A_PtrSize, 0)
NumPut(16+A_PtrSize, infCur, 0, "UInt")
DllCall("GetCursorInfo", "Ptr",&infCur)
hCursor := NumGet(infCur, 8, "Ptr")
return hCursor
}
リマップ/ホットキー用スクリプト書くとき、 キー毎にまとめて書くのとアプリ毎にまとめて書くのと どっちの方が見やすく、管理しやすいでしょうか。 …というか、どっちがオススメですか。ご意見お聞かせ下さい。
うーん、地味に組み込み変数に今押してる修飾キーを除いた物理キーってのがないんだのう A_thishotkeyだと#とか^とか*とか downとか upとか余計なのついてくるし、トリムコマンドで整形するしかないのん?
かなキーに変換キーを割り当てたいだけなのに、 うまいこと設定できない。 日本語キー周りはレジストリ書き換えするしかないのか。
やったことないが、Wikiでは半角/全角・CapsLock・かなは動作不定となっている以上、 AHKで弄るのはよろしくないんじゃね
>>434 俺はアプリ毎
アプリを使わなくなった時にまとめて消せるのが楽
>>437 vkF2sc070::
Send, {vk1Csc079}
return
で動かね?
>>434 こんな感じで管理するといいかも。
;---共通設定----
F1::
ToolTip 通常
Return
;--アプリ別設定--
#If WinActive("電卓")
F1::
ToolTip 電卓
Return
#If
#If WinActive("無題 - メモ帳")
F1::
ToolTip メモ帳
Return
#If
>>439-440 なるほどーアプリ毎にまとめた方が良いみたいですね。
自分もその方向で行きたいと思います。
ありがとうございました、。
もし良いアイディアがあれば教えてもらいたいのですが、 Windows8のタッチキーボードをトリガーに、AHKを使えたりしますか? 最近DELL Venue8を購入、Win8使ったことある人ならわかるだろうけど、タッチキーボードに左側にテンキー右側に日本語フリックのキーボードがあって、 それをテンキーよろしく8,2,4,6を上下左右のカーソル化や、「あ」をタッチしたら○○する というアクションを起こさせたいんです。 (イメージはゲームボーイのように縦に持って、両手親指で操作)
>>442 要はAutoHotkeyがタッチキーボードで動くのかって事だろ?
すぐに出来るんだし自分で試せばいいじゃん。
動かない、満足しないならGUIでコントローラーでも作ればいい。
いろんなソフトのツールチップの内容をクリップボードにコピーしたいのですが、 スパイでウィンドウクラスを取得しようとしても、ツールチップが途中で消えてしまうので確認できません。 ツールチップの内容をクリップボードにコピーする方法を教えていただけないでしょうか?
>>442 んで普通のホットキーラベルじゃダメだったの??
7 64bit タスクバーをalt+Tなどで表示のトグルはできるのですが非表示時にタスクバーがあった範囲が 空白になって最大化などで隙間ができてしまいます これを解決する記述はありますでしょうか?
タスクバーを自動的に隠すにチェックで一応解決しました
AutoHotkey.ahkとは別のA.ahkとかを#NoTrayIconで起動してた時に AAA.ahkを指定して終了させることはできませんか? タスクマネージャをみても全てAutoHotkey.ahkで見分けがつかず 今は一旦全部終了させてから再度AutoHotkey.ahkだけ起動させてるんですが A.ahkだけとかB.ahkだけを個別に終了させる方法があれば教えてください
>>449 これは便利そうですありがとうございます
>>450 1.それぞれのahkで WinSetTitle でユニーク度の高いタイトルを設定する。
2.該当ahk終了専用のahkで、WinClose にそのタイトルを指定
3.該当ahkを終了させたい時に、2で作ったahkを起動する。
で、出来ないかな?(実験してない、すまないニダ)
ごめん…適当なこと言ってました。 AHKは、GUI作る以外に自スクリプトにタイトル設定できないみたいだ…
連続で投稿してすまないニダ。 もうちょっと詳しく調べてみて試したらいけた。 ;----------------------------- ;AAA.ahk #Persistent #NoTrayIcon ToolTip, テスト表示 ;----------------------------- ;terminate.ahk DetectHiddenWindows, on WinClose,E:\AutoHotkey\AAA.ahk - AutoHotkey v1.1.14.01 ahk_class AutoHotkey ;----------------------------- WinCloseに指定するタイトルやクラスは、AHKインストーラ付属のAU3_Spy.exeで調べられる。 AU3_Spy.exeを起動し、調べたいAHKのトレイアイコンを表示して、そのアイコンを右クリックするだけ。 何かアホみたいに簡単だったニダ。
最大化時のウィンドウの座標調べたらx:-8 y:-8だった 普通(0、0)じゃないかと思うんだけどなんか画面設定ミスってんのかな
枠
枠分は最初からはみ出てるってことですか? でもあるウィンドウの最大化時にwigetposで得た座標、幅、高さを 最大化してないそのウィンドウに対してWinMoveで指定してやると 最大化した時と違って画面外にはみ出まくった経験があるから その数値って外枠を反映してないと思ってたけど
>>457 どうもです。まぁきっとこの座標の8ってのが枠の幅だろうと思います。
最大化時には枠分を画面外にはみ出させて、その枠を操作不能、不可視な感じにしてるんですね。
デュアル画面から見えないので枠自体を消してるんだと思ってましたが、これで座標の数字の謎が解けました
Windows8の64bit版を使っていて、AutoHotkey111401をインストールしました
ttp://bombermine.com/#/play/ ↑このページのタイトルのときにキーボードのアプリケーションキーを無効にしようというつもりで
下のように書いたahkファイルをダブルクリックし、通知領域にアイコンは表示されているんですが
上手く出来ません、ご指導ください
あと、ページのタイトルじゃなくてURLを指定することは出来るんでしょうか?
SetTitleMatchMode 2
#IfWinActive Bombermine ? Massively Bomberman Online with up to 1000 players on the single map
AppsKey::return
ファイルパス長が知りたくてテキストエディタにコピペして桁数を確認する作業をしてるんですが AHKで手っ取り早くできないでしょうか
>>459 WinTitle指定間違ってるだけ、長いタイトルの場合ブラウザによっては途中で切られるので
誤認識が起きない程度の長さで十分
Bombermine ? Massively Multiplayer Online Retro Arcade with up to 1000 players on the single map - Mozilla Firefox
Bombermine ? Massively Multiplayer Online Retro Arcade with up to 1000 players on the single ma - Internet Explorer
↓
#IfWinActive Bombermine ? Massively Multiplayer Online
>>460 「桁長」って何を指すかによる。 文字数?バイト長(半角NN文字)?
前者なら文字数カウントするだけ。
後者なら内部UTF8なんでちょっと面倒( ア で3バイト)なんで↓の関数使うといい。
/*
* 文字列のバイト長を返す
*/
StrLenB(str) {
Return (A_IsUnicode) ? StrPut(str, "CP0")-1 : StrLen(str)
}
パス文字列をどう貰って、どう結果を使いたいかが無いので、計算部分だけの回答。
v1.1.14.01 - January 15, 2014 本家のHPがいつのまにかリニューアルしてて、あと名前から"L"が取れたらしい 一方で無印のHPも健在 どういうことだってばよ?
新しいのはインストーラーのみか zip版希望
ありがとう
v1.1.14.01 Unicode 32-bit コマンドラインを指定(0〜255の数字)して開くとアクティブウインドウの透明度を変えられるahk作ってるんですけど、 %0%ってコマンドラインの個数入ると思ってましたが違いました? 何故かコマンドラインそのものが入るんですけど、仕様変更になったんでしょか? だとすると、コマンドラインの個数はどうやって調べるんですか? CmdLine_num := %0% if (CmdLine_num > 2) { MsgBox, 16, , 引数の数 %CmdLine_num% ExitApp } Sleep, 5000 if (CmdLine_num = 1) { MsgBox, 引数の数 %CmdLine_num% WinSet, Transparent , OFF, A }else if (CmdLine_num = 2) { CmdLine := %1% MsgBox, 引数の数 %CmdLine_num% 引数 %CmdLine% if ((CmdLine >= 0) && (CmdLine <= 255)) { WinSet, Transparent , % CmdLine, A } }
>>469 ありがとうございました。
この場合、「:=」は使えないんですね。
個人的に変数への代入は、なるべく「:=」に統一したいので
CmdLine_num := 0
CmdLine := 1
とやってみましたが無理でした。コマンドラインの場合はこういうもんだと諦めるしか無さそうですね。
あとどうでもいいんですが、上のスクリプト、if 文に間違いがありました。
if (CmdLine_num > 2) { → if (CmdLine_num > 1) {
if (CmdLine_num = 1) { → if (CmdLine_num = 0) {
}else if (CmdLine_num = 2) { → }else if (CmdLine_num = 1) {
俺も諦めた口だな
どうしても = を使いたくないなら n := 0 CmdLine_num := %n% とか CmdLine := object() loop,%0% CmdLine[a_index] := %a_index% msgbox % "引数の数: " . CmdLine.maxindex() とか。 %0%もなんだか気持ち悪ければ loop { if %a_index% is not space CmdLine[a_index] := %a_index% else break } とか?
使えないのね。 エディタに貼り付けたらすぺーすに変換してちょ。
>>472 ありがとうございます。
参考になります。
>>468 v1.1.14.01Unicode 32-bitと64-bitの両方で試してみたけれど
%0%はやっぱりコマンドラインの個数そのものが入るよ?
それと、どうせなら
>>472 のものを関数化してしまえばいいかと
getCmdLine(){
global
CmdLine := []
loop,%0%
CmdLine[a_index] := %a_index%
return CmdLine
}
rslt := getCmdLine()
MsgBox,% rslt.maxindex()
実は:=を使わなくてもいいので
getCmdLine()
MsgBox,% CmdLine.maxindex()
こう書くこともできる
476 :
468 :2014/01/27(月) 21:37:24.30 ID:r+/i0w0R0
468です。
>>475 以下のスクリプトを適当なコマンドラインオプション付けて実行すれば分かって貰えるかと。
違いは、「:=」になってるか、「=」になってるかだけです。(ブラウザの表示フォントによって見づらいかもしれません)
あと
>>475 のスクリプトは参考にさせていただきます。ありがとうございました。
CmdLine := %0%
MsgBox, 引数の数 : %CmdLine%
CmdLine = %0%
MsgBox, 引数の数 : %CmdLine%
%0%には間違いなくコマンドライン引数の数が入ってるけど、 CmdLine := %0% だと %0% の中身がでてきて、それがさらに変数名だと解釈される。 つまり引数が1つなら CmdLine = %1% だし、2つなら = %2% と同じ意味になって、 渡した引数の最後が出てくる。 foo := "bar" bar := "ばあ!" msg := %foo% msgbox % msg
指定フォルダ以下を正規表現でリネームするのください RegularRenamer使って組んでみたけど しょっちゅう失敗するダメプログラムしか出来ませんでした……
いっそ外部プログラムに任して起動とコマンドラインだけ送る そのあと常駐しないように閉じるとかな たしかに出来ないことはないんだけど何もかんもAHKでやらんでもいい気もしなくもない
>>478 「リネームソフト 正規表現」 でまず検索
ここはスクリプをトクレクレする場ではないので要求するだけムダ
気軽に「こんなソフトありませんか?」スレなら要望に答えて適当なツールを作ってくれることもある
かもしれないのでそっち池
481 :
478 :2014/01/28(火) 00:55:27.33 ID:lj6Jkt+40
2行目を読んでほしかった…… まぁここで頼んでも無駄ですよね
うん無駄だからもう来んなよ
クレクレは嫌いだけど、
>>468 みたいなどこがもちがってますか的なのは歓迎
というかloopのファイル検索とFileExist使えば猿でもできるんじゃね
添削は勿論いいんだよ、ネットに転がってるの丸ごとコピペして改造頼むはダメだけどな 自分で組んだならそれを貼れば良かったのに、丸ごとなしにして一から作ってくださいじゃ結局ただのクレクレじゃん
クレクレは置いといて 明らかに1行目しか読んでないってひとたまにいるけど 速読術かなんかなの?誤解したらむしろ効率下がってないか
>>464 のあたりでも話題になってるけどなんで_L取れたの?
紛らわしい
>>487 Lが付いてると派生版という印象が残るからだろ
Autohotkey_Lはもう随分前にAutohotkeyのメインストリームに
なってるし、Lが取れたのは今回からじゃない
正式名称がAutohotkey 1.1で、通称がAutohotkey_Lになってた
AHKのせいでLinuxに移行できない
AHKでWindows7の音声デバイス出力を切り替えるにはどうすればいいですか? WaveDevice.ahkという名前のものを参考にいろいろやってみてるのですが、おそらくwindows7では使えないみたいです
VA.ahkで出来るんじゃね?
492 :
名無しさん@お腹いっぱい。 :2014/02/01(土) 00:26:54.01 ID:TtsDpLi60
Linuxになんで移植されないか不思議なレベル
Linuxは普通にシェルスクリプトで操縦できるからじゃね?
Linux版の名前は Autohotkey_L で決まりだな!・・・あれ?
煽りじゃなくて、LinuxでAHKを使って何をしたいのかがイマイチわかんない。 (windowsでもAHKを使う積極的な理由がよくわからないけど・・・)
キーリマップ ていうかスペースキーを修飾キーにして使うスクリプトが案外便利なんだよ アップローダの関数を自分で書き換えたやつだけど
かざぐるマウスが解散したから代わりに使いたいんだけど、 マウスジェスチャーはどうやればいいの??
マウスジェスチャーなら、MouseGestureL.ahkを使うのがいいかと
linuxならironがと思ったら404だ
カーソルの動きを監視する上で一番賢いやり方教えてください カーソルが2秒動かなかったら画面端に移動、を考えたときに 常にカーソルを監視させると結構な負荷になるのでは?なんて思うんですが
SetTimerでMouseGetposしてポーリングチェックしたらいいんでね PCの処理速度からしたら2秒ごとなんて屁みたいなもんだし OnMessage()でMouseMoveイベント拾うより簡単で負荷も少ないと思う
>>501 SetTimer(監視最小10ms〜) + MouseGetPos
Loop + MouseGetPos + Sleep(無し/10〜)
タスクマネージャで負荷見てもらえば分かるが
待機時間0(Sleep 0)で全力で処理しない限り
CPU負荷は1%も増えない程度の負荷しかない
あとは実際に自分で確かめてほしい。
F1::
Var = 0
Loop,1000 {
ToolTip % Var++
Sleep 0
; Sleep 10
; Sleep 100
}
Return
SetTimerしかない、と言うよりSetTimerで十分、というわけですね ありがとうございました
AutoHotkeyを使えばEmacsやviにも劣らない全く新しい強力なキーバインド体系を作れると思うのですが、 それについて意見を持っている方、もしくはそういった方々が集まるところを知っている方がおられましたら御一報を
Gui, Add, ListViewでリストビューの余白(一番最後に追加した項目の下)をクリックしても gオプションで指定したラベルが実行されます 余白のクリック時には無効にするにはどうすればいいのでしょうか。 もしくは余白クリック時には項目選択のフォーカスが外れるようになる方法はありますか
訂正 >Gui, Add, ListViewでリストビューの余白(一番最後に追加した項目の下)をクリックしても Gui, Add, ListViewで追加したリストビューの余白(一番最後に追加した項目の下)をクリックしても
>>507 解説読み飛ばしていないか?・・・。
選択状態(青くなる)、キーボードフォーカス(枠線)
どっちのこと言ってるかわからんがやることは同じ。
GUI関連は項目操作の専用関数が多いのでよく読もう。
ttp://ahkwiki.net/Gui,Add,ListView リストビューをクリック等(AltSubmitで拡張)操作するとGラベルのサブルーチン実行。
↓
押した項目番号取得 イベント A_EventInfo
テキスト取得 LV_GetText
押した箇所が余白か判断(全ての空白なら) If
↓
分岐→ 小文字有り 別の処理
↓
空白 選択解除 LV_Modify
試してもらえば分かると思いますが、空白クリック時に得られるA_EventInfoが
空白クリック前にフォーカスのあった項目のRawNumberになってしまうから詰まってるわけです
だから
>>506 で
>もしくは余白クリック時には項目選択のフォーカスが外れるようになる方法はありますか
と聞いたのです。
>>509 何言ってるのか追加の説明でようやく理解した。
GuiControlGet,*2*,Focus または ListViewのHwnd*1*
ControlGet,OutputVar,List,Selected,*1*,*2*
どちらか使ってコントロール指定すれば 「選択中の項目」 内容が分かる。
誰得追記 LV_GetNext()の第一引数を省略するのが重要だったみたいです。0指定とかだと駄目 >StartingRowNumberが省略された場合は、一番上の選択されている項目を返す。
LV_GetNext( ,"F")でも
>>506 状態になってしまい、LV_GetNext("F")としないと駄目っぽいです
一応書いておきます。何度もすみません。
>>514 自分も試してみたが罠仕様だなw
○ LV_GetNext(0) LV_GetNext("0") LV_GetNext("F")
× LV_GetNext( ,"F") LV_GetNext("","F") LV_GetNext("0","F") LV_GetNext(0,"F")
AHKで作成したGuiであらゆるイベント毎に指定サブルーチンを実行することはできないでしょうか? フォーカスコントロールの移動、どこどこがクリック、ダブルクリックされた等を A_GuiEvent A_GuiControlEvent A_EventInfo等を使って監視したいのですが 色々構想はあるのですが、とりあえず今やりたいことは ある1つのEditにフォーカスがある時のみ入力内容を反映したサジェスト候補リストを表示、 フォーカスが外れたら非表示という動作がしたいです。 EditコントロールのGオプションで指定したラベルは文字入力時にしか実行されないようです。 今のところsettimerとGuiControlGet, , Focusで代用しているのですが ちょっと煩雑だし、汎用性がないので… 知ってる方がいればよろしくお願いします
>>516 SetTimer + GuiControlGet, , Focus でフーカス監視するのが正解。
慣れれば簡単で好きなように出来るので汎用性は非常に高いと思うが・・・。
イベントドリブンでやりたいならOnMessage()使うとかかな
>>518 OnMessage()かー
前に一度やって自分のあまりの知識の無さに挫折したんですよね
自分がやるとメッセージリストの検索でまた時間取られそうなw
まぁぼちぼち試してみます
ありがとうございます
質問者ではないが使ったことなかったので練習がてらに書いてみた。 Gui,Add,Edit,ReadOnly vEdit Gui,Add,Text,HwndTEXT1,########テスト1######## Gui,Add,Text,HwndTEXT2,########テスト2######## Gui,Show OnMessage(0x0200,"MouseMove") ;WM_MOUSEMOVE Return MouseMove() { global TEXT1,TEXT2 MouseGetPos,,,,OutputVarControl,2 If OutputVarControl in %TEXT1%,%TEXT2% { ControlGetText,OutputVar,,ahk_id %OutputVarControl% GuiControl,,Edit,%OutputVar% }Else GuiControl,,Edit Sleep 100 }
active windowsになっているプログラムの実行パスを取得するにはどうすればよいですか? WinGetかなとは思ったのですが、WinGetだけではできませんでした
変だと思って調べてみた所、更新の止まっている 流行らせるページ、AutoHotkeyJpには載っていないようですね。
.ahkファイルを複数のPCで共有&同期したいんだけど、.ahkファイルをDropboxに突っ込んで、そこから読み込むようにしたいんだけど、それって可能? もしくは別の方法で共有&同期する方法ある?
可能
・フォルダ共有 ・NASに置く
・Dropbox あ、重要なデータはおいちゃだーめよ
Installer.ahkをもっかい実行しろ
無変換キーを押した場合 無変換キー+エンター+スペースという動作にしたかったのですが (例えば、かな入力時あいうえおと打って無変換キーを押すと"aiueo "にしたい) と思い見よう見まねで vk1Dsc07B::Send,{vk1Dsc07B}{enter}{space} *{f9}のほうが良かったかも としたらキーが無茶苦茶になって操作不能になりセーフモードで直しました 次に vk1Dsc07B::Send,{vk1Dsc07B}{enter down}{enter up}{space down}{space up} これも無茶苦茶になりました mousegesturelも使っているのですがまったく記述の仕方が違うのでしょうか? どなたか希望のような記述を教えていただけないでしょうか?
文の意味が分からん 常時フックモードで使うぐらいしら思いつかんな
>>532 要するにMac風にしたいわけだね。
autohotkeyではなく、普通にIMEのキーバインド変えた方が楽だよ。IMEのキーバインドの中に、半角英数変換、かな変換共にあるよ。
F10じゃダメなの?
試行錯誤が楽しい時期と見た
{f10}の間違いでした 例えば"aiueo kakikukeko"と打ちたい時 あいうえおの後{f10}押してもその後に" "の部分はエンター押してスペース押さないとじゃないですか
根底にあるのは常にIMEオンで使いたいんです いちいち切り替えや状態確認がめんどいんです で、英語となるといちいち単語ごとにF10押して確定してスペースの作業がめんどいんです I LOVE NY にしたい時 いぉヴぇnyの後F10押して確定してILOVENY,その後Iの後とLOVE後の後スペース または い打ってF10打って確定押してスペース押して"I ",ぉヴぇ打ってF10押して確定してスペース売って"LOVE " この一連の作業をF10打ったらもうエンター+スペースまで打たせたいんです
>>538 無変換キーにIMEオフを、変換キーにIMEオンを割り当てる。(IME.ahkを使うと簡単)
日本語打ちたいときは、常に変換キーを押してから入力する。
アルファベットのときは、常に無変換キーを押してから入力する。
たとえばI Love My Angelって打ちたかったらShift押してi打てばそのままずっと英字で打てるけど。半角空白も入力できる 全部小文字/大文字にしたいってならその時はF10を押せばいい
まあそれはわかってるんですがそういうの細かいところを自分の好きな仕様にするためのもんでしょこれ・・・
sc07B:: Hotkey, sc07B, Off Send, {sc07B}{enter}{Space} Hotkey, sc07B, On Return どうだろう
完璧です! ありがとうございました
確定前の文字列が 「いぉヴぇny」 だと何入力してるのか確認できないのでミスタイプが多くなる。
>>539-540 の様な動作を覚えて変な癖直すべきだと思うが・・・。
Google IMEだと英語でも変換対象になるから無理
sc07B::Send, {%A_ThisHotkey%}{enter}{Space} これだけでよかったぽ
あれ、やっぱだめかな?w
先達として忠告しておく。まぁ聞かんでもいいが キーバインドはなるべく長いものにまかれたほうが良い ショートカットキー足したりマクロ的に使ったりするのは良いけど根本を変えると何年か後に大変面倒な思いをする 頭硬くなって戻せなくなっても後の祭り
好きにさせろって言ってるんだからほっとけばいいw
>>548 その意見に関しては心から同意する。
少しくらい入力が遅くなっても、業界標準キーバインドで安定して高速でPCを扱えるほうがいい。
文筆家みたいな特殊な人は別だろうけど。
ていうかそれこそポータブルahkに対して引数指定でahkファイルを指定してやればええんですよ batでいうとこーんなかんじで start AutoHotkey_LPortable.exe MouseGestureL.ahk まぁbatじゃなくてもなんでもいいけど
>>525 ですが自己解決しました。
今までautohotkey.exeをスタートアップに入れてましたが、任意の場所(例えばDropbox)に保存したautohotkey.ahkをスタートアップに登録すれば、WAN経由同期いけました。
すごい単純なことですみません。
テキストエディタでVimのヴィジュアルモードを再現するにはどうすればいいんでしょ 次にカーソル以外のキー押すまでShift押しっぱなしにするって感じでしょうか
まぁ、そんな感じじゃないのかね 使ってるエディタ晒したほうが幸せになれたかもしれないな エディタの機能であるかもしれないし
>>555 WinSet, TransColor, %CustomColor% 150
の下あたりにでも
WinSet, ExStyle, +0x00080020
を追加はどう?
トレイアイコンの右クリックメニューが出てるアプリの、ウインドウタイトルとウインドウクラスはどうやって調べるんでしょうか? Loop { MouseGetPos, OutputVarX, OutputVarY, OutputVarWin, OutputVarControl WinGetTitle, win_Title, ahk_id %OutputVarWin% WinGetClass, win_class, ahk_id %OutputVarWin% ToolTip, % win_Title "`n" win_class "`n" OutputVarWin "`n" OutputVarControl, 300, 300 Sleep, 500 } これで、メニューの上にマウスを持っていっても取得できませんでした。 WinGetTitle, win_Title, A とかはもちろん(?)だめでした。
ツールチップ(ホバー?)のCLASSを取得する方法ってあります? AU3_Spy.exeで見ようにも、フォーカスを合わせられなくって
>>559 返事遅くなりすいません。
レスありがとうございます。
教えていただいたスクリプト試してみました。
これ、トレイアイコンの情報を取得できるのは出来るのですが、
アイコンの番号(A_Index)を指定する必要があり、
>>558 で質問したような特定(不定)アイコンの情報が取得できません。
どうにかしてマウス位置(マウス右クリック位置)のアイコンの番号取得できればいいんですが…
良い方法がないかもうちょっと捜してみます。
cnt:=Tray_GetCount()
DetectHiddenWindows,On
Loop,%cnt%{
Tray_GetInfo(A_Index,hwnd,uid,msg,hicon)
WinGetTitle, win_Title, ahk_id %hwnd%
WinGetClass, win_class, ahk_id %hwnd%
ToolTip,% A_Index " of " cnt "`n" msg "`n" uid "`n" hwnd "`n" hicon "`n" win_Title "`n" win_class, 500, 300
Sleep, 1000
}
右クリックしてコンテキストメニューを表示させているなら ifwinexist, ahk_class #32768 で取得してそっからアプリのProcessを取得して processから本体側のタイトルとクラスを取得していける。
564 :
名無しさん@お腹いっぱい。 :2014/02/14(金) 10:17:52.13 ID:D/PNCwNX0
今日インストールしてみて、わからないことがあったので質問させてください。 Process,Exist,notepad.exe ;メモ帳が起動しているかどうかを調べる If ErrorLevel<>0 ;起動していた場合(ErrorLevel変数にプロセスIDが格納される) WinActivate,ahk_pid %ErrorLevel% ;そのプロセスのウィンドウをアクティブにする else ;起動していなかった場合 Run,notepad.exe ;メモ帳を起動する wikiにあるこちらの例はスクリプトに貼り付けて、スクリプトをリロードするだけでは使えないのでしょうか?
使えるよ
>>564 おそらく貼り付ける位置に問題がある
スクリプトをロードした時に実行されるのは、スクリプトの最初のほうの
Auto-execute セクションと呼ばれる部分のみ
具体的には、最初に Return, Exit あるいはホットキーラベルが現れるまで
ttp://ahkwiki.net/Scripts
567 :
名無しさん@お腹いっぱい。 :2014/02/14(金) 12:20:26.58 ID:D/PNCwNX0
>>566 ありがとうございます。使えました。
ということは、いくつものスクリプトを同じファイルで使うということは出来ないんですね。
常駐させる奴はタスクバーに表示させない、と言ったやり方で対処したいと思います。ありがとうございました
568 :
名無しさん@お腹いっぱい。 :2014/02/14(金) 12:26:31.14 ID:D/PNCwNX0
すいません、ということは、起動時に複数のスクリプトを実行させたい場合は全てのスクリプトををスタートアップに入れておくということでしょうか?
>>567 いやいや、普通に複数スクリプト使えるって。
先ずは落ち着いてWikiを読め。
単独でALTを押した時にメニューにフォーカスが行くのを止めたい(かつ、Alt%2b何かのキーによるショートカットは止めない)と思ってるんだけど、なかなかうまくいかない。 ~LAlt::Return じゃダメなのかしら? ちなみに ~!::Return だと通常の文字入力のときに感嘆符が打てなくなる。
バグった。 Alt%2b何かのキー ↓ Alt + 何かのキー
~Alt up::Return ?
573 :
名無しさん@お腹いっぱい。 :2014/02/14(金) 13:30:41.98 ID:D/PNCwNX0
>>569 一応概要からイントロダクション、使用例、使用方法まで読んだんですけどどこに載ってますか?
574 :
名無しさん@お腹いっぱい。 :2014/02/14(金) 13:35:39.25 ID:D/PNCwNX0
>>569 すいません、わかりました。どこに書いてある、というより初歩的すぎて書いてないって感じですね、ありがとうございました、
575 :
名無しさん@お腹いっぱい。 :2014/02/14(金) 13:42:37.69 ID:D/PNCwNX0
何度もすいませんわかってなかったです。 ;AutoReload #IfWinActive, ahk_class SciTEWindow ~^s:: ScriptName := "AutoHotkey.ahk" IfWinActive, %ScriptName% { Reload } Return ;無変換キーを使って集結 vk1Dsc07B & I::Send,{Blind}{Up} vk1Dsc07B & J::Send,{Blind}{Left} vk1Dsc07B & K::Send,{Blind}{Down} vk1Dsc07B & L::Send,{Blind}{Right} vk1Dsc07B & Space::Send,{Blind}{Enter} vk1Dsc07B & vk1Csc079::Send,{Blind}{BS} vk1Dsc07B & vkF2sc070::Send,{Blind}{Del} これで、下の無変換キーを使って集結のほうが動作しないんですが、どこが問題なんでしょうか?別々だと動作するんですが
だから
>>1 の解説サイトよく読んでから質問しろって
読んだけど書いてないとかどこに書いてる?とか言うなよ
SciTEWindow でだけ効かせたいならそれであってるハズ 無変換以降は全域で効かせたいなら Returnの後に #IfWinActive を入れる
579 :
558=562 :2014/02/14(金) 18:01:13.52 ID:7rme8u8l0
>>563 レスありがとうございます。
また返事遅くなりすいません。
下のようにやってみたんですが、win_Titleは常に空でwin_classは常に#32768になってしまいます。
何が悪いんでしょうか?
DetectHiddenWindows,On
Loop {
ifwinexist, ahk_class #32768
{
hwnd := WinExist(ahk_class #32768)
;プロセスID(1)
WinGet, process_id, Pid, ahk_id %hwnd%
WinGetTitle, win_Title, ahk_pid %process_id%
WinGetClass, win_class, ahk_pid %process_id%
ToolTip, % "1) " process_id "`n" win_Title "`n" win_class, 500, 300
Sleep, 500
;ProcessName
WinGet, name, ProcessName, ahk_id %hwnd%
WinGetTitle, win_Title, ahk_exe %name%
WinGetClass, win_class, ahk_exe %name%
ToolTip, % "2) " name "`n" win_Title "`n" win_class, 500, 300
Sleep, 500
次レスへ続きます。
前レスからの続きです。 ;プロセスID(2) ErrorLevel にプロセスIDが入る Process, Exist, %name% WinGetTitle, win_Title, ahk_pid %ErrorLevel% WinGetClass, win_class, ahk_pid %ErrorLevel% ToolTip, % "3) " ErrorLevel "`n" win_Title "`n" win_class, 500, 300 Sleep, 500 ;ProcessPath WinGet, path, ProcessPath, ahk_id %hwnd% WinGetTitle, win_Title, ahk_exe %path% WinGetClass, win_class, ahk_exe %path% ToolTip, % "4) " path "`n" win_Title "`n" win_class, 500, 300 Sleep, 500 } }
>>579-580 f12:: ;タスクトレイのアイコン上でF12を押す
send, {rbutton}
sleep, 200
gosub, test1
return
test1:
ifwinexist, ahk_class #32768
{
hwnd := WinExist(ahk_class #32768)
WinGet, process_name, ProcessName, ahk_id %hwnd%
send, {alt} ;alt または esc 等でコンテキストメニューを消す。
sleep, 200
;消さずに以下を実行するとコンテキストメニューのタイトル(空)とクラス(#32768)を取得してしまう。
DetectHiddenWindows,On
process, exist, %process_name%
WinGetTitle, win_Title, ahk_pid %errorlevel%
WinGetClass, win_class, ahk_pid %errorlevel%
msgbox, %process_name%`n%win_Title%`n%win_class%
}
return
582 :
名無しさん@お腹いっぱい。 :2014/02/15(土) 00:48:50.69 ID:f4DnLuvh0
$LButton:: { if (hoge) { ;特殊処理 } else { ;AHKでなにもせずに通常の処理に戻す } } のように行いたいと考えています ” ;AHKでなにもせずに通常の処理に戻す” の部分はどう記述すればいいのでしょうか?
初歩的な質問ですみません A:: if (GetKeyState("A", P) = 1) ってのは不可能なのでしょうか A:: if (GetKeyState("B", P) = 1) なら問題なく動作します Aを押している間動作ってことをやりたいのですが上手く動作しません
>>582-583 ID:D/PNCwNX0
リファレンス/コマンド全部読み直し
適当に読み飛ばしすると余計時間かかるぞ。
鯖復活
ATOK2014にしたらime.ahkの制御が何かうまくいかないときが出てきました imeが本当は無効になっているのをime.ahkが認識してくれないことがあります ATOKの新規機能にそれらしき原因が見当たらないのでどうもできない状況です どうすればいいでしょうか
IME.ahkのバージョンが古いんじゃなきゃTSF関連かな?
IME.ahkはIMM32のAPIしか見れないから新しいIMEでは今後難しくなってくる傾向にはある
MS IMEとかのTSF系のIMEでもON/OFFくらいの基本部分はIMM32互換なので使えてたが
ATOK2014は互換性なくなったんだろうか
IME.ahk 最新版
http://www6.atwiki.jp/eamat/pages/17.html
変換キーでIMEの ON/OFF を切り替えるのに IME.ahk を使ってるけど、 ATOK2014で正常に機能するよ OS は Windows 7 (32bit)、AutoHotkey は最新版の v1.1.14.2、 IME.ahk も最新版(2011.11.10)
589 :
579-580 :2014/02/15(土) 11:58:18.82 ID:bb5kaDsJ0
>>581 レスありがとうございます。
またまた返事遅くなりすいません。
情報取得できました。
・・・のですが、取得した情報が何か変だなと思って「AU3_Spy」で取得した情報と比べてみました。
1)Process Explorer
a)AU3_Spy
タイトル:Process Explorer - Sysinternals: www.sysinternals.com [****]
クラス:ahk_class PROCEXPL
b)ahk
タイトル:空
クラス:tooltips_class32
2)MouseGestureL.ahk
a)AU3_Spy
タイトル:(フォルダパス)\MouseGestureL.ahk - AutoHotkey v1.1.14.02
クラス:AutoHotkey
b)ahk
タイトル:MouseGestureL.ahk
クラス:AutoHotkeyGUI
「AU3_Spy」ってどういう仕組みで取得してるんですかね。
それにしても、トレイアイコン操作するのって大変なんですね、自分が甘かった。
590 :
588 :2014/02/15(土) 12:04:24.75 ID:hK3msH1X0
588 書き間違えた ×IME.ahk も最新版(2011.11.10) ○IME.ahk も最新版(2012.11.10)
>>572 あー押し上げだけ無効化すればいのか。
あっさり出来たね。。。アリガトウ
スレ汚しスンマセン。。。
ホイールの加速をAutohotkeyで設定するとMousegesrelの右クリ+ホイールなどが 効かないのですが解決方法はありあすか?
>>592 WheelAccelを加工(MGLのプラグイン化)して
ホイール回転を全面的に乗っ取るのではなく
MGLのアクションとして加速したホイール回転を指定できるようにする
Pluginのフォルダに.ahkをいれてMousegesturelを再起動させると必ず固まるのですが 何かやり方がおかしいのでしょうか? そのままではダメで何か書き足したりするのですか?
>>595 593で加工するように言われているのだから、そのままではダメだろw きちんと読まないと追加のアドバイスもらえないよ
固まるというのはよく分からんが、おそらくそのまま入れたらMGLが消えるような形になるはず
アイコンを右クリしても日本語メニューが出てこなかったらそういう状態
Gotoを使う等で対処するんだが、他のMGL用に編集されたスクリプトを見た方が早いだろう。それでも分からなければ専スレへ
1.1.14.00 - 2014/01/15 の 変更: Changed behaviour of ~ prefix with custom combos to be more intuitive. はどういうことでしょうか?
macみたいに 変換キー=IMEオン 無変換キー=IMEオフ 変換キー2連打=英数をひらがなに再変換 無変換キー2連打=ひらがなを英数に変換 ってやりたいんだけど、どうもうまくいかんなー。IMEのオンオフはできたけど、連打した時の挙動がどうしてもうまくいかない。
>>601 「キーボードでマウス操作」のコードに見覚えがあるなぁと思ったら
part15スレで俺が書いたやつだ、ホットキーとSleepの位置が違うけど
まさか普段お世話になっているサイトに間接的に貢献してるとは思わなかったw
IME.ahkのIME_GetConvertingなんだけど、LINEってソフトの入力窓だと文字入力中も戻り値が0になってしまう。 変換候補窓が出てるときはちゃんと2が返ってくる。 状態と戻り値がこんな感じ 入力窓がアクティブで文字入力してない(|が点滅):0(仕様どおり) 文字入力中(文字の下に下線)の時:0(仕様では1のはず) 変換候補窓が出てる:2(仕様どおり) #IfWinActive ahk_class wxWindow ;LINE AppsKey:: res := IME_GetConverting("A","wxWindow","imejpstcand81") Msgbox %res% return 入力中かどうかが知りたかったんだけど、LINEでは無理なんでしょうか?(インライン化されてるってのがこれ?) それとも関数に渡す引数に誤りがあるのでしょうか
>>599 なるほどそういうことですか
ありがとうございます
606 :
名無しさん@お腹いっぱい。 :2014/02/20(木) 06:15:11.48 ID:aIC9iezu0
ほす
>>ID:0IE70OTc0
遅レスも遅レスなんだけど、アンタ俺と同じでタッチタイプが苦手らしいな。(違ってたらゴメン)
IMEがオフになってるの気付かずに日本語打ったつもりが入力されてるのがアルファベットで(T_T)
って経験何度もしてるんだろう?分かるよ俺はその気持ちが。
だからと言って、あんな変態仕様にしちゃダメだよ。
悪いことは言わないから、
>>539 のようなIMEオンオフ切替を徹底するよう心がけ、
もし、IMEがオフのまま日本語打ったときには以下で言うスクリプトを活用するといいよ。
AutoHotkey スレッド part16
>>164-165 にある、
>IMEの状態を間違えて打った時に、入力文字の削除、IMEの切り替え、再入力をキー一発で行う
というスクリプトなんだけど、おそらく修正しないとまともに使えないと思う。
(今、俺もこのスクリプトをMGLのプラグインにして使ってるけど、まともに動かす迄修正に時間掛かったよ。)
howime := IME_CHECK("A") if (%howime% = 0) { Send,+{home} Backup := ClipboardAll Clipboard = Send,^x IME_ON("A") ClipWait,1 Send,%Clipboard% Clipboard := Backup return } else { howimemode := IME_GetConvMode("A") if (%howimemode% = 25) { return } else { IME_SetConvMode("A",25) return } } return これのこと?shift+ctrl+leftだと-を単語として認識しないからいっその事+{home}にしちゃえばいいんだよ。
>>607 です。
>>608 ちょっと紛らわしい書き方だったので、修正。
>>607 で言ってる、
>
>>164-165 にある、
は、このスレのではなく、【AutoHotkey スレッド part16】のね。
あと、IMEオンオフの状態を返す関数は「IME.ahk」の方を推奨。
あーもうっ、言い忘れた。 「Input」コマンドって(半角)スペースやエンターを記憶しないんだよな。 これ分からなくて結構長い時間ハマったよ。 みんなもあのスクリプト使うとき注意してね。
>>607 時々ソフト側で勝手にIMEをオンにしたりするのが気に食わないのです。そのときのためのキー連打変換が欲しかったのです。Macも使ってるから操作系を揃えたかったってのもあります。
色々試行錯誤して、一応これで動くようになりました。プログラムはド素人で、糞みたいなスクリプトなので、ここに書き込むのはとても気が引けるのだけど…
;変換キーでIME ON
;変換キー連打でIMEをONにして入力し直す
;無変換キーで半角に変換してIMEをオフにする
vk1Csc079 Up:: ;変換キー
;キー連打検出0.3秒
If(A_PriorHotkey = A_ThisHotkey) And (A_TimeSincePriorHotkey < 300){
Send,^%2b{Left};クリップボードに格納してIMEon後に打ち直す
Backup := ClipboardAll
Clipboard =
Send,^x
IME_SET(1)
ClipWait,1
Send,%Clipboard%
Clipboard := Backup
Return
}Else{
;連打してないとき
IME_SET(1)
}
Return
つづき vk1Dsc07B up:: ;無変換キー getIMEMode := IME_Get() ;IMEの状態を取得 if (%getIMEMode% = 0) ;IMEがオフのとき { IME_SET(0) ;IMEをOFFにする(念のため } Else ;IMEがONの時 { Send,^%2by ;Ctrl%2bShift%2byを送信(F10が何故か使えないので、IME側のキーバインドをいじった) sleep,10 ;0.01秒待つ IME_SET(0) ;IMEをOFFにする } Return
ぐおお、バグった。 %2b は + です。。。
>>611 >時々ソフト側で勝手にIMEをオンにしたりするのが気に食わないのです。
ん〜・・・・・
>>539 を徹底的に体に覚え込ませれば、ソフトがIMEをオンにしようが、オフにしようが全く関係ないんだがなぁ・・・・・
ま、あんまり強要するのは良くないから、これ以降この話題に突っ込むの止めるわ。
うむ、ツッコミ承知でカスタム仕様にしてるんだから我が道突き進ませてやれ 遅レスで説教系ツッコミはヤボってもんだ
>>614 ahkでごちゃごちゃ弄ってる間は何を言っても通じないわ
実務であちこちのPC(とかキーボード)を弄るようになったら嫌でも矯正される。
ソフトを自由にインストールや実行のできる環境なんて自分の私有PCくらいだぜw
そういうこというと、このスレどころかAHK自体の存在意義が危ぶまれるか。
友達の家でもネカフェでもポータブル化して持ち込めばええんや AHKは自分のやりたいようにすればええ もうスペースキー修飾がないとかキーボードでカーソル移動ができない環境が考えられない
>>616 DELLとかHPに付属のクソキーボードをなんとも思わず使える人が上司だと
まったく取り合えってもらえないしね・・・
みんなそのまま使ってるんだからお前も合わせろくらいの勢いっていう
AHKのないPCで文字なんか打てるか状態だわ
そして無駄に長いスペースキーに憤りを感じる!
>>603 分かる人いたらお願いしますー
上司「君が望む環境で仕事した時の能率を具体的に数値化して提出しなさい」
催促する前にレスもらえない原因を考えよう LINE以外の環境環境がまるで書いてない 質問するなら最低限 OS / AHK / IME.ahk / 使用してるIME / LINE の各バージョンは必要 >それとも関数に渡す引数に誤りがあるのでしょうか 他のアプリでは拾えるのか試してみたの? アプリのせいなのか記述間違いかの切り分けしたかどうかはわりと重要 特定アプリでは使用者以外はスルーだが メモ帳とかの皆が追試しやすいものならアドバイスも受けやすい >res := IME_GetConverting("A","wxWindow","imejpstcand81") 使ってるIMEがなんだか書いてないからよーわからんが、パラメータ2,3あたりが怪しい まずパラメータ全省略でやってみて、もし動かないなら _ImeTestClassCheck()でそれぞれ調べて値を入れる
>>620 >>604 は回答だったんですか。
>>603 宛と理解できませんでした。サーセン
>>621 ぐうの音も出ないレスありがとうございます。
OS:WindowsXP 32bit
AHK:1.0.48.5
IME.ahk:2012.11.10
LINE:3.2.0.76
>res := IME_GetConverting("A","wxWindow","imejpstcand81")
引数2,3は_ImeTestClassCheck()で調べた値です。
メモ帳では仕様どおりの値が返ってきます(各数値)
パラメータ省略でも変化なしでした。
If文を使わずにコード書いてると関数が多くなりませんか?
Guiのひとつのエディット内で、入力された文字の一部分だけ色を変えることはできるでしょうか?
Numlockの状態とかタスクトレイに出したい だしたい!!
>>622 メモ帳で正常値が取れるならアプリの問題なのでIME.ahk側でどうにかすることはできない
あとはLINE側の設定見直してトゥルーインライン解除できないか確認するくらい
>231参照
>>627 なるほど・・・ありがとうございます。
>>231 のリンク先なくなってたけど、まさにそのトゥルーインライン入力です。
文字が重ならなくて見やすい反面こんな悪影響が・・・もどかしいですね
おそらく、Autohotkey.dll 使って、動的にスクリプト読ませて実行させるのが 一番近い使い方になると思うよ
Win7 pro 64bitでAHK_L 1.1.14.03のUnicode 64-bitをインストール時に 「Separate taskbar buttons」 「causes each script which has visible windows to be treated as a separate program, but prevents AutoHotkey.exe from being pinned to the taskbar」 というチェック項目が出るけど、どういう意味でしょうか? 翻訳サイトでは 「個別のプログラムとして扱われる可視ウィンドウを持っているが、AutoHotkey.exeがタスクバーに押さえ付けられるのを防ぐ各スクリプトを引き起こします」 となったけど、意味分からん
>>632 スペース連打がスムーズになった感。変換しやすいかも
ていうかAHKがAndroid端末にもほしいよぅ
AndroidはTaskerが出来る事多くて面白い
>>631 GUIを持つスクリプトを実行するとタスクバーに表示される、それを右クリックすると「ピン止め」できるが
「AutoHotkey.exe」が固定され、「スクリプトのファイル」ではない。
そのオプションはGUIを持つAutoHotkeyスクリプトの「ピン止め」を非表示にする。
>>629 です
>>630 レスありがとう
>Autohotkey.dll 〜
これ使ったことないのでアレだけど、マルチスレッドで動かす時威力を発揮するってことなのかな?
でもなんだね、"文字列を実行する"みたいな関数というか処理は、
デフォルトで実装してないくらいだから、あまり需要はないみたいだね
自分は、リマップ系スクリプトで記述を見やすくしたいということだけが目的で
作り始めたくらいだから、本来の使い方(作り方)と違うかも・・・
>>636 なるほど。
GUI系のスクリプトは使ったことないけど、今度使う時に確かめてみます。
ありがとう
任意のウィンドウタイトルの色を変えることなんてできるでしょうか? エクスプローラである文字がパスにあった場合、わかりやすくし合いと思って、 ウィンドウタイトルが変えられれば便利だと思った次第です。
たぶん無理 GUIでそのウィンドウタイトルと同サイズの半透明ウィンドウ作ってオーバーラップさせれば 見た目それっぽくはできるかもしれないが、ウインドウ移動時の追従や ドラッグ時にマウス操作情報を下層のタイトルバーに伝えてやる処理などが必要になる あとたぶん色かぶりしてタイトルバーの文字の視認性はかえって落ちると思われ
>>639 定期的(1秒ごととか、0.5秒ごととか)に全ウィンドーのタイトルを取得してきて
該当するwindowにSendMessage(WM_SETTEXT) すれば行けるんじゃない?
・・・色変更か・・・色なぁ・・・どうすんだろw
その目的ならキーワードに合致したウィンドウのタイトルバーにツールチップでも重ねるとか 邪魔にならない右端あたりに
(はるか昔になんかで見たブログを参考にはるか昔に作ったIMEの状態をタイトルバーに表示するやつを今でも使ってるけどAHK見つけたばっかりの頃にがんばって作った記憶があるから改善の余地はいくらでもありそうなものの) よかったら参考にしてくれ。 WinGet, title0 ,PID, A if ("%title0%" = "%title1%") { WinGet, title1 ,PID, A return }else{ ShowIME() WinGet, title1 ,PID, A return } ShowIME(){ getIMEMode := IME_GET() WinGetActiveStats, title, W, H, X, Y WinGet, title0 ,PID, A W -= 6 X += 3 Y += 6 ;そのままだと表示がちょっと位置が悪いから微調整 if (%getIMEMode% = 0) { Progress,B x%X% y%Y% h2 w%W% zh0 CTaqua CW00FFFF, return }else{ Progress,B x%X% y%Y% h2 w%W% zh0 CTlime CWFF00FF, return } return }
でまぁ他に細々したやついるけど全体をSetTimer, ShowIME, 500でぶん回しとくと そのウィンドウのIMEの状態を取得してオンなら赤オフなら青でタイトルバー一番上のちょい下ぐらいに ほそーくウィンドウの幅でプログレスバー表示される。(元々はマックの機能だったような微かな記憶が。) 必要なかったりうっとおしいやつは IfWinActive, ahk_group hihyouji{Progress, Off} みたいな感じでいくつかグループ追加して非表示にできるから IMEの状態の代わりにタイトル取得して幅とか色とか場所とかちょっと改変すれば タイトルにC:\で薄く緑被せてD:\で赤被せてとかでそれっぽいことできると思う。 やってることはタイトルのみ常に取得して変わってたらサイズに合わせて色替えてるだけだから負荷も大したことないよー。 タイトルバーの色が変わってるわけじゃないけど例えばエディタなら書き始める前に視界に入ってくるから個人的にはかなり楽でわかりやすいと思っております。
すごい初歩的な質問ですが、今アクティブなウィンドウで開いているファイルのファイル名を取得するにはどうしたらいいんでしょう? タイトルバーにファイル名が出てこないタイプのアプリなので、WinGetTitleだとうまくいかないのです。
ヘルプファイルのようにコマンドラインでパスを渡してから起動するビュアーの場合は コマンドライン文字列からパスが取れるかも GetCommandLine(pid){ ;COM Objects使用 (AHK_L 53+) For process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process where ProcessId = " . pid) Return process.CommandLine } ただし起動してからファイルオープンするタイプの編集ソフトでは無理 具体的なアプリがなんだかわからんから追試できないが WIndow Spy眺めてみてパスを格納してある(隠し)テキストがないか調べてみたら?
くるくるスクロールの要領でマウスカーソルを動かすだけでSendしたいのですが 左右左右や上下上下みたいな動きにさせたいのですが何か参考になるものはありますか?
RegExReplaceで行をまたいだ検索や置換はできないのでしょうか?
649 :
名無しさん@お腹いっぱい。 :2014/02/26(水) 17:53:20.88 ID:qaOjVbYH0
#t:: Run,"C:\Program Files (x86)\Evernote\Evernote\Evernote Templates\evernotediary.bat" Process,Exist,Evernote.exe ;check evernote If ErrorLevel<>0 ;if active WinActivate,ahk_pid %ErrorLevel% ;activate else ;else Run,"C:\Program Files (x86)\Evernote\Evernote\Evernote.exe" ;activate MouseClick,Right, 133, 396 Sleep,500 ;wait bat MouseClick,Right, 439, 200 WinWait, Lifelog, date MouseClick,Right, 653, 278 Send,^: MouseClick,Right, 802,237 Sleep, 100 ;wait click Send,{BackSpace} MouseClick,Right, 653, 278 return evernoteの日記のテンプレートを作って、日付も自動で入力するようにしたいんだけど、マウスクリックで移動しまくるっていうかなり力技なものになってしまった。 もっとスマートな方法はないだろうか?
>>647 MouseGestureL.ahk
>>649 テキストボックスのClassNN調べてControlSendで送る
特定のフォルダ(例えば%A_scriptdir%%26#165;hoge)に出来るファイルに必ず日付け等を付けたいなと思った時に、そのフォルダに新しくファイルが出来たことを検出するにはどうしたらいいんでしょう? hogeフォルダにimage.jpgを入れると、自動的にimage_0227.jpgになるみたいな。今は適当なキーストロークで一発リネームできるところまでは組んであるんだけど、新しいファイルの検出って部分がさっぱりわからんのです。
>>652 必要な情報保存してからタイマーで変化を監視すればいい。
いきなりLoop処理させるとパフォーマンス的によろしくないので
先にFileGetTimeで変化判定させる。
FileGetTime.... ;タイムスタンプ保存
Loop (ファイル検索).... ;リスト保存
SetTimer,Rename,....
Return
Rename:
FileGetTime.... でフォルダの変化監視
If ....
Loop (ファイル検索)....
...略...
Return
654 :
名無しさん@お腹いっぱい。 :2014/02/27(木) 08:16:18.83 ID:Y+L/AtZn0
>>651 ありがとうございます
#t::
Run,"C:\Program Files (x86)\Evernote\Evernote\Evernote Templates\evernotediary.bat"
Process,Exist,Evernote.exe ;check evernote
If ErrorLevel<>0 ;if active
WinActivate,ahk_pid %ErrorLevel% ;activate
else ;else
Run,"C:\Program Files (x86)\Evernote\Evernote\Evernote.exe" ;activate
MouseClick,Right, 133, 396
Sleep,500 ;wait bat
MouseClick,Right, 439, 200
WinWait, Lifelog, date
ControlSend, WebViewHost1,^: , Evernote
ControlSend, ENAutoCompleteEditCtrl3, {BS}, Evernote
return
こういうふうに変更してみたんですが、ClassNNを取得できていないのかControlSendから先が動かない状態です。
どこが間違ってるんでしょうか
GUIのテキストボックスにオートコンプリートをつけることなんて無理ですか?
自前で実装すればできないこともないと思うけど簡単ではないと思うよ
ちょうどちょっと前に作ったわ editのgオプションで オートコンプリート候補を格納した変数に対してLoop, parseで入力内容をマッチング、 マッチしたものを別途作ったguiのlistviewにひとつずつaddしていく listviewの選択の移動と、選択項目のテキストをeditに入力するホットキーを設定 入力内容を確定したら入力内容とloop, parseで使う区切り文字を専用変数に追加 ソートの奴で(名前忘れた)変数内の重複をなくす スクリプト終了時にその変数をiniファイル等に書き出す(スクリプト頭でincludeする) こんな感じ
変換確定前のテキスト取るのが難題だな。
変換か。ファイル整理のためにファイル名にローマ字キーワードしこむのにしか使ってなかったからな ちょっと前に貼られてたIME状態を切替て再入力するスクリプトのキーロガー部分を拝借して 入力内容のIMEオフ[入力内容のIMEオン] 例) hogehoge[ホゲホゲ] みたいにオートコンプリート候補用変数に格納して、そっからeditに引っ張ってくるときには[]内のみにすればいけそうかな?
IEコンポ使って、HTML5で組んだほうが早い
だいなファイラーにて拡張子ごとに別のソフトを起動するように試し書きしたら動作が変なんですが見てもらえますか? ;だいなファイラー #ifWinActive, ahk_class CDynaApp ^1:: ClipBack = %Clipboard% Clipboard = Send,^+c ;#ファイルパスを取得するコマンド ClipWait Extension := RegExReplace(Clipboard, "^.+(\..{2,4})$", "$1") ;#ファイルパスから拡張子を抜き出し if Extension = .zip Run, C:\Apps\MassiGra\MassiGra.exe "%Clipboard%" else if Extension = .mp3 Run, C:\Apps\Mp3Tag\Mp3tag.exe "%Clipboard%" Clipboard = %ClipBack% return と書いたらCtrl+1を押すとキン!と言うだけで、次にCtrl+Shift+Cを押してみたらなぜか実行されました Ctrl+1→Ctrl+Shift+Cとなっている現状ですがCtrl+1だけで使えないものでしょうか?
すみませんできました だいなの設定をこの前少し変えたの忘れてて先頭文字ジャンプが密かに動いてました
Loop, Parse, %Clipboard%, `; とした時%Clipboard%内に半角空白が入ってるとillegal characterってエラーが出るのはどうすればいい? ファイルパスが;区切りで列挙されてる文字列を扱いたい
クリップボード内の文字列を変数として使いたいなら%Clipboard%でいいけど そうじゃなけりゃClipboard
過去ログ漁りつつググりつつですが、 どうしても解決しないので質問です。 Fnキーを一定間隔以内で2連押ししたら 押し下げ状態を保持して、もう1度押したら解除 と言ったスクリプトを組みたいのですが、 参考に出来るスクリプトがあったらご教示お願いします。
667 :
名無しさん@お腹いっぱい。 :2014/03/01(土) 02:56:46.52 ID:ERfkz+X40
Fnキーは使えないのだ
え、、、マジでか。。。orz...
>>668 FnキーはBIOSと結びついた特殊なキーなのだ。電源ボタンなんかと役割が近い。
どうしてもFnキーを使いたいならBIOSでFnキーのマッピングを変えられる場合もある。
Fnキーじゃなくて他のキーで代用するのがいいと思う 無変換キーをダブルクリックしたらフラグが立って、フラグが立ってる間は押したキーが変化する、くらいでいいんじゃね? 具体的にはこう ~vk1Dsc07B up:: if(Fnflag==1){ Fnflag=0 }else if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < 300){ Fnflag=1 } return #if Fnflag=1 up::pgup down::pgdn left::home right::end del::Numlock #if どっかに今どういう状態なのか通知する何かを挟んだほうが使いやすいと思うけどね
671 :
666 :2014/03/01(土) 12:46:32.32 ID:E5SVg39R0
MenuとGosub使えるようになったらとっても便利になった! ajinoyaさんありがとう!
>>665 そこの違いがよくわかってなくて……仰るとおりで出来ました
テキストに書き出してLoop, Readよりこの方が良いんですよね?
変数っていう入れ物か変数の中身を指定するかの違いなんだけど、まぁココらへんはトライ&エラーやってりゃそのうち分かるんじゃないのん?
>>672 変数内で処理した方が圧倒的に早い。
既存のファイル読み込み以外にはLoop, Read使う必要は無い。
Clipboard → 変数を読み込む
(メモリ) (メモリ)
Clipboard → テキストに書き出す → テキストを読み込む
(メモリ) (HDD) (HDD)
676 :
558 :2014/03/02(日) 02:22:19.22 ID:K/Tiq/qo0
このスレの558です。
>>562 で
>どうにかしてマウス位置(マウス右クリック位置)のアイコンの番号取得できればいいんですが…
と言ってたんですが、過去スレにそのものズバリの関数が貼られていました。
これで、任意のトレイアイコンの正確なタイトルとウインドウクラスが取得できるようになりました。
「AutoHotkey スレッド part9」のレス番791です。
>>675 aho := "baka"
clipboard := "aho"
だとして
Loop, parse, clipboard → Loop, parse, "aho"
Loop, Parse, %Clipboard% → Loop, parse, aho → Loop, parse, "baka"
こんな風に違う
とっちが使えるかはコマンドによって違うから、ほんと慣れだよね
式とInputVarとOutputVarは確実 問題は%を省略して式が使える所だな
キーボードで音量調整するコードを書いています。 以下のコードで音量調整とGUI表示まではできたのですが、 ボタン連打するとsleep, 500 で0.5秒待たされてしまい、 連続してスムーズに音量を上げることができません。 処理を止めずにguiの非表示まで待つような方法はないでしょうか?
679です。 ; 音量UP #k:: SoundSet, +10 showSoundNum() Return ; 音量DOWN #j:: SoundSet, -10 showSoundNum() Return ; 音量調整gui表示 showSoundNum() { SoundGet, master_volume master_volume := Round(master_volume, 0) ;MsgBox, vol: %master_volume% Gui, Font, s30 bold Gui, Margin, 40, 4 Gui, +AlwaysOnTop -Caption +E0x00000080 +Disabled Gui, Show,W220 H50 Xcenter Ycenter NA Gui, Color, 444444 Gui, Add, Text, cWhite, oto: %master_volume% sleep, 500 Gui, Destroy }
ん?なんでsleepする必要あるの?
>>681 音量変更後、0.5秒だけ「音量: 30%」などと画面に表示するためです。
gui表示後、sleep以外で待ってから非表示にする方法があればいいのですが。。
>>680 こんな感じでどうかな?
showSoundNum() {
SoundGet, master_volume
master_volume := Round(master_volume, 0)
;MsgBox, vol: %master_volume%
Gui, Destroy
Gui, Font, s30 bold
Gui, Margin, 40, 4
Gui, +AlwaysOnTop -Caption +E0x00000080 +Disabled
Gui, Show,W220 H50 Xcenter Ycenter NA
Gui, Color, 444444
Gui, Add, Text, cWhite, oto: %master_volume%
SetTimer, OnTimerGuiDestroy, 500
}
OnTimerGuiDestroy:
Gui, Destroy
Return
↑ごめん、タイマー止めるの忘れてた OnTimerGuiDestroy: SetTimer, OnTimerGuiDestroy, OFF Gui, Destroy Return
>>685 訂正。
タスクバー状 → タスクバー上
>>683 ありがとうございます!
思っていた通りに動くようになりました。
Timerってこういう時に使うものなんですね。
>>685 参考になります!ありがとうございます。
>>683 と同じようにSetTimerが使われていました。
SetTimer, TV_HideTimer, -%TV_VolDispTime%
こちらを参考にしてかっこいいGUI作ってみようと思います。
>>684 タイマー止める、っつーか一回だけ動かしたいなら タイマーで負数を指定
>SetTimer, OnTimerGuiDestroy, -500
お尋ねします。 GUIのボタンに指定したキーを割り当てているのですが マウスでボタンを押し込んでいる状態だとキー入力が発生せず、マウスを放すとキー入力が発生します。 これをボタンを押し込み状態でキー押しっ放しには出来ませんでしょうか?。 よろしくお願いします。
ソフトAが起動しているときは^+sを、ソフトAが起動してないときにソフトBが起動してるときは!sを送りたいんですが その場合↓のどちらの案がスマートなんでしょうか。Aの存在確認した方がいい?しない方がいい? ^+sはAの、!sはBのグローバルホットキーです ; プラン1 #ifWinExist, ahk_class %A% NumLock::Send,^+s #ifWinExist ahk_class %B% Numlock::Send,!s ; プラン2 #ifWinExist, ahk_class %A% NumLock::Send,^+s #if WinExist("ahk_class %A%")=0 and WinExist("ahk_class %B%")<>0 Numlock::Send,!s
>>690 sendの送り先が不明なのだが、ソフトAに限定して^+s送りたいなら#IfWinActiveの方が良いんじゃないの?
>>691 何か分かり難かったかも。
ソフトAのウインドウに^+s送りたいなら、また、ソフトBのウインドウに!s送りたいなら、#IfWinActiveの方が良いんじゃないの?
に訂正。
度々すいません。
ちゃんとレス読んでなかった…
>>690-691 は無かったことにして頂戴。
>>690 やりたいことがよく分からないけど、
>ソフトAが起動しているときは^+sを、ソフトAが起動してないときにソフトBが起動してるときは!sを送りたいんですが
↑なんだから、その通りにコード書けば良いような気がする。
ちなみに、
>#if WinExist("ahk_class %A%")=0 and WinExist("ahk_class %B%")<>0
#if (! WinExist(ソフトA)) && WinExist(ソフトB)
という書き方もある。(他にもっとスマートな書き方あると思うけど)
頭回ってなかったみたいです。検証したら納得できました
プラン1だとAをBより上の方に書かなければいけないが、プラン2ならAとBが前後してもOK、ということですね
やはりプラン2よりプラン1の方が処理は早いですよね
Bを常に読まないで済みますし
>>694 メディアプレーヤーAとBがあってAにStart/Stopのグローバルホットキーの優先権を与える、という内容です
お騒がせ失礼
>>695 ; プラン1の
#ifWinExist ahk_class %B%
Numlock::Send,!s
と、
; プラン2の
#if WinExist("ahk_class %A%")=0 and WinExist("ahk_class %B%")<>0
Numlock::Send,!s
では、動きが違うよ。
あなたがやりたい、
>ソフトAが起動しているときは^+sを、ソフトAが起動してないときにソフトBが起動してるときは!sを送りたいんですが
なら、プラン2の方だと思うんだが…
また、処理の速さなんて何万回ループでもしない限り人間には感じないから気にする必要ないと思うけどな。
また連投すいません。 それぞれ#IFで閉じてないけど、動き的にどうなんだろ? うーん…個人的には、それぞれ#IFで閉じた方が良いような気がする。
698 :
名無しさん@お腹いっぱい。 :2014/03/03(月) 21:52:44.20 ID:kqCGJtV10
閉じなきゃいけないってもまぁあるけど、優先させたい処理を上に書くってのも割と重要 これだけでうごかなかった動作が動くこともある
>>696 連投しすぎ・・・間違ってるし・・・。
プラン1、プラン2 の動作は同じ、
割り当てが同じなら上の物だけ実行される。
#IFで割り当てを解除しておけば追記した際のミスがなくなる。
>>695 プラン1は前後関係があるので可読性が悪い間違えやすい、負荷の違いはほぼ無い。
>>698-699 なるほど…このスレはとても勉強になるよ。
連投の件は申し訳なく思ってる(´・ω・`) ショボーン
>>689 定期的にある質問なのでサンプルを書いてみた。
;;;;;GUIのボタン押し込み時の実行タイミングの違い
Gui,Add,Button,w125 gTEST1,---- 通常ボタン ----
Gui,Add,Text,w125 h25 gTEST2 +0x01 Border Center,-- テキスト/画像 --
Gui,Add,Button,w125 vTEST3 Hwndハンドル,-- メッセージイベント --
OnMessage(0x201, "WM_LBUTTONDOWN") ;WM_LBUTTONDOWN
Gui,Show
Return
TEST1: ;通常ボタン
ToolTip テスト1
Sleep 200
ToolTip
Return
TEST2: ;任意ボタン
ToolTip テスト2
KeyWait,LButton
ToolTip
Return
WM_LBUTTONDOWN(wParam,lParam,msg,hwnd){ ;メッセージイベント
global ハンドル
MouseGetPos,,,,VarC,2
If (VarC = ハンドル){
ToolTip テスト3
KeyWait,LButton
ToolTip
}
}
>>700 失礼ながら、
ご自身の考えもまとまらないうちに発言するのは避けた方がよろしいかと
>>701 このコードをベースに試行錯誤してみます。
有難うございました。
>>703 KeyWaitが関数内にあると他箇所の左クリックが一回無効になってしまうようなので修正
Gui,Add,Text,w125 h25 gTEST2 +0x01 Border Center,-- テキスト/画像 --
Gui,Add,Button,w125 gTEST3 Hwndハンドル,-- メッセージイベント --
OnMessage(0x201, "WM_LBUTTONDOWN") ;WM_LBUTTONDOWN
Gui,Show
Return
TEST2: ;任意ボタン
ToolTip テスト2
KeyWait,LButton
ToolTip
Return
TEST3: ;任意ボタン
KeyWait,LButton
ToolTip
Return
WM_LBUTTONDOWN(wParam,lParam,msg,hwnd){ ;メッセージイベント
global ハンドル
MouseGetPos,,,,VarC,2
If (VarC = ハンドル)
ToolTip テスト3
}
>>704 素晴らしい!
ほぼ思い通りの事が出来ました。
有難うございました。
入力した数字の桁数に関わらず、条件を満たす文字列として取得したい。 条件1:3桁の文字列として取得する(入力した数字が3桁未満なら、3桁になるよう頭に「0」を付ける) 条件2:入力した数字が4桁以上なら、右から(下位)3桁を取得する 一応、(1)と(2)の方法を思いついたんだけど、もっと賢い方法あります? ;InputVar := 1 ;InputVar := 50 ;InputVar := 999 InputVar := 1234 ;(1) InputVar := 1000 + InputVar StringRight, OutputVar, InputVar, 3 MsgBox, %OutputVar% ;(2) SetFormat, float, 03 InputVar += 0.1 StringRight, OutputVar, InputVar, 3 MsgBox, %OutputVar%
スンマセン。訂正前のを貼り付けてしまった。(特に重要な事じゃないけど一応訂正) ;(1) InputVar := 1000 + InputVar ↓ InputVar += 1000
自己レスです。 関数って無いのかなあ・・・とよくよく捜したら有った。 行数が少なく、変数の無駄遣いも無いので(1)よりは良いのかなあ・・・ InputVar += 1000 InputVar := SubStr(InputVar, StrLen(InputVar)-2) MsgBox, %InputVar%
>>708 やめた方がいい事が少々ある(動作は問題ない)。
未割り当ての変数に代入すると#WarnがONだと怒られる。
×InputVar += 1000
○InputVar := 1000
SetFormatで変換する際は0を代入
×0.1
○0.0
;;;全部まとめ
InputVar := 1
; InputVar := 1.11
; InputVar := 11.55
; InputVar := 1234
SetFormat,Float,003.0
MsgBox % SubStr(InputVar += 0.0, -2)
Return
>>709 すごい、凄いです。
いただきました、ありがとうございまづ。
スイマセン。
SetFormat,Float,003.0
の「003」と自分が書いた「03」の違いがよく分からないのですが何が違うのでしょうか?
「003.0」の「.0」部分は入力の小数部を考慮してというのは何となく分かったのですが。
>>710 すみません00はミスですね、そのまま動いていたので見逃しました。
03.0 頭0詰め、3桁、小数点無し四捨五入
>>711 理解できました。
こんな朝方まで付き合っていただき、ありがとうございました。
Chromeで文字入力状態でないときに、sキーが押されると以下のキーを発行したいのですが、 どのようにすればいいでしょうか? s:: Send, ^l^v{Enter}
マウスカーソルじゃなくて、テキストボックスクリックして点滅しているフォーカス(?)の状態を知ることはできないでしょうか?
716 :
名無しさん@お腹いっぱい。 :2014/03/04(火) 19:30:53.28 ID:qpMowDMO0
質問です。 ボタンにショートカット(例えばAlt+sとか)割り当てられてないマウス前提のソフトをキーボードだけで操作したいと思ってます。 そういうことを補間してくれるソフトを探していたらこちらに誘導されたのですが、AHKLを使うとそういうことできますでしょうか? スクリプト組むとか自分にはハードル高いのですがもし出来そうならこれを機会に覚えようと思うのですが。
>>716 >ボタンにショートカット(例えばAlt+sとか)割り当てられてないマウス前提のソフトを...
ボタン?なんの?質問の意味が分からない、箇条書きにして書き直してほしい。
>>716 ボタンが [次へ(N)] みたいになっていれば Alt+N を押してこのボタンを直でキーボード操作できるけど
[次へ] みたいな感じでショートカットキーが設定されていないので出来ない、でもしたいって感じかな?
Windows標準のボタンが使われているなら、クラス名を取得してお望みの処理を実現できるよ。
>>716 スクリプトでマウスカーソルを移動させたり、
各種クリックさせたりできるから大抵の操作はできるよ。
ただ、そのソフトのウィンドウサイズやボタンの位置が変わったりしたときに
確実に動くように作るのは割とハードル高いと思う。
スクリプト書けると他にもいろいろ使えるから覚えて損はない。
>>716 Ctrl+Sで[保存]ボタン、Ctrl+Wで[閉じる]ボタンを押させたい
とかってことなら、まあ大抵の場合は出来るんじゃないかな
各ボタンのコントロールが取れるならControlClick
取れないけど、Window上でのボタンの座標が常に固定なら直接座標指定してMouseClick
座標も一定じゃなければImageSearchでボタンを探してMouseClick
みたいな感じ
はいめっさかぶりました
>>716 失礼、読み直して理解した。
マウスサイドボタン割り当て変更していない前提の話で
対象ソフトでのマウスサイドボタン操作をキーボードでしたいって事か。
割り当て変更程度の基本動作は比較的簡単なので
リファレンスしっかり読めば迷わないと思う。
723 :
名無しさん@お腹いっぱい。 :2014/03/04(火) 21:24:12.85 ID:qpMowDMO0
>>717 わかりにくい説明ですみません。やりたいことは
>>718 な感じです。
>>718 、720
やりたいことはそれです。
できるんですね。やり方もいろいろあるようですすごいですね。
ちょっとがんばって挑戦してみたいと思います。
ありがとうございました。
>>715 >>713 ですが、ありがとうございます。
キャレット座標の変数(A_CaretX、A_CaretY)があったのですが、うまく機能していないようでした。
IME.ahkのIME_GetSentenceMode関数が、
文字入力状態:無変換モードで0を返す
文字入力状態でない:0を返す
だったので、自分は無変換モードにしないので、これを利用しました。
以下の説明があるのですが、「このラベルは、スクリプトが開始された直後にも実行される。」の「にも」ってどうゆうことですか? 二度呼ばれるってこと? OnClipboardChangeサブルーチン 「OnClipboardChange」という名前のラベルを作成しておくと、何らかのアプリケーションによってWindowsのクリップボードが変更されたときにそのラベルが実行されるようになる。 このラベルは、スクリプトが開始された直後にも実行される。
スクリプト起動j直後に必ず一回呼ばれ その後クリップボードが変更されるたびに何度でも呼ばれる
>>726 なるほど、ありがとうございます。
マニュアルではOnClipboardChange中のクリップボード読み書きでは再呼び出しがかからないと書いてあるのですが、
どうも呼ばれるような気がします。
それが毎回じゃないのですが…
処理にもよるかもだけど、30〜程度のsleepを入れるといいよ
clipped変数に複数のファイルをコピーした状態を作れないでしょうか? テキストファイルからパスリストを読み込み、それを全てコピーした状態にしたいのですが…
>>728 助言ありがとうございます。
sleepを入れたらちゃんと動くようになりました。
特定のプロセスがCPU使用率50%以上になったら強制終了させるっていうのを書こうとしたんだけど プロセスの存在を確認するコマンドはあるけど CPU使用率を取得するっていうのはもしかしてないのかな。 過去ログ見てるけどこのあたりを昔いじってるひとがいたような。
>>733 おおw
ちょっと理解するのに時間かかりそうだけど 簡単かな?
軽量な実行ファイル作りたいぞ〜
>>734 関数を利用するならリファレンス読むだけで十分に理解できる。
DllCallでAPIを使うのは難易度高いがググれば何とかなる。
対象を使用したスクリプトが何かしらヒットする。
検索ワード:Autohotkey API関数名
AU3_Spy.exeで表示される「Visible Window Text」を取得する方法はあるでしょうか?
>>736 AU3_Spy.exe の情報はすべてAutoHotkeyのコマンドで所得している。
後は自分で探そう。
ミス所得、取得
IEでHit-a-Hintというか、キーボードで自在にリンクを開くってAHKで何とかできないですかね? リンクの色とかでは判別しきれませんし、特定のキーにカーソル移動を割り当てるくらいしか思いつかないんですが それだとあまりスマートでないというか……
普通のAHKのスクリプトじゃ操作は無理 IEオブジェクト使えばなんとかなるだろうけど、ほぼAHKよりIEとかDOMとかJSの知識のほうが必須
下例に於いて、上のパターンと下のパターンとでは処理速度はそれ程変わらないと思うのですが、 決まった回数ループさせる場合はどっちのパターンでループさせるのが賢いと言えますか? Loop,100{ Loop, 5{ 何かの処理(条件により途中でループを抜ける場合がある) } } Loop, 5{ Loop,100{ 何かの処理(条件により途中でループを抜ける場合がある) } }
処理速度よりやりたい内容ベースで考えるべきじゃね 100回行いたい処理+500回行いたい処理があるなら前者 5回行いたい処理+500回行いたい処理があるなら後者 500回行いたい処理しかないなら入れ子にする意味なし、 Loop,500{}でおk
腹筋5回を1日に100セット 腹筋100回を1日に5セット どちらがいいですか?
>>742-743 決まったパターンに拘らず、その場その場に合った(書きやすい)方で書けばいいってことですね。
即レスありがとうございました。
テンプレにある sc07B & I::Send, {Blind}{Up} sc07B & K::Send, {Blind}{Down} sc07B & J::Send, {Blind}{Left} sc07B & L::Send, {Blind}{Right} これで、sc07Bを押した時にポップアップで操作説明を出したいのですが タイマーで監視するしかないでしょうか?
>>745 ;押し上げた時に表示
sc07B::
ToolTip 説明
Sleep 1000
ToolTip
Return
sc07B & a::MsgBox 実行
-------------------------
;押し下げた間表示
sc07B::
ToolTip 説明
KeyWait sc07B
ToolTip
Return
#If GetKeyState("sc07B","P")
a::MsgBox 実行
#If
Chrome上のFlashがアクティブの時に Flashにコントロールが取られてしまい ^W でタブを閉じるが効きません(AHK関係なく効かない) 以下のコードで一応閉じることができたのですが、 フルFlashサイトでは動かないのと 一瞬コンテキストメニューが見えてダサいです。 何か良い方法はないでしょうか? ^w:: WinGetPos, win_x, win_y, win_w, win_h, Google Chrome MouseGetPos, before_x, before_y ;初期位置set MouseClick, right, 10, win_h - 10, , 0 send {ALT} send ^w MouseMove, before_x, before_y, 0 ;カーソルを元の位置に戻す return
自分はChrome使ってないけど、URL入力欄を決め打ちで左クリックしてフォーカス移せばいいんじゃない? 同じ力技だけど、メニュー出ないだけまだマシ…かな。 力技じゃない方法がもし有るのなら自分も知りたいです。
>>747 ありがとうございます。
URL入力欄に変更した所、思っていたとおりの動きになりました。
一応コード貼っておきます。
^w::
MouseGetPos, before_x, before_y ;初期位置set
MouseClick, left, 170, 60, , 0
closeCtrlW()
MouseMove, before_x, before_y, 0 ;カーソルを元の位置に戻す
return
>>749 のコード間違えました。
closeCtrlW()
↓
send ^w
>>746 押し下げた間表示のやり方で思っていたようにできました
自分だと sc07B & の形にこだわってしまっていたので
#If でくくるのを見てとてもすっきりしました
どうもありがとうございました
FileDeleteについてお尋ねします。 読み取り専用属性のファイルの削除が出来ずに困っています。 何か良い手はありませんでしょうか?よろしくお願いします。
FileSetAttrib, -R
おおなるほど、一度属性を解除するのですね。 FileDeleteで一発削除って訳にはいかないようですね。 有難うございました。
#IfWinActiveでahk_classとウィンドウタイトルの両方でフックしたいのですが、そんなことはできるでしょうか? #IfWinActive以降のホットキー定義で右クリックをフックしていますが、そこでWinGetActiveStatsのウィンドウタイトルで条件分けしてしまいますが、 マウ筋と併用すると、右クリック次ジェスチャーが動いてくれません。 ~で渡せばいいのですが、アプリによって右クリックを渡したくないので、うまくできません。 やりたいのが、ファイル保存ダイアログ系で右クリックを無視させてとある処理、 タスク マネージャではAutoHotKeyでは何もせず、マウ筋のマウスジェスチャーを効かせたいですが、下ではうまく行きません。 なにかよい方法はないでしょうか? #IfWinActive, ahk_class #32770 RButton:: WinGetActiveStats, t, Width, Height, X, Y if( RegExMatch(t, ".*(インポート|ファイル|アップロード|保存|参照).*") ) { 任意の処理 } else { Send, {RButton} ;タスクマネージャーなどは無視 } return
>>755 ウィンドウ指定を複数指定する場合は #If または If を使って式として処理すればいい。
WinExist() WinActive() 等を or || and && で繋げばいくらでも増やせる。
#IfWin
#IfWinActive, ウインドウタイトルたぶahk_class ってだけの話じゃないの?
>>755 試してないけど、
SetTitleMatchMode, RegEx
#IfWinActive, タイトル1|タイトル2|タイトル3 ahk_class #32770
RButton::
任意の処理
return
とか?
どれも正解だけど
>>759 が最もシンプル
ただし、AutoExecセクションに SetTitleMatchMode を入れること、と
SetTitleMatchMode の影響をよく考慮することが前提な
便乗して聞きたいんですけど #ifWinActive, (タイトル1 ahk_class A|タイトル2 ahk_class B) こういう指定ができないんですが何故でしょう…… タイトルもahk_classもそれぞれほかに被るのがあるので #if WinActive(1 A) && WinActive(2 B) でできるとは思うんですが解せません
#IfWinActive [WinTitleの合致パターン] ahk_class [WinClassの合致パターン] であって、それぞれの [合致パターン] を正規表現であらわしていて、 単なる OR ではないため(正規表現じゃ | は ORの意味) これは文法のお約束であって、解せる解せないっていうもんじゃない ってか、その書き方だと | が何と何をつないで OR にしているかが明確になって無くないかい?
うーむめんどくさいですね Meryの正規表現ならこれでいいのに あと&&じゃなくて||ですね。混乱した方いたらすみません
>>758-763 正規表現だとClassの複数指定が出来ないなど制限が有り、
#If系で使う場合Auto-executeセクションで全体の設定が変わってしまうので
シンプルではなくいろいろ考慮しなければいけないので正規表現は全くオススメできない。
常にRegExにしておけばいい
GroupAdd、ahk_groupでは駄目ですかね? 自分は何をグループ化したか見通しが悪くなるので使わないですけど。 (GroupAddはautoexecセクションに書かないと駄目なんですよね?)
>>764 言いたいことが書けていないので訂正します。
>>761 のように指定が決まったいる場合は
正規表現でのパターンマッチは使わない方がいい
ということです。
GroupAdd だと論理和になるから本件に関しては合致しない
>>758 みなさま、いろいろありがとうございます。
ahk_class #32770をフックするんだけど、このウィンドウタイトルだけは除外としたいので、
#IfWinActive, タイトル1|タイトル2 ahk_class #32770 だとちょっと違ってきます。
さらにマウ筋と共存させたく、ホットキーの定義内で条件ではなく、除外ウィンドウは#IfWinActiveのところで弾きたいです。
ホットキーに「~」とか入れても、AutoHotKeyキーで送ったキーからだと他のマウスジェスチャーアプリと相性が良くないようで…
#IfWinActive, ahk_class #32770 && #IfWinNotActive, Windows タスク マネージャーとやってもできなかったです
#IfWinActive, ^(?!Windows タスク マネージャー$)【TAB】ahk_class #32770 #If !WinActive()
>>770 正規表現の否定を組み合わせればいいのですね!
知らなかった
ありがとうございました。
>>771 >#IfWinActive, ahk_class #32770 && #IfWinNotActive, Windows タスク マネージャーとやってもできなかったです
#If WinActive("ahk_class #32770") && !WinActive("Windows タスク マネージャー")
指定する物が変化しないなら自分も正規表現使うべきじゃないと思うがめんどくさいし。
変なところにTAB文字使うのは真似しない方がいいぞ、普通はインデントやコメント部分に使う。
そんな個人の好き嫌いでしかない話はどうでもいいよ
Send,の中に半角空白入れるのにIME.ahk使った場合動作重くなったりしませんか? と聞こうとしてまずIME.ahkを見ようとしたらatwikiだった…… 一瞬だけど開いちゃった……
半角空白なら、Send,{ASC 32} でいけないかな IME.ahkのある www6.atwiki.jpは流出サーバーには含まれておらず 今のとこウィルスや改ざんの事実も確認されてはいないようです しばらくはアクセスは控えたほうがいいとは思いますが 一瞬開いたくらいなら大丈夫かと
>>775 ありがとうございます
半角空白じゃなくてSpaceキー扱いされてwikipeがうぃきぺに変換されました……
暫く待ちたいと思いますm(_ _)m
IMEのショートカットキーも使ってこれで何とかなりそうです Send, {Home}amazon^o^n+{Space}{Enter} ^oが半角英数変換、^nが最初の文節のみを確定、+Spaceが半角空白を入力です
>>777 文字入力したいなら Clipboard に文字列入れて Send,^v
でいつもやってるがそれじゃダメかな?
失礼、他の文字と一緒に送る前提だと変換扱いされちゃうのね
一応 IME.ahkも @wikiの外に上げときます。
IME.ahk最新版
http://www1.axfc.net/u/3192355.zip 動作は一文字打つごとに毎回IME制御だと効率は良くないかもしれないけど
頻度によりますがSendの前後でON/OFFするくらいならそう重くはないかと
拡張子に対応する起動アプリケーションの設定をAutoHotKeyで変更する方法があれば教えていただけないでしょうか? やはりレジストリ変更バッチツールとを起動する方法しかないのでしょうか?
>>781 その人他スレに移動して質問してるからスルーでいいよw
放り込んだファイルを拡張子に応じたアプリに渡すAHKスクリプト作っとくと便利 俺は拡張子じゃなくパスによって振り分けるのを使ってる
GUI表示についてお尋ねします。 GuiをHIDE状態で起動する場合 Gui,Show Gui,Hide だと一瞬GUIが表示された後にHIDEされるのですが これを完全に非表示状態で起動する事は出来ますでしょうか? よろしくお願いします。
Gui,Showのオプションにお望みのものがあるよ wiki参照
>>785 早速の返信有難うございます。
NoActivateオプションを追加していると
Gui, Show, Hide NoActivate
Hideオプションが効かないみたいです。
必要になったときに、Show するだけなんじゃ。。。
情報小出しの末路はこんなもんだ
まあ、条件後出しの上にまだ情報出し惜しみしてるしスルーされるわな
Gui, show, hide だけでいいじゃん。そもそもが何のためなのか分からんからなんともいえんけど。 これでGui非表示のままそのGuiの座標やら大きさやらを得ることはできるよ
Gui, Show, Hideだけで解決しました。 どうもお騒がせしました。
いやいやいいっすよ 別にそんなボロクソに言われるほど情報後出しでも、大して小出しでもなかったし
まあhide起動が望みならフォーカス奪いたくないと思うのは当然だろうし これを条件後出しって責めるのはさすがにな
このスレというかこの板だいたいそうみたいだけど 普通に質問してる人いてもポツポツしかレス付かないのに ちょっと叩きどころがあると見ると答える気もない奴が一斉にワラワラ涌いてくるのな
別に質問スレじゃないんだから回答があって当然とか、答える気がないならレスすんなみたいなのはナンセンス まともな質問ならまともなレスがつく
煽る気しかない奴はレスしなくていい 何スレだろうと同じ
教えて君が湧きやすいスレは教育的指導も必要だとは思うよ 複数の人間に叩かれることで己の言動に問題があったことに気がつかせるのはありだ 煽りや指摘が1、2レスついたくらいじゃまっとうな返しなのか理不尽に叩かれてるのか 当人にはわからなかったりするからね
なんかおっさん臭くて笑ってしまった
>>794 =796
お前のレス煽りにしか見えないんだけど
>>785 =
>>790 だけど、
質問者に後出し要素なんて皆無だったんだけど文句言ってる奴は何が気に食わなかったんだろ
流れ的には
・
>>785 の回答見てオプションの存在を知る
・
>>786 でそのオプション試したけどうまくいかないという旨の質問
なんだが。
情報小出しも何もやりたいことは最初に全部言ってるし。
何のためにそれがやりたいのかは書いてなかったけど
今回の質問者に関しては煽ってる側がアホでFA 794以降はそっから離れてスレ自治的な話 答えらんないやつは黙ってろな流れはさすがにちょっとね
私の発言が原因で荒れる事になってしまい、申し訳なく思っております。 以後気を付けます。
804 :
名無しさん@お腹いっぱい。 :2014/03/15(土) 15:38:12.12 ID:F5y++smt0
AutoHotKeyでAlt+Tabを別のキーにって変更できますか? 例えばCtrl+TABに変更とか
Windows 8.1 Pro x64 + Java 7 u51 x64 で Minecraft を動かしています。 遊びすぎてしまうので、常駐 AutohotKey スクリプトでタイマーかけて Minecraft を 閉じたいと思っています。 常駐 AHK スクリプトは管理者権限で走らせています。 あらかじめ javaw.exe の ahk_pid を取得しておき 時間がきたら WinClose, ahk_pid %PID% で閉じようとしています。 しかしこれがうまくいきません。次に何をしらべるべきか、 ご指南いただけないでしょうか。
>>804 その辺のことは大抵のことはできる。
>>805 複数起動しないならタイトル、ahk_class、ahk_exeで指定。
対象のウインドウをWindow Spyでahk_class調べる。
順に試して終了できるか試す。
WinClose
PostMessage, 0x112, 0xF060,,, WinTitle
WinKill
文法自体間違っている場合もあるので
先にメモ帳や電卓あたりを終了できるか試そう。
矢印キーでその方向にマウスカーソルを移動し(移動速度は変数で指定)、ESCキーで止めるには どのようにすればいいでしょうか?
>>807 パッと思いついたのはこんな感じかな
#if !hoge
right::
hoge:=1
mousegetpos,x,y
while hoge
{
x+=5
mousemove,%x%,%y%
}
return
#if hoge
esc::
hoge:=
return
#if
>>808 ありがとうございます。
うまく動作しました。
LINEとかのアプリケーションで半透明が効かないんですけど、このウィンドウには適用できないのでしょうか?
動作確認系の質問は環境書かないと答え得られんよ LINEとかのアプリケーション使ってないんで知らんけど LINEとかじゃないアプリケーションでの透過確認はしたの?
FileMoveDirコマンドを使って 「D:\hoge」フォルダを「D:\hoge\hoge」フォルダに移動させたい (任意のフォルダを同名フォルダの1階層下に送りたい)のですが FileMoveDir, D:\hoge, D:\hoge\hoge としても移動されません うまく移動させるにはどうすればよいでしょうか?
エクスプローラ上でやるのと同じようにやればいい
MoveじゃなくてCopyだろ
元フォルダ(「D:\hoge」)配下にファイルだのフォルダなどが有る場合、
単純なcopyだと余計なファイルやフォルダの削除処理が必要なので・・・
※大袈裟で効率悪いかもしれないが・・・・・
1-別名フォルダ「(例)D:\hoge1」を作る
2-そのフォルダに元フォルダ「D:\hoge」をコピーする(→「D:\hoge1\hoge」)
3-フォルダ名「hoge1」を「hoge」に変更する
4-元フォルダ「D:\hoge」をゴミ箱に入れる(保険として)
単純に複製したいなら、
>>814 で良いと思う
816 :
815 :2014/03/17(月) 16:18:07.26 ID:46Af9U4L0
>>815 を訂正
3と4の順番が逆で、正しくは
3-元フォルダ「D:\hoge」をゴミ箱に入れる(保険として)
4-フォルダ名「hoge1」を「hoge」に変更する
同一ドライブの移動とコピーじゃ速度全然違う、わざわざコピーする必要なくね? ;親子関係だとFileMoveDirでの単純移動はできないみたいなのでファイル移動にする FileMove,F:\hoge\*, F:\hoge\hoge ;サブフォルダがある場合はfile-loopで回して移動 loop,F:\hoge\*,2 { if (A_LoopFileFullPath <> "hoge") FileMoveDir, %A_LoopFileFullPath%, F:\hoge\hoge,1 }
あ、テストパスそのまま貼っちゃった。F:\はD:\に読み換えて あと全角インデントは半角に直してよろしく
マウス下が非アクティブのウィンドウでも、マウススクロールでウィンドウをアクティブにしてスクロールさせたいのですが、 コントロール別に対象のサブウィンドウにも対応させるため、ControlClickとWheelUpを使っています。 うまく動いているのですが、Spyでみてもコントロールが表示されないソフトだと上手く動かないので何とかしたいです。 今はしようがないので、Send {LButton}してSend {WheelUp}してます。 この方法以外でなにか手はないでしょうか?
その方法だとなにか支障がでたりするの? 非アクティブのままスクロールしたいならホイールリダイレクト系のスクリプト組む必要あるけど アクティブ後スクロールでいいんだよね? ならMouseClick後にホイールするだけだし特に問題なさそうに見えるけど
>>819 非アクティブで操作なら話が分かるのだか、まあ間違えかもしれないから一応書いておく。
取得できないならControl系での直接指定はあきらめるしかない。
>>820 すみません。
細かく詳しくないのでホイールリダイレクト系だと思いますが、winActiveしても、マウス下のコントロールにスクロールを送れないので
そのままWheelUpすると、カースルがあるコントロールのウィンドウがスクロールされます。
これだとマウス下のコントロールがスクロールしないので困ってます。
autohotkeyでパイプ処理のようなことはできないのでしょうか 文字列を他のソフトで加工してから再度autohotkeyで処理するみたいなことをしたいです
>>824 ahkで文字列をテンポラリファイルに書き出して、それを他のソフトに処理させて
他のソフトの出力をテンポラリに書き出してもらって、他のソフトが終了したら、ahkでテンポラリから
その出力を読みだせばいいんでないの?
windows(MSDOS?)のパイプ処理をそのまま書いただけだけど、他のソフトってのが対応してるなら
問題なく動くでしょ。
〜できますか?ってのは「できます」って答えるだけでいいんじゃないかって気もしてきたよ
できますでいいんだよ それすら答える気起きなかったけど
824です 他のソフトウェアの受け渡しをどうすればいいのか分かりませんでしたが ソフトウェアを監視するようにすればできますね ありがとうございます失礼しました
Spyツールのもうちょっと使いやすいの無いですか Shift-Alt-Tabしてもfreeze display出来ない… ウィンドウ一覧から絞り込んでtitle&classをパパっとコピーできる外部ツールあったら教えて下さい
ちょっと探してみたけど、WinSpy++が要望に近い気がする #c::WinGetText, Clipboard, ahk_class AU3Reveal とかでAHKからWindow Spyの内容をホットキーでコピーするもの手軽でいいんじゃないかな まぁ、AHKで自作するのが一番(ry
右クリックやアプリケーションキーを押すとメニューがポップアップしますが、これが出ているか どうかを知る方法はありますでしょうか? #If WinActive( "ahk_class hoge" ) and (ポップアップメニューが出ていない) s::Send, hoge #if
>>831 ポップアップメニューが出ていない > if ! WinExist("ahk_class #32768")
ですかね?
>>831 MouseGetPosでメニューのウィンドウハンドル調べられる。
Window Spyだとなぜか無理・・・。
>>832 >>833 >>832 さんの方法でうまくいっているようです。
唯一Chromeでは、
>>832 さんの方法ではうまく動作していないようです。
>>833 さんの方法でウィンドウハンドルを取得すると、ウィンドウハンドルがやる度に変化していました。
とりあえず、Chromeは仕方がないとします。
ハンドルは固定じゃないよ ハンドルからWinGetClassでクラス名取得して調べたらって意味かと Chromeメニューのクラス名もわかれば例外処理対策できるでしょ
>>835 なるほど、私の理解不足でした。
試した結果、Chromeではクラス名が、Chrome_WidgetWin_2 でした。
そして、思い通りの動作ができました。
>>832 さん、
>>833 さん、
>>835 さん、ありがとうございました。
WinMoveでサイズ変更できないウィンドウがあるのですが WinMove以外の方法でサイズ変更って出来ますか?
>>836 一応、Firefoxとかも違うから。
何にせよ調べる手間惜しまなきゃ同じ要領でいける
>>837 ・ 管理者特権(UAC管理下)のウィンドウは操作できない。
同じく管理者で起動したスクリプトからは操作できる
・ そのアプリの処理で常にウィンドウサイズ指定してたら手がつけられないのであきらめ。
WinSet, Region で矩形切り出しっ手方法も無くはないがお勧めしない
ウインドウ監視などでウインドウを特定する方法として ウインドウタイトル ウインドウクラス ウインドウ内のテキスト などあると思うんですが、その中で「ウインドウクラス」を持たないウインドウって存在するのでしょうか? 存在するのかしないのか分からないので質問してもました。
すいません。
よく考えてみたらスレ違いの質問でした。
>>840
クラスがないというのはないと思うが controlのクラス名が動的に変動するソフトは見たことあるな
>>842 スレ違いの質問なのに答えていただき、ありがとうございました。
ファイル名で指定ディレクトリ以下を検索してパスを取得するってどのコマンド使えばいいんでしょ Loop(files)ですか?
>>839 Winsetでスタイル変えた後にWinmoveしたりもしてみましたが、結局出来ませんでした
返信有難うございました
>>844 補足ですが、指定ディレクトリ以下と言うのは何階層か下までが対象です
Loop, C:\TargetDir\*\hogehoge.txt,, 1としてもC:\TargetDir\Sub\hogehoge.txtすらヒットしませんでした
Loop(files)とA_LoopFileNameとA_LoopFileFullPathとIfInStringあたり
>>846 ワイルドカードの指定が間違っている。
後は自分でいろいろ試して解決してほしい。
>>848 間違えてるのは\*\の部分ですよね。\を減らしたりずらしたりしましたがなんとも
ワイルドカードについてググってもfor使って下まで何回も繰り返せ、とかunixのfindとxargsの合わせ技とかしか見つかりませんでした……
>>847 A_LoopFileNaneとIfInStringはどこで使うのですか?
一応Everythingに任せることで代用できたんですが醜いです。ワイルドカードの正しい使い方教えてもらえるとありがたいです
プロセスグループを作りたいと思ったのですが、Wiki見てもそれらしい事が記載されていません。 AHKではプロセスグループはサポートされていますか?。
>>853 ありがとうございます
これはウインドウグループなのでプロセスグループではないのです。
>>855 は下みたいにGroupAddでahk_exeを使ってプロセス名で指定するって意味ね
GroupAdd, note, ahk_exe notepad.exe
>>856 おっ!これは!
ちょっと今試してみます!
すみません、サンプル作成したのですが、プロセスが終了しません。 ヘルプお願いします。 GroupAdd, process, ahk_exe hage.exe GroupAdd, process, ahk_exe hoge.exe GroupAdd, process, ahk_exe homo.exe GroupAdd, process, ahk_exe home.exe c::Process, Close, ahk_group process
試行錯誤って言葉
>>859 何とか試行錯誤した結果ですが
これが正解でよろしいでしょうか?
よろしくお願いします
c::WinClose, ahk_group process
すみません
>>860 は忘れてください。
Winloseだと、対象プロセスがビジー状態だと、ホットキーを押しても直ぐに終了しないです。
Proess,Closeでもう少しがんばってみます。
>>861 Processコマンドにはウインドウ指定は使えない
Loopで回すしかない
ProcessList = notepad.exe,wordpad.exe,cmd.exe
Loop, Parse, ProcessList, `,
{
Process, Close, %A_LoopField%
}
>>861 WinKill...
もう少し解説やどんなコマンドがあるかよく見たら?
>>862 >>863 ありがとうございます。試してみます
>>864 ありがとうございます。
Winkillでも試してみましたが、対象プロセスがビジー状態だと、直ぐに終了しないようです。
もう少しWikiを見てみます。
>>863 今確認してみましたが、自分の望んだ動作を実現できました。
有難うございました。
1キーを押した後に2キーを押して、更に1キーを押すと1の処理に戻りません ご教示願います スクリプトかこんな感じです 1:: Loop { 処理 } return 2:: Loop { 処理 } return
868 :
名無しさん@お腹いっぱい。 :2014/03/28(金) 23:29:36.10 ID:ir4KBC9d0
>>867 breakしたらどう?一応マルチスレッドもどきなんだからへんなとこでひっかかってるんじゃね
2の部分コメントアウトして 1だけ2回押してどうなるか試してみ 2キーの記述及び操作は関係なくて1の中で抜けてこられず永久ループになってると予想
小遣い帳をtxtで付けてたけど表計算ソフト使ってみたくてCalc試したら糞重いし関数覚えるのめんどい 簡単な足し算ならAHKで事足りるかな
やっぱ適材適所ってことは考えたほうがいいと思うよ・・・ googleのとかどこか微妙なoffice2010とか。
表計算ソフトが重くて嫌なら、CSVエディタ使えばいいんじゃね
テキストから次の行を検索し(\d+)を合計してMsgBox,%SUM%するだけなんだけども ^02月 \d\d日 ↓ (\d+)円\t酒\t.+?\tやまや$
それこそ、awkとかperlとかその辺のフィルター言語の仕事だと思うんだけど。 (窓だと何を使うんだろ。なんかあるのかな) 今あるテキストデータをもとに何かしようってのなら、表計算系は不便だね。 AHKで作れるだろうけど、ハンマーの柄で布団叩きしてるような違和感が残るw
すみません、添削お願いします ↓のようにしてみたらマッチしない行を無視せずSUMに月の値を足してしまうんですが……例えば8月なら8を SUM = Loop, Read, C:\Apps\Dropbox\小遣い帳\2013年.txt { VAL := RegExReplace(A_LoopReadLine, "^06月 30日 ↓ (\d+?)円\t酒\t.+?$", "$1") SUM += VAL MsgBox, %SUM%円 }
>>876 マッチしない時のVALを表示させればわかると思うよ
$1の寿命どこまでなんだろ。
>>877 FileAppend, %VAL%`n, C:\〜〜〜\a.txt
をSUM += VALの下に挿れたら
マッチする行は意図通りの値(金額)なんですが
マッチしない行は読み込んだ行がそのままVALになってました
それでいてマッチしない行から月の値、すなわち^\d\dにあたる値がSUMに足されてるのは若輩の身には全く訳がわかりませんorz
小遣い帳の書式がどんなのかわからんけど 1行に\d+円が2つ以上存在しないならこれでどう? \d+円の前後に条件追加しないと誤爆発生するなら適宜修正を SUM = Loop, Read, C:\Apps\Dropbox\小遣い帳\2013年.txt { If RegExMatch(A_LoopReadLine,"(\d+)円",VAL) { SUM += VAL1 MsgBox, %SUM%円 } }
>>878 RegExReplaceの説明をじっくり読んで欲しいとしか・・・。
マッチした場合には読み込んだ一行の"^06月 30日 ↓ (\d+?)円\t酒\t.+?$"の部分が
(\d+?)←$1に代入される文字列 に置換され、置換された一行が返される。
マッチしない場合は(置換されるわけもないので)そのままの文字列が返される。
のです。
で、マッチしなかった場合には
8月1日... みたいな感じなんだろうけど、文字列の先頭が数字だから数字の部分だけ数字と
して認識しているのでしょう。多分、C言語のatof辺りを参考にしてるのだと思います。
RegExReplaceの返り値はマッチしようがしまいが文字列 文字列を数値として演算しようとすると、先頭から数値として扱える部分だけ使われる なんでかは知らん
ド被り
>>880 > (\d+?)←$1に代入される文字列 に置換され、置換された一行が返される。
の置換された一行ってのは、具体的には(\d+?)、金額の所ね。
atofじゃなくて、atoi()を例に出したかったのです。
修正はここまでくれば簡単だと思いますが、RegExReplaceへの引数で、置換した数
を返り値として受け取ることができます。それを使えば置換したかどうかをチェックするこ
ともできます。
>>879 あっさり解決しました、多謝
Matchの方だったんですね。かなり前からマッチした位置しか返さないと思って見てませんでした……
>>881 簡潔にまとめていただきありがとうございます
未だに流行らせるページを参照してるんですがJpとかWikiとか見たほうがいいんですかね
>>882 すみません、私には何ステップか早い話のようです>atoi
GUI上のテキストを任意のキーを押下する毎にリフレッシュしたいのですが この場合はGuiControlでRedrawすれば良いのですか? 試してみたものの、どうも上手くいきません。 お知恵を貸して下さい、よろしくおねがいです。
>>885 リフレッシュというのが何を意味しているのか分からないが適当に答えてみる。
再描写 WinSet
コントロール内容変更 GuiControl,, ControlID, 任意のテキスト(空にしたいならなにも書かない)
>>886 返信遅れてごめんなさい。
数日間試行錯誤の結果、たった今GuiControlで出来ました。
有難うございました。
でも僕にはautohotkeyは難しいです。
あ、数日も経過していませんでした。 随分と長く感じたんですけど・・・
889 :
名無しさん@お腹いっぱい。 :2014/04/02(水) 22:46:39.75 ID:3byjayr60
Synaptics のタッチパッドを制御している人いる? Controlling Synaptics Touchpad using COM APIでググると出てくるページの の最後の方に書かれてるスクリプトを参考にやってみたけど、タッチパッドからの反応(パケット)が 最初の2〜3回は来るけど、そのあとだんまり。 AHK_L 32, 64 両方試してみたんだけど。ちなみにThumbRemapは問題なく動いてるし、c# で試しにCOMをたたいてみると
>>889 たまたま以前から気になってた内容なので伺うんだけど、
ThumbRemap、AHK_L x64 では動かないですよね?
891 :
名無しさん@お腹いっぱい。 :2014/04/02(水) 23:00:29.58 ID:G5RNP3J40
NewOSM.ahkダウンロードしたんですがこれってマウス移動設定の仕方どうするんでしょう……
こんな感じで処理をしたいのですが、ホットキーを押しても処理が終了しません どうすれば良いでしょうか? よろしくお願いします 1:: IfWinExist, hoge { exitapp } Gui, Add, Text, center x4 y4, hoge Gui, Show, w500 y500, hoge Loop { msgbox, 処理 } return
>>891 OSMって、ワンショットモディファイヤ のことですよ
使ってないけど、見た感じマウスキーのような動かし方(を求めていると勝手に想像)はできないんじゃない
エディタの上下左右の移動のようなのはできると思うけど
マウスキー的なスクリプトは、Wikiにサンプルコードがある。「キーボードでマウス操作」ってやつ
>>892 処理終了前に同一スレッドは実行されない。
SetTimerで別スレッドとして処理すればいい。
>>889 最後ちょっと文書が切れちゃったけど、c# でCOMたたく分には問題なく
タッチパッドの反応が来るんだけど、AHK_Lだと反応が途切れちゃうんだよなぁ。
>>890 ThumbRemap 相変わらず AHK_L x64 だめですね。
元管理人さんのソースはアドレス直値叩きまくってるから修正しづらいんだよな ThumbRemapはコード量は短いからバッファの構造がわかれば直しの手間は少なさそうだが
897 :
名無しさん@お腹いっぱい。 :2014/04/03(木) 12:18:07.32 ID:lSbykYRi0
>>891 アップローダーにあるMousemove+ってファイル落としてラベル書いて指定すれば行ける
以下のスクリプトで青空文庫のテキストを対象に Google 検索を行っているのですが、変数の前後に半角の二重引用符(")を挿入するにはどうしたらよいのでしょうか。
----------------ここから------------------
InputBox, query, Google 検索, , , 300, 110
If ErrorLevel <> 0
{
WinClose
} Else {
url := "
https://www.google.com/search?q= " query " site:aozora.gr.jp"
Run, % url
}
Return
----------------ここまで------------------
Google 検索では、検索したいキーワードの前後に二重引用符(")をつけると、入力したキーワードの順番で完全一致するフレーズがヒットするので検索結果を絞り込むことができます。
そこで変数 query の前後に二重引用符(")をつけたいのですが、試行錯誤してもうまくいきません。
まず、以下のように単純に " を加えると当然のことながら query が変数ではなく文字列になってしまい駄目でした。
----------------ここから------------------
url := "
https://www.google.com/search?q= " "query" " site:aozora.gr.jp"
----------------ここまで------------------
次に、エスケープが必要なのかと思い、以下のようにしてみましたが、実行するとやはり「query」という文字列が検索されてしまいます。
----------------ここから------------------
url := "
https://www.google.com/search?q=` "" query "`" site:aozora.gr.jp"
----------------ここまで------------------
そこで、Clipboard を使って、次のようにしてみました。
----------------ここから------------------
Clipboard =
https://www.google.com/search?q= "query"
url := Clipboard
Run, %url%
----------------ここまで------------------
これを実行するとやはり「query」という文字列が検索されてしまいます。
どなたかお知恵を拝借できれば幸いです。
>899
できました!
引用符はエスケープ・シーケンス(%22)で指定すればよいのですね。下のように書き換えたところ望み通りに動きました。
----------------ここから------------------
url := "
https://www.google.com/search?q=%22 " query "%22 site:aozora.gr.jp"
----------------ここまで------------------
これで作業がぐんとはかどります。素早い回答をどうもありがとう!
ダブルクォーテーション中でダブルクォーテーションを使う場合は「""」とすればいい 分かりにくいが var := """hoge""" とすればvarには "hoge" が格納される
>901
とても勉強になります。ご説明ありがとう。
さっそくスクリプトを以下のように修正して MsgBox で確認したところ正しく引用符が表示されました。
----------------ここから------------------
url := "
https://www.google.com/search?q= """ query """ site:aozora.gr.jp"
----------------ここまで------------------
ただしこのスクリプトを Run コマンドでブラウザに渡すと、Google の検索欄には引用符が表示されず、変数(query)がそのまま表示されます。
ともあれ、>900 の方法で解決できたので一件落着しました。
艦これやってるひとでおすすめないですか? いまマウスでカチカチやってますけど、キーにMouseClick割り当ててよく押すボタンを楽に押せるようにしようかなぁとか考えてるんですが
Quote := """" var := Quote . "hoge" . Quote 引用符の扱いはこんな感じでやってる URLデコードエンコード関数はかなり便利だよな
>>902 ありがとうございます
紹介されているスクリプトを上から順番にそれぞれコピーして実行してみましたが何の反応もありませんでした
たぶん私が使い方をよく理解していないせいだと思います
ともあれお気遣いに感謝します
>>902 これだとUTF-8でしかエンコードできない気が
inireadで指定したini全てのデータを、一行のコマンドで読み込む事って出来ますか?
IniReadは特定の一行 (の=以降)しか読まない ファイルまるごと読みたいならFileRead
正確には IniRead, OutputVar, Filename だと、全セクション名を取得でき、 IniRead, OutputVar, Filename, Section で、特定のセクションを指定すれば、そのセクションの全キー名&値が取得できる
>>912 いつのまにこんな機能が
RegExと格闘しながらセクション一覧やセクション内容抽出関数作ってたが
もういらなかったんだな、libから外すか
Guiのコンボボックスで、下の2つを区別する方法があれば教えて下さい (1)リスト項目選択中に、他のリスト項目を選択した場合 (2)同じく、ボックス内のテキストを書き換えた場合 GuiControlGetで調べようと思いましたが、テキストと項目番号のいずれを取得するにしても、 (2)で既存項目と同じテキスト又は項目番号を入力すると、その項目を選択した場合と区別がつきません
InputにおいてMatchLlistにhe,he1,he2を同時に列挙できませんか If ErrorLevel = Timeoutを入れてもheが押された時点で実行されてしまいhe1やhe2が押せません
難しく考えてることが多々あるので、処理方法の前に「何がしたいのか」書いてほしい。
>>914 Gオプションやテキストを書き換えたときに変数に判別用のフラグを立てておけばいい。
>>915 できません。
>>916 具体的にやりたいのは、リスト項目を選択するとそれぞれに設定された情報が表示され、
項目名を編集してボタンを押すと項目名がリネームされるという処理です
しかし、たとえば、次のようなリストを設定したコンボボックスがあるとして、
a
b
c
aを選択した後「b」と書き換えた場合、bを選んだのか新しく「b」と書いたのか分かりません
AltSubmitを指定しても、「2」と入力した場合、bを選んだのか新しく「2」と書いたのか分かりません
1アクションで同じ内容になる場合にはフラグを立てておくことができない気がするんです
>>917 ※インデント全角スペース
;ComboBox項目変更
F1::
CBText = a||b|c
Gui,Add,ComboBox,vCB AltSubmit,%CBText%
Gui,Add,Edit,vEdit
Gui,Add,Button,g変更,変更
Gui,Show,w200
Return
変更:
Index = 0
NewText =
GuiControlGet,EditVar,,Edit
GuiControlGet,CBVar,,CB
Loop,Parse,CBText,|
{
If (A_LoopField != "")
{
If (++Index = CBVar)
NewText .= "|" EditVar
Else
NewText .= "|" A_LoopField
}
}
CBText := NewText
GuiControl,,CB,%CBText%
GuiControl,Choose,CB,%CBVar%
Return
>>918 やはり別途Edit欄を用意するしかないですか…
コンボボックスで実現するのは諦めることにします
ありがとうございました
>>904 ですけど、マルチストロークショートカットキー設定したら覚えにくくてSearchImageとかPixelGetだかなんだか使ったら反応しにくくて
何行も書いてみたけど結局dに左クリック割り当ての一行になった(´・ω・`)ショボーン
初心者+浦島太郎な俺にちと教えて欲しい 旧Autohotkey(_Lじゃない方)で下記のスクリプトを組んだ Joy1:: CoordMode,Mouse,Relative MouseMove,845,400 [0,100] return ジョイパッドのボタン1を押したらマウスカーソルが指定の位置に行くってスクリプトのはずなんだけど マウスカーソルが微動だにしないのは何故なんだぜ? ジョイパッドのボタン1が反応する事は確認した Send,{LButton}みたいなのを追加してマウスクリックができる事も確認した PCを更新する前は問題なく動いていたんだが、OSやマウスの種類によってはキーが効かなくなることってあるの?
[0,100]
タスクバーのミドルクリックでそのウインドウ閉じる、って奴をやりたいけど、 簡単そうで地味に面倒そうだ。 タスクバー自体にウインドウ名みたいなのは割り当てられてるんかな?
>>923 右クリ、上、Enter でいいんじゃね?
もちろん動作はそれでいいんだけどね。 タスクバーの上でだけその動作になって、 他のウインドウ上では普通のミドルボタンの動作になって欲しいわけよ。
>>924 Alt + F4
>>925 GetSystemMetrics でタスクバーの高さ取得して相対座標で判断
>>926 おおう、そんなんができるのか。さんくすやってみる!
>>922 んー…?
スマン、マジで分からん。色々値を変えてみたがダメだった。
そもそも指定の仕方が違うってことなのか?
うん、まぁおれも一番最初の頃は[]付けてたな すぐ気付いたけど
いやいやいやいやwwww
[]内は省略可能な引数だよっていう意味で[]が使われているだけで、 コマンドの一部なんて今まで一度も思ったこと無いな、おれ素人だけど。
ああ、[]ってそういう意味だったのか… でも、だとしたら何で今まで使えてたんだろう?
[]はしょうがないとしても、第四パラメータの前にカンマがないとか、 第五パラメータは数値指定じゃないだろとか なんでこれでエラーになんないんだよマジで
カンマは省略できるよね 無効なパラメータで無くても動くものは無視するんじゃない? 知らんけど
Windows8.1Updateでチャームの表示が遅くなったらしいので作ってみた 管理者で実行しないと、反応しない場合がある。 ;無変換+スペースでタスクバー・・・無変換で問題が出る ;sc07B & space::Send,#t ;Win+スペースでタスクバー #space::#t ;マウス中ダブルクリックでチャーム MButton:: If(A_PriorHotkey = A_ThisHotkey) And (A_TimeSincePriorHotkey < 500){ Send,#c }Else{ Send,{Blind}{MButton} } Return ;マウス右ダブルクリックでタスクバー ;メニューが出るとバーが表に出ないので、ESC でキャンセルしてから表示 RButton:: If(A_PriorHotkey = A_ThisHotkey) And (A_TimeSincePriorHotkey < 350){ Send,{esc}#t }Else{ Send,{Blind}{RButton} } Return
既に起動中のスクリプトに、別のスクリプトからコマンドを送信して 既に起動中のスクリプトの指定ラベルに飛ぶ事何て出来るものでしょうか?
ちょっと場所お借りします。
http://anago.2ch.net/test/read.cgi/software/1393584975/757 へのレス。
AutoHotkeyに関することは詳しく説明しないので悪しからず。
例ではOperaブラウザ上でのみ適用される(適用したいウインドウクラスは自分で調べてくれ)。
例として、文字列選択後に [shift]+[ctrl]+c で動作。
スクリプトと同じ場所の「ウインドウタイトル名のフォルダ」に「ウインドウタイトル名 + 年月日.log」へ追記する。
フォルダもlogファイルも存在しなければ自動で作成する。
ウインドウタイトル名の中にファイル名に使えない文字が含んでいたら「_」に変換する。
一度に大量の文字列をコピーしようとする(スレ全体とか)と失敗すると思う。
長いので次のレスへ
>>938 より続き
#Persistent
;#If WinActive("ahk_class OperaWindowClass") || WinActive("ahk_class ウインドウクラス") ;複数指定する場合
#IfWinActive, ahk_class OperaWindowClass
$^+c::
ClipSaved := ClipboardAll ;クリップボードのバックアップが不要なら削除
Send, ^c
ClipWait, 2
WinGetTitle, wintitle, A
wintitle := RegExReplace(wintitle, "\\|/|:|;|,|\*|\?|\""|<|>|\|", "_")
Filename := A_ScriptDir . "\" . wintitle . "\" . wintitle . A_Year . A_Mon . A_MDay . ".log"
if (! FileExist(A_ScriptDir . "\" . wintitle . "\")) {
FileCreateDir, %A_ScriptDir%\%wintitle%
}
file := FileOpen(Filename, "a")
file.WriteLine("----- 以下に追加 -----") ;不要なら削除
file.WriteLine(Clipboard)
file.Close
Clipboard := ClipSaved ;クリップボードのバックアップが不要なら削除
ClipSaved = ;クリップボードのバックアップが不要なら削除
return
#If
これを拡張子「ahk」で保存。
>>937 適当な変数で条件付けといて、別スクリプトでその値を書き換えればいいんじゃないの
WinGetPosでウインドウ枠内の実寸法を取得って出来る?
ほほう、ちょっと試してみる
FileGetVersionでファイルのバージョンなどを取得できますが、他の属性を取得することはできるでしょうか?
>>946 読み取り専用や隠しファイルなどの属性なら、FileExist()かな?
ダイアログなどのボタン(OKとかキャンセルとか)でデフォルトボタンのコントロール名はどうやって取得できますかね? フォーカスされてるボタンならControlGetFocusで取得できるんだけど…
>>946 FileGetAttribの方が一般的なのかも?
まぁコマンドか関数かの違いだけで状況により使い分け、または気分によって使い分けすればいいんじゃないかな?
ググったら今スレの>9-12が引っかかった とりあえずめくら打ちでEnter送ればボタンは押せると思うけど (そのためのデフォルトボタンだから) その他の制御するために取得したいとなると面倒かもね
>>950 素早い回答ありがとす
デフォルトボタンの取得は諦めますわ…
まさか現スレに殆ど同じ質問があったとは
wikiばっかり見てても駄目っすね^^;
これよくRR.exeが残留してCPU食いまくるんですけどなんでProcess, Closeが効かないんでしょう? %Search%と%Replace%はもうすこし上の方にあるGUI,Add,Editから来ます Loop, %TargetDir%*, 1 ;#*.*でもできてる { Run, C:\Application\RegularRenamer\RR.exe /rn /sl "%A_LoopFileFullPath%" "s/"%Search%"/"%Replace%"/k",,, RR } GUI, Destroy Sleep, 10000 Process, Close, RR return GUIEscape: GUI, Destroy Process, Close, RR return
拡張子付けろ
>>953 Process, Close, RR.exeにしました
これでしばらく様子見ます。どもです
>>952 「RR」が、Run,コマンドライン,,, RRのPIDの意味のRRだとしたら
Process, Close, %RR%
じゃないかと
また、RR.exeのことよく知らないけど、もし複数起動してたら、
Process, Closeの単発では全部閉じないような…
的外れなレスなら無視してチョ
>>955 書き忘れっす
もし、RR.exeに処理後自動終了のオプション有れば、
Process, Closeせず、RunWait使うという手もあるけど、
そういうオプションが無いって事かな?
あー、Runコマンドで変数RRにPID入れてるのか
なら
>>955 が正解だわ
なんかうpだてきてるで
>>923 俺の場合閉じるじゃないけど似たようなことやりたいんで
ついでに作ってみたよ。
でたらめだけどなんかしらんけど俺の環境では動くよ。
MButton::
var:= "MSTaskListWClass1"
MouseGetPos, , ,id,control,,
if var = %control%
send,{RButton}{UP}{ENTER}
else
send,{MButton}
return
ごめん、どうでもいいけどこっちのがスマートかも。 ほんとならahk classも指定したほうがいいかも知んないけど、 別に今んとこ支障はないので。 MButton:: MouseGetPos, , ,id,control,, if (control = "MSTaskListWClass1") send,{RButton}{UP}{ENTER} else send,{MButton} return return
return return
return return ; 念のためもう一度
汎用関数にして、#IF使った方が良いんじゃないか
964 :
名無しさん@お腹いっぱい。 :2014/04/26(土) 09:39:00.76 ID:5nnLMgI00
大事なことなのでry
#IF Mouseisover を使うってことかな その方がスマートそうだけど、Mouseisoverの解説とかリファレンスってほとんどないよね。 便利そうなのになんでだろ
もしかしてとんでもない勘違いしてるのかな return return
>>968 OpenGL ES 3.0?
シェーダーコードの自動生成がしたいならsmartguiでGUI作って"Run"でC++プログラムを起動するといいよ
Numlock::Send,^+sとしてるんですが、 しばらくPCほっといてからいきなりNumlock押すと^+sではなくNumlockが送られてしまいます 多分糞スペだからだと思いますが、どうにかなりませんか?
XPが終了したのでWin7に買い換えました。GhostTracerを使ってたのですがうまく動かないのでAutoIt、AutoHotKeyを今回初めて試してみました AutoHotKeyは最新版、v1.1.14.04 - April 25, 2014です やりたいことは、マウスの移動とクリックです。これだけ出来ればいいのです ところが、今まで使ってたあるアプリのウインドウをアクティブにしたときだけマウス関連が全く利かなくなるという現象が起きました。AutoHotKeyでは最も単純に #space::MouseClick, LEFT とだけやってみました IEやChrome、秀丸、Excelその他ほとんどのアプリではそれをアクティブにした状態でちゃんと動作します ところが、この特定のアプリだけそのウインドウをアクティブにするとこの機能がまったく動きません。MouseMoveも動きません また、この特定アプリを非アクティブ状態にして、このウインドウ上で上記のWin+スペースをやってもこのアプリがアクティブになることはありません ちなみに、このアプリをアクティブ状態にして、Win+スペースとやると画面上のすべてのウインドウが枠のみが残って中身は全部消えてしまい、スペースを離すと元に戻ります 調べてみたら、AutoHotKeyだけでなくAutoIt、GhostTracerが動かなかったのもこのアプリウインドウをアクティブにしたときのみでした XPではこんなことはなかったのですが、誰か理由、対処等わかる方いますか ちなみにこのアプリは有名会社から正規に購入している間違いのないものです
管理者権限
>>969 原因は
>>970 の通り
標準ユーザーとして実行したアプリから管理者権限で実行したアプリは操作できない
対処法は、AutoHotkey.exeを管理者権限で実行する(プロパティ>互換性>特権レベル)
今後もマウス操作にしか使わないならそれで特に問題ない
コンパネのアクションセンターのユーザーアカウント制御設定の変更で 通知しない にして再起動したら、問題なく出来るようになりました AutoHotKey、AutoIt、GhostTracerともに動きました 自動化ツールがどういう仕組みになってるのか知りませんが、XPのときはキーボードやマウスの入力をかなり上流でインターセプトしていたため、ウイルスに制御が乗っ取られるとかセキュリティを考えてWin7では厳しくしたのでしょうかね でもこのアプリだけで他は全く問題なく使えているというのは、アプリ側でブロックできるように設定が出来るということなのでしょうか でも、ユーザーアカウント制御設定の変更で通知しないというのは一番セキュリティが弱いのでさすがにこのまま使うのは気が引けます 一番いい設定ってどうすればいいのでしょうね。このアプリだけを制御除外とか出来ないものでしょうか
>>971 ありがとうございます。パソコンにログインするときはAsministrator権限つきのアカウントで入っているのですが、それでも駄目なのですか
XPのときみたいに、Adminstratorでログイン出来るのかって探しているのですが、今入っているのがAdministrator付きのせいなのか特にそういうのが見当たりません
>>971 ああ、わかりました。ahkファイルのプロパティでセキュリティのところですね
今はSYSTEMになってますよ。これをAdministratorに変えろってことですね
今からさきの
ユーザーアカウント制御設定の変更で通知しない
ってとこをもとに戻してやり直してみます
>>971 たびたびごめんなさい。AutoHotKey.exeのプロパティの互換性のところで
特権レベルで実行っていうチェックがあるのがわかりましたが、これを使わなくても
ahkファイルを右クリックしてその中に管理者として実行っていうのがあるのを見つけました
これでやれば、問題なく動きました
これで、AutoHotKeyについては解決しました。ありがとうございました
でも、もともと作ってあったGhostTracerが動けば一番楽なんですけどね
これは先ほどのユーザーアカウント制御設定の変更で通知しないっていう変更で動いたのですよ
GhostTracerも、ショートカットの上で右クリックして出てくる管理者として実行というのを選べば 問題なく動くことを確認しました これですべて解決しました。ありがとうございました
2台のPCで、かたやXeonE3-1225メモリ8GB、かたやi7-3930Kメモリ16GB。SSDとHDDの性能はどちらも同じ。で、性能のいいはずのi7マシンの方のレスポンスが明らかに悪いんだ。走らせてるAHKスクリプトは全く同じ。 これは何が原因なんだろう?
>>979 そのURLに導入方法が書いてあるんだから、きちんと読むこと
最低でも読んだ上で、どこまで理解できてどこから理解できないかが分かるように伝えないと
もしかしてジェスチャー総合スレでも聞いてるかざぐるユーザー?
かざぐる使いは、あれが当たり前だと思わずに、自分で読んで調べて動かして試行錯誤する習慣をつけよう
>>979 そのページ見てわからないんならやめた方がいいんじゃないかな
スレ立ててくる
次スレにもう書き込んでるやつら馬鹿なのか? 落ちないように1000まで埋めるんだろうが
1000行く前に落ちたらなんか不都合あんの?
何をわけのわからないことを言ってるんだ。 1000まで埋めたらその時点でdat落ちするし 980超えてから24時間レスがなければdat落ちする。
ちなみに2年くらい前までは1000まで埋めないとdat落ちしなかったからわざわざ埋めてた
埋め 2カ所で話題が進行すると面倒だから。
埋め 1000までいけば1000まで残るが 1000いかないとどこまで残るかわからん 昔は知らんが今はそう
埋め 次のテンプレに現行スレ埋めてから次スレに質問書けって追加だな
落ちたところまで残るよ
こんなレス残らなくていいのに
埋めとこう
>>991 どこまで残るかわからんという不確かな残り方はしないよ
落ちたところまでのレスは全て残って●があればいつでも見れる。
最近は●なくても2chログを保存しているところなんていくらでもあるけど。
埋め
うめ
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。