FAQ Q:CapsLock(英数)キーの割り当てがうまくいかないよ A:日本語環境だとLock系キーの動作は不定。 OS側がキーUp/Down情報が正しく返してこないので対処のしようがない。 OSのローカライズ段階で発生してる問題なので、窓使いの憂鬱やChange Keyのように ドライバレベルで弄らないとダメだが英語圏では問題ないらしいので今後のサポートもあまり期待できない。 対処としては前述のソフトで、CapsLock(英数)キーを別のキー(F13〜F24など)に割り当ててから AHKで利用すべし。 Q:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ A:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]なため。 対処としてはこれらの文字の"直後"に「`」を記述する(例:「線形`代数」)か、 #EscapeCharでエスケープ文字を別のものに変えるべし。
Q:Shift, Ctrl, Alt, Winキー以外のキーを修飾キーとしてキー割り当てしたいよ (例:無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたいよ)など A:Remap機能は記述が簡単になる反面、細かい指定がしにくい。 流行らせるページのHotkeys, キーリスト, リファレンス→Send, #IfWinActive, GetKeyState()なども参照すること。 なお、例の場合は以下のように記述する。 sc07B & I:: Send, {Blind}{Up} sc07B & K:: Send, {Blind}{Down} sc07B & J:: Send, {Blind}{Left} sc07B & L:: Send, {Blind}{Right}
前スレでのウィンドウサイズの件、有難う御座いました。 例を頂いた方法で各種ソフトに仕込んだのですが、 該当ソフトを複数起動中は、AutoHotkeyのプロセスも その分多くなります。Returnのコマンドで最初の行に 戻っていると思うのですが、サイズを合わせたいのは 初回起動時だけなので、Returnを消してしまっても 問題は無いでしょうか、度々申し訳御座いませんが 宜しくお願いします。 Run,firefox.exe WinWaitActive,Mozilla Firefox WinMove, A, , 40, 100, 1200, 900 Return
個別のスクリプトにしたんなら ExitAppで終わって結構だよ 常駐のに書いたならReturnがいる
なぜか突然autohotkey.exeが消えちまった。同じフォルダの他のファイルは残ってるんだけど…。 他のPCにインスコされたautohotkey.exeをそのままコピーしても大丈夫かな?
>>10 大丈夫だと思うけど、ウィルス対策ソフトが勘違いして隔離したんだとしたら、
除外ソフトに設定するなりしないとコピーしてもまた消える可能性が。
>>11 あんがと。俺もそれは疑った。嫁が使ってる間にウイルス駆除来たのかと。まだログはチェックしてないけど…。
ウイルス対策ソフトはノートン360なんだけど、これもAHKもずっと使ってるからなぁ。
新たにウイルス認定されたのかな。w
exe化したのがウィルス認定ってよく聞くけど、本体ってどうなんだろね。
下のフォルダにあるんじゃないの?
単純にexeを起動したらctrl+shift+→をキー送信して、即終了させたいんですが、 Send, {^+Right} Exit これじゃダメみたいです・・・ リファレンスの説明がよく分かっていないので、ご教授いただけないでしょうか。
うりゃー Send, ^+{Right}
お世話になります。 MsgBox, 引数は%0%個です 引数1は%1%です 引数2は%2%です 引数3は%3%です if ( %0% = 3 ) { MsgBox, 引数は3個です } else { MsgBox, 引数は3個ではありません } 上記スクリプトを引数3つ(A1、A2、A3)で実行してみたのですが、実行結果が 1回目のメッセージ → 引数は3個です 引数1はA1です 引数2はA2です 引数3はA3です 2回目のメッセージ → 引数は3個ではありません となり、IF文による分岐が期待した通りに動作してくれず悩んでおります。 試しに if ( %0% == 3 ) と書き換えてもみたのですがやはり結果は同じでした。 ここのif文をどう記述するべきか、識者の方々のご教示をお願いいたします。
if (3 = %0%)
20 :
18 :2008/08/22(金) 16:44:47 ID:+8tccZ8F0
>>19 お手数お掛けいたします。
if (3 = %0%) {
MsgBox, 引数は3個です
} else {
MsgBox, 引数は3個ではありません
}
ご指示の通り、条件式の右辺と左辺を交換してみたのですが
メッセージは
>>18 と変わらずでした…
全発言でバージョン表記が漏れていましたので追記いたします。
AutoHotKey.exeはv1.0.47.06
OSはXP/SP3とVista(Business)/SP1の2台で試しております。
( 0 = 3)じゃないかな?試してないけど。 紛らわしいから,%0%を%aaa%とかにして(aaa = 3)にしたほうが。
それか、(%0% = %3%)にすればいいか、どっちにしても紛らわしい。 できなかったら、死にたくなるほど恥ずかしい。
>>21 aaa = %0%
If ( aaa = 3 ) {
ご高察の通り、引数の総数%0%を一度別変数に格納することで
意図した結果となりました。
これでやっと次の段階に進めます、本当にありがとうございました。
理由があってそうしているのかもしれないが 括弧を外せばすんなり行くと思うけど If 0 = 3
つか、バッチ系の仕様を引きずり過ぎ。 どっちにしろ、バッチファイルをそのまま動かすことは出来ないし 配列は添え字形式にしてほしいなぁ。 args[0], args[1], ... ハッシュも欲しいなぁ
式の中だと、%X%から展開されたものが数字の場合でも変数として扱うから上手くいかないみたいだな。 aaa=123 123=888 msgbox, % %aaa% msgbox, % 123 結果、888に続いて123が表示される コマンドライン引数3で msgbox, % %0% の場合、最終的に msgbox, % 3 と展開されて、変数3に入っている3番目のコマンドライン引数が表示される。 括弧付きif文の場合も論理的な式として扱われる為上手くいかない。
27 :
12 :2008/08/23(土) 21:05:49 ID:KOBFnm+zO
やっぱノートンに捕まってた。 何やら実験的駆除ってな感じで、ウイルスの疑いがあるのでシマンテックヘ報告すべきファイルらしい。 別に新しいスクリプトを走らせた訳でもないのになんで急に…。 会社のPCでもAHK入れてるのだが、ウイルス対策ソフトは情報部門で集中管理されてるので、ウイルスとして弾かれると騒ぎになりそう…アンインストールするかな。しかしAHK無いと恐ろしく仕事の効率落ちるんだよなぁ…。
ノートンってウイルスの疑いがあるのを勝手に削除したり隔離するの? アクセス制限でも十分だと思うんだけど。 tiddlywikiを勝手に削除して大騒ぎになったりしたな。
ノートン起動したら自分を消し去ったので、それ以来使ってないな
ん〜、シマンテックに ウィルス or スパイウェア 認定されたとしたらめんどいな。 キーロガーっていえばそうだし・・・ 管理者権限が無くてもインストールして使える数少ないユーティリティなんだが
ClamWinだとAutoHotkeySC.binがトロイ判定された。
ノートンが新しいスクリプト作ってくれればよくね? 変なこと徹底して出来ないやつw
>>28 いや。確認のダイヤログは出るはず。
嫁がPC使ってる時に出て、テキトーにOKしたっぽい。
>>33 うちのPC二台も時間差でAutoHotkey.exeが消えた。
17日〜20日辺りで削除されたらしい。
NIS2008が今月頭からサンプル提出や統計提出したとログにあるが、
削除に関しては、確認ダイアログも出ないし、ログにも無いし、検疫にも残っていない。
>>34 うちのが消されたのは18日だったな。
ちなみにノートンはノートン360でログには残っていた。
しかし、1台のPC(XP)では消えたが、同じノートンを入れてるもう1台(Vista)では今のところ、消えたり
AutoHotkey.exeやばいよ警告は出ていない模様。
まじで会社が使ってるセキュリティソフトにウイルス認定されたりすると厄介すぎる。orz
もしかしてこれ.exe化したスクリプトも認定されちゃうの?
>>36 そっちの方は既に前から認定されてるって。w
NISつかってるけどLiveupdate施行後スキャンしても何ともない。 ver. 1.0.47.04 だったんで公式から最新(?)の ver. 1.0.47.06にしたけど 認定はされてない。 NIS / NAV 系と 360 とはエンジン違うのか?
39 :
36 :2008/08/24(日) 14:01:30 ID:/lnnayMj0
ちなみに XP SP3
40 :
38 :2008/08/24(日) 14:02:22 ID:/lnnayMj0
AutoHotkey.exeそのものが悪いんじゃなしに、 スクリプト側が適合して、そのあおりを受けてexeが消えてるって格好?
>>41 そんな感じだと思うのだが、新しいスクリプトなんか最近走らせてないのにノートンに
捕まった。
(使ってるのはMousegesture.ahkと、キーの置き換えやウインドウ操作をさせてるahkだ
け。ずっと前から使ってる。)
シマンテックのページで検索してもautohotkeyではヒットしないね。
ググっても、コンパイルしたやつが駆除されたって話はちょくちょく出てくるが、本体が
駆除されたって話は出てこない。
もう1台のPCでは同じノートンでも駆除されてないし、駆除したのを元に戻したら駆除
された時のログも一緒に消えちゃったので、しばらく様子見ます。
FileDeleteでちょっと間違えれば怒涛の消去ってこともありうるからなあ
>>43 それいったらLinuxとかのコマンドだって危険極まりないけどな。
find . hoge -print | xargs rm
うっかり -name を入れ忘れて死ぬ思いをした新人の頃の苦い記憶。
rm -r ./ の後に補完しようと C-i 押そうとしたら 手がすべって C-o 押して実行されたことがあるよ。
アクティブウィンドウの実行ファイルがあるフォルダ名って取得できます? フルパスでもいいんだけど、WinGetじゃ無理みたいだし。
>>47 >>48 おおっ、d。
Dllを使うのか。レベルが違ったorz
使い道は、ブラウザとかを再起動させるだけなんだけどね。
ショートカット作って誤魔化して使ってたけど、楽になった。
loop内で変数を使って、ラベルを定義なんてことできませんか? Menu命令で飛ばす先のラベルを全部普通に書くと、膨大な数になりそうなので…
全部同じラベルに飛ばして %A_ThisMenuItem%で分岐するとか?
guiの drop down list をリフレッシュする方法について質問です。
初期設定
Gui, 1:Add, DropDownList ,vdropdown 〜〜〜
Guicontrol, 1:,dropdown,|a|b|c|
まずこれで「abc」が選択できるドロップダウンが出ます。
↓このあと「abc」は破棄して、新規の「def」をドロップダウンリストで選びたい
Guicontrol, 1:,dropdown,|d|e|f|
ところがこの方法だと「def」ではなく、最初の情報と合成されて「abcdef」となってしまいます。
GUIをDestroyしないで、最初に設定した「abc」を破棄するには、
どのように書けばよいでしょうか。
(参考) はやらせるページ「Gui,Add,DropDownList」
http://lukewarm.s101.xrea.com/commands/Gui_Add_DropDownList.html
>>50 よくわからんがこういうことか?
buf := "lblA,lblB,lblC,lblD"
Loop,Parse,buf,CSV
{
Menu,MenuTest,Add,Item%A_Index%,%A_LoopField%
}
タスクトレイアイコンをダブルクリックしたときの動作を決めることができますが、 シングルクリックの動作を決めることはできないのでしょうか?
55 :
50 :2008/08/27(水) 17:29:06 ID:mO8ATr+W0
>>51 組み込み変数ですか、思いつきませんでした。
これを使うとできそうです。
>>53 いえ、メニュー項目を増やすには、必ずラベルを指定しないといけませんよね。なので
Loop,Parse,buf,CSV
{
sample%A_Index%,:
ここに処理
return
}
みたいな感じで、ラベルを定義できないかと思ったわけで…。
作りたいのはフリーソフトのCLCLでいうところの、定型文貼り付け機能なんですが
(テキストファイルから文字を読み込んでSend,^vでペーストさせてます)
定型文を増やすたびにMenu項目を増やして…とAHKを変更しているのですが面倒で
もっとスマートにできないかなと思いまして。
方針は
>>51 でいいとして。
A_ThisMenuItemPos
> A_ThisMenuItemのアイテムがA_ThisMenu内で何番目にあったかを格納する。
がいいんじゃないのかぇ。
行番号 と メニュー番号が一致( or 一定の差分)であればいいわけだし。
それなら Menu, Hoge, Add, %A_LoopReadLine%, Paste Paste: { ClipBoard=%A_ThisMenuItem% Send, ^v Return } こんな雛形でいけると思うけど 改行付きとかは一工夫いるかもしれん
右手にマウスでウェブブラウザ、 左手にジョイパッドでフライトシミューレータをする事はできますか? ジョイパッドのボタンはSendControlで出来ましたが 左スティックは遅れないのでしょうか? できるならJoyキーまとめてフライトシミュに送る方法ありませんか?
60 :
54 :2008/08/28(木) 01:56:03 ID:9SRkN2S60
>>57 それはどういうふうに書けばいいのでしょうか?
>>60 俺はこれでやってるけど、どう?
menu, tray, Click,1 ;クリック1回でAHKメニューを出す
menu, tray, add, TMenu
menu, tray, Default,TMenu
TMenu:
GUIコマンドでmenu,addして、やりたいことを書く
それはよかった。 でも、なんでこれで動くのか、俺自身もよくわかってない。 1行目の「menu, tray, Click,1」は、本来AHKメニューを出す意味だと 思うのだけど、入れないと2度クリックしないと動かない標準設定のままで、 入れるとなぜかデフォルトに設定したラベルに飛ぶ動作になる。
Helpの方だと Click, ClickCount: Specify 1 for ClickCount to allow a single-click to activate the tray menu's default menu item. Specify 2 for ClickCount to return to the default behavior (double-click). For example: Menu, Tray, Click, 1 ってなってるね
65 :
50 :2008/08/28(木) 05:27:39 ID:ygRBrGlN0
>>56 そんな組み込み変数もあったのですね。目から鱗です。
スクリプトがグッとスリムになりそうです。
>>58 サンプルありがとうございます。
複数行の需要はないのですが、数が増えてくると選ぶのも大変なので
メニューの階層化についても考えてみます。
皆さんはメニューの[ファイル][編集][表示]…みたいなメニューを選択させる時って どうされてます?自分はIME OFF→ALTキー+英文字をSendしてるんですけど たまにIME OFFにならなかったり、処理が追いつかず、実行されなかったりします。 もっと良い方法はないでしょうか?
WinMenuSelectItem
>>67 ぐはっ、自分の目ってばどんなに節穴…
本当にありがとうございます。
ものによってはWinMenuSelect聞かないときがあるので、そういうときはSendMessageするのもあり
いまネットワーク接続のncpa.cpl見てるんだけどWinMenuSelectItem効かないし リソースハカーで見てもツリーにmenuがないしでこういうのはどうすれば・・・
せっかく教えてもらったんですけど、WinMenuSelectItem使えませんでした。 仕方ないのでClick命令に変えましたが、Windowsクラシック表示のパソコンだとY座標がズレそうで怖いです。。
>>71 WinMenuSelectItem
>PostMessageでWM_COMMANDを使用するかControlSendでショートカットキーを送ることで代用できる。
PostMessage/SendMessage関連-WM_COMMANDのコマンド番号を調べる
>これらの方法では、ツールバーにしか割り当てられていないコマンドIDを調べることは出来ない。
>そこで、ツールバーボタンのコマンドIDを調べるスクリプトを作成した。
>標準的なツールバーであれば、ボタン番号に対応するコマンドIDを調べることができるはずである。
スクロールバーのつまみをドラッグする機能を割り当てることって出来るのでしょうか? 具体的には、Win+Altとマウスの上下で、アクティブウィンドウのスクロールバーのつまみの上下ドラッグを再現したいのです。
>>74 分かりづらくてすいません。
確かに前スレのものと似ているのですが
スクロール機能といよりは、スクロールバーのつまみをドラッグするという動作自体を割り当てることが出来るのかなと思いまして。
AHKのコマンドひとつで、それをやるのは無理
>>76 そうなんですか。何かフリーソフト探してみます。
その発想はなかったわ
>>75 いや分かってたが、マウスを使わないでドラッグってどうやって実現すんの?
それに無理にそうしたところで得られる結果は結局スクロール動作な気がするんだが
>>72 はい、私もリソースハッカーや、窓コン、管理人さんのスクリプトで調べようとしたのですが
コマンドIDが拾えないのです。KompoZerっていうMozilla系列のソフトなんですが…。
ALT押して照準がメニューに移るのが、標準的なメニューってことなのですかね〜?
むりやり考えてみた。 ・Win+Alt+下or上 が押されたら マウスのXY座標をpushする ・画面内スキャンコマンドを使い、該当ウインドウから、灰色の縦長バーをみつける (スクロールバーの大きさ変化対策のため、細い状態で発見できる素材にする) ・そこの場所でLClickを押しっぱなし ・1ドットマウスカーソルをずらす ・Win+Alt+下 あるいは上 が押されつづけたら1つ上を繰り返す 離されたらLClick上へ ・マウスのXY座標をpopし、カーソルを元の場所に戻す これでどうだ。
>>79 そうですか、リンク以外のコメントがなかったので分かりませんでした。
ただ、分かっていないようなので書きますと、ドラッグの代わりにマウスを上下に動かすことで出来
たらなと思ったのです。ウィンドウの右端にカーソルを合わせる手間をなくせればなあと。
スクロールバーのつまみによるスクロールが、通常のホイールとかのスクロールよりいいと思う点は、
スクロール先の位置がおおよそ分かっていると、マウスを少し動かしただけでだいたい目的の場所ま
で行けることです。
>>81 なるほど、画面内スキャンコマンドというのがあるんですね。
ちょっと難しそうですが、調べてみます。
>分かっていないようなので書きますと、 いや、ていうかね。それってマウスカーソル位置がスクロールバーにない状態でってことでしょ 目視できない状態でそれやっても「どの位動かしたか」って感覚的にわからないし 混乱するだけじゃね?ってことが言いたかったんだが。 まぁ 81みたいにマウスカーソルごとスクロールバーにワープさせるんならわかるけど。
>>84 もし実現できたらの話ですが、マウスの動きに連動してスクロールバーのつまみも上下する訳なので、
視覚的にも、感覚的にもわかりやすいと思うのですが。個人的にはつまみドラッグの感覚と同じ感覚で
出来るのではないかと考えています。
ちょっと実際にやってみないと想像しにくいコトではありますよね。
>>85 TrackScrollで検索してみて。
カーソルの移動量でスクロールするソフトだよ。
似たような動作はすると思うから試してみればいいよ。
俺はAHKで書いたやつ使ってるけど。
>>83 単純に、なんかキー押してる間、カーソルがスクロールバーのつまみの上に飛んで左クリック保持状態になるようにし、キーを離したらカーソルが元の位置に戻る様にしたらいいんじゃない?
>俺はAHKで書いたやつ使ってるけど。( ´_ゝ`)
>>86 TTBaseのdragscrollみたいな感じだね。あれはデフォルトでマウス中ボタンだけど。
それをAHKでやるってことね
>>86 マウスの移動量に合わせてWM_V(H)SCROLL投げてるっっぽいな
まぁ厳密に つまみドラッグエミュしてるわけではないと思う
初歩的な説明なんですが、FileAppendって追記しかできませんよね? テキストファイルの中を全部書き換える場合には、一度ファイル自体を FileDeleteで消して、FileAppendで保存し直すって形が普通なんでしょうか?
FileReadで変数を読み込むと、文字列の形式になるんですが、 これを数値型に変換する方法はありますか? FileRead,t,wait.txt t+=100 ←計算できない Sleep,%t%
出来たけど?
94 :
92 :2008/08/30(土) 18:03:42 ID:fRFF7BSV0
95 :
72 :2008/08/31(日) 00:21:55 ID:3xhGk66Z0
>>80 気になったからやってみたら、ControlSendでできたけど・・・
これでいいんだよね?肝はコントロールのウィンドウハンドル。その取得は適当に変更して。
WinMenuSelectItem
sleep, 1000
;アクティブウィンドウがKompoZerでないなら終了
Winget, aaa, processName,A
if aaa != kompozer.exe
exitapp
;すべてのコントロールのウィンドウハンドルを取得し
;メニューバー等のコントロールのウィンドウハンドルを抜き出す。
Winget, bbb, ControlListHWND,A
stringsplit, bbb, bbb, `n
;msgbox, "%bbb%"`n"%bbb0%"`n"%bbb1%"
return
;WinTitleに「ahk_id %controlHWND%」というように
;コントロールのウィンドウハンドルを指定し、
;Control引数を省略することで、
;ウィンドウハンドルで指定してコントロールを操作
;ex1 File(Alt+F)を押す。
a::Controlsend,, !f,ahk_id %bbb1%
;ex2 ショートカットNew(Ctrl+N)
b::Controlsend,, ^n,ahk_id %bbb1%
;ex3 options
c::
Controlsend,, !t,ahk_id %bbb1%
Controlsend,, o,ahk_id %bbb1%
return
>>95 書き残したw
WinMenuSelectItemはメモ帳ぐらいしか効かないね。
スクリプトはSleeep,1000からね
書き残した?書き忘れただろ
っ!!!!!!!チッ 書き残し忘れたのを、書き残したんだっ それをあえて過去形のまま倒置して、尚かつ短いセンテンスで強く印象づけようとする高等なレトリックさ 他人のミスの誘い水にならないように 己のミスのフォローとしては世界最高峰だねorz
>>95 ありがとうございます。頂いたサンプル、動作確認しました。
Controlsendは、ウィンドウハンドルを指定すれば全角モードでも操れるんですね〜
ただ、私はかな入力なのですが、ControlSendした後に、なぜか全角英数入力モードに
なったり、ホットキーが2回続けて実行できなかったりと、KompoZerでは予期せぬ動作が
起きるようなので、やはりIMEをオフにして、適度にSleep入れながらAlt+●をSendで送る
方式でいこうと思います。
今回はすごく勉強になりました。ありがとうございました。
>>99 そりゃ残念。なんでだろう?問題ないけど。
AutoHotkeyが最新の1.0.47.06じゃなかったら自分で自分をビンタしてね。
>>100 1.0.47.04って書いてある罠…。ひ、ひぃ。
>>101 そして、頂いたスクリプトの動作率が上がった罠。
ひ、ひぃ〜。
重ね重ねありがとうございます。
二人の交換日記だな
AutoHotkeyでFTP接続する方法について質問です。
スクリプト自体は、本家から下記のサブルーチン郡をDLし、includeしました。
DllCall: Basic FTP Functions
http://www.autohotkey.com/forum/topic10393-15.html 下記のように修正し、1を押すと「C:\debug.txt」をFTPへアップするようにして実行してみました。
1::
; init internet resources
INetOpen()
; connection to the FTP server
Server=ftp.my_server.com
Port=21
User=abc
Pwd=defg
hFTP = INetConnect(Server, Port, User, Pwd, "ftp")
if(hFTP)
{
Msgbox Connect
if(FtpPutFile(hFTP, "C:\debug.txt"))
Msgbox File uploaded successfuly
else
Msgbox "Upload failed: " %A_LastError%
; close the FTP connection
INetCloseHandle(hFTP)
}
; release internet resources
INetClose()
しかし、一瞬で「connect」までスクリプトが進んでしまい、ネットワークへのアクセスがありません。
当然ファイルのアップも失敗します。どのへんを修正すれば正常に動きますでしょうか。
なお、動作してくれればこれ以外のスクリプトでもかまいません。OSはW2K、AHKは1.0.47.05です。
hFTP = INetConnect(Server, Port, User, Pwd, "ftp")
カレントウィンドウが変化したことを検知する方法って Loop or タイマでウィンドハンドルが変化するのを見る以外にある? OnCurrentWindowChange みたいな感じで使えればいいんだけど。。。 まぁ、ウィンドウ(プロセス)毎に自動で音量を変えたいだけなんだけどね。
WinWaitNotActive,A でアクティブウィンドウが変わるのを待つとかは? イベント発生するわけじゃないからループは必要だけど。 個人的には素直にタイマで回した方が楽だと思う
>>105 なんと!コロンが足りねぇ! できました。
どうやら、サブルーチン集の冒頭に書いてあったサンプルコードが、typoだったようです。
本当に気づかなかったので助かりました。
> WinWaitNotActive,A でアクティブウィンドウが変わるのを待つとかは? それもありか・・・。 以前のウィンドハンドルをグローバル変数で持たなくても良い分スマートかな。 どうせ処理処理の部分は変わらないし、ループでやるかね。 とりあえず、混ぜないで単品で作ろうっと。
一方ロシア人はFaderControllerを使った
ALT + tabの動作をCtrl + pに割り当てたいんだけど ただ置き換えただけじゃダメだったどうしたらいいか教えてくれ ALT押しっぱなしのままtabを何回も押したときの動作にならないんだ 二つのウィンドウ行ったりきたりするだけになる
>>111 Help にヒントが載ってる。AltTabのところ。
おれはAlt+Esc割りあててる。
114 :
106 :2008/09/02(火) 19:14:19 ID:uEGHqjL+0
>>110 じ、自分で作りたかっただけよ。
で、でも、便利だから使ってあげる。
FOON STAZIOの人がんばってね
「ねこぽい」というソフトにあった機能なんだが、 キーボードでウィンドウ動かすのって、どうやるの
WinMove
Alt+Space→M
#Persistent SetTimer,OnTimer,50 return OnTimer: Send,{z} return でゲームで連打が機能しないのはどこに原因がありますか? メモ帳だとzがずらずらと打たれるのですが。
そのゲームがnProtect使ってるんなら諦めるしかないと思う
ネトゲではない普通の同人ゲームです。
>>119 でZキー押し続けると連打機能し始めるんだけど何か挟まないとだめとか?
Send,{z down} Sleep,30 Send,{z up} とかやると動くかもよ。 反応の悪いゲームなんかでこうしてる。
>>116 TTBaseのプラグインでできるからそっちなら一発でできるよ
俺はWinキー+方向キーにわりあててる
ちなみにウインドウサイズまで変えられる
>>116 #Left::
WinGetPos,x,,,,A
WinMove,A,,x-20
Return
こんなのが過去ログにあった
#Left::WinMoveBy(-8,0) #Right::WinMoveBy(8,0) #Up::WinMoveBy(0,-8) #Down::WinMoveBy(0,8) WinMoveBy(dx, dy) { WinGetPos, x, y,,,A x := x + dx y := y + dy WinMove, A,, x, y }
おされだな
129 :
名無しさん@お腹いっぱい。 :2008/09/06(土) 16:24:13 ID:llNvK9em0
コマンドランチャーのようにブラウザの検索バーが使えれば便利化と思っております。 そこで、ホットキーでSleipnirの検索バーをアクティブにする、というようなことができる、 と聞いたのですが、どのようにすればできるでしょうか? 指針がヒントのようなものはありませんでしょうか?
Enterと;を入れ替えたいです。が、 ;::Enter がコメントとみなされて失敗します。どうすれば ; をRemapできますか? Enter::; なら動くんですが。
バルーンと同じ「見た目」「挙動」のGUIを作り、 閉じるイベントのみをオーバーライドして独自の処理を噛ませる
>>129 やりたいことがイマイチ分からんけど、ぷにるがアクティブなら、Alt+Sで検索バーにフォーカスするよ。
ん〜、
>>133 じゃ芸がないな
誤爆の危険があるけど、一応動く
#Persistent
TrayTip, ほげほげ, ふがふが, 10
WinWaitClose, ahk_class tooltips_class32
MsgBox, 閉じた
ありがとうございます。その方法で切り抜けられそうです。
137 :
名無しさん@お腹いっぱい。 :2008/09/06(土) 18:03:36 ID:llNvK9em0
>>134 サンクス。たぶんやりたいことは、
ホットキー押下→Sleipnirアクティブ→検索バーアクティブ(Alt+s)
でできそう。
ちょっとがんばってみるっす
138 :
129 :2008/09/06(土) 18:19:01 ID:llNvK9em0
>>134 これでいけた!やってみると以外に簡単でびっくり。
; active Sleipnir 2 at search bar
+^!g::
WinActivate ahk_class SleipnirMainWindow
Send, !s
return
#n:: WinMinimize, A と書いておいて 別にVirtualDimensionのMinimize to trayオプションで 最小化時にタスクトレイに入れる設定をしているのですが、 Win+Nではトレイに入らず普通に最小化されます。 最小化ボタンを押せばトレイに最小化されます。 Win+Nでもトレイに入るようにできますか?
140 :
129 :2008/09/06(土) 18:28:32 ID:llNvK9em0
応用で検索バーをアクティブにした時にあらかじめ、文字列を入れておきたいのですが、 Send, hoge とかでできるのですが、 IMEが起動していると全角を入力しようとします。 IME無視して、文字をペーストか、もしくはIME解除して文字入力はできないでしょうか?
142 :
129 :2008/09/06(土) 19:04:19 ID:llNvK9em0
sadat-studio.net - ダウンロード
http://sadat-studio.net/modules/mydownloads/viewcat.php?cid=3 こちらのIME制御スクリプトでIMEをオフにしてやってみました。
以下の例では、Sleipnir2の検索バーをアクティブにして、"mb "という文字列を挿入します
#include ime_func.ahk
; search my bookmark on Sleipnir 2 at search bar
+^!b::
WinActivate ahk_class SleipnirMainWindow
Send, !s
Sleep, 100
IME_OFF("A")
Send, mb{Space}
return
>>141 ありがとう。クリップボードを使う手もあるんですね。
なんか一昔前の自分を見てるようだ 一応、参考になりそうなの晒しとく #Include D:\AutoHotkey\IME_Func.ahk paraLen = %0% If paraLen = 0 { InputBox, sword, Web Search - 検索語句を入れてください。, , , 320, 90 If ErrorLevel <> 0 return } else { Loop, %paraLen% { buf := %a_index% sword = %sword% %buf% } } IfWinNotExist, ahk_class Sylera gecko tab browser Run, D:\Bin\Sylera\sylera.exe WinWait, ahk_class Sylera gecko tab browser IME_OFF("ahk_class Sylera gecko tab browser") SendMessage, 0, 204, 0, , ahk_class Sylera gecko tab browser ControlSetText, Edit5, %sword%, ahk_class Sylera gecko tab browser SendMessage, 0, 205, 0, , ahk_class Sylera gecko tab browser ControlSend, Combobox3, {1}, ahk_class Sylera gecko tab browser ControlSend, Combobox3, {Enter}, ahk_class Sylera gecko tab browser SendMessage, 0, 207, 0, , ahk_class Sylera gecko tab browser Return
メニューバーのコマンド項目がグレーアウトしてるか調べることはできますか? WinMenuSelectItemで実行してErrorLevelを調べてもダメでした
WinMenuSelectItemホントに使えねーな・・・
146 :
名無しさん@お腹いっぱい。 :2008/09/07(日) 08:54:53 ID:jPJuvg6k0
>>139 WinMinimizeを使わずに
PostMessage, 274, 61472, 0, , A
はどう?
>>139 ; 無変換 + N
~vk1Dsc07B & n::PostMessage, 0x112, 0xF020, , , A
俺はこれでやってる
~Ctrl:: CtrlCount = 1 Loop { Input, InputKey, T0.3 V L1 I, {LCtrl}{RCtrl} If ErrorLevel Contains Control CtrlCount ++ Else Break } If Not(ErrorLevel = "TimeOut" && CtrlCount > 1) Return MsgBox, %CtrlCount% Clicks Return テンキーのシングルタップとダブルタップで別のキーを送りたくて 流行らせるページのスレにあった上のをまんまパクって CtrlだけNumpadに入れ替えてやってみたんですけどうまく出来ませんでした。 テンキーでやるのは無理ですか?
どこも入替えてないように見えるんだが?
ちょっとMouseGesture.ahkを触ってみたけど、 マウ筋からの移行での一番の問題はツールチップの表示をどうするか。 MouseGesture.ahkは発動条件がマウ筋より多彩だから チップに何を表示させるかが難しいゆえに、ああいう仕様なんだろうね。 結局はマウ筋ライクなツールチップ表示にして落ち着いた。 何をしたいか確認してから発動させたいとなると、どうしてもこうなる。
初心者なのですがご教授願いたく…。 エンター押して0.5秒待ってまたエンター押して、というような動作はどう記述したらいいのでしょうか。 窓使いの憂鬱を使っていた時は Enter &Wait(500) Enter というふうに書いていたのですが、これと同じような事をAutoHotkeyでできたらいいな…と。
Send, {Enter} Sleep, 500 Send, {Enter} てか、mayu設定出来るくらいなら、マニュアルくらい読めるだろうに
>>152 thx
AutoHotkeyを流行らせるページを見たり、ぐぐってみたりしたんですがどうにも見つからなくて…。
「待機」とか「wait」でばっかり探していたのが失敗だったようで orz。
助かりました。
アンカー間違ってるし。
>>153 です orz。
GuiのListviewで、長文((数百文字)を入れたセルがいくつもあるとものすごく動作がもっさりするんですが、回避方法はないんでしょうか。 Core2Duoの3GHzあっても、スクロールがもたついてしまいます。
入れない
ウィンドウ指定で、 特定のソフトのComboBoxでのみ動作するようにするにはどうしたらいいでしょうか?
Control
>>159 ありがとうございます。
コントロールの指定はできたのですが、なぜかコマンドが実行されません。
Return::ControlSend ,.*ComboBoxEx32.*,{HOME} , タイトル,
z::ControlSend ,.*ComboBoxEx32.*,abc, タイトル,
ReturnでHOME、zでabcが入力される、はずなんですが、
どちらを押しても何の反応もなく、本来のReturnの動作、zの入力もされません。
書き方が間違っているのでしょうか?
>>151 どのようツールチップ表示したか教えてもらえませんか?
前に同じようなことを感じ挑戦したけど、設定編集からのツールチップ表示は
うまく動作せずあきらめていました。
>>161 結構適当だけどいいかな?AHK素人だから、まあ問題なく使えるねって程度。
条件的には、マウ筋と同等の使い方設定を面倒臭がらない文句言わないけなさない。
まず全部バックアップをとる。
AutoHotkey.exeごとmousgesture.ahk等と一緒に別フォルダで作業。
AutoHotkey.exeをMouseg.ahk.exeに改名複写して使うと人によって便利かも。
AutoHotkey.iniは#include MouseGesture.ahkで
MG_Config.ahkを見てるとマウスジェスチャを投げて、そこからウィンドウ判定してるみたい。
ツールチップでもそれと同じことをする。MouseGesture.iniを使い回すため後でComment.iniに改名コピー。
4方向モード専用の人は、後々大後悔をしないために設定で8方向モードにして斜めの広さは全部0にする。
ジェスチャ定義名は基本RB_4_のようにジェスチャ定義と同じにする。手間。iniでの例。2つ以上登録する人は知りません。
[RB_4_]
G=RB_4_
KIKI=Send, !{Left}
mousgesture.ahkのMG_ShowNavi:欄を書き換え。
適当だからプログラミングとしてあってるかわからない。
全部理解しながら読むのも面倒だしw
「MG_Is条件定義」、上例で言えばKIKI等の条件分岐は自分で手直し。手間。
MG_ShowNavi: if(!MG_Active && (A_TickCount>(MG_LastTime+MG_DGInterval+MG_WaitNext))){ Tooltip MG_Tooltip= }else{ if(MG_IsKIKI()){ IniRead, comm,%A_ScriptDir%\Comment.ini, %MG_Gesture%_,kiki, ;%MG_Gesture% tooltip, %comm% }else if(MG_Isnotepad()){ IniRead, comm,%A_ScriptDir%\Comment.ini, %MG_Gesture%_,notepad tooltip, %comm% }else if(MG_Isedge()){ IniRead, comm,%A_ScriptDir%\Comment.ini, %MG_Gesture%_,edge tooltip, %comm% } ;tooltip,%MG_Gesture%,0,0,20 comm = } return あと、mousgesture.ahkのコメント行の下に次の1,2行をそれぞれ足す。 ;全てのトリガが離された SetTimer,MG_ShowNavi,50 ;移動中にタイムアウト SetTimer,MG_ShowNavi,OFF tooltip MouseGesture.iniを使い回すためComment.iniに改名複写。 これで一応使えるけど、問題あるところはちょくちょく手直し。 難しいことはやってないから、だれでも理解できると思う。 修正求む。
まあ説明しなくてもわかると思うけど、 見づらいからするけど、 今入力中のジェスチャ文字列%MG_Gesture%(ツールチップのデフォルト) にボタンをどれか一つはなす。動作を加えた%MG_Gesture%_をセクション名にして Comment.iniからそれぞれのキー名を、一回一回読み込んでるだけ。 あと設定で、起動時からナビを有効にチェック。 マウ筋から移行の俺的には不便がないからいいけど、どうなんだろうね。 標準でついてるMG_Tooltipはただテキストをチップ表示するだけで、 それからジェスチャの続行はできなかった。と思う。
あ、、、exe化したスクリプトがノートン先生に削除された。。。 URLを引数に受け取って、iniに書いた正規表現に基づいてJaneだったり 火狐だったり、Boonだったりに振り分けるだけのやつなんだが。。。 ソーススクリプトから再コンパイルして、 exe単体をスキャンしたが「リスクなし」だとさ。 意味わかんねぇ。
まずノートンと言う名のウィルスを削除するんだ
つ ポチエスの正規表現版
168 :
151 :2008/09/13(土) 16:38:58 ID:Lkd0j4390
>>167 紹介サンクス。誰でも同じことは考えるわな。
でも、ノートンのログ見たらこれだけじゃなかったよ・・・
ちょっとしたのを集めたフォルダをPATH通してコマンドラインとか使ってるし
とりあえず除外フォルダにでもしとくかな。
てか除外ってウィルスだけだっけ・・・
Sleep 1000 してから PostMessage を非同期に行うことはできるでしょうか? PostMessage する前にある程度待つ必要があるのですが、 普通に書くと1秒間は連打ができないくなってしまうので Sleep と PostMessage をバックグラウンドで実行したいのですが。
タイマーがいいんでない?
無変換を押しながらホイールを回した時に、無変換を押している間中Altは押しっぱなしでホイ ールを1クリック回す毎にCtrl+Tabを送り、無変換を離すとAltを離すにはどの様に書けば良い でしょうか? Alt-Tab動作は下の様に書けばいける訳ですが、これにTabを送るときにCtrlを加えたいです。 vk1Dsc07B & WheelDown:: AltTab TaskSwicthXPというタスク切り替えソフト(Alt+Tab置き換え)を使っていて、Alt+Ctrl+Tab でWord等同じタスク内の複数開いているウインドウのみを表示して切り替えできるインスタンス スイッチという機能があり、Alt+Ctrl+TabでAlt-Tabのタスク切り替えの様に操作できるのです が、これを無変換+ホイールで操作したいのです。
コンビネーションキーについて教えてください。例えば、 A & B:: send, 1 とすると、A を押しながら B を押すと "1" が入力されます。しかし、 A & B Up:: send, 1 とすると、"b1" が入力されてしまいます。 Up を付けたい理由はキーリピートさせたくないからなのですが、 この問題を回避する方法はあるでしょうか。
>>173 一つ目に指定したキーが修飾キーとなり、一つ目のキーを押しながら二つ目のキーを押すと発動する。
一つ目のキー自体のもともとの機能は無効化される。
A & B up:: send, 1
a::send, a
使いにくいけどね。aがワンテンポ遅れてやってくる。
173ではaが無効化されてるだけ。
aを押してからbを押せば問題なし。押し順の問題。
>>174 おっしゃるとおり、このコンビネーションの例では "A" がモディファイヤになっており、
"A" を押しながら "B" を押すと "1" を返す、という操作を想定しているのですが、
なぜか "b1" が返ってきてしまうんです。
つまり "Up" を付けることで、修飾される側のキー "B" が修飾されずに同時に入力されてしまうのです。
これは (当方の環境では) "A" 単体にあたえられた機能によらず再現します。
いやー、問題ないけどね。 ずっとaを押してる?bを押してからa押しb離しってわけじゃねいよねw? OSは2000以降だよね? A & B up:: send, 1 上の一行だけのスクリプトでやっても? AHKは最新?
>>172 なんか難いね。とりあえず姑息なれど
~vk1D & WheelDown::
settimer, taskswitch
ifwinnotactive, ahk_class _As12__TaskSwitchXP_TaskSwitchWnd_
send, #{F11}
ifwinactive, ahk_class _As12__TaskSwitchXP_TaskSwitchWnd_
send, {TAB}
return
taskswitch:
KeyWait, vk1D
settimer, taskswitch, off
ifwinactive, ahk_class _As12__TaskSwitchXP_TaskSwitchWnd_
send, {Return}
return
>>176 ありがとうございます。1行スクリプト基本ですね、忘れていました。
当方でも問題なかったです。
OS は XP Pro SP3 で、AHK は 最新を使っています。
それで常駐スクリプトを部分的に順番にコメントアウトしていって、
結局 "#IfWinExist" の部分があると上手く作動しない事がわかりました。
この部分のスクリプトとコンフリクトしていそうなので、もうちょっと調べてみます。
丁寧な対応、ありがとうございました。
詳細がわかりましたら、ここでフィードバックさせていただきます。
このソフトのスクリプトを勉強したいのですが、何とググったら学べるでしょうか。
ちなみにですが、やりたい事は何かのキーを押すと左クリック、1秒後に右クリックです。
>>2 は私には高度すぎて、理解が出来ません。
文系のアホにも初歩から学べるところかありましたら、どうぞ教えて下さい。
>>179 ヒントは
>>152-154 あたり。
お作法はやはりマニュアルを読まなきゃ分からんが、全部読む必要はない。
学校の勉強と違って覚える必要はないので、軽く斜め読みすればよい。
Hotkeysあたりは手を動かしながら読んだ方がいいかも。
ま、結局は
>>179 の文中にある事を単にスクリプト言語に変えるだけなんだけど。
何かのキーを押すと::
左クリック
1秒後に
右クリック
AutoHotkeyを流行らせるBBS でも質問をしたのですが、返信がありませんでしたので、 こちらにも質問をさせていただきます。 sc07B & m::send,{Blind}{Down} sc07B & i::send,{Blind}{Up} sc07B & j::send,{Blind}{Left} sc07B & k::send,{Blind}{Right} sc07B::Send,{sc07B} といいますように、無変換キー+○○で、 ダイヤモンドキーを実装させています。 ここで、 無変換キー単打→無変換 無変換キー長押し→動作なし というようにキーを割り当てられないでしょうか? カーソルを動かそうと思ったけれどやっぱり止めた、 などと言うときに無変換キーが押されては不便ですので。 同時に、無変換キーはよく使いますので単純に無効にはしたくありません。 お力を貸していただけますと本当に助かります。 よろしくお願いします。
俺もその使い方が便利で使ってるけど、単独で動作するコマンドはないと思う。 gosubで飛ばして、そこで長押しかどうかを判別して分岐させている。
>>181 どうもありがとうございます。
まずは簡単な事から出来る限り頑張ってみようと思います。
>>183 Gosub ですか?
AutoHotkeyを流行らせるページで調べてみましたが、
どう書けばいいのか分かりませんでした。
詳しく教えていただけますとうれしいです。
押し下げで、変数に押し始めの時刻を覚えておいて、 押し上げで、現在時刻-さっきの変数>閾値 の判定をすればいいんでない
>>185 ちがうよ。長押しを検出するコードをユーザー定義関数で別枠で作って、
キーが押されたら、そこへgosubなりで定義関数なりで飛ばすと言うこと。
たとえば俺の場合は、0.3秒(300msec)以上押されたときに別の機能を
割り当てるため、nagaosiファンクションを作ってる。
if nagaosi(A_ThisHotkey,300)=1
send,長押しされたときのコマンド
else
みじか押ししたときに処理する内容
として呼び出す。A_ThisHotkeyをつかえば、押されるキーが変わっても
まるごとコードを流用するだけで動作する。
ちなみに、これコピペしただけじゃ動かないからね。
必要な情報は、はやらせるページに全部載ってる。
こういうパターンを多用するならmayuの方が向いてるけどね・・・ One Shot モディファイアの定義で一発なんだが。 Vistaは後継ってか傍系のmodoka(シェアウェア)になるけど。。
modokaってなんだよ・・・「のどか(nodoka)」な。
>>187 ありがとうございます。
ただ、A_ThisHotkey の使い方などを中心に小一時間ほど調べましたが、
やはり、うまく動作させることが出来ませんでした。
さらに詳しく教えていただけますと助かります。
どうぞ、よろしくお願いします。
>>188 ええ、先月までは mayu で同様の動作をさせていました。
ただ、もうすぐ Vista に移行しようと考えていますので、
mayu ではなく、AHk を使い始めました。
>>190 動かないコードを丸ごとここに書けば、誰かが修正してくれるよ。
その時点で、あなたがどこまで努力してるかも同時にわかるけど
>>191 sc07B::
if nagaosi(A_ThisHotkey,300)=1
return
else
Send,{sc07B}
return
と書いたところ、
if nagaosi(A_ThisHotkey,300)=1
でエラーが出ました。
sc07B::
if (A_ThisHotkey,300)=1
return
else
Send,{sc07B}
return
と書きますと、エラーは吐きませんが、
sc07B::Send,{sc07B}
と同じ動作になってしまいます。
sc07B::gosub, nagaosi と if の前に書いてもエラーが出ました。
>>191 nagaosi 関数を自分でつくらなきゃ
>>193 のとおり、そのままじゃ動かないよ。
ってかコピペしても動かないよって書いてたんだけど。
俺のコードはスパゲッティ状態だから、長押しの認識に特化したシンプルな
コードがどっかにあるといいんだけど。
あー、長押し関数を自分で書かないといけないんですね。 なるほど、ふりだしに戻る。 AutoHotkeyを流行らせるページ内を「長押し」で検索しても何も引っかかりませんでしたし、 ちょっとお手上げのようです。
「ある長押ししたかどうか」ってどうやって判断する? それが分かればコード書けると思うけどな。
ちょっと作ってみた。あんまり便利じゃないかも。 /* 1 of 2 */ /** * 指定のキーの長押しの設定を行う。 * "Hotkey"コマンドでのキー設定なので、"Hotkey, IfWinExist,..."等が利用可能(なはず) * * @param keyName - 設定対象キー名 * @param delay - 長押しと判断する経過時間(ms) * @param actType - key:キー押下発行, sub:関数呼び出し, その他:何もしない * @param action - 長押ししたときに動作するサブルーチン名 or キー名 * * サブルーチン "LongKeyPressStart", "LongKeyPressEnd"に依存 */ InitLongKeyPress(keyName, delay, actType, action) { global longKeyPressDelay_%keyName% := delay longKeyPressActType_%keyName% := actType longKeyPressAction_%keyName% := action Hotkey, %keyName%, LongKeyPressStart, On Hotkey, %keyName% up, LongKeyPressEnd, On }
/* 2 of 2 */ ; キー押下時のシステム時刻をキー毎に記録する LongKeyPressStart: if (!(longKeyPressKeyDown_%A_ThisHotkey% > 0)) { longKeyPressKeyDown_%A_ThisHotkey% := A_TickCount } return ; キー押下中の経過時間を取得し、設定に基づき動作する。(キー名は" up"を取り除く) LongKeyPressEnd: StringTrimRight, longKeyPressKeyName, A_ThisHotkey, 3 if (A_TickCount - longKeyPressKeyDown_%longKeyPressKeyName% > longKeyPressDelay_%longKeyPressKeyName%) { longKeyPressAction := longKeyPressAction_%longKeyPressKeyName% longKeyPressActType := longKeyPressActType_%longKeyPressKeyName% if (longKeyPressActType = "key") Send, {%longKeyPressAction%} else if (longKeyPressActType = "sub") Gosub, %longKeyPressAction% } else Send, {%longKeyPressKeyName%} longKeyPressKeyDown_%longKeyPressKeyName% := -1 return
>>198-199 を利用したサンプル
#SingleInstance
; (サンプル) Deleteキー長押し時に"Backspace"キーを発行
InitLongKeyPress("Delete", 500, "key", "Backspace")
; (サンプル) Insertキー長押し時にサブルーチン"InsertLongPress"を実行
InitLongKeyPress("Insert", 500, "sub", "InsertLongPress")
return
; (サンプル)Insert長押し時の動作用
InsertLongPress:
MsgBox, 長押し
return
>>177 ありがと。ちょっと思い通りに動かなかったけど、確かにキー押しっぱなしじゃなくても
ウインドウを閉じない#{F11}でTaskSwithXPを呼び出して、{Enter}で選択という処理を
させるという道もあるね。
しかし、TaskSwitchXPに限らず、WindowsXPのAlt-Tabも、タスク選択ウインドウ表示中
は特殊なキーフックするのかなぁ。なんかAutoHotKeyからのsendじゃAlt操作を受け付
けない感じ。
Alt+Tabの場合、単純に下の様に書いてもいけそうな気がするんだけど、無変換+ホイー
ルでタスク選択ウインドウを呼び出すと、無変換離してもAltUpしてくれなくてタスク切り替
えウインドウ閉じない。
で、その状態でAlt押せば(つまり強制的にキーボードでAltUpを送れば)TaskSwithXPだと
ちゃんとタスク切り替わってTask選択ウインドウも閉じるんだけど、Windows標準に至って
は、アクティブウインドウは選択どおり切り替わるがタスク選択ウインドウが出っぱなしという
始末。
vk1Dsc07B & WheelDown:: send,{AltDown}{Tab}
vk1Dsc07B Up::{AltUp}
202 :
201 :2008/09/15(月) 01:33:34 ID:6GeUu12j0
間違えた。これでもダメ。 vk1Dsc07B & WheelDown:: send,{AltDown}{Tab} vk1Dsc07BUp:: send,{AltUp}
>>198-199 最初にファンクションで飛んで、その引数でさらにgosubへ飛ぶのか。
これは思いつかなかった。参考になったよ。
スクリプト実行中のカーソルの形状を変えたいと思い下のコードを先頭に加えてみました。 Typeは5046、ErrorLevelは両方0なのでうまくいっているとしか思えないのですが 全く変化がありません。 どこがまちがっているのでしょうか。 Type := DllCall("user32.dll\LoadCursor","Int", 0,"Int", 32514, "Int") DllCall("user32.dll\SetCursor","Int", %Type%)
>>204 間違えました
DllCall("user32.dll\SetCursor","Int", Type)
です(結果は同じなんですが)
無変換長押し時って気になって自分なりにやってみたけど。 結局keywaitで待たなきゃダメなんかな。 sc07B & mとかのコンビネーションキーがあったら、Up時に発動するんだね。 あたりまえだけど。 111: keywait, sc07B, D aaa:= A_TickCount keywait, sc07B bbb:=A_TickCount ccc:=bbb-aaa ht := A_TimeSinceThisHotkey ;無変換を押されてから指定ミリ秒経てたら(長押し時)無変換なしなど if (ccc > 200){ goto,111 } ;無変換押下でホットキーを押されたら無変換なし if (ccc > ht && ht != -1) goto,111 ;他は無変換を送る else send, {vk1Dsc07B} goto,111 sc07B & m::send,{Blind}{Down} sc07B & i::send,{Blind}{Up} sc07B & j::send,{Blind}{Left} sc07B & k::send,{Blind}{Right}
207 :
206 :2008/09/15(月) 12:58:58 ID:ybzwO8GG0
ああ、別のスクリプトで実行すればいいのか?
>>198-200 を参考にして初めて関数使って作ってみた。
関数の勉強になったし、Libフォルダの存在も知っただけでも良しとしよう。
a::LongKeyPress("a",500)
;keyNmaeとactionは""
LongKeyPress(keyName,delay,action=0){
aaa:= A_TickCount
keywait, %keyName%
bbb:=A_TickCount
ccc:=bbb-aaa
ht := A_TimeSinceThisHotkey
;msgbox, "%keyName%"%ccc%=(%bbb%-%aaa%)>%ht%---%delay%
;%keyName%を押されてから%delay%ミリ秒たったら%action%:へ(第3引数省略時は無効)
if (ccc > delay){
if action = 0
return
if action != 0
Hotkey, %keyName%,off
gosub, %action%
Hotkey, %keyName%,on
return
}
;%keyName%押下でその他ホットキーを押されたら無効
if (ccc > ht && ht != -1)
return
;その他は%keyName%を送る
else
Hotkey, %keyName%,off
send, {%keyName%} ;{vk1Dsc07B}
Hotkey, %keyName%,on
return
}
208 :
182 :2008/09/15(月) 13:30:46 ID:xAi6wlET0
>>206 ありがとうございます。
望むとおりの動作を確認しました。
>>207 の方はコピペでは動かなさそうですね。
あとで読ませていただきます。
感謝です。
>>181 こんな初歩的な事はどうでも良いと思うのですが、一応結果報告です。
LShift::
Send, {LButton}
Sleep, 1000
Send, {RButton}
こんな事でさえ試行錯誤でしたが、何とか出来ました、どうもありがとうございました。
>>205 SetSystemCursorで変更はできるよ。
;標準を砂時計へ
Type := DllCall("user32.dll\LoadCursor","Int", 0,"Int", 32514,"Int")
DllCall("user32.dll\SetSystemCursor","Int", Type,"Int", 32512)
リマップで a:: b と書くのと、ホットキーで a:: Send, b と書くのはどう違うんでしょうか? 特定のアプリがアクティブなときだけ 「Ctrl+g => F3」、「Shift+Ctrl+g => Shift+F3」 をしたいのですが、 ^g:: F3 だとダメで ^g:: Send, {F3} +^g:: Send, +{F3} だとOKでした。 あとこれは ShiftなしとShiftありを別々に書くしかないですか? リマップなら1行でいけるんじゃないかと思ったんですが・・・
>>210 ありがとうございます、うまくいきました。
2ちゃんねるで質問して解決に至ったのは初めてなので、とてもうれしいです。
以下が完成したものです。
;カーソルファイルのパス取得
RegRead, Path, HKEY_CURRENT_USER, Control Panel\Cursors, Wait
if(Path = null)
;デフォルトの場合
Type := DllCall("user32.dll\LoadCursor","Int", 0,"Int", 32514,"Int")
else
Type := DllCall("user32.dll\LoadCursorFromFile","Str", Path, "Int")
DllCall("user32.dll\SetSystemCursor","Int", Type,"Int", 32512)
;処理終了後元に戻す
RegRead, Path, HKEY_CURRENT_USER, Control Panel\Cursors, Arrow
if(Path = null)
Type := DllCall("user32.dll\LoadCursor","Int", 0,"Int", 32512,"Int")
else
Type := DllCall("user32.dll\LoadCursorFromFile","Str", Path, "Int")
DllCall("user32.dll\SetSystemCursor","Int", Type,"Int", 32512)
>>211 マニュアル読め。
質問事項は全部書いてある。
214 :
161 :2008/09/16(火) 15:35:55 ID:J3g28V/j0
>151 返事が遅くなりましたが、ありがとうございました。 ご参考にさせて頂き、これからいじってみます。
;; googleで検索
#g::
clipboard=
Send,^c
ClipWait
SetEnv,word,%clipboard%
Run,
http://www.google.co.jp/search?hl=ja&q=%word% return
このスクリプトを文字列を選択していない状態で実行すると、その後文字列を選択して実行しようとしても実行できず、
クリップボードに文字列が送られたときに実行されることがあります。
ClipWaitのところで止まっているせいだと思うのですが、文字列が選択されていない状態で実行した場合にはこの
スクリプトを実行しないようにできないでしょうか?
ClipboardAllでいったん退避 それと比較して変化無しならReturn
>>216 自分も、そこで躓いて・・只今 プランBで模索中。
読み換え、よろしく。
clipboard := ""
Send,^c
ClipWait,0.01 ; 0.01秒 コピーされず時間経過「1」、されれば「0」をErrorLevelに返す
if(ErrorLevel == 1){
Send, {ALTDOWN}{TAB}{ALTUP}
return
}
word := clipboard
run,C:\Program Files\DDWin\ddwin.exe `,2`,グループ01`,1`, %word%
return
>>217 横からですが、自分も試させていただきます。 謝謝
Ahk2Exe.exeで作成したファイルを配布したいと思ってますが、 ファイルのプロパティのバージョン情報のタブの情報 (ファイル バージョン、説明、著作権、正式ファイル名等) を設定する方法は無いのでしょうか
>>217-218 ありがとうございます。リファレンスも参考にしてこんな感じにしてみました。
;; EBWinで検索
#s::
clipboard = ; Empty the clipboard
Send, ^c
ClipWait, 0.01
if ErrorLevel <> 0
{
return
}
SetEnv,word,%clipboard%
Run, C:\applications\EBWin\EBWin.exe /C=1 /S=%word%
return
221 :
201 :2008/09/17(水) 07:08:24 ID:hwOw0VfTO
>>177 けっきょくAlt+Shift+Tabは断念。
書いて貰ったのを少し手直ししたらいけました。
Alt+ホイールでAltTab、無変換+ホイールでインスタンススイッチにして快適快適。
ありがとうございました。
vk1D & WheelDown::
settimer, taskswitch
ifwinnotactive, ahk_class _As12__TaskSwitchXP_TaskSwitchWnd_
send, #{F11}
ifwinactive, ahk_class _As12__TaskSwitchXP_TaskSwitchWnd_
send, {TAB}
return
taskswitch:
KeyWait, vk1DUP
settimer, taskswitch, off
ifwinactive, ahk_class _As12__TaskSwitchXP_TaskSwitchWnd_
send, {Return}
return
222 :
221 :2008/09/18(木) 00:45:41 ID:NYYvg/1O0
と思ったが、下のでAlt+Ctrl+Tabいけるね。勉強になります。 vk1Dsc07B & WheelDown:: settimer, release send, {AltDown}^{Tab} return release: KeyWait, vk1Dsc07B Up settimer, release, off send, {AltUp} return
キーバインディングソフトを探してAutoHotkeyにたどり着きました。 初歩的な質問なのですがお願いします。 1,独自のキーボードドライバをインストして使うソフトでしょうか? 2,日本語の解説ページを呼んで、特定のアプリ実行時だけキーの置き換えなどが出来ることは分かるのですが、 複数のソフトに対して、それぞれ独自のキーマッピングはできますでしょうか? 1が不明なため、まだインストしていない段階で申し訳ないですが、よろしくお願いします。
1: 違う。exeが動くだけ。動かすだけなら管理者権限も要らない(はず) 2: 「複数のソフトに対して」というのが、「現在のアクティブウィンドウが何かを判別して」と言う意味なら、できる。 ちなみに、CapsLockは無理。 レジストリ変更か、ドライバレベルのremapソフトが必要。
>>224 どうもありがとうございます。
おかげで目的がこのソフトで果たせそうだとわかりました。
ありがとうございました。
>>224 そういえば漏れこのソフトをadminで起動したこと一度もないけど何の問題もないw
IME制御って、ATOKとかでも有効なの?
Guiにhtmlファイルを表示させたいのですが、AHKでhtmlを展開(?)することはできるのでしょうか。 <br>とかタグを含んだままテキストを表示するならLabelとして貼り付ければいいんですが、 WindowsかIEだかの機能を利用してこれをhtmlとして表示することはできるのでしょうか。
Ctrl+Alt/Shift+カーソルでウィンドウの移動とリサイズできるコードをどなたかお願いします。
ここってスクリプト作成依頼スレだったっけ?
前者は、
>>127 のキーバインド変えればできるだろ
後者は、
>>127 パクった関数作って WinSet 使えばすぐだと思う。
>>229 できた!
でもこのIEControl.ahk、55行目の「Ret」でエラー吐くのですが、Returnのミスですかね。
Returnに書き換えたら動きましたけど。
表現の幅が増えそうです。ありがとうございました。
質問です。以下のスクリプトを作成しましたがうまく動きません。
やりたい事は、gvimで ^s を二連打するとgvimに ^s というキーを二回送ってからFirefoxをリロードすることです。
何がうまくいかないかというと、gvim側で
nmap <C-s><C-s> :<C-u>w<CR>
と設定することで ^s 二度続けて押すとファイルが保存されるようにしてあるんですが、
下記のスクリプトを実行中だとgvimにちゃんとControlSendされず、結果としてファイルが保存されずにFirefoxがリロードされてしまいます。
ちなみにFirefoxなど他のアプリのWindowで ^s を押すとちゃんとControlSendされているようです。
どんな原因が考えられるでしょうか?
よろしくお願いします。
;好きなエディタで保存と同時にFirefoxをリロードするAHKスクリプト - AUSGANG SOFT
;
http://a-h.parfe.jp/einfach/archives/2007/0126190912.html ^s::
WinGet, active,,A
ControlSend,,^s, ahk_id %active%
ReloadFirefox(300)
return
ReloadFirefox(timeout){
if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < timeout){
IfWinActive ahk_class Vim
{
SetTitleMatchMode, 2
WinGet, Fx,, Firefox
ControlSend,, {F5}, ahk_id %Fx%
WinActivate, ahk_id %Fx%
}
Sleep, 500
}
}
235 :
168 :2008/09/19(金) 00:33:12 ID:S3G8uTqP0
mayuと同じ設定にしようとがんばってるけど、 やればやるほどmayuが良くできてると感心しつつ挫折。
mayuは設定を、ahkは処理を書く
昔流行らせるページにあったSandSのスクリプトで、単独でスペースを押していないに ごくたまにスペースが入ってしまうんだけど、何か良い対処法ってありませんか?
ブラウザー表示部のテキストを取得できないかな
きちんとやるなら、ブラウザ(レンダリングエンジン)のDOMパーサを使わんと無理じゃなかろうか。 Trident(IE)ならWSH、 FireFox(Gecko)なら Javascript Actions とかを呼び出したほうが良さげ。
241 :
名無しさん@お腹いっぱい。 :2008/09/20(土) 10:14:52 ID:QnMh+Lju0
選択しているアイコンのファイルパスを取得するにはどうしたらいいでしょうか? このファイルは秀丸で開くとか、ショートカットキーから特定のアプリにファイルパスを渡したいのですが、
エクスプローラーの話なら アドレスバーからフォルダーパス ControlでListから選択ファイル名でいけるお
>>240 thx
ちょっと高度な技術がいるのか
勉強してみるか
>>242 241ではないが、同じことをしたいと思ってた。
ヘルプのどこを読めばわかるか、もうちょっと詳しく教えてplz
>>241 ,244
前に似たようなことを書いたような気もするけど、
適当なサンプル。
SetTitleMatchMode, RegEx
SetEnv, exp, ahk_class (Explore|Cabinet)WClass
WinGetTitle, dir, %exp%
ControlGet, item, List, Selected Col1, SysListView321, %exp%
Loop, Parse, item, `n
{
SetEnv, fullpath%A_Index%, %dir%\%A_LoopField%
SetEnv, num, %A_Index%
}
Loop, %num%
{
str := str . fullpath%A_Index% . "`n"
}
MsgBox, %str%
246 :
245 :2008/09/20(土) 18:09:15 ID:bqtD+XDc0
補足
このサンプルだと、エクスプローラのタイトルバーにフルパスを表示しておかないとダメ。
>>242 のようにアドレスバーから持ってきたほうが良いのかも。
マイドキュメントみたいに実パスが出ないのも×
メモ帳の開いているファイル名を取得する方法みたいに、メモリを直接参照すれば
いけるやり方もあるのかもしれない。
247 :
244 :2008/09/20(土) 19:22:33 ID:ugO8vtjn0
できた。Vista用 explorer_selectedfilepath() { controlget currentdirectory, line, 1, Edit1, A controlget selectedfilename, list, selected col1, SysListView321, A if (substr(currentdirectory, -1) != ":\") { currentdirectory .= "\" } return currentdirectory . selectedfilename }
>>245-246 おっと、かぶったね。ありがとう。
>
>>242 のようにアドレスバーから持ってきたほうが良いのかも。
> マイドキュメントみたいに実パスが出ないのも×
たしかに。。。
俺のはアドレスバーから持ってきてるけど、やっぱデスクトップは「デスクトップ\」になる罠。
でもデスクトップに作ったフォルダの中ならちゃんと「C:\Users\ユーザ名\Desktop\フォルダ名」になるし、
まあ運用上は問題ないかな。
気になる人がいたら改良してくれ ノシ
249 :
244 :2008/09/20(土) 19:47:22 ID:ugO8vtjn0
だめだ、247は複数選択を考えてなかった orx #IfWinActive ahk_class CabinetWClass +Enter:: explorer_openwith("C:\Program Files\Hidemaru\Hidemaru.exe") #IfWinActive explorer_openwith(exepath) { controlget currentdirectory, line, 1, Edit1, A if (substr(currentdirectory, -1) != ":\") { currentdirectory .= "\" } controlget selectedfilename, list, selected col1, SysListView321, A loop parse, selectedfilename, `n { run % """" . exepath . """ """ . currentdirectory . A_LoopField . """" } }
250 :
241 :2008/09/20(土) 20:23:31 ID:QnMh+Lju0
参考になりました。 みなさんのお答えと重複しますが、以下のようにして XPで無変換+eで選択ファイルを秀丸で起動できました。ありがとうございます ~vk1Dsc07B & e:: controlget currentdirectory, line, 1, Edit1, A controlget selectedfilename, list, selected col1, SysListView321, A if (currentdirectory == "") { currentdirectory = C:\Documents and Settings\UserName\デスクトップ } if (substr(currentdirectory, -1) != ":\") { currentdirectory .= "\" } run,C:\Program Files\Hidemaru\Hidemaru.exe %currentdirectory%%selectedfilename% return
>>239 開いてるURLがわかるなら、URLDownloadToFileが使えないかな?
スレッドの更新チェックに使ってるけど結構便利なコマンドだ。
Ctrl+C押してClipboard見ればテキストでパスを得られるんじゃ
みんなけっこう悩んでるね。俺は原始的に ブラウザ(IE、FireFoxともにOK) F6→ctrlC→クリップボード見る Explorer F2→ctrlC→ESC→クリップボード見る でやってて、ほぼ問題なく動いてるけど、なんか逃げてる気がするので、 確実に取り込める方法があったらぜひ知りたい
ウインドウ内の特定のボタン、たとえばExplorerの「上へ」を押すには、どう書けばいいでしょうか。 WinGet, ControlList, ControlList, A 上記コードを実行して、「上へ」を含むControlが「toolbarwindow322」というものに 入っているところまでは、なんとか調べられたのですが、 ・そのtoolbarwindow322の「上へ」が該当する送信場所を調べかた ・調べたボタンを押したと認識させる方法 が、自分では理解を超えてしまいました。どう書いたらよいでしょうか。 ベースサンプル: ;(テンキーの1を押したら、アクティブウインドウのExplorerの「上へ」を押す) Numpad1:: WinGet, ControlList, ControlList, A msgbox,コントロール一覧`nControlList=%ControlList% ;(追加でコードをここに書く) msgbox,押したよ return
migemo-isearch便利に使わせていただいているのですが、BackSpaceを押したままにすると「find_text failed: 0x80004005」 というエラーが出てAHK自体が固まってしまうようです。 この現象を防止することはできないでしょうか?
>>254 直接ショートカットキーで操作できるやつはショートカットキーを送る、その他はメニューバーからショートカットキー使って順にメニュー選択する、じゃダメなの?
ちなみに余談だが、もしUSBテンキーから操作するならMagicKeyPadおすすめ。
テンキー複数つないでも個別に認識できる。
俺はAHKと組み合わせて使ってる。
>>257 >ちなみに余談だが、もしUSBテンキーから操作するならMagicKeyPadおすすめ。
>テンキー複数つないでも個別に認識できる。
うちのUSBテンキー、公式のドライバ入れたらキーが完全にプログラム生成タイプになるんで、
if(GetKeyState(A_ThisHotKey,"P"))で分岐できちゃうからAHKだけで完結してるよ。
複数のUSBテンキー認識とか同時押しとかはちょっと無理っぽいけど、
マウスの移動とクリックしか割り当ててないのでこれで十分。
259 :
254 :2008/09/21(日) 15:57:45 ID:rE+PWq7+0
>>254 ですが、明け方まで作業していたせいで、全然違う質問をしていました。
>ウインドウ内の特定のボタン、たとえばExplorerの「上へ」を押すには
じゃなくて、知りたいのは
>ウインドウ内の特定のボタン、たとえばExplorerの「上へ」が押されたかを調べるには
でした。その趣旨で出てきた質問が
>・そのtoolbarwindow322の「上へ」が該当する送信場所を調べかた
>・調べたボタンを押したと認識させる方法
につながります。せっかく答えていただいた方、ほんと申し訳ないです。
やりたいことをもっと具体的に書くと、
LButton:: で左クリを監視しておき、押したボタンが「上へ」のときに
パンくずリストをGUIで表示させ、Vistaみたいに複数階層を飛び越して
戻れるようなインターフェースを考えています。
「上へ」以外が押された際は、通常通りLButtonを送るコードを実行して終わります。
パンくずリストの作成と、GUIの表示は問題なく出来ますので、
あとは「上へ」が押されたかどうかを判別する方法を知りたくて。
ではよろしくお願いします。
>>259 そこそこ作りこんでいるようなので、どうせなら完成させて公開してもらいたいけど、
とりあえずVistaのような機能を取り込みたいだけなら、
QTAddressBarをインストールしたらどうか。
QTAddressBarは便利だったけど結局アンインスコしたなぁ。
理由は、フルパスを表示する設定にしているアドレスバーを見て
色々と動くAHKスクリプトが動かんから。
俺も
>>261 のが出来たら使ってみたいな。
出来れば、表示フォントが変えられるとうれしい。
ま、無理ならgdi++使うけど。。。
自分の Shift & Space はこれ。 Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 200 ? " " : "") +Space:: Send, +{Space} >+Space:: Return Space:: RShift
CoordMode, Pixel, Screen CoordMode, Mouse, Screen MouseGetPos, MGPX, MGPY PixelGetColor, PGCRGB, %MGPX%, %MGPY%, RGB StringMid, DN1, PGCRGB, 3, 2 StringMid, DN2, PGCRGB, 5, 2 StringMid, DN3, PGCRGB, 7, 2 SetEnv, DN1, 0x%DN1% SetEnv, DN2, 0x%DN2% SetEnv, DN3, 0x%DN3% SetFormat, INTEGER, D DN1 := DN1+0x0 DN2 := DN2+0x0 DN3 := DN3+0x0 MsgBox, RGB : %PGCRGB% `n10進数 : %DN1% %DN2% %DN3% こんな感じに作ったんですけど 演算を中継しなくても16進数から10進数に変換する方法ありますか?
>>264 そうだ今はRemapがあるんだった。今日一日助長なコードとにらめっこしてた自分アホス
?の条件演算子での値導入はif文使うよりスマートだね。if文ばかり使っちゃうけど行短縮できていいかも
dn1 := PGCRGB // 0x10000 dn2 := (PGCRGB // 0x100) & 0x00FF dn3 := PGCRGB & 0x0000FF
268 :
264 :2008/09/22(月) 00:11:23 ID:o1Epe13d0
ちなみに IME 起動はこれ。当方101キー配列で、CapsLock を IME 起動に割りあててる。 2 回押しでオン、1 回押しでオフ。 ワンキーだけどトグルでないので、より明示的でインジケーター等なくてもあまり間違えない。 SC79:: Ime(DoubleKey()) Ime(value) { DetectHiddenWindows, On SendMessage, 0x283,0x006, value,, % "ahk_id " . DllCall("imm32\ImmGetDefaultIMEWnd", UInt, WinActive("A"), UInt) DetectHiddenWindows, Off } DoubleKey() { Return, A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey > 50 and A_TimeSincePriorHotkey < 250 }
>>267 ややや、これは凄い
こんなやり方あったんですね勉強します
ありがとう
>>268 キーを打ち込む前に必ずIME ON or OFFする癖が付いてるってことなのかな。
自分はONにしたまま別のウィンドウ操作しに行っちゃって
戻ってきた時にONになってるの忘れてそのまま打ち込んでアウチってなる。
しかし日本語OSでも101キーだと CapsLockもフックかけられるのか、知らんかった。
>>263 のIMEの関数に絡めてこんなの作った。
誤作動しても知らんけど
IMEOFFでの誤入力のなんちゃて救済F12キー
IMEONでは今まで通り^tで対応。
start:
gosub, hiskey
sleep, 100
goto, start
hiskey:
IMEmode := IME_GET()
if IMEmode = 1
return
Input, hiskey,L20 T7 V, {F12}{Enter}{TAB}{UP}{DOWN}{LEFT}{RIGHT}{LShift}{RShift}{RButton}{LButton}
stringLen, hiskeylen, hiskey
if Errorlevel = ENDKey:F12
{
send, {BS %hiskeylen%}
sleep,100
send, {vkF3sc029}
send, %hiskey%
}
return
ESC::ExitApp
#ESC::Suspend
^q::
Suspend, OFF
Reload
272 :
271 :2008/09/22(月) 01:36:57 ID:fvCJxQRO0
最後のホットキーはほっといて、 スクリプト作成に使ってたw if Errorlevel = ENDKey:F12 { stringLen, hiskeylen, hiskey send, {BS %hiskeylen%} こう変えたほうが自然だね。あとsleepはいらないと思うけど、一応。 使うなら動作するアプリを制限したほうが良いかも。
273 :
271 :2008/09/22(月) 01:53:56 ID:fvCJxQRO0
inputの終了キーに{Space}は入れたほうが良かった。他もろもろ。 send, {BS %hiskeylen%}{vkF3sc029}%hiskey% Sendは一行に纏めて問題ないかも。 今度からちゃんと見直してから書き込むわorz
UnicodeなテキストをFileReadで変数に読み込み、その変数をShiftJISに直したいです。
クリップボードを経由して変換する方法が「流行らせるページ」で紹介されています。
http://lukewarm.s101.xrea.com/commands/Transform.htm が、ファイルを連続処理する用途で使うと、クリップボードの競合が出てしまい、
フォアグラウンドの作業で使っているクリップボードの内容が破壊されてしまいます。
直前に、クリップボードの控えをコピーし、変換が終わったら書き戻す方法で試しましたが、
それでもミスがでてしまいます。
クリップボードを経由しないで、unicode-shift-jis変換する方法はないでしょうか。
nkf
Sendでショートカットキー入力させるのがうまくいかなかったけど文字を小文字にしたらあっさりできた 流行らせるページにはそのこと書いてなかったけどこれって常識なのか
少し考えれば分かるよ
279 :
270 :2008/09/23(火) 21:44:09 ID:0noHxrPe0
>>271 試してみたけど意外と面白い。自分が使うとするとこんな感じかな。
autoexecute_section:
SetTimer,HistoryKeysTimer,ON
return
HistoryKeysTimer:
Input, hiskey,L20 T7 V, {F12}{Enter}{TAB}{UP}{DOWN}{LEFT}{RIGHT}{LShift}{RShift}{RButton}{LButton}{Space}
if (Errorlevel = "ENDKey:F12") & GetKeyState("CTRL","P") ; [Ctrl]+[F12]で発動
{
IME_SET(~IME_GET() &0x01) ;IMEトグル(キーバインド変えてるので[半/全]以外でも使えるように)
send, {BS strlen(hiskey)}%hiskey%
}
return
ON/OFF双方向でも差し障りなさそうなので判定部分はカット。
ただアウチってなった瞬間に条件反射で左手がESC押しに行ってるので
救済機能あっても間に合わないかも。
>>279 やっぱsettimerでしたね。GetKeyStateはいい。
F12はやめて好みの修飾キー+[半/全]にしたらいいかも。どうせIMEのキーを押すし。
Input, hiskey,L20 T7 V, {vkF3}{vkF4}{Enter}{TAB}{UP}{DOWN}{LEFT}{RIGHT}{LShift}{RShift}{RButton}{LButton}{Space}
if (Errorlevel = "EndKey:半角/全角") & GetKeyState("CTRL","P") ; [Ctrl]+[EndKey:半角/全角]で発動
send,% "{BS "strlen(hiskey)"}"hiskeyにしないとダメっぽかった。
あと、ローマ字入力だと打ち込んだ英語分削除されちゃうんだよね。
もしかして親指シフト使ってます?
打ち込んだ後にIME判定してONだとESC送るってのもあるか…
ああ、BS送信はIMEトグルの前じゃないとシーケンス的におかしいな。 うちでは何故か問題なく動いているが
遠隔地のPCにVNCをインストールするスクリプトを書いていて インストール途中のチェックボックスをONにする処理で躓いています。 「サービスとしてインストール」や「拡張子.vncを関連付け」等の 全部で4つあるチェックボックスを全てONにしたいのですが、 なぜか4つともClassNNが同じ(TNewCheckListBox1)で Control, Check, , TNewCheckListBox1, ahk_id %hogehoge% としても まるで反応がなく、困っております。 こういった場合はどう書けばよろしいのでしょうか
>>282 Send,{Space}{Tab}{Space}…
でいいんじゃない?
exe化したものって自由に使って良いってあるけど、GPLに縛られないってことなのかなぁ
一種のコンパイラと考えるとgccで作ったものを売るのと特にかわりはないな。 いや、ちゃんとライセンス読んでないからわからんけど。
286 :
名無しさん@お腹いっぱい。 :2008/09/29(月) 06:35:17 ID:f+Q7X5PT0
タスクトレイにあるプロセスを終了させたいのですが、 タスクトレイのアイコンを右クリック→終了を選択 と同じ処理をさせる方法はないでしょうか? ときどきタスクの再起動が必要になる場合があるのですが(勝手にシフトロックかかる)、 以下のようにProcess, Closeでプロセスを殺すと、 XPごと落ちてしまうこともあるので、別の方法を探しています ~vk1Dsc07B & k:: Process, Close, mayu.exe run,C:\apps\mayu\mayu.exe return
288 :
282 :2008/09/29(月) 09:32:04 ID:QRjxuP7J0
>>283 返信ありがとうございます、完全新規インストールの場合はそちらの方法でいけそうです。
しかし、どうも旧バージョンがインストール済の場合はチェックボックスの初期値が
PC毎にバラバラになるようで、今のところ座標指定で背景色を調べてON/OFFをチェックした後
SPACEをSENDするかどうかを判断するしかないのかと思っています。
OSの種類や設定されているテーマに左右されそうで出来れば避けたいところなのですが・・・
AHKスクリプトを、1台のマシンで何個か走らせてると、 タスクマネージャの表記が全部「autohotkey.exe」になって、 どのスクリプトが、どれだけリソースを食ってるのか判別しにくい。 タスクマネージャ上の実行ファイルの名称を「autohotkey.exe」以外に 変えられれば判別できるし、processコマンドで存在確認も取れるのだけど、 変える方法って、なにか無いですかね?
autohotkey.exeをコピーしてリネーム。 それぞれランチャーで起動。
そういや、トラぶった非常駐スクリプトをプロセスから殺すと 常駐のも逝ってしまうから面倒なんだよな 非常駐系は別名にして走らせると分かりやすくなるかもなあ 今はqt0で丸ごと再起動してるけど
他プロセスのコマンドラインを得る方法はある
常駐用の実行ファイル名は同フォルダにリネームしていれててもいいかもね。 どっちにしろAutoHotkey.iniを読み込むし。
autoHotkeyのemEditor定義ファイル(ahk.esy)、いまどこかダウンロードできるところないでしょうか
>>291 ありがと。こんなイイ方法があったとは。
スクリプトごとに毎回リネームするのは面倒なので、
実行ファイル名を自動的に変えるバッチを作ってみた。
スクリプトを、このバッチにD&Dさせて起動すると、自動的にAutoHotkey.exeを
(スクリプト名から.ahk拡張子を除いた名称).exeでコピーし、
ファイル名の変わった実行ファイルからスクリプトを起動させる。
AHK実行.bat
−−−−−−−−−−−−−−−−−−−−
copy AutoHotkey.exe %~d1%~p1%~n1.exe
start "" "%~d1%~p1%~n1.exe" %1
−−−−−−−−−−−−−−−−−−−−
手間もかからず、プロセスの判別も出来てGoodな感じ。
難点は、フォルダ内に無駄なexeが増えることか。
増えたexeを清掃する方法か、そもそもexeをコピーしないで
済む方法があれば、どなたか追記お願いします。
\_AutoHotkey\Extras\Editors\EmEditor の中にあるだろ
>>297 ありがとうございます
アプリのフォルダ内に既にあったとは
FFFTPのリスト上で ---------------------------------- ControlGetFocus, NowFocus , A Control, Choose, 3, %NowFocus%, A ---------------------------------- をやってもリストが選択されないのですが、どこか間違っていますでしょうか。
まずリストにフォーカス当てろよ
マウスクリックでフォーカスをあててから上を実行しているのですが、 うまくいかないです。Control,Disableは動作するのですが…。
試してみたがlistviewはダメなのかもな 3番目のテキストを取得とかは出来るが… 最悪 Send, {Home}{Down}{Down}
そもそもFFFTPを制御って、なにがやりたいのかな? FFFTPは起動オプションが豊富で自動巡回も出来るし、 どんな用途でAHK制御させたいのかが気になる
>>302 その方法がありましたか。しかしできれば避けたい
>>303 ローカル側で選択しているファイルと同名のファイルがホスト側にあったら
選択にする、ということをやりたいのです。
そうすれば必要なファイルをすぐに選択状態にできて便利です。
AutoHotkey.exeをコピーしてリネームするくらいならAhk2Exe.exeでコンパイルしろっていう
自分も思ったがそれは言わないお約束なんじゃね
AHK修正するたびにコンパイルし直す方が面倒だろっていう
Ahk2Exeはコマンドライン対応してるし、batかAHKで組んじゃえばいいよ。 (待ち時間を考えるとコピー&リネームのバッチ走らせるよりは多少はもたつくかも知れんが。) 自分は秀丸マクロでやってるが編集中ファイルを即exe化できて便利だよ exe化後に即試行したいなら、Ahk2ExeをRunWaitで実行後、できたexeを起動する処理を追加 実行後にデリートしたいなら、RunWaitでexe起動後に、FileDeleteすればいい。
exe用に少し書き換えるのも面倒だしな。 一長一短ってやつだわ。
windowsって実行中のファイル削除できないんだっけ?
バッチ中でスクリプトとexe化した方のタイムスタンプ見て、 スクリプトの方が新しいときに ahk2exe で exe を最新化。 で、いいんじゃねーの?
>>296 へぼ関数
RenameExe()
{
#SingleInstance force
StringRight, Ahkexe, A_ahkPath, 14
if Ahkexe != AutoHotkey.exe
return
StringTrimRight, A_AhkDir, A_AhkPath, 15
FileCopy, %A_AhkPath%, %A_AhkDir%\AHK-%A_ScriptName%, 1
sleep,1000
Rexe = %A_AhkDir%\AHK-%A_ScriptName%
sub:
if(FileExist(Rexe)){
run, "%A_AhkDir%\AHK-%A_ScriptName%" "%A_ScriptFullPath%" ;%1% %2% %3%
}
else{
sleep, 2000
gosub,sub
}
}
GUIのボタンを押したときにスクリプトを動かしたいのですが、どうしたら良いのですか? 検索のヒントだけでもよろしくお願いします。
314 :
296 :2008/10/02(木) 13:04:57 ID:iZUXegDi0
>>312 ありがと。これはイイ。
正常動作を確認し、我が常設お気に入りスクリプトに追加しました。
Windowsって、拡張子をexeにしなくても、シェルにファイル名を全部渡せば
実行ファイルとして動くんだね。DOS時代から使っておきながら、はじめて知ったよ。
315 :
313 :2008/10/02(木) 13:18:29 ID:kvUg2pln0
316 :
名無しさん@お腹いっぱい。 :2008/10/02(木) 15:45:27 ID:hKG2O8AF0
autohotkeyでcase文ってどうやって書くの? ifのみ?
そう
あ、Gosubのラベルに変数の値を使うことで擬似的にcaseみたくできなくもない 邪道だけど、、、 Loop, 4 { ; 変数値に該当するサブルーチンがあれば飛ぶ subname := "case_value_is_" . A_Index if (IsLabel(subname)) { Gosub, %subname% } else { MsgBox, 該当処理なし ; 合致するサブルーチンが無いとき } } return case_value_is_1: MsgBox, 値は 1 だ return case_value_is_2: MsgBox, the value is two return case_value_is_3: MsgBox, value = 3. return
>Windowsって、拡張子をexeにしなくても、シェルにファイル名を全部渡せば >実行ファイルとして動くんだね。 これって本当?
うん、俺もやってみたけど本当に動いた 多分ヘッダだけ見て拡張子は見てないんじゃない? これはもの凄いセキュリティーバグだな
これは恐ろしい。本当に何でも動く。 AutoHotkey.exeをコピーし、readme.txtにリネーム。 下記の「クリックしてね.bat」を作る。 クリックしてね.batの内容 readme.txt ↑この1行だけ。 この2つを作成し、クリックしてね.bat をexplorerでクリックしたら、 readme.txtという名前の実行ファイル(AutoHotkey.exeのコピー)を実行できてしまった。 これってMS製OSの常識なの? 使い方によっては、かなり恐ろしい気がするのだが。
タスクマネージャーにはなんて出るの
>>323 なんと「readme.txt」がタスクマネージャにいるんだぜ。
これはマジで気持ち悪すぎる。
そもそも、
>>312 氏が書いてくれたスクリプトをそのまま動かしたら、
「***.ahk」っていうタスクが出てきて、あれ、exeはどこだと不思議に思ったのが発端。
explorerを介さない起動なら、拡張子は問わないというのがMSの仕様なのか。
325 :
312 :2008/10/03(金) 02:08:30 ID:tCXhSihH0
もしかして天然様やっちまった、俺? 就職できるかな?
ほんとだ。txtでもできた。拡張子なしだと無理っぽい? unix系ならそもそも拡張子関係ないんだけど windowsでこれができるとなんかセキュリティ上問題あるかな?
単純に
>>322 のクリックしてねの中身を見ると、テキストファイルを開くのかなって思うな。
まあbatなんてなかなかクリックしないだろうけど、遊び心でクリックしてしまうかもw
初心者限定じゃなく、ある程度知識があると逆に引っかかりそう。
これがバグっぽくて修正でもされたら、なんか感動するわw
拡張子が com exe のファイルだけウイルススキャンする環境だと、楽勝ですり抜けるね。 ある意味、キンタマウイルスよりも怖い。
うーん、あんまり悪用できそうなこと思いつかんなあ。アンチウイルスソフトだと拡張子関係なく見るだろうし。
さすがにMSも知ってそうだがな。 どうせ仕様なんだろう。 単純なだけに逆に危ないな、気を付けよう…
まあ、拡張子なんてお飾りだしね。一種の符号みたいなものか。 ダブルスタンダードっぽくなるから紛らわしいけどね。 仕様か…対応するにも根が深いかもね。
DOS shellはファイルの先頭がMZから始まるものはexeだと認識する (詳しくは"EXEフォーマット"でwikipedia参照) 試しに先頭がMZから始まるテキストファイルa.txtを作って、コマンドプロンプトからa.txtと入力するとバイナリだと思って実行しようとする Windows上では拡張子が優先されるので、偽装ファイルをダブルクリックしても関連付けられたアプリが起動するだけだし、 batなどの他の実行ファイル経由でないと実行されることはないので、それほど実害はないんじゃね
すれ違いな質問かもしれませんが・・・ Google Chrome で WinSet, Topmost, Toggle, A としても最前面になりません。 なんとかならないものでしょうか。
>>333 どうやってそのAHKを実行してるかによる。
ところで皆さん、
>>333 をコピペしたらスペースが&%160;って出るんだけど・・・
間違えたwと160;をつなげた奴。
なんか・・・大丈夫なのか・・・?
nbspでググってください…
webページ見てるとき503になったら3秒後に自動で更新させるスクリプトはどうやって書けばいいの? 教えて
まず、なぜ503がでるのかを理解し、それでもそれをやりたいと思ったなら、自分でやれ。
またやっちまったorz見直すの忘れた。 パスはmgahk
503は鯖が過負荷で死んでると言う悲鳴だ そこへリロード連射したらどうなるかぐらい考えれ
CTRLキーを押している間だけF12キーを一度押された状態に保ち、 離すとF12を二回押しするようなスクリプトを作りたいのですが、 CTRLを押し続けるとF12が何度も入力されてしまい困っています。 とりあえず書いてみたのは↓なのですが、 どこをどうすれば希望の挙動になるのか、どなたか教えていただけませんか。。 LCTRL::send,{F12} LCTRL Up::send,{F12 2}
>>343 まず希望の動作がわからん。
Ctrl押し下げで、F12を押して離すを1回。
Ctrlを離したら、F12を押して離すを2回って事?
KeyWait
346 :
名無しさん@お腹いっぱい。 :2008/10/05(日) 01:22:07 ID:FaPT2BC90
Ctrl+: でタブキーを送りたいのですが、 ^::: send,{Tab} return では何も起こりません。 :をエスケープする必要があるのかと思い ^`::: も試しましたがこちらもダメでした。 動作させるにはどうすれば良いのでしょうか?
8OvGbH The glossy, reflective black fascia is technology borrowed from the more traditionally luxurious car market,
http://freshmesh.cn/mariettapizzakitchenwebsite.html Marietta Pizza Kitchen Web Site
, 687328,
http://freshkesh.cn/fungswayexplanation.html Fung Sway Explanation
, jfed,
http://freshkesh.cn/blakemusick.html Blake Musick
, 276,
http://freshmesh.cn/waverlyholidaytournament.html Waverly Holiday Tournament
, mbsmd,
http://freshkesh.cn/valleycourieralamosacolo.html Valley Courier Alamosa Colo
, %DD,
http://freshoesh.cn/audiovoxheadrestvideopackage.html Audiovox Headrest Video Package
, yose,
http://freshmesh.cn/pongotwilightsoundagain.html Pongo Twilight Sound Again
, 473,
http://freshkesh.cn/oleyvalleyhighschool.html Oley Valley High School
, :-((,
http://freshmesh.cn/ginaraddatz.html Gina Raddatz
, :-D,
http://freshsesh.cn/taharibyarthurlevine.html Tahari By Arthur Levine
, oqetoc,
http://freshlesh.cn/powershifttransmissiontesting.html Powershift Transmission Testing
, 128,
http://freshresh.cn/pocketholejoinery.html Pocket Hole Joinery
, cyqik,
http://freshpesh.cn/gulfcoastbacteriaindogs.html Gulf Coast Bacteria In Dogs
, odihc,
http://freshtesh.cn/taionlyrics.html Taion Lyrics
, cdqxga,
http://freshpesh.cn/psbank.html Psbank
, thhzua,
http://freshqesh.cn/averyberkellabels.html Avery Berkel Labels
, qimcv,
http://freshsesh.cn/laurenwillig.html Lauren Willig
, xduq,
http://freshresh.cn/andrewalbertpizza.html Andrew Albert Pizza
, ljl,
http://freshpesh.cn/anabethgish.html Anabeth Gish
, 339,
>>344 あ、おっしゃる通りです。わかりづらくてすいません……
>>355 keywaitを拙い知識で利用してみたのですが、
やはり押し下げ時の動作がリピートされてしまうようです……
LCTRL::
keywait, LCTRL, D
send,{F12}
return
LCTRL Up::send,{F12 2}
ではダメなのでしょうか?
>>346 AutoHotkeyを流行らせるページ → キーリスト → キーコードによる指定
^sc028::
send, {TAB}
return
>>348 keywait, LCTRL, D
これだと押した瞬間一気にReturnまで進んじゃうよ。
Sendの後にに
keywait, LCTRL,もしくは
keywait, LCTRL, U
でキーアップを待って
send,{F12 2}
を送りましょう。
>>350 ありがとうございます!
複数行のスクリプトを作るのは初めてだったのですが、
アドバイス通りに
LCTRL::
keywait, LCTRL, D
send,{F12}
keywait, LCTRL
send,{F12 2}
としたら希望の挙動になりました! ありがとうございます<(_ _)>
353 :
340 :2008/10/05(日) 13:26:19 ID:yuVU0Lj10
初めまして。 同人ゲームにてワンボタンで必殺技を発動できるよう試行錯誤しています。 1に2を割り当てたいのですが 1::2 では問題なく動作するのですが 1:: send,{2 down}{2 up} return だと動作しません。(sleepやdelayも使ってみましたがピクリともしませんでした) 3行程程のコマンドを盛り込みたいのでsendを使って組みたいところなのですが、 なぜ後者だとダメなのか、御教授いただけませんでしょうか。
あいだにsleep入れてみたら?
テンキーの1を必死になって押してるとかいうオチじゃなくて?
レス有難うございます。
携帯より失礼します。
>>355 upとdownの間に2桁〜4桁のsleepをいくつか試して見ましたがダメでした。
>>356 1::2やメモ帳での確認ではきちんと動作するので間違えてはいないはずです。
連続で失礼します。 sleepによるディレイもメモ帳で確認済みです。
俺の出来たぽ。1.0.47.5
SendModeとかその辺じゃね?
>>358 メモ帳でってのは何を指していってんの?
1::send,{2 down}{2 up} がメモ帳では動くが 該当ソフトでは上手くいかないってことなら
自分で試行錯誤するしかないんじゃね。
そんな限定的な内容(しかも対象が同人ソフト)じゃ代わりに試してやれる奴もいないだろう
>>360 いくつか試してみようと思います。
ありがとうございます。
>>361 このような簡単なスクリプトなのに思い通りにいかないので、
何か初歩的なミスを犯しているのではと思い質問させていただきました。
ちなみにゲーム名は東方緋想天 コマンドは波動拳コマンドでした。
考え方は間違っていないようなので、引き続き試行錯誤してみます。
レスをくれた皆様、ありがとうございました。
>>354 SetKeyDelayでdelayを増やすといいかも
以前X68エミュレータでのキーの取りこぼしがこれで改善した
364 :
名無しさん@お腹いっぱい。 :2008/10/05(日) 23:48:23 ID:RLWm5/t00
ToolTipやTrayTip上に画像も表示したいのですが、 拡張の方法ってないでしょうか?
365 :
London :2008/10/05(日) 23:50:14 ID:KKwPkNTS0
366 :
353 :2008/10/06(月) 14:03:12 ID:a9BJ5akX0
367 :
名無しさん@お腹いっぱい。 :2008/10/06(月) 14:42:53 ID:PE67qhlP0
すみません、教えてください カレントウィンドウにOKのコマンドを送るにはどうしたらいいでしょうか? たとえば、下のように、Ctrl+Alt+M でメッセージボックスを表示させたあと、 Ctrl+Alt+Yを押してもメッセージボックスが消えません !^Y::PostMessage, 274, 1, 0, , A !^M::MsgBox, OKTest OKボタンにフォーカスが当たってないような場合に、 キーボードからOKを送信できるようにしたいのですが・・
ControlClick, OK, 「ウインドウ名」 以上
ahkファイルをAhk2Exe.exeにドラッグしても、パラメーターつけろと怒られますが、 AutoHotKey自身で、ドラッグするとahkファイルのあるフォルダにexeを作ってくれる ソフトは作れますか。
>>367 >PostMessage, 274, 1, 0, , A
wParamに 1なんてパラメータ設定ないみたいだけど
WM_SYSCOMMANDってこういう使い方するんだっけ?
てか数値からメッセージ名逆引きするのは大変なんだから(しかも10進表記だし)
助言が欲しいなら、定義名なり何をやろうとしてるかなり、コメントに入れてくれんか
アクティブウィンドウ限定の条件だったら
[OK] → Send,{Enter} or {ESC}
[はい(Y)] [いいえ(N)] → Send,^y
でいいんじゃないの?
>>369 password := "" ; User Setting
scrPath = %1%
StringReplace,ahk2exe,A_AhkPath,autohotkey.exe,Compiler\Ahk2Exe.exe
;カレントにスクリプトと同名のアイコンファイルがある時は指定する
StringReplace,iconPath,scrPath,.ahk,.ico
ifexist %iconPath%
opt := " /icon " . iconPath
;パスワードが有効なら指定する
if (password != "")
opt := opt . " /pass " . password
Run,%ahk2exe% /in %scrPath% %opt%
return
372 :
369 :2008/10/06(月) 20:08:56 ID:AqW/X+Xd0
>>371 素晴らしい、完璧です。
exeにドロップされたファイルのパス名って、scrPathで読み込んでるんですか?
エクスプローラーで特定フォルダをフォルダツリー付きで開きたいのですが ↓のように書いても c:\ が開かれてしまうのはなぜでしょうか? #c:: Run, explorer /e,c:\tmp
志村ー、エスケープ、エスケープ!!
,をエスケープしてないから
>>374 >>375 あぁデフォルトのエスケープ文字は「`」でしたか
「\」入れて悩んでましたorz
指定のプログラムが起動しているときにWin+F8を押したら、そのプログラムをアクティブにして ショートカットキー(F4)を押すというスクリプトを書いているのですが、たまにアクティブにならないことがあります。 日本語の解説サイトをよく見たのですが、どうにも原因が判りません。 #F8:: DetectHiddenWindows,On Process,Exist,実行ファイル.exe If ErrorLevel<>0 { el:=ErrorLevel WinActivate,ahk_pid %el% WinWaitActive,ahk_pid %el% Send,{F4} } return
とりあえず #WinActivateForce また、Processでも起動中なのにIDが0になることはたまにある (こちらの環境ではオミトロンで起こる)
>>378 サンクス。それを入れて試してみます。
もしくはプロセスIDがアクティブにならなかったタイミングだけ0になっている可能性ということですね。
アクティブにしなくても WinClose使えば良いんじゃないの?
送ってるのは!{F4}じゃなくて{F4}だろ。 DetectHiddenWindowsを入れてるってことは非表示プロセスなのかな。 非表示ウィンドウをアクティブにするってできるんだっけ? Process,ExistでPID取るより固定値(titleやahk_class)でやったほうが確実っぽい気もする。
F4送ってからアクティブにするとかどうだろう。変わらないかもしれないけども。
特定の拡張子のファイル以外を削除するっていう除外指定のコマンドが分からない
だから?
教えてくださりませんか *.*[^(ini)] ってやってみたんですが
loopしてifで分けろ
よく分からなかったので loop,(file)と組み合わせて特定のファイルだけ読み取り属性に変えてからオール削除して読み取りを外す方法にしました
そのloop内で読専フラグつけるファイルはヌルー、フラグ付けないファイルは delete で終わりじゃん。
流行らせるページにある日本語で正規表現を使うBREGEXP.ahkなのですが、どうも挙動がわかりません。 RegExpMatch(Target,"(.*)","k","Result") として、ループを回すと Target→Result あいう→あいう えおかき→えおかき ここまではOKですが、続けると くけこ→くけこき さ→さけこき と前回の分のゴミがのってしまいます。 どうすればいいんでしょうか。
それは、日本語の2バイト処理がうまくいってない症状な気がする。 2バイトに対応した改造版AutoHotkey がどっかにあるから、探して様子見するとか
ahk2exe.exeといえばコマンドラインの最後の[/NoDecompile]はどういった もので何を指定するんだろうか?
コパパイルしたものを、スクリプトファイルに戻せなくするんじゃね? 知らんけど。
>>391 バイナリにした後、逆汗もとい逆スク禁止みたいなコマンドなんじゃないの?
実際、それをやって、どれくらい抑止に繋がるんだろうか。
>In v1.0.46.10+, the /NoDecompile switch (if present) prevents exe2ahk >from being able to decompile the script even when the correct password is given. >This provides an additional layer of protection that goes beyond having a long, elaborate password. エキサイト翻訳↓ v1.0.46.10+では、/NoDecompileスイッチ(存在しているなら)は、正しいパスワードを与えるときさえ、 exe2ahkがスクリプトを逆コンパイルできるのを防ぎます。 これは長くて、精巧なパスワードを持ちながら越えられる追加層の保護を提供します。
>>394 乙。まとめると
(1) コンパイル(ahk2exe)実行時、/pass*** をつけると、パスワードを知らないと逆コンパイルできない
(2) 逆コンパイルプログラム(exe2ahk)に正規のパスワードを入れると、スクリプトを取り出せる(exe→ahk)
(3) (2)を絶対にやられたくないとき、コンパイル実行時(ahk→exe)に/NoDecompileをつける。
すると、(2)でデコードするとき、たとえパスワードがあっていてもデコードは不可能になる
で合ってるかな。
>>395 /NoDecompileをつけてやってみたら
Read: The following error occurred: FileNotFound
となったのでそのとおりなんだと思う
このオプションだけGUIに無いんで疑問に思ってた
ありがと
wininet.dllを使用してサーバーから時刻を取得したいと考えサンプルを探したのですが、 FTPでのファイル送信の物しか見つかりませんでした。 VBAでのサンプルなら見つかったのでEXCELで試したところ、取得出来ませんでした。 どなたかご助力お願いいたします。
ahkをコンパイル後、exeで配布したいのだけど、ウイルス扱いになってしまう。 渡した人の多くが「ウイルスって出た!!どーしよどーしよ」と青ざめた声で電話してくる。 たとえば反応したソフト 「ソースネクスト ウイルスセキュリティ」 Trojan-Spy.Win32.Agent.bga 相手先のパソコンは自分のではないから、ソフトを換えてくれとは言えない。 なにかよい対策ないでしょうかね。
スクリプトで渡せばいいじゃん。 AHKのインストールくらいはさすがに出来るだろう。
中のスクリプトをさわられると困るから、ahkのまま配布は出来ないのよ。
AHKって引数渡して戻り値返す的な使い方には向いていないんですか?
無変換キーをトリガにして以下の様な記述をしているのですが、無変換キーが押し続けられてると認識する 事があります。 どういったタイミングでなるか分かりません…何が原因なのでしょうか? よろしくお願いします。 vk1Dsc07B & h:: { if (GetKeyState("Shift","P")) Send,+{Left} else Send,{Left} return } vk1Dsc07B::Send,{vk1Dsc07B}
>>404 これだけでいいよ。
~vk1Dsc07B & h::
if (GetKeyState("Shift","P"))
Send,+{Left}
else
Send,{Left}
return
>>404 動かすなら↑の通り。
最後の行をどうしても有効化したいなら、修飾シンボル「$」を使う。
408 :
404 :2008/10/11(土) 00:29:08 ID:fBQeJ9Ml0
>>406 ,407
ありがとうございます。 助かりました !
>>405 横からお邪魔しますが、内容によってウィルス判定されたりされなかったりするの?
小物を配布してるんだけど、たまにアンチウィルスが反応したって報告が来るのよ。
昔からウィルス判定くらうって話あるから俺は気にしてないな。 気になる人はデコンパイルして見るだろう。 分からない人のためにソースも同時公開しておけば良いんじゃね。
Alt+Escでタスク切り替えする際、最小化されてるウインドウは表示されませんが、 Alt+Ecsを押す度に実際のウインドウを見ながらタスク切り替えをしたいので、最 小化されているウインドウが選択された時は元のサイズに自動的に戻して表示す る様にしたいです。 選択されたウインドウが最小化されている場合、Alt+Escの後にEnterを押せば元 のサイズに戻るのですが、単純に下の様に書いてしまうと、最小化されていなか ったウインドウには当然Enterが送られてしまいます。 LAlt & Esc:: send,!{Esc}{Enter} Return Alt+Escで選択されたウインドウの指定ができれば、最小化されている時にだけEnter を押すとか、元のサイズに戻す様に書けばいいのでしょうが、Alt+Escを押してタスク バー上で選択されたウインドウの情報の取得方法が判りません。 Alt+Escを押してタスクバー上で選択されたウインドウの情報は、どうやって取得すれ ば良いのでしょうか?
選択された段階でアクティブになってるわけで、 アクティブウィンドウの情報取得したら良いんじゃないかな。
>>411 こんな感じかなぁ…
[Alt] + [Esc] 押下で切り替わったアクティブウィンドウの状態を見て最小化してたら最小化を解除。
キー押下後はタイマじゃなくて WinWaitNotActive だと思うんだけど
うまく動かんから、100ms待つようにした。
~!Esc::
SetTimer, HOGE, 100
return
HOGE:
SetTimer, HOGE, off
WinGet, state, MinMax, A
If (state < 0) {
WinRestore, A
}
return
414 :
411 :2008/10/11(土) 12:11:01 ID:wjcqX3UEO
>>412 ,
>>413 THXです。
Alt+Escで切り替えた時に最小化されてないウィンドウが表示されてもタイトルバーは濃い青色にならないので、てっきりその時点でアクティブになってる訳ではないのかと思ってました。orz
後で試してみますね。
試してみたら、最小化状態ではAlt+Escで選択されない窓もあるみたいだね。 選択されたウィンドウなら操作可能だけど、違うなら全ての窓情報を取得しなきゃならないし 面倒だから一回全ての窓を元に戻してしまう案を提示。 ~!Esc::WinMinimizeAllUndo
397です
VBAでのサンプルを参考に以下のものを作りましたがVBAの場合と同様に
"HttpSendRequestA"の戻り値が0(false)になります
どこがいけないのでしょうか
Server := "
http://www3.nict.go.jp/cgi-bin/JST.pl "
Url := "/cgi-bin/JST.pl"
Buff =
VarSetCapacity(Buff, 4096)
Hnd0 := DllCall("wininet\InternetOpenA", "str", "", "UInt", 0, "str", "", "str", "", "uint", 0)
Hnd1 := DllCall("wininet\InternetConnectA", "uint", Hnd0, "str", Server, "uint", 80, "str", "", "str", "", "uint" , 3, "uint", 0, "uint", 0)
Hnd2 := DllCall("wininet\HttpOpenRequestA", "uint", Hnd1, "str", "GET", "str", Server, "str", "HTTP/1.1",
"str", "", "uint", 0, "uint", 0, "uint", &H80000000)
ret := DllCall("wininet\HttpSendRequestA", "uint", Hnd2, "str", "", "uint", 0, "str", "", "uint", 0)
ret := DllCall("wininet\HttpQueryInfoA", "uint", Hnd2, "uint", 9, "str", Buff, "uint", 4096, "uint", 0)
ret := DllCall("wininet\InternetCloseHandle", "uint", Hnd0)
>>415 ありがとです。
少し試してみましたが、WinMinimizeAllUndoだと元のサイズに戻らないですね。
流行らせるページ見るとWinMinimizeAllで最小化したのを元に戻すとなってるので、普通に最小化したのはダメなのかな…。
ちなみに、一旦WinMinimizeAllしてからWinMinimizeAllUndoしてみたけどグダグダでした。w
>>413 をベースにタイマー無しで処理が速くてかつ確実に動く方法を模索してみます。
ntp を時刻同期以外の目的で利用する意味が分からん。
ま〜、ahkのコマンドだけでntp時刻取りたいなら、インチキくさいけど出来なくもない。
file i/o の分遅くなりそうだけど
参考)
ttp://www2.nict.go.jp/w/w114/tsp/PubNtp/clients.html ntp_url := "
http://ntp-b1.nict.go.jp/cgi-bin/ntp "
tmp_file := "$$ntp." . A_Now
AutoTrim, On
URLDownloadToFile, %ntp_url%, %tmp_file%
if (ERRORLEVEL == 0) {
FileRead, data, %tmp_file%
Loop, READ, %tmp_file%
{
if (A_Index = 4) {
ntp := A_LoopReadLine
break
}
}
FileDelete, %tmp_file%
}
MsgBox, %ntp%
>>416 最初の行の InternetOpenA以外全部 0が帰ってきているみたいだが?
つか InternetOpenUrl 使うのじゃあかんのか? VBAではそれで読めていたが。
420 :
417 :2008/10/11(土) 22:44:21 ID:HhUj4YlP0
Alt+Escの件、とりあえずこんな風にしてみました。 問題無く動いてます。 Lalt & Esc:: WinGetTitle, Actvnow, A Send,!{Esc} WinWaitNotActive, %Actvnow% WinGet, state, MinMax, A If (state < 0) { WinRestore, A } return
便乗だけど、「URLDownloadToFile」を使って、ウェブサーバのデータを落とすとき、 接続先のサーバの応答がないと、スクリプト全体が、全く応答なしになっちゃうよね。 できればタイムアウト時間を指定したいのだけど、なにかうまい回避策ないですか?
ダウン用のAHKを単体で作って EXE化でもしてプロセスを指定秒数で落とす
まぁ、スレッド殺すとかはできんしね。やろうとすると例外処理とか面倒そうだし つか、スレッドプログラミングするなら他の言語使った方がいいわな 強いて言えば・・・ - URLDownloadToFile に第3引数をとるようにしてタイムアウトまでの ms 指定が出来るようにする - 200(OK) 以外の HTTPのステータスコードを ERRORLEVEL にセットする って感じの要望挙げるとかかねぇ
>>419 Hnd0-Hnd2は全て異なる8桁の整数値が戻っているので、
ここまでは成功していると思っています
引数の内容から見て問題が起きる余地がなさそうな"HttpSendRequestA"で
失敗しいているのでわけがわからないのです
>>418 時刻同期の目的で利用するつもりでした
もともとは一切非表示で時刻を修正しすぐに終了するソフトがほしかったのです
桜時計をHideを指定して起動してもウィンドウが表示されてしまうので、
自分で作ろうと思ったのです
ところが、最初に書きこんでからどこが悪いのか調べる過程で
NALTと言うソフトなら可能なことを知ってしまったので、
もう作る必要はなくなってしまいました(私が馬鹿でした)
ですが
>>398 さんのいわれるように、構造体も使われていないものすら
扱えないようではどうにもならないので調べ続けました
今はただ理由が知りたいだけなのです
426 :
420 :2008/10/12(日) 08:34:37 ID:1FQqzDgQO
>>421 初心者ですのではたして変数の使い方とか合ってるのかどうか…
おかしい点あれば教えてくださいませ〜。
WindowSpy(AU3_Spy.exe)ってのがついてくるし、 後はMouseGetPosのsampleも使えるだろう。
>>428 うおwwindows spyすげえ
ありがとうございます。
>>425 DllCall()で結果が帰ってくるまでに時間掛かるような場合はLoadLibrary/FreeLibrary使う。DllCall()の落とし穴なので注意。
(流行らせるページのDllCall()の項参照。)
あと、色々間違ってるから慌てずよく見直したほうがいい。
Temporary Internet Filesのファイルを削除するにはどうすればよいかな ファイラー等でTemporary Internet Filesを開いた状態だと削除できるんだけど 単体だとアクセスできないのか消えないんだよね
一時的にフォルダのシステム属性を解除してからとか というか、かつてAHKでやって出来たような気がするけど… 98の時だったからかな?
>>430 下のように直してみましたが結果は全く同じでした
Domain:="
http://www3.nict.go.jp "
Url:="/cgi-bin/JST.pl"
Buff=
VarSetCapacity(Buff,1024)
hModule:=DllCall("LoadLibrary",Str,"WinInet.Dll")
Hnd0:=DllCall("wininet.dll\InternetOpenA","Int",0,"UInt",0,"Int",0,"Int",0,"UInt",0)
Hnd1:=DllCall("wininet.dll\InternetConnectA","UInt",Hnd0,"Str",Domain,"Int",80,"Int",0,"Int",0,"Int",3,"Int",0,"UInt*",0)
Hnd2:=DllCall("wininet.dll\HttpOpenRequestA","UInt",Hnd1,"Str","GET","Str",Url,"Str","HTTP/1.1","Int",0,"Int",0,"Int",0,"UInt*",0)
ret:=DllCall("wininet.dll\HttpSendRequestA","UInt",Hnd2,"Int",0,"Int",0,"Int",0,"Int",0)
ret:=DllCall("wininet.dll\HttpQueryInfoA","UInt",Hnd2,"UInt",9,"Str",Buff,"UInt",1024,"UInt",0)
ret:=DllCall("wininet.dll\InternetCloseHandle","UInt",Hnd0)
DllCall("FreeLibrary",UInt,hModule)
WindowSpy機能をつかって表示させた内容の、取得方法について質問です。 >>>>>>>>>( Now Under Mouse Cursor )<<<<<<<< ClassNN: ToolbarWindow321 Text: あいうえお Color: 0xC8D0D4 (Blue=C8 Green=D0 Red=D4) ClassNNは、WinGetClassで取得できたのですが、 マウスカーソル下の「Text」を取得する方法がわかりません。 やりたいことは、マウスカーソル下のボタンに書かれたテキストを抜き出して 各種判別をしたいのですが、Textを取得するには、どのように書けばよいでしょうか。
MouseGetPos で マウスの下のコントロールのClassNN取ってControlGetText うまくいかないなら MouseGetPos で マウスの下のコントロールのハンドル取ってWinGetText
>>436 アドバイスありがとうございます。
ControlGetTextで取得できました。
>>434 サーバ名・バッファサイズ。
結果変わらないとか何言ってるんだと思ったら、
>>425 よくみたらそっちの環境だとLoadLibraryしなくてもハンドル帰ってきてるんだ?
うちだとハンドル取得失敗するんだが。
>>438 Server := "133.243.3.34"
VarSetCapacity(Buff, 65536)
で成功しました
大変ありがとうございました
正直NALTの2倍リソースを消費するので使う意味は無いのですが、
苦労したので何か愛着が沸いてきました
ちなみにLoadLibraryの有無にかかわらずハンドルの値は同じでした
>>438 別にIPアドレスでもいいけど。
http://が余計なだけ 。
それとバッファサイズはそんなに要らんはず。
指摘したところはHttpQueryInfo()の引数。バッファサイズはLPDWORDで欲しがってるので、
"UInt*", BuffSizeみたいな感じで変数経由で渡す。数値そのまま渡しちゃだめ。
なんでかっつーと、そこで指定したメモリ上に値が戻ってくるから。
関数実行後にサイズが戻ってきてるはず。変数見てみると良い。
"UInt", 65536とか"UIntP", 65536とかってやって動いてるとしたらたまたまかも。
これだと、分けわからんアドレス見に行くことになると思うよ。
Ctrl+無変換+?? みたいな組み合わせって指定できないの? Ctrl+??で無変換の状態を調べて分岐って形になるのかな。 これに手を出すともう覚えきれなくなりそうだけどw
漏れは逆でやってるなぁ。 vk1Dsc07B & x:: if (GetKeyState("Ctrl", "P")) MsgBox, Ctrlあり else MsgBox, そのまま return
雑多なテキストファイルを FileRead,data,C:\textfile.txt Loop,Parse,data,`n,`r`n { いろいろ } で回す処理をしてると、実際の改行数と、ループを回した回数が違うことがあります。 原因を調べてみたら、テキストファイルに、本来無いはずの0x00が含まれていると、 その行でLoop処理が終わってしまうようです。 これはAutoHotkeyの仕様通りと言えばそうなのですが、 AutoHotkey単独の機能で、ファイルから0x00だけを除去する方法はないでしょうか。
>変数の内容文字列としてアクセスできるのは最初のnull文字以前の部分だけだが、 >DllCallなどを使用することで全ての内容にアクセスすることができる。
ま、仕様だから諦めじゃね つか、なぜバッファリング(Loop,READ)しないんだろう。
>>445-446 Loop,Readをつかったら0x00のあとも読み込め、とりあえず解決しました。thanxです。
dllは、こちらを見てみましたが、ファイルを新規に作成して書き出すサンプルのようで、
ファイルを読むだけの使い方を理解できませんでした。
http://lukewarm.s101.xrea.com/commands/DllCall.html 最初に変数として読んだ理由は、FileRead〜Loopの前でstringsplitをつかって`nを数えて、
その数を進捗状況表示(プログレスバー)の処理ラインの総数値として使うためでした。
Loop,Readにすると、ループ処理前に改行の数をカウントしなきゃいけないですね。
本番ループの前でこうやって逃げましたが、もっと効率のよい方法はありますか?
linecount=0
Loop, Read,%file%
{
linecount++
}
Loop, Read,%file%
{
本番
(プログレスバー現在値%A_Index%/総数%linecount%)
}
448 :
名無しさん@お腹いっぱい。 :2008/10/15(水) 16:52:22 ID:gEIfW8tz0
ちょっと教えてください 以下のように実行したRunWaitコマンドの返値を拾ってきたいのですが、 RunWait,C:\Ruby\SearchWordGoo.exe "%word%" 取得する方法はあるでしょうか? ~vk1Dsc07B & q:: ;; // 選択範囲の単語の意味をタスクバーに表示したい clipboard= Send,^c ClipWait SetEnv,word,%clipboard% RunWait,C:\Ruby\SearchWordGoo.exe "%word%" // ネットから取得 contents= ;; // contentsに返値を渡したい TrayTip,Goo検索,%contents% SetTimer, RemoveTrayTip, 20000 return
普通コマンドの返値というとErrorLevelのことなんだが、それじゃないよな そのSearchWordGoo.exeとやらの仕様が分からんから何とも言えんが、 結果が標準出力に出るんなら、ファイルにリダイレクトすれば?
450 :
448 :2008/10/15(水) 18:15:32 ID:gEIfW8tz0
>結果が標準出力に出るんなら、ファイルにリダイレクトすれば? 標準出力に出ます 一回ファイルに落とさないとダメそうですか… ありがとうございます
>>440 >
"UInt", 65536とか"UIntP", 65536とかってやって動いてるとしたらたまたまかも。
どうもそのようです
何度も繰り返すとバッファが空の回数が多くなります
これで今まで使えなかったDLLのいくつかが使えるようになるかもしれません
ありがとうございました
>>447 固定長データ形式ならファイルサイズを指定バイト数で割る(性善説)でいいはずだけど・・・
そうでないならそのやり方でいいんじゃないかと
>>452 なるほど了解です。ありがとうございます。
進捗状況表示のためだけで同名へのファイルアクセスが
2度発生してしまうのが、ちと悔しいですが、気にしないことにします。
>>450 cmdret.dllなり流行らせるページのStdIO.zip使うなりすればおk。
これちょくちょく質問にあがるからテンプレ入れといたほうが良いか?
独立したahkスクリプトに対して、既にそのスクリプトがが起動していたら引数を渡すだけ、ということは可能なのでしょうか。 Run,Autohotkey.exe hoge.ahk "hogehoge" みたいな感じで起動して、hoge.ahkが既に存在しているならhogehogeを渡したいのですが。 やりたいのは、一般的なメディアプレーヤーみたいにプレイヤーが立ち上がってたらそれでファイルを再生、そうでなければ起動+再生みたいなことです。
引数をFileAppendでファイルに保存させ、 TimerかLoopのIfExistでファイルを監視して それが存在するようになったらそれを読み取って変数に入れる、とか (読み取ったら破棄する) うまくやんないと処理中の変数を上書きするかもしれん 多分もっとム的にスマートな方法はある
AHK同士での連携、俺も知りたいな。 外部ファイルの参照以外なら、たとえばGUIコマンドで画面上に隠しウインドウを作っておき、 そのタイトル情報に交信メッセージを仕込んで参照させるとか。 ControlGetTextで受信し、返事をしたいときは返信用GUIをつくってGuicontrolで随時更新。 いわゆる半二重通信か。
複数のAHKで、俺も便乗質問。 たとえば「wheelDown」に対するアクションが入った常駐スクリプトを2つ同時に起動すると、 後に起動したスクリプトのみがwheelDownに反応して、以前から起動していたスクリプトは、 マウスをwheelDownしても無反応になってしまう。(スクリプトは動いているが、情報をとれない) 使いたい機能ごとにスクリプトを分離したものの、1つ起動なら問題ないけど 2つを同時に起動してると、この症状になってしまい、困ってます。 これを、全部反応させる方法はないですかね?
入力メッセージを透過させたいなら ~ を付ける そもそも、ahkはある層で入力メッセージを見て何かするって訳で、 ~ 付けてなきゃ次の層にわたさんって事な訳だから・・・ つか、キー・マウス系のモノは同一ファイルで定義した方がよくね? ホットキーとかで機能切り替えするとかでさ まぁ、お節介かもしれんが。
>>455 既に起動しているスクリプトに起動パラメータで引数渡すのはたぶん無理
やりたかったらGUIでGuiDropFilesラベル有効にしといて
cdropや管理人さんのファイルドロップ関数で渡してやるのが簡単なんじゃないかな。
それか OnMessage() か RegisterCallback() あたり使うとか。
>>459 言われてみればその通りかも。ファイル構成を再検討してみます。
AHK同士の連携は、
>>460 のGuiDropFiles法でいとも簡単にできました。
こんな便利な方法があったとは。
gotoはややこしくなるからなるべく避けろとよく言われますが 避けるためにたとえばどんな命令を使うことが考えられますか?
ifで分岐、関数やサブルーチンを作って呼び出す、とか。 ただ、Gotoを使った方がスマートにできる場合もあるので、絶対Goto禁止という意見には賛同しない。
なるほど。ありがとうございます。
GoToはGoSubがなかった頃の名残なので、なるべくならサブルーチン化してGoSub使うのがいいよ。 けど関数内でローカルラベルとして使えるのはいいね。VBチックでやりやすい
goto(or相当)は最早シェルスクリプトとかバッチくらいでしか使わないなぁ
try〜catchがあればgotoは不要なんだけどな
Fittleというプレイヤーを閉じたいのですが、
閉じれません。
http://hp.vector.co.jp/authors/VA039869/ --------------------------------------------------------------------------
DetectHiddenWindows,On ;非表示のウィンドウを対象に含めるようにする
ControlSend,,!{F4},ahk_class Fittle
return ;ホットキーサブルーチンを終了
--------------------------------------------------------------------------
っていうか他のアプリでも閉じれないのですが、
記述が間違っているのでしょうか?
WinCloseじゃだめなの?
ImageSearchでErrorLevelが0だったら、1だった場合に実行するコマンドの前に一つコマンドを実行する ようにする場合って、IF式で場合分けして両方のパターンを書くしかないんでしょうか? 1だった場合と同じ動作をするようにする方法ありませんか?
>>471 すみません、途中で送信してしまいました。
こういう事するのは慣れてなくて、意味不明なことや、皆さんには造作もないような事を聞いてるかもしれませんが、お願いします。
if 判定式 { 判定が真の場合やりたいこと@ 共通の事項A } else { 共通の事項(=A) } ってこと? それなら if 判定式 { 判定が真の場合やりたいこと@ } 共通事項A って出来るけど。 まぁ、ahkでプログラミング最初ってなら分からなくもないけど
しかし、スパゲッティな言語仕様はどうにかならんもんかねぇ。 変数に仕える文字ってよく分からんw [OK] arr[0] := 1 変数1 := "変数1の値" MsgBox, %arr[0]%`n%変数1% [NG] arg(0) := 100 arg.1 := 1000 表示 := "変数「表示」の内容"
>>473 そういう事です。ありがとうございます。
画面が初期画面に戻っていた場合、やりたい操作を出来るようにするために必要でした。
これがプログラム初めてです。HTMLくらいしか触ったことなくて
ゲムとかでDirectXかなんかで全画面表示にするってのがあるけど、 その状態ってAHKで取得できるもん? WinGet, state, MinMax じゃ無理だった・・・ A_ScreenWidth, A_ScreenHeight か SysGet で判定なのかな。
クリップボードの監視をして過去10回くらいを記憶して 無変換+Vで履歴の新しいものから吐き出してくようなスクリプトってないですか?
AutoHotkey(zip版)をインストールして、起動するとMyDocumentsに「AutoHotkey.ahk」が作成されて、「AutoHotkey.ini」が作成されないんだけど、どうやったらiniが作成されるの?
右クリックから作成。 またはAutoHotkey.ahkをAutoHotkey.exeにあるフォルダにコピーして改名でもOKだよ。 ただのテキストファイルだし。
gui作るとき各コントロールの位置決めに手こずる もっと楽に配置できないかなぁ
たしかにGUI、慣れるまでは大変だし、たとえ慣れても座標を頭で計算するのが面倒だ。 GUI,addコマンドの配置をWindows画面上で作る外部GUIツール、なんてのがあったら 最初の位置決めが大幅に楽になるのだけど、そんなツールがあったらいいのにね。
SmartGUIじゃ駄目なのか
483はオヒサルに逝けば吉と言っている
初歩的な質問申し訳ありません、自分では原因が分からないので質問させて下さい 特定のキーを押すとそのキーが2回押されたことになるようにしたいのですが key:: send,{key 2} というように組むと、そのkeyを入力しても反応が無くなってしまいました 2行目のkeyを別のkeyに変えればそのkeyが2回押されたことにはなるのですが、それだと少々不便です 何かヒントのようなものは頂けないでしょうか
ここの住人はバカなので、情報無しに答えることは出来ません。 エスパースレで聞いて下さい。
SmartGUIなんてもんがあったんだな
ちょっと遊んでみたけどいい感じ
>>485 俺も馬鹿だけど
key::
Loop,2
send,{key}
これでいいんじゃね
>>483-484 さっそく使ってみた。
このソフト、俺の求めていたそのものだった。情報ありがと。
自分で自分をSendするとループにはまって抜け出せないんじゃね 何か工夫がいると思うよ
>>485 $key:: Send, {key 2}
とか
~key:: Send, {key}
とか
おしえてください バックグラウンドのウィンドウにダブルクリックやドラッグ送りたいんですけどどう書けばいいですか
サイト丸写しのコードなんですが、 imagesearch, 502, 156,1425, 730, C:\ahk\kennsaku-top.bmp if ErrorLevel = 2 MsgBox Could not conduct the search. else if ErrorLevel = 1 MsgBox Icon could not be found on the screen. else MsgBox The icon was found at %FoundX%x%FoundY%. これを作動させると Line text: \ahk\kennsaku-top.bmp the leftmost character above is illegal an expression と言われてしまいます。ファイル名の指定の仕方が不味いのだと思うのですが、日本語のない位置にしたり、 ドライブをFからCにしてみたりしたりして、こうなったのですがそれでも駄目です。 何が不味いんでしょうか?
>>487 ,489,490
解答頂きありがとうございます
最終的に
>>490 のでできるようになりました
>>485 解決したみたいだけど原因分かってないみたいだから一応
行分けするなら最後にreturn入れろ
>>492 OutputVarX, Yを省略してるんだから、x1,y1,x2,y2の前にカンマが2つ必要
imagesearch,,, 502, 156,1425, 730, C:\ahk\kennsaku-top.bmp
>>494 そうではなかったようです。
>>496 おお!ビンゴです。ありがとうございます。省略可はカンマの中だけだったんですね。
本体スクリプトの初期化プロセス内で、#Include でサブスクリプトを統合する際、 このサブスクリプトの初期化プロセスに return があると本体スクリプトの #Include 以下が実行されません。 ヘルプにはこの件に関して、 A script behaves as though the included file's contents are physically present at the exact position of the #Include directive (as though a copy-and-paste were done from the included file). とあるので、仕様として #Include はサブルーチン的には作用しないと理解しています。 しかし結構不便なので、どなたか良いテクニックをお持ちでしたら教えて下さい。
最初にreturnを入れてから#includeする。 --- include元 --- Autoexecute: Gosub,hoge_init return #include hoge.ahk ; include系列挙 … --- include先 hoge.ahk --- hoge_init: 初期化処理 return …
#IncludeLast とかあればいいのにな
ああ、また的外れなこと書いたかも。 #Include以下に処理を持ってきたい場合はこんな感じでやってる Autoexecute: Gosub,init return #include hoge.ahk ; include系列挙 #include … init: Gosub,hoge_init … … return
Gui,Add,Text,,%A_Hour%:%A_Min%:%A_Sec%.%A_MSec% Gui,Show Loop GuiControl,Text,Static1,%A_Hour%:%A_Min%:%A_Sec%.%A_MSec% という記述で時刻をリアルタイムで表示させてみたのですが やたらチラチラします ご指導ください
Loop { now = %A_Hour%:%A_Min%:%A_Sec%.%A_MSec% if (sav != now) { GuiControl,Text,Static1,%now% sav := now } } これでもまだチラ付きが気になるならHMSとmsec以下とラベルを分けるといい
>>503 おおなるほど
Msecだけ分けてやってみます
ありがとう
>>501 なるほど、最初に return を入れてから #include する方法でできました。
結局本体スクリプトから副スクリプトの初期化ルーチンを呼び出さないといけないんですね。
Gui,ShowとかWinShowでウィンドウを表示するときに、 いきなり半透明で表示ってできますか? Gui,Show, Hideで半透明を指定してからShowしても効かないし、 スタイル指定の+E0x00000020を使っても無理っぽい。
>>506 あの、一瞬半透明じゃない表示がされるのが気にくわないのかな。
画面領域外でウィンドウを表示させてからWinSet, Transしてやって、
画面内にWinMoveさせればできると思うけど。
>>507 助かった―、ありがと。やりたいことと反して井の中の蛙だったw
仮想デスクトップで切り替えたデスクトップ番号を浮かび上がらせようとしてたんだけど、
一瞬のちらつきで雰囲気が全然違くて…
まあ、仮想デスクトップ自体あんまり使わないんだけど、
同じく使わない付箋ソフトを組み合わせるといいかもと思って。
>>364 遅レスだけど、拾い物。tooltipっぽくはなる。
CoordMode, Mouse, Screen
loop,C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\*.jpg,0,0
{
Image = %A_LoopFileFullPath%
MouseGetPos, X, Y
ImageX := X + 20 ;Change "20" to your own needs etc.
ImageY := Y + 20 ; Same here
SplashImage, %image%, B X%ImageX% Y%ImageY%,sub,%A_LoopFileFullPath%
sleep 1000 ; Change this value as you wish. Lower numbers = much flashing, higher numbers = slow update
}
return
Lil Builderって保存できないの?
実行中のスクリプトを途中で止める方法はありますか?
すいませんマウス操作するスクリプトなので終わるまでマウス使えません
適当なキー(以下ではF12)に何か割り当て汁。 最後の行にでも追加すればいい ; 一時停止(トグル) F12::Pause ; スクリプト終了 ^F12::ExitApp ; 再起動 +F12::Reload
マウス制御乗っ取り系のスクリプト書いてんなら キーボードのみでタスクマネージャ起動してプロセス終了させるくらいは できるようになっといたほうがいいと思う。
デスクトップ作業領域の高さを一発で取得できないのか A_ScreenHeightからahk_class Shell_TrayWndの高さ分を引いて出す方法しかないのかね
517 :
72 :2008/10/21(火) 16:52:44 ID:7G2J1pBD0
ttp://lukewarm.s101.xrea.com/test/read.cgi/bbs/1146398137/65 流行らせるページの管理人のスクリプトを関数にして
ポインティングデバイスに触れている指の数を返り値にしたいんだけど。
そっくりほぼそのまま関数にして、bbb := Thumb()で代入、ツールチップ表示をすると
最初の数秒しか指の数の取得ができない。途中からいくら指を触れても0になる。
原因がわかりますか?関数にしなきゃいいんだろうけど、libフォルダに置いて手軽に使いたくて。
Malloc(size,flag=0x40){
return DllCall("kernel32.dll\GlobalAlloc","UInt",flag,"UInt",size,"UInt")
}
Thumb(){
TP_StartData:=0
TP_DW=0x01000000
ilen:=4*4
ibuf:=Malloc(ilen)
NumPut(TP_DW | 10 ,ibuf+4*0) ; TP_DeviceHandle,
NumPut(TP_DW | 729 ,ibuf+4*1) ; TP_PacketFingerInfo,
NumPut(TP_StartData ,ibuf+4*2) ; TP_StartData,
NumPut(0xFFFFFFFE ,ibuf+4*3)
olen:=4*2
obuf:=Malloc(olen)
dev=\\.\SYNTP
hDev:=DllCall("CreateFileA",Str,dev,UInt,0xC0000000,UInt,3,UInt,0,UInt,3,UInt,80,UInt,0)
DllCall("DeviceIoControl",UInt,hDev,UInt,0x80006004,UInt,ibuf,UInt,ilen,UInt,obuf,UInt,olen,UIntP,bytes,UInt,0)
numFingers:=NumGet(obuf+4) & 0xFF
return numFingers
}
「Thumb(){」の位置が違う 解放せずに何度も初期化しちゃ駄目だろ
>>518 あれっと思ってよくリファレンス見てみたら
上のMonitorの項目のOutputVarBottomっての使うのね
うっかりOutputVarだけで指定しちゃって失敗するわけだ
ようやく気づけたよ有難う
変数に、改行付きテキストが代入されている時 (FileRead で読み込んだり clipboard など) ある特定の1 行を抽出するにはどんな方法があるでしょうか?
>>519 どうも、助かりました。下の方の3行と他を関数で分けて解決できました。
>DllCallでは、関数実行のたびにDLLをロードして、関数終了後に開放している。
とあるんですが、ここで言う、解放せずに何度も初期化されているのは
kernel32.dll\GlobalAllocで確保されたメモリ領域ってことでしょうか?
>>521 簡単なところでは、
Loop, Parse, InputVar , `r`nで
A_LoopFieldを使って条件式で判定じゃないかな?
>>523 その方法はけっこう使ってるな。もうひとつ俺がよく使うのは
変数を全部、改行で分割する方法。
stringsplit,var,InputVar,`n
10行目を取りたければvar10を参照する。
全行数を知りたければvar0を参照する。
ほかは参照しない変数として放置。(var**を全部消す方法ってあったっけ?)
>>523 の方式と、この方式とで、環境や行数によってパフォーマンスが逆転する。
適材適所で使い分けるようにしているけど、法則はあるのかな?
>>521 は、単一の行だけ抜き出すなら、正規表現を使うと一行で書けるよ
正規表現のオプションm)で、^と$が行頭、行末にマッチするようになるので、
RegExMatch( Target, "m)^ほげほげ=(.*)$", macthStr )
とすると「ほげほげ=〜」で始まる行の、〜の部分が、matchStr1に入る
526 :
521 :2008/10/22(水) 11:28:58 ID:DzGl9JyB0
>>523-525 みなさんとても有用な情報ありがとうございました。
今回は
>>525 の正規表現がベストマッチでした。
RegExMatch で変数に出力するにはどうするのか良く知らなかったので
大変勉強になりました。
それにしても AHK って便利で面白いですね。
正規表現で、例えば「エラー」または「確認」を含むウィンドウタイトルを選びたい時 IfWinExist, (.*エラー.*|.*確認.*) と書いてもうまく動きません。 どのように書けばいいんですか?
SetTitleMatchMode, RegEx IfWinExist, (.*エラー.*|.*確認.*) { } と書いたんですが・・・どこが間違えてるんでしょうか?
IfWinExist, (.*エラ\x81\x5b.*|.*確認.*) で、どう? 「ー」(長音)は2byte目が 0x5b '[' だからエスケープが必要
>>529 すごいです。ありがとう!
うまくいきました
こういうの見る度に思う。 sjisはもう全廃にしたい、つかunicodeに汁、と。
AutoHotKey_Lに期待してるんだけどな
Python,Ruby,Javascript(fiber入り)とかで書けるように、 誰か一から作り直してくれたらいいのに バッチファイルに似た言語仕様はもう嫌だす
それじゃWSHだなw
JScriptでahk相当を実装すればいいんですね ってなんか違うw バッチファイル→ahk WSH(JScript)→? みたいなキー入出力に特化したのをお願い
AutoIt てのは AutoHotKey と同じことができるんでしょうか? なんかホットキーの設定から難しそうな気がするんですけど
var ahk = WScript.createObject("Autohotkey.Application"); ahk.hotkey("^c", new function() { if (ahk.isWinActive("ahk_class hoge")) { ahk.send("hoge"); } else { ahk.send("fuga"); } ); めんどくせぇ・・・
相対パス取得関数を作ったんだけど、 If InputVar2 contains %InputVar1% msgbox, 同じパス上かもね If InputVar1 contains %InputVar2% msgbox, 同じパス上かもね これって、If文を一行にまとめる事って出来ます? いまいち書き方がよくわからない。
質問の答えとは違うが関連ありそうなのを貼っとく Path_RelativePathTo(From,atrFrom,To,atrTo) ; 相対パスを作成 ; From : ベースパス ; To : 相対にするパス ; atr : ファイル属性を指定 ; ディレクトリ 0x10 (FILE_ATTRIBUTE_DIRECTORY) ; ファイル 0x20 (FILE_ATTRIBUTE_ARCHIVE) { VarSetCapacity(t,260,0) DllCall("SHLWAPI.DLL\PathRelativePathToA", Str,t , str,From, Uint,atrFrom, str,To, Uint,atrTo) return t } Path_CommonPrefix(p1, p2) ; 2つのパス名の先頭から共通するディレクトリ名を取得する { VarSetCapacity(t,260,0) DllCall("SHLWAPI.DLL\PathCommonPrefixA", Str,p1, Str,p2, str,t) Return t } あと部分一致を調べたいならcontains より ifInstring使ったほうが良くね?
>>539 おおっ、ifInstringでやれば問題なさそう。でも、結局ムダで使わなかったorz
Dllでできるんだね。まあ当たり前か、皆使いそうな機能だし。
無知って怖いわ。数十行にわたって、必死こいて作ってたw
その分、使い勝手が良いのがせめてもの救いか。
ありがと、Path関数として永久保存させていただきます。
RButton::send,x RButton & a::send,y この状況下で例えばキーボードのbを押し続けながら右クリックをしても コマンドが発動されないんだけど回避方法はありますか?
542 :
541 :2008/10/25(土) 07:08:58 ID:g2fVY4UH0
追記 一応Key history and script infoで見ると右ボタンの物理的な押し下げ、押し上げは認識してるけど Typeの所は押し下げ、押し上げ共sになってる >Type s: >フックによってイベントが隠蔽された(あるキーにホットキーが割り当てられていて、そのキーの 押し上げイベントには何も割り当てられていない場合、押し上げイベントが隠蔽される)
レッツノートのT5のNumLockキーをChangekeyで別のキーにアサインしました。 もちろん、Numlockの機能は無効になるのですが、Numpadがキーボードに出現するのは止められず、『U』を押すと『←』が入力されてしまいます。 つまりテンキーでNumlockがoffの時と同じになります。この現象はハード固有のものでしょうか?それとも回避策が確立しているのでしょうか?
>>543 たとえば、NumLockキーにPgDnキーをアサインして、Numlockキーを無効にしたのに、Numpad自体のOnOff機能が有効になっているということです。
PgDnを押すたびにNumpadがトグルでOnOffされてしまうので、Onのときに『U』を入力しようとすると『←』が出力されてカーソルが左に動くということです。
スレ違いじゃなかろうか。
キーカスタマイズソフトスレ逝け
入力されて欲しくないキーをリマップすればいいだろ
↓の解説をみて分からなきゃ諦めだな [Commands] Set[Caps|Num|Scroll]LockState SetStoreCapslockMode GetKeyState [KeyNames] Numpad[0-9]/NumpadPgUp/NumpadPgDn ところで、ファイルループの A_LoopFileName でハマったw 以前に 0x5C 含む文字のパス区切りが・・・なんてのを前に見た気がするが、 探すのも面倒なんで関数作った
>>543 元々インスコされてるサービスが優先的に制御してるか、ハード的に制御してるからじゃないの?
>>548 その関数、欲しい。俺も困ってた。
今は、ループ内で ifexist,A_LoopFileName して、
みつからなかったら飛ばす処理してごまかしてる。
わざわざ探さなくてもテンプレ入りしているが。 関数なら>1のなまず氏のmbstring.ahk Unicode仮対応版が欲しいなら>5のAutohotkey_L
まぁ、要らんのかもしれんが、1レスで終わるんで fileName := DirSplit(A_LoopFileLongPath) って風に逃げるための関数。 DirSplit.ahk ------------------------------------------------------------- return ; ShiftJIS対応 パス区切り関数 ; 1) 受け取ったパスの最後の "\" 以降を返す ; 2) 第2引数に変数名を指定した場合、1)以外を返す(最後の "\" なし) DirSplit(path, dirVarName="") { global local pos, char, name Loop { StringGetPos, pos, path, \, R%A_Index% if (pos > 0) { StringMid, char, path, %pos%, 1 code := Asc(char) if ((code >= 0x81 && code < 0x9f) || (code >= 0xE0 && code <= 0xFC)) continue } break } if (dirVarName != "") StringLeft, %dirVarName%, path, pos pos += 2 StringMid, name, path, %pos% return name }
あ、変数 "code" のローカル宣言してないw
>>553 thx。処理方法はもちろん、コーディング自体も参考になりました。
>>547 結局、そうしました。NumlockがonとOffで別のキーになるのは数字に統一しました。でも、+とかはon、Off関わらず同じキーですので、
Numpad on、Numlock Off時に不要だからといって文字にremapするとNumlock onで記号を入力したいときに困ってしまいます。
>>548 しばらく試行錯誤してみますね。ありがとうございました。
>>542 その場合は、ホットキーよりRemap
RButton::x
x & a::send,y
で、とりあえずやりたいことは出来るだろうけど。
具体的に何をやろうとするのかで違ってくるだろうね。
558 :
557 :2008/10/26(日) 01:21:17 ID:7WcQVMsl0
単純なのは下記。 111: keywait, RButton,D keywait, RButton send,x goto,111
不特定にキーが押されているかどうかを判別するにはどうしたらよいでしょうか? GetKeyState は特定のキー押下しか判断できないようです。 また Help の KeyName の項目には、There may be ways to detect certain keys and buttons using techniques such as DllCall, OnMessage, and RegisterRawInputDevices. とあるので、DllCall でできるのではないかと思うのですが、方法がまったく分かりません。 詳しい方、教えて下さい。
keywaitに複数のキーのうちのどれかが押されるのを待ちたい場合は、Inputコマンドを使う って書いてあるよ。
>>560 Input がありましたね。ありがとうございました。
Quick Launchを階層化したいときに表示させる">>"をクリックさせるか クリックしたのと同じ結果を生じさせることは可能でしょうか
563 :
541 :2008/10/27(月) 15:34:26 ID:6t+2VKdT0
>>558 とりあえずの具体例としてはゲームで移動中に拡張ボタンに割り振ったコマンドが空ぶる
>>557 はsend,yが発動しない
waitは一つのファイルで同時に二つ以上待てないなら避けたい。
下のでいけるかやってみる。
XButton1 & LButton::send,2
w & XButton1::
s & XButton1::
a & XButton1::
d & XButton1::
return
~w & XButton1 up::
~s & XButton1 up::
~a & XButton1 up::
~d & XButton1 up::
IfNotInString, A_ThisHotkey, %A_PriorHotkey%
return
XButton1::
*XButton1::
send,1
return
>>562 ; x, y に >> の真ん中あたりの座標をセット(Window Spyで調べる)
CoordMode, Mouse, Screen
MouseMove, %x%,%y% 0
Send, {LButton}
return
とか
; ToolbarWindow32n は変わる可能性あり(Window Spyで調べる)
; キー送りは環境によって変える(ここでは先頭にフォーカスがあるから逆順で1個)
ControlFocus, ToolbarWindow322, ahk_class Shell_TrayWnd, Quick Launch
Send, {Left}
return
>>562 座標をセットするやりかたはタスクトレイのアイコンの数で変化してしまうので
使えないと思っていましたが、二番目のプランを参考に下の方法で成功しました。
Quick Launchは便利なのですが">>"の幅が狭くて何とかしたいと思っていました。
ご協力感謝します。
(ちなみに二番目のプランでは何も起こりませんでした)
#NoTrayIcon
WinGetPos, , Y1, , , ahk_class Shell_TrayWnd
ControlGetPos, X, Y2, Width, Height, ReBarWindow321, ahk_class Shell_TrayWnd
X += Width
Y1 += Y2
Y1 += Height
MouseClick, LEFT, X, Y1, 1, 0, D
あ〜、下のはフォーカスだけ当ててるわ。 ↓を先頭に追加でいけるかな。まぁ解決したからいいんだろうけど。 WinActivate, ahk_class Shell_TrayWnd
現在AutoHotKeyを流行らせるページの「何も操作をしていないときに実行」を便利に使わせてもらっています。 そこで、週に一回だけ実行する動作もさせてみたくなってきました。 これができればタスクスケジューラよりも楽にバックアップとかをさせやすくなるからです。 しかし、いろいろと試しては見たのですが、結局うまくいきませんでした。 曜日で分岐させることは可能なのでしょうか? もし可能ならば教えていただきたいです。
> FormatTime, wday, %A_Now%, WDay で曜日(1=日曜, 2=月曜, ...)の取得が可能だけど... タスクの実行管理の方が面倒な感じ。 たぶん、スタートアップか何かで常駐させるんだろうけど、 OSの再起動とかログオフ・ログオンで再度プロセスが走る事も考慮するとなると・・・ タスク最終実行(完了)日時を ini か何かに書いて、 再度実行しないようにするとかの仕組みが必要・・・かもしれない。
sample.ahk −−−−−−−−−−−−−−−−−−−−−−−−−−−−−− msg= ( | ∧ ∧ |/ ヽ ./ .∧ | `、 / ∧ |  ̄ ̄ ̄ ヽ | ̄ ̄ ̄月曜日 ̄ ̄ ̄) | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄.\ |ヽ-=・=-′ ヽ-=・=- / やあ |:: \___/ / 週末にやり残した仕事が君を待ってるよ |::::::: \/ / ) if A_WDay=2 { msgbox,%msg% } −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
いやぁぁぁああああああああああ
ホットキーのサブルーチンラベルにつける修飾シンボルで $を最初につけるときと何もつけないときの違いはなんですか?
「タスクトレイアイコン操作」で特定のトレイアイコンを非表示にする方法ですが、 name=とりあえず例としてAutoHotkey.exe cnt:=Tray_GetCount() DetectHiddenWindows,On Loop,%cnt%{ Tray_GetInfo(A_Index,hwnd,uid,msg,hicon) WinGet,pn,ProcessName,ahk_id %hwnd% if(pn=name){ Tray_HideButton(%hwnd%,%uid%,1) } } DetectHiddenWindows,Off return で動きません。どうするべきなのでしょうか? ちなみにTray_HideButton(%hwnd%,%uid%,1)をMsgBox,hwnd=%hwnd% uid=%uid% に変えて値を確認し、 変数では無く確認した数値を入れたTray_HideButton()を実行するとちゃんと動きます
%
>>573 そこは見ていたのですが改めてみたらなんとなく分かってきたような気がしてきました。
#UseHockがデフォルト(OFF)のときはAutohotkeyが強制的にフックするか、レジスタホットキーで取得するかの違いでいいんですよね。
>>575 カッコの中の%は付けちゃダメなんですね
お騒がせしました
578 :
567 :2008/10/28(火) 21:43:28 ID:uGuC8YLv0
>>568-570 おおー、そんなのがあったのですか!
タスクトレイ付近にある時計辺りから取得しようとがんばってました。
全く見当外れでしたね。。。
とりあえずこれで特定の週にのみ動作するスクリプトができるようになったので
また一つ便利になりました。
> OSの再起動とかログオフ・ログオンで再度プロセスが走る事も考慮するとなると・・・
日曜日にスクリプトを実行するとして、
特定のファイル(空のテキストファイルとか)が指定されたフォルダにあるかどうかチェック
↓
なければ、作成してからスクリプト実行
あれば、なにもしない。
月〜土曜は、その判別用ファイルを削除する
こんな感じでなんとかなりそうな気がしました。
日曜以外PCを使わない人だとうまくいきませんが、
私は1週間一度もPCをつけないということはたぶん無いので大丈夫そうです。
というか素人的にはこの程度しか思いつかないです。。。
また今度時間のあるときに試してみます。
Progress とか Splash で枠なしで色透過して情報表示すると、 フォーカスも取られないし、フォントとか変えられるし、ちょっとカッコエーw Tooltipだと何か陳腐な気がしてたんで。まぁ、自己満足なんだが。 Progress, B1 P0 y%y% w%w% h%h% CB%fgColor% CT%fgColor% CW%bgColor% FS%fSize% ZH%barHeight% Progress, Show Progress, %value%,%subMsg% WinGet, id, ID, ahk_class AutoHotkey2 WinSet, TransColor, %bgColor%, ahk_id %id%
ウィンドウが出現した瞬間一度だけ発動するスクリプトってどう書けばいいの? 1秒ごとにウィンドウリストを取得して比較してみたいなことをやらないと駄目なのかな。
WinWait
iniファイルへの一括読み書きについて相談です。
iniwriteでセクションをSection、キーA,B,C,D,Eで5回書くと下記のようになります。
[Section]
A=なんたら
B=かんたら
C=あいう
D=えお
E=かき
ほしいkeyがわかってるとき、1つ取得したいときは、Ini,Readでkeyを指定し、
読めたらOK(=keyがすでに存在する)で、ERRORが返却されたらkeyが存在しない、
と分岐できました。
左のKeyが数字連番のときは、Loopで回しつづけ、エラーが帰ったらBreakして全取得出来ました。
しかし、この事例のように、左のkeyが数字連番ではなくバラバラな場合、このセクションにある
キーと値を、特定のキーで指定せず全部読み出すには、どうしたらいいでしょうか。
考え方だけで十分なので、うまいコツがありましたら教えていただけると嬉しいです。
参考ページ(流行らせるページ管理人さんthx)
http://lukewarm.s101.xrea.com/commands/IniRead.html
buf=A,B,C,D,E Loop,Pause,buf,CSV { IniRead,OutputVar,c:\hoge.ini,Section,%A_LoopField% } それともキーそのものが不定で事前にわからないってことかな それだともうちょっと工夫する必要がある。
LOOP,READ して、 1) /^\[([\[\]]+)\]/ にマッチしたら、マッチ1($1)を現セクションにする 2) /^(\w+)\s*=\s*(.+)$/ にマッチしたら キー名=$1、値=$2 毎回読むのは面倒なので、仮想配列(ハッシュ)みたくする $ini_%sectionName%_%keyName% := value ※ キー名、セクション名が[0-9a-zA-Z_]でないときはエスケープしたりする
>>584 ,
>>585 ありがとうございます。そうです、キー名がバラバラなんです。
iniR/Wコマンドに頼らず、filereadで読み込む方法でやってみます。
正規表現の指定法も参考になります。どうもありがとうございました。
ミュートしてるときにボリューム変更しても変わらんので腹が立つ(w のを解消 Volume_Mod(d, device="MASTER") { SoundSet, Off, %DEVICE%, Mute SoundGet, volume, %DEVICE%, VOLUME volume := volume + d SoundSet, %volume%, %DEVICE%, VOLUME return } Volume_Up:: Volume_Mod( 1) Volume_Down::Volume_Mod(-1) +Volume_Up:: Volume_Mod( 1, "WAVE") +Volume_Down::Volume_Mod(-1, "WAVE")
589 :
586 :2008/10/30(木) 00:16:42 ID:/IgDIppv0
>>587 すばらしいスクリプト、ありがとうございます。
一度呼んだセクションに対するキャッシュ機能まで入ってるんですね。
Ini_KeyList()ファンクションが、今回の用途にそのまま適用できそうです。
ノートPCで NumLock を殺して Ctrl+NumLock を NumLock にしよう思い、 まず、 NumLock:: Return とだけ書いたきました。 これで NumLockを押しても LEDのON/OFFはしなくりましたが、 例えば k を押すと down が入力され、 Fn キーが効いた状態になってしまっているようです。 NumLock を完全に無効にすることはできるでしょうか?
Autohotkey起動時にいくつかのWinWaitActiveを同時に待機状態にしておきたいのですがどうすればできますか? 例えば二つを待機させておきたいときにサブルーチンを二つ作りAuto-executeセクションでSetTimerを用いて二つに飛んでもうまくいきませんでした。 サブルーチンは以下のような感じです。 wait1: WinWaitActive,hoge1 msgbox,a return wait2: WinWaitActive,hoge2 msgbox,b return
グループを使って、Waitの後で分岐する GroupAdd, WinGroup, hoge1 GroupAdd, WinGroup, hoge2 WinWaitActive,ahk_group WinGroup WinGetTitle,WTitle Msgbox %WTitle%
分かりました。ありがとうございます。
なんでジョイパッドのボタンをsendで送れないんだろう あれば便利な使い方出来そうなんだが あとXYの判定のほかにJoyLeft::とかあれば最高だった
>>590 テンプレ>3
Lock系キーカスタマイズは地雷、更にノートは機種依存が強いので動作も不定
Unicodeでエンコードされたテキストファイルを扱いたいのですが、TransformではUTF-8しか扱えないようです。 使いたいのがUTF-16のテキストなのですが、これは扱えないのでしょうか。
>>597 ですが、やっているのはFileReadで読み込んで、Transformで変換という手順です。
文字コード関係はnkf使ってる
UTF-16のビット列の仕様を読んで気合で変換すればいいんじゃね
気合いで変換テーブルつくるのもめんどいし、LEとBEの判別とかもめいどいな。 つか TransFormで出来るの知らなくて、UTF-8のはつっくった事がある。捨てたけどw たしかこんな感じの関数作ってバイト毎に回して参照してた UTF8_2_SJIS(code) { static $E38080 = " " static $E38081 = "、" : (すごく省略) StringUpper, c, code return %c% } 先人の知恵を借りてパイプしたりリダイレクトたしたりした方が良いね。
あ゛、 return #%c% ね。一応。
「どこでもホイール」というフリーソフトのように ホイール回転によるスクロールに対応していないソフトでも スクロールできるようにしたいんですが、AHKで実現できますか?
できる
是非教えてください
>>606 参照先の
>>589 読んでどこでもドラッグ関数作ってみたけど、
意外と便利だねこれ。
ライティングソフトのウィンドウ移動できなくてウザかったのが解消された。
コロンをremapするのに2時間かかった。 欧米の人は+`;で扱うからいいのかな? でも、remap先にするのも大変だった。 マニュアルには何も書いてないし。。。
修飾キー(^、!、+)の対象範囲を知りたいのですが、HELP見ても書いてありません。なんらかのリファレンスをご存知の方はいらっしゃいますか? いろいろ試した結果、文字キー以外はShiftだけが有効だと思うのですが、正しいでしょうか? ^up::c → × !up::a → × +up::s → S(大文字) ^up::pgup → × !up::pgup → × +up::pgup → ○
皆さんはAutoHotkey.ini編集する際になんのテキストエディタ使ってるんですか? 自分はTeraPadでやってるんですが色分け機能が最適化されていなくていまいちで
emEditor
xyzzyのahk-modeかな
秀丸 自力で色定義作りたくないならExtras\Editorsの中から適当なエディタ選んで使えばいい。 現状で使ってるエディタで使いたいならAHK or エディタマクロで シンタックスファイルコンバートして使えばいい。
サクラエディタ
同じくxyzzyのahk-mode
なんでAutoHotkey.iniなんだろうな Default.ahkとかならahkモードで認識してくれる エディタ多そうなのに
コンビネーションキーの一つめのキーを、 コンビネーションキーとして発動した時のみ無効にするにはどうしたらいいのでしょうか?
>>616 AutoHokey.ahkにしておけばいんじゃね
>>617 a & b::Send,c
a::Send, a
>>609 多分正しくない。流行らせるページRemapの項参照。
Remapでは修飾キーの状態が残る。
^up::c ではCTRL押しながら↑を押すとCTRL+Cが入力される。
RemapじゃなくてSend使えば解決すると思う。
下記のようにファイルが置いてあるTXT全てに対して処理をしたい場合 D:\hoge\a\d.txt D:\hoge\b\e.txt D:\hoge\c\f.txt 下記のようにして書いてみたのですが、これだとhoge以下の全てのtxtを探しに行ってしまいます hogeから一つ下のフォルダを探すだけでいいのですがLoopにどういう条件を書けばいいのでしょうか dir = D:\hoge Loop, %dir%\*.txt, 0, 1 { msgbox,%A_LoopFileFullPath% }
まず、ちゃんとリファレンスを声に出して上から10回読む そこで質問だが、Loopの最後のパラメータは何だ?
・・・もしや最後を0にしてhogeのフォルダだけを探して更にループを入れ子にしてtxt探せばいいのか すみません頭回ってませんでした ありがとうございました
[cmd.exe] dir /s /b *.txt [ahk] loop, %dir%\*.txt, 0, 1
AHK で作成したウィンドウ上でテキストのセンタリングをしたいのですが、どのようにしたら良いでしょうか。 やりたいのは、以下のスクリプトを 30 分おきにタスクスケジューラーから起動することです。 問題は下記の Gui, Add, Text の部分です。画面サイズは 1280x800 になっています。 #NoEnv #NoTrayIcon #SingleInstance FORCE SetBatchLines, -1 SetTimer, Esc, 60000 WinGet, proc, ProcessName, A CoordMode, Mouse, Screen Gui, +LastFound +AlwaysOnTop +ToolWindow -Border Gui, Color, FFFFFF Gui, Font, c000000 s48, Calibri Gui, Add, Text, x380 y200, % A_YYYY "/" A_MM "/" A_DD " " A_Hour ":" A_Min Gui, Add, Text, x200, % """" proc """ is currently activated." Gui, Font, s81 w600 Gui, Add, Text, x10, Review your current actions. Gui, Show, x0 y0 w1280 h800 Return Esc:: ExitApp
Input, I_Word, V, {enter}{escape}{space}`, ではカンマがEndKeysにならないね。`,を{vkBC}とかにしないと使えない… IntelliSense.ahkで軽くはまった。
>>625 ウィンドウの横幅いっぱいに textbox 広げてオートセンタリングでいいかと
:
Gui, Add, Text, x0 w%A_ScreenWidth%, hoge hoge
:
Gui, Show, x0 y0 w%A_ScreenWidth% h%A_ScreenHeight%
ちなみに、どう使うか知らないけど↓をやってみても面白いかも Gui, Color, FFFFFE Gui, +LastFound WinSet, TransColor, FFFFFE
630 :
625 :2008/11/03(月) 04:47:30 ID:kwJmUBDF0
>>627 x0 w%A_ScreenWidth% Center でセンタリングできました。
ありがとうございました。
>628
これ OSD 的に使えて面白いですね。
勉強になりました。
>>619 RButton & WheelDown::のようなホットキーだったのですが
右ドラッグが出来なくなりました。
何か解決方法はあるでしょうか?
後効くソフトと、効かないゲームがありました
どなたか教えてください。 マウスで左クリック→右クリックをすると、例えば「Alt + X」を押した動作をさせたいのです。 どう記述すればいいでしょうか? AHK入門者なもので、どこを参考にすればいいかすらさっぱりです…orz
633 :
632 :2008/11/03(月) 19:00:10 ID:gLp/aS070
ちなみに、その動作はX-Finderというソフト上でのみさせたいのですが、 #IfWinActive ahk_class TXFinder.UnicodeClass LButton & RButton::send ~!x return #IfWinActive と書いたら、一応希望の動作はしたのですが、なぜか他のマウス動作(クリックなど)が効かなくなりました…。
~RButton & WheelDown:: こうしたら?
635 :
632 :2008/11/03(月) 19:20:48 ID:gLp/aS070
>>634 ありがとうございます!
LButtonとRButtonの前に「~」を付けたらうまく動作できました。
大感謝です。
636 :
634 :2008/11/03(月) 22:43:06 ID:vLH+jahS0
すまんw
>>631 にレスしたつもりで
>>632 は読んでもいなかったんだが
解決したようでなにより。
昔自分もそれで悩んだが結局解決できなかった。 仕方ないのでRButtonをドラッグに使用するアプリでは RButtonをコンビネーションに使わず、 マウスのサイドキーをコンビネーションしてごまかした。 具体的にはfirefoxでRButton & WheelupでPgUpとか やりたかったんだけど、 画面端でwheelupするとPgUpするようにしたら そっちの方が便利で必要なくなったのもある。
639 :
名無しさん@お腹いっぱい。 :2008/11/04(火) 09:03:39 ID:rNyuG3M00
リマップしたものを更にリマップすることは可能ですか? > XButton2::F24 > +F24::!F4 このように書いてみたのですが、Shift+マウスの拡張ボタン2を押してもAlt+F4は発動しませんでした…
Gui,Showでウィンドウを表示する時に背景だけ透明にして文字は透明にしないことって可能ですか? 背景をwhiteにした後、WinSet, TransColorでwhiteを透明にしても 背景と文字の両方ともが透明になってしまいます SplashImage、SplashText、ProgressやToolTipでも試してみましたがうまくいきませんでした
>>640 実際に俺は
>>628 を試したらOSDみたいのが簡単に出来て、驚いてるんだけど、これじゃ駄目なの?
解決しまいsた WinSetのWinTitle指定がうまくいってなかったみたいです ありがとうございました
; OSD TV時計もどきw $_clock_gui_no := 50 $_clock_gui_pos := "tl" ; x(Left, Right, Center), y(Top, Bottom, Middle) Gui, %$_clock_gui_no%:Default Gui, +LastFound +AlwaysOnTop +ToolWindow -Border -Caption Gui, Color, 000001 WinSet, TransColor, 000001 Gui, Font, cFFFFFF s48, MS Gothic ; 色・大きさ・フォントをいじるのはココ Gui, Add, Text, x0 y0 vEdit1, 00:00 GuiControlGet, p, Pos, Edit1 gx := (InStr($_clock_gui_pos, "R", false) > 0) ? A_ScreenWidth - pw : (InStr($_clock_gui_pos, "C", false) > 0) ? (A_ScreenWidth - pw) / 2 : 0 gy := (InStr($_clock_gui_pos, "B", false) > 0) ? A_ScreenHeight - ph : (InStr($_clock_gui_pos, "M", false) > 0) ? (A_ScreenHeight - ph) / 2 : 0 Gui, Show, x%gx% y%gy% w%pw% h%ph% Hide SetTimer, ClockGui_Timer, 500 return ClockGui_Timer: Gui, %$_clock_gui_no%:Default colon := (colon == ":") ? " " : ":" GuiControl, , Edit1, %A_Hour%%colon%%A_Min% Gui, +LastFound WinGetPos, wx, wy, ww, wh CoordMode, mouse, Screen MouseGetPos, x, y cmd := (x >= wx && x <= (wx+ww)) && (y >= wy && y <= (wy+wh)) ? "Hide" : "Show" Gui, %cmd%, NA return
644 :
名無しさん@お腹いっぱい。 :2008/11/04(火) 21:04:20 ID:XxJcEbeC0
1クリックでいまマウスカーソルが上にある画像を保存、 ファイル名はクリップボードの中身になる、ってできますか? 出来るならやり方は自分で調べるので簡単か難しそうかだけ 教えてください。
もうちょい具体的な例出してくんないとアドバイスのしようもない
>>645 ぜんぜん関連性の無い板での誤爆レスを、
たった1分でAHKスレの質問に対する回答だと判別するとは・・・
中田氏好きは仕事早杉
カーソルをはやく動かしたくてキーリマップで {UP}{UP}{UP}{UP}{UP} を割り当てたんだけど、 動きがたまってしまい、キーを離した後もしばらく{UP}してしまいます。 キーが溜まらない方法ってありますか?
SendMode SetKeyDelay
windowsの設定でキーリピート速度あるていど早くできるよ。
>>649 速度は申し分ないけどXPで^m押しっぱなしにすると
mが表示されまくって使い物にならない…
流行らすページ見れる?
ステータスバーのテキスト取得方法について質問です。 例:フォアグラウンドのIE6のステータスバーのテキストを取得 ControlGetText,var,msctls_statusbar321,A これで、左下の「ページが表示されました」という文字列は取得できましたが、 右に出る「印刷中」とか、ゾーンを示す「インターネット」の部分の文字を取得したいです。 たぶん、ステータスバーの左から3番目のテキストを取得みたいな順番を指示する オプションがありそうな気がしますが発見できませんでした。 この例のとき、右下のテキストを取得するには、どうすれば可能でしょうか。
StatusBarGetText
>>657 なんと!!そんなコマンドがあったのですね。
あっさりできました。ありがとうございます。
ControlGetTextやControlSetTextを使ってコントロール上のテキストを取得したり変えたりしたいんですが wxWindowClassNR16というClassNNからはうまくテキストを取得・変更できません(似たような見た目のEdit4というClassNNからは取得・変更できるのですが・・・) なにか特別な取得方法があるのでしょうか? それとも別の場所にテキストがあるのでしょうか?(名前にEditがあるClassNNは全て調べました)
誰かウインドウクラスがTApplicationなウインドウを "左右に並べて表示"したときに二つ分のウインドウとして認識される問題を解決した "左右に並べて表示"をAHKで作ってくれまいか?
>TApplicationなウインドウ TApplicationコンポーネント使ってるアプリを探すところからやらせるのかよ せめて具体的なアプリ名の一つ二つくらい提示したら? 該当アプリ使ってる奴が調べてくれるかもよ
多分デルファイで作ってるやつがそうだと思う。 Jane doe StyleとかJTrimとかXTMemoとか。
WinGet したらこうなった。ほぉ・・・ [3 / 10] hwnd : 0x3130502 pid : 3412 Title : 『AutoHotkey スレッド part6』 にレス Class : TWriteForm Exe : C:\Program Files\Jane Style\Jane2ch.exe Window : [Normal] pos(170, 129), size(642, 517) [4 / 10] hwnd : 0x11303f6 pid : 3412 Title : Jane Doe Style 【ソフトウェア】 - AutoHotkey スレッド part6 Class : TMainWnd Exe : C:\Program Files\Jane Style\Jane2ch.exe Window : [Normal] pos(3, 0), size(796, 738) [5 / 10] hwnd : 0x16a03c0 pid : 3412 Title : Jane Class : TApplication Exe : C:\Program Files\Jane Style\Jane2ch.exe Window : [Normal] pos(512, 384), size(0, 0)
アクティブウインドウを強制終了させるahk教えてください ありがとうございました
「無変換キーを押すとアクティブウィンドウ以外を最小化」といった動作をさせるには どう記述をすればいいでしょうか? ご存知の方がいらっしゃれば、ご教示頂きたいです。 よろしくお願いします。
まず自分で考えればいいのに。そうじゃなきゃ他ソフトを使えばいい。 AutoHotkeyにこだわる必要ないと思うよ。
ほんとだな ご存知とか言うレベルじゃないな ちったー考えろ
669 :
665 :2008/11/07(金) 01:27:41 ID:tP+BqFJ50
>>667 ヒントありがとうございます。
やってみます。
; アクティブ窓以外を最小化(+戻すトグル) ; 戻す方は WinActivate なんでキモいかも #1::HideNoActiveWindows() #2::HideNoActiveWindows(true) HideNoActiveWindows(toggleRestore=false) { static LastMinimizeList NG_EX_STYLE := 0x00000080 ; WS_EX_TOOLWINDOW if (toggleRestore && LastMinimizeList != "") { Loop,PARSE, LastMinimizeList, `, WinActivate, ahk_id %A_LoopField% ; アニメ効果Onだと厳しい? LastMinimizeList := "" return } DetectHiddenWindows, Off WinGet, me, ID, A WinGet, list, List Loop, %list% { hwnd := list%A_Index% WinGet, MinMax, MinMax, ahk_id %hwnd% ; 最小化してたら無視 WinGet, ExStyle, ExStyle, ahk_id %hwnd% ; 除外対象用 WinGetPos, ,,w,h, ahk_id %hwnd% ; TApplication等誤爆防止? if (hwnd == me) || (MinMax == -1) || (w == 0 && h == 0) || ((ExStyle & NG_EX_STYLE) > 0) continue PostMessage, 0x112, 0xF020,,, ahk_id %hwnd% ; (=WinMinimize) LastMinimizeList := hwnd . "," LastMinimizeList ; 逆順 } LastMinimizeList := toggleRestore ? LastMinimizeList . me : "" Sleep, 100 WinActivate, ahk_id %me% ; これがないと非アクティブになる... }
質問者じゃないけど、正常に動いたよ。これは便利だな
672 :
665 :2008/11/07(金) 23:50:14 ID:tP+BqFJ50
>>670 ありがとうございます!!
早々に行き詰まっていたので、書いてくださってすごく嬉しいです。
丁寧な説明まであって感動です。いい人すぎる。
でもなぜか実行してみるとエラーが出ました…orz
>>671 の方は正常に動いているようなので、きっとこちらの環境が原因だと思います。(因みにXP sp2です)
原因はこれから調べていこうと思います。判明したら報告させて頂きます。
↓一応エラーダイアログの内容をそのまま貼り付けておきます。
Error: This line does not contain a recognized action.
Specifically: static LastMinimizeList
Line#
---> 006: {
The program will exit.
全角スペースは消した?
674 :
665 :2008/11/08(土) 00:15:42 ID:hoEhejRR0
>>673 ありがとうございます!まさにご指摘の通りでした!
全角スペース…真っ先に考えるべきところでしたね。でも多分自分じゃなかなか気付けなかったと思います…。
本当に助かりました。
これで完璧です。希望通りの動作です。
手助けしてくださった方々、本当にありがとうございました!
使ってるエディタで全角スペースは目立つように設定しておくといいよ 基本だ
貼ったときにインデントがあった方が見やすいけど・・・やらん方がいいのかな Janeとかなら、アンカーとか、IDで見りゃいいんだけど... /* チラシの裏 Guiの機能を丸々関数コンポーネント化しようとすると、どうしてもGUI番号の設定で実行時エラーになる #NoTrayIcon HogeGui_Init(10, "あああ", "いいい", ...) return HogeGui_Init(guiNo, opt1, opt2, ・・・) { Gui, %guiNo%:Default ; ← ここでランタイムエラー Gui, Add, HogeBox, %opt1% : Gui, Show } 結局は関数外でどうにかするわけだが、関数からGosubだけ無理だった・・・んでタイマーつかった HogeGui_Init(guiNo, opt1, opt2, ・・・) { global hoge_gui_no hoge_gui_no := guiNo SetTimer, HogeGui_CreateGui, 0 } HogeGui_CreateGui: SetTimer, %A_ThisLabel%, off Gui, %hoge_gui_no%:Default ; ← ここでランタイムエラー Gui, Add, HogeBox, %opt1% : Gui, Show return */
あ、コピペ消してな。ま、チラ裏なんでw
>>678 UPX使ってるからじゃねぇの?よく分からんが
キーの統一が出来るのが凄い便利だね。 CTL+Cがコピーじゃないこともあるし、それを統一するのをメインに使ってる。
昔は、AHKって繭よりレスポンス悪くて、モデファイドキーの設定が 制限あると思ってたけど、 レス眺めて参考にして設定作ってったら、十分いけるわw 感謝感謝。 Spaceをモデファイドキーにするようになったら CapsLocが使えなくても問題なくなったし。USBメモリから使えるのも便利だし。 こっちに移行するかな。
被ってるけど基本的には違う目的だからなー。AHKだけで出来るならその方がいいんじゃね?
他の起動中プロセスのPIDから起動時コマンドラインを得る方法って、 ReadProcessMemoryするしかないのかね? 一応気合いで実装して問題なく動いてはいるんだけど、 やり方がやり方なだけになんか不安だ… もし他に方法知ってる人いたら、教えて欲しい…
kwsk
>>683 そんな凄いことが出来るのか。やりかたをぜひとも教えてほしい
>>684 >>685 ttp://lukewarm.s101.xrea.com/up/file/091.zip UPしてきた。あんまり信用しないでね。俺自身不安だから。
中にコメントで書いてるけど、一応方法を。
各プロセスの0x00020044にコマンドラインが書かれてるアドレスへのオフセット、
0x00020042にバイト数が書かれてるからそれをReadProcessMemoryで読み出し、
さらにその情報からコマンドライン文字列を得る。
wcharで書かれてるからWideCharToMultiByteで変換かける、って感じかな。
仕様書とかあったの見つけて作ったわけじゃないんで、ホント信頼性が不安。
一応20個ほどのソフトで試したけど動いてるから、問題はないと思うんだけど…
thx。DLしました。参考にさせていただきます!
firefoxとfirebugみたいに同じahk_classのものってどうやって切り分ける? タイトルしか方法はないのかな?
ウィンドウスタイルが異なるなら・・・ でもfirefoxだと大体同じだからなぁ・・・ firebug入れてないけど、メインウィンドウとTabMixPlusのオプション窓の違いは・・・ WS_MAXIMIZEBOX, WS_THICKFRAME の有無だった って風にやるとか
>>689 そうだったのか、情報ありがとう。
というか、まさかMouseGesture.ahkに入ってたとは…
マウスほとんど使わないからノーチェックだった。
こんな簡単にできるなんて…
なんか危険っぽいんで
>>686 のファイルは削除しときました。
GuiのListViewで 選択したり追加したり消したものを 随時取得してそれらの項目をまとめて処理っていうのをやりたかったんだけど リファレンスが難しくてついにコピペの壁にぶち当たった 一連のプログラムの例は難しいね 個別にサンプルがないとコピペしかできない素人には手がかりがなくてお手上げ
LV_* は独立してメニューにあってもいい気がするな ■ フォーカス行のmカラム目の値を取得 row := LV_GetNext(0, "F") LV_GetText(row, value, m) ; valueに値が入る ■ 選択された行に対して何かする row := 0 Loop { row := LV_GetNext(current, "C") if (row == 0) break 〜 行番号変数 row で何かする〜 } グリッドって位置を変えたり何かしてグダグダになるから、 最初に、getter, setter 作った方が後で楽かも
プロセス起動して、標準出力を得るのって、流行ページの [プロセスを起動して標準出力を読み書き] みたいな方法しかない? なんだか分からんけど、md5sum.exe 標準出力がとれずに困ってる。 GetMd5(file) { cmd = md5sum "%file%" pid := PRun(cmd) out:=PRead(pid) PWaitExit(pid) PClosehandle(pid) return out } でいけるはずなんだが、、、 cmd = md5sum ならusageの標準出力とれる・・・。
>>695 その関数コピペして使ってみたけど普通に取れたよ。
cmd = md5sum
にすると戻ってこないで永久待ちになってしまう。
あとファイル名間違ってると内容が空。
俺のとはmd5sum.exe自体が違うみたいだから
参考にならんかもしれない…
そか。色々あるから変えてみるかな。
左Winキー + hjkl でカーソル移動はできたんだけど 左Winキー + L の時だけ、右へのカーソル移動と同時にPCロックがかかってしまう。。 このソフト内で 左Winキー + L のロックだけを無効化することはできる?
先頭に$を付ける
>>699 レスサンクス
だけどVista環境じゃできなかったぜ。。。
XPだと、下ので、Win+Lが無効になって、Rightが効くようになるんだがなあ。
#h::left
#j::down
#k::up
#l::right
#UseHookは?
>>700 Space & j::Send,{Down}
Space & h::Send,{Left}
Space & k::Send,{Up}
Space & l::Send,{Right}
Space::return
+Space::Send,{Space}
Space up::Send,{Space}
あきらめてスペース使ってるorz
ついでにChgKey使ってスペースの左右にLCtlとRAltして、
~LCtrl up::Send,{vk1Dsc7B}
~LAlt up::Send,{vk1Csc079}
でIMEのon/offとか。難しい機能使えん・・
GUIウィンドウのコントロールの無いところをドラッグしてウィンドウを移動したい。 GUIはタイトルバーなし (-Caption)。 OnMessageで、 WM_MOUSEMOVE(0x200) 受け取る関数を作る で、LButton押下されたら初期押下地点からの移動差分だけ WinMove してるんだが 追従性が悪くてマウスポインタが窓の外にでると駄目になるorz こういう窓ってよくあるけど、レスポンスよく実装するにゃどうすればいいのかな。
>>703 OnMessage(0x84,"WM_NCHITTEST")
WM_NCHITTEST(){
Return 2
}
でどうだろう。
ahk2exeでコンパイルしてEXE化したあとのファイルについて質問です。 コンパイル前のスクリプトに戻して改造されると、困るものを制作しています。 困る理由は、ウェブアクセスを伴うので、ユーザ側でアクセス頻度を変えてしまうと、 サーバ側に迷惑がかかり、しいては配布元へのクレームが想定されるためです。 このような想定外の改造を防ぐには、コンパイル済みEXEから、元スクリプトの抽出を 防止すればよいと思いますが、ahkをパスワードつきでコンパイルしてもパスワードが わかってしまった場合、 ・完全に元のスクリプトに戻すことが可能 ・一般的な逆コンパイルと一緒で、ほぼネイティブコードの抽出しか出来ない の、どちらでしょうか。
ちなみに、ahk2exeで最弱なコンパイルを施し、exe2ahkをつかって展開したところ、 ・スクリプトに書いてあった「;」や「/*・・・*/」など、実行に無関係なデータは消滅していた ・スクリプト内の変数の文字、タブ、空行の位置は、すべて元の状態が再現できていた ・一度も使われていない関数も含め、includeした内容はすべて収録されていた ことがわかりました。とくに3番目は、 #includeなどで、関係ない関数を大量に 収録したのを一緒にコンパイルすると、無用な漏洩事故につながる恐れありですね。
> パスワードつきでコンパイルしてもパスワードがわかってしまった場合 そもそも、この想定ってどうなの。容易に分かりづらいパスワード設定すりゃいいんでないの? パスワード生成機で512桁のパスワード作ってコマンドラインで渡したけど普通にコンパイル通ったよ。 そもそもインタプリタ型の言語の簡易コンパイルに堅牢性を期待する方が間違いのような
仕事でシビアな使い方をするつもりにしては下調べが甘い、つか 質問する前に現スレを [ahk2exe] なり [コンパイル] なりで検索するくらいするべきだと思うが。 そうすりゃ/nodecompileなんてすぐ出てくる
>>708-710 レスthx。下調べが甘いか辛いかはわからないけど、じつは俺
>>395 なのよ。
あのあと本家を含めて各所回ってみたけど、逆コンパイルについての情報は
解析目的で使用されることが多いためか、情報自体が少ないようで。
コンパイルしたexeには、そのexe自体に、暗号を解くコードと、鍵自身が
同梱されてるわけだから、それを簡単に解く裏ツールがあるかが気になって。
調べた範囲では、そのようなツールは見つからなかったけど、
元々がオープンソースだから、識者が作ろうと思えば簡単に出来るのだろう。
ただ、大前提として、
>>708-709 の言うとおり、堅牢性を必要とする場所にahkは
適さないことがわかったので、コア部分は、別の方法で再実装することにします。
コンテキストメニューってWinMenuSelectItemで選択できたりしないの?
実のところ、現在公開されているソースファイル群の中には、 ahk2exeで暗号化する部分やファイルを出力するI/O部分のソースは含まれていなかったりする (ビルドは可能なように、ヘッダとlibは含まれているけど) なので、どのようにエンコードしてるかなどの詳細は、バイナリから解析するしか方法が無い exe2ahkについてもソース非公開だし、/nodecompileオプションのところのソースも何だかわざと曖昧にしてる感じもする
スクリプトアイコンだけど タスクトレイの設定で隠す設定にしてるのに スクリプトを一旦終了させて再度起動する度に元に戻るんだけど これはどうしようもないのかな? 因みに使ってるスクリプトは、MouseGesuture.ahkです。
AHKで、Windows上で動いているプログラムのPIDを 一括取得するコマンドってありますか? コマンドラインだとtasklistコマンドが該当します。 なんかPCが遅いと思っていると、特定のプログラムが暴走してCPUを 食いつぶしていることがあるので、発見したら警告を出したいと考えています。 CPU使用率は、はやらせるページ管理人さんのCPU使用率コマンドを使うとして pid:=(全取得) Loop,parse,pid,`n { pid:=(数字だけ抜き出す) now_usage:=GetProcessCPUState(pid,period=0) 全調査したらbreak } 作るとしたらこんな感じで考えていますが、なにかよい方法ありますでしょうか。
tasklist コマンドの標準出力をパースすればいいじゃないかな
717 :
名無しさん@お腹いっぱい。 :2008/11/17(月) 16:55:58 ID:/1ntx7I00
#IfWinActive, Sugar+Spice! { WheelUp::LButton } エロゲで上みたいにテストしたら 誤動作してLButtonも出るけど不意にWheelUpもでるみたいな状態になるんだけど どうやったら解決できますか?
{ .. } ブロックいらなくね?
alt+tabみたいに開いた順番でウインドウ変更していくんじゃなくて、 タスクバーの表示順にウインドウ変更する方法ってない? あるサイトでwin+tabでやるって書いてあるんだけど、win+tabだと必ず2番目のウィンドウにフォーカスが当たっちゃうし。 alt+escも開いた順番になるので同様に出来ない。
Alt+Escならタスクバー順になるだろ それともAlt+Shift+Escのことか?
>>720 レスありがとう
いや、順番どおりにならないのだよ。
それともWINDOWSの設定か何かが必要なのかな
>>717 WheelUpとかDownって押し下げイベントしかでないから、
RemapするとLButton押し下げのままで離されなくなるんじゃない?
>>721 少なくとも俺も順番通りにはならない。
シェルがbbLeanだからかもしれないが。
やってみたわけじゃないけど AHK側でウィンドウの増減を監視して その順番をIDでストックしておけば タスクバーの順番でどうにか出来そうな気もする
はぁ ゲームパッド用のahk書いてるんだけど誰か手伝ってくれないかな
>>705 もう必要なさそうだけど
SetWinDelay,0 でスムースに動くようになったりしない?
パッドだけ、いまだに自作のツールでまかなってる ahkだと面倒すぎ
>>728 どう面倒なの?
パッドの制御なら、ahkでもかなり自由度が高いと思うのだが
730 :
名無しさん@お腹いっぱい。 :2008/11/19(水) 20:12:55 ID:cgcl3laB0
流行らせるところの BREGEXP.ahk つかうと、2度目以降でおかしな結果になる。 つか、前回の値が残っていて結果が...orz Cとかやったことなくてよく分からんけど、文字列の終端は 0x00 らしいんで、 変数のメモリ確保のところで確保するバイト数+1でいったんゼロ埋めしてから 再度欲しいバイト数分だけ再確保したら期待通りに動いてるようなきがする。 行: 内容 **: VarSetCapacity(%name%_Match,length+1,0x00) ; ココを追加 98: VarSetCapacity(%name%_Match,length) 99: DllCall("RtlMoveMemory", Str,%name%_Match, Int,start, Int,length) #105-#106も同様にやった。 識者の方、こんな修正でいいんでせうか? あと、%name%_Matchってグローバル変数である必要がわからない・・・
>>727 サンクス。やってみた。ヌルヌル動くようになった。
けど、マウス素早く動かして窓から出るとNG。
そもそもマウスが窓内にあるときにメッセージが来るんで
方式としてはちと厳しかったかな、と。
>>729 ジョイスティック周りは、ほぼAPIレベルの機能しか提供されてないから、
結局、ahkでツールを再実装するのと同じ手間がかかるけど、
ahkの言語仕様ではやりたくないってことで
マウス代わりにするだけなら、上にも出てるサンプルの改良でいいんだけどさ
ボタンに割りあてるだけならいいけど アナログスティックあたり面倒そう。
スティックじゃなくても十字がすでにめんどくさい
指定時刻に入力したコマンドを実行するタイマーで 複数同時稼動させるにはどうしたらいいかな 同じ内容のスレッドだと後から割り込まれたら前のは止まっちゃうよね
別スレッド作ればよいかと if (条件 for Job1) SetTimer, Job1, 0 if (条件 for Job2) SetTimer, Job2, 0 : Job1: SetTimer, %A_ThisLabel%, Off job job job return Job2: SetTimer, %A_ThisLabel%, Off job job job return
>>737 やっぱりその方法しかないかな
あらかじめ上限が決まっちゃうから微妙に不満足なんだよね
新たにAHKを書き出して実行
それだったら #SingleInstance Off で多重起動しちゃったほうが楽だよね
同内容のスレッドを同時起動する理由も起動条件もわからんのであれだが パラメータをコマンドラインから貰うようにして#SingleInstance Off で多重起動が一般的じゃね。 それか処理内容を関数でカプセル化するとか。 ローカル変数使えばバッファ上書きされることもないし 同時に別スレッドから呼ばれててもそれぞれ別軸で動くはず。 SetTimer,Job%JobNo%,0 Job1: Job2: : Job99: SetTimer, %A_ThisLabel%, Off jobFunc(A_ThisLabel) return jobFunc(JobLabel) { StringReplace, No, JobLabel,Job,, job job job }
いろいろとありがとう参考になったよ やりたいことは作業前にいくつかメモを設定しといて 指定時間になったら忘れないようにMsgBoxでお知らせって動作
スクリプト仕様についてなんだが・・・ ユーザ定義関数の項に > add(a,b,c=0,d=0){ > return a+b+c+d > } > MsgBox,% add(1,2,3) なんてのがあったんだが、 % <式> で式の結果を文字列として取り出せるってこと?ってかそう動いてる。 MsgBox, % add(1,2,3) + add(4,5,6) で動くし・・・ これ全く知らなかった・・・。 関数からの戻り値を一時変数に詰めて %hoge% とかやってたよ。
>>743 % をつけるとその後は expression が使えるってヘルプに書いてあるよ
タイマ多重起動考察 もはや蛇足だと思うが興味深かったので
>>742 autoexecute:
SetTimer,Timer,1000
i = 0
return
#A::
i++
TimCnt%i% := 60 ; 1分タイマ
return
Timer:
Loop %i%
{
if (TimCnt%A_Index% =< 0)
continue
TimCnt%A_Index%--
if (TimCnt%A_Index% = 0)
MsgBox,時間です
}
return
テストスクリプトを止めようとしてタスクマネージャでAutohotkey.exe殺したのはいいけど、 お目当てのもので無かったとという経験は俺だけじゃないはず。 ---- KillAhk.ahk (1 of 2)----- #NoEnv DetectHiddenWindows, On gmx := 10, gmy := 8 Gui, +LastFound +Resize Gui, Margin, %gmx%, %gmy% Gui, Add, ListView, vLV Checked grid, pid|path|result Gui, Add, Button, w100 vBtn1, Find Gui, Add, Button, w100 x+10 yp+0 vBtn2 disabled, Kill Checked Gui, Show, w500 h200 ; return ButtonFind: WinGet, list, List, ahk_class AutoHotkey,,%A_ScriptFullPath% len := StrLen(" - AutoHotkey v" . A_AhkVersion) LV_Delete() Loop, %list% { hwnd := list%A_Index% WinGet, pid, PID, ahk_id %hwnd% WinGetTitle, title, ahk_id %hwnd% StringTrimRight, path, title, %len% LV_Add("Check", pid, path) } Loop,3 LV_ModifyCol(A_Index, "AutoHdr") GuiControl, Enable, Btn2 return
---- KillAhk.ahk (2 of 2)----- ButtonKillChecked: Loop,2 GuiControl, Enable0, Btn%A_Index% row = 0 Loop { row := LV_GetNext(row, "C") if (row == 0) break LV_GetText(pid, row, 1) Process, Close, %pid% LV_Modify(row, "Col3", (ERRORLEVEL==pid) ? "Killed" : "Failed") } LV_ModifyCol(3, "AutoHdr") GuiControl, Enable1, Btn1 return GuiSize: GuiControlGet, Btn1_, POS, Btn1 w := A_GuiWidth - 2 * gmx, h := A_GuiHeight - 3 * gmy - Btn1_h, y := h + 2* gmy GuiControl, Move, LV, w%w% h%h% Loop, 2 GuiControl, Move, Btn%A_Index%, y%y% return GuiClose: ExitApp
時々凄く重くなることがあるんだが再起動すると直る
アッー! exe化したAhkのプロセスを考慮してない... 14行目からちょっと改変 var := " - AutoHotkey v" . A_AhkVersion LV_Delete() Loop, %list% { hwnd := list%A_Index% WinGet, pid, PID, ahk_id %hwnd% WinGetTitle, path, ahk_id %hwnd% IfInString, path, %var% StringTrimRight, path, path, % StrLen(var)
>>746 動いたよ。これは便利!
>>748 俺もあるわそれ。まったく同じスクリプトなのに、起動させるタイミングによって、
もっさりしたり、きびきびしたりが半々くらい。遅いときは体感で3分の1ほどになる。
スクリプト中で定期巡回用のsettimerを2〜3個走らせると、症状が頻発する気がする。
気に入ったので微改造してみた。 6行目 旧 Gui, Add, ListView, vLV Checked grid, pid|path|result 新 Gui, Add, ListView, vLV Checked grid, pid|path|result|CPU|MEM 21行目と22行目の間に、下記追加 acpu:=GetProcessCPUState(pid) acpu=%acpu%`% amemup:=GetProcessMemoryState(pid)/1048576 amemup=%amemup%MB LV_Add("Check", pid, path,result,acpu,amemup) これで、該当スクリプトのCPU使用率と、仮想メモリサイズが表示されるので、 膨らんでるやつを狙い撃ちする。 (データ取得は、はやらせるページ管理人さんの「システムモニタ用関数群」を使用)
>>748 再起動ってPC再起動?
それならうちもある。
AHKが知らんうちにCPU独占するようになって、
そうなるとAHKを立ち上げなおしてもなおらず、
PC自体を再起動しないと戻らなくなる。
>>752 環境によって、そうなるね。調べてみたら
・単独でスクリプトを動かしたら、症状が出ない
・単独+CPU取得dllをincludeしても、症状が出ない
・自分のスクリプトに組み込むと、症状が出る
というわけで原因はSetTitleMatchModeの初期値の違いだった。
冒頭 DetectHiddenWindows, On の下に
SetTitleMatchMode,3
SetFormat, Float,.1
を追加したら、重複しない&メモリの桁数がそろう。
ついでに、acpu:=GetProcessCPUState(pid) の下に
acpu:=round(acpu)
を入れると、CPU負荷の空白がなくなり、整数表示になる。
タイマでリフレッシュすりゃもうタスクマネージャだw
>>753 そうそうPC自体を再起動すれば戻る。
なんか起動直後のメモリやCPUを大量に使ってるときにホットキーのアクションを使うとおかしくなる・・・気がする。
FIREFOXで結構ホットキーを割り当ててるんだけど、それだけがおかしくなる事もあるし。
ただ、家のPCではその現象は起こったこと無い、会社のPCだけ。
757 :
753 :2008/11/23(日) 02:28:54 ID:uNQ2u+Zz0
一度CPU異常負荷状態になると、 AHKを終了させればCPUは落ちつくが、 もう一度AHKを起動するとやっぱり異常負荷状態が継続してるんだよね。 PC再起動でやっと直るんだけど なぜこうなるのかかなり謎。 AHK関係のプロセスは残ってないはずなのに。 windows側でなんかおかしな状態になってるのかな。 AHKがなんかのタイミングで秘孔をついてたりして。 こんど異常状態になったら スクリプトを簡素化して どの記述が関係あるかちょっと実験してみる。
スクリプトうpろだ作ろうぜ おまえらの自慢のスクリプトたちを世に出していこう 自分のPCだけに眠らせて置くのはもったいない
流行らせるページにアップローダあるよ
ショートファイル名からロングファイル名を得るのってコマンドとか関数とか無いのか。。 それとも俺がみつけられんだけなのか・・・ インチキくさいけどこんなん作って使ってる GetLongFileName(name, long=true) { Loop, %name%, 1 return long ? A_LoopFileLongPath : A_LoopFileShortPath }
DllCall使うならこう? ;---- GetLongPathName(sp){ buff := DllCall("GetLongPathName","str",sp,"str",lp,"uint",0) VarSetCapacity(lp,buff) DllCall("GetLongPathName","str",sp,"str",lp,"uint",buff) Return lp } GetShortPathName(lp){ buff := DllCall("GetShortPathName","str",lp,"str",sp,"uint",0) VarSetCapacity(sp,buff) DllCall("GetShortPathName","str",lp,"str",sp,"uint",buff) return sp } ;---- 速度比較してみたらDllCallの方が若干早いけど…そっちのほうが簡単だね。
763 :
762 :2008/11/24(月) 01:45:34 ID:g2UtBFIf0
あーごめん、計測し直したら違った。
SetBatchLineの値がデフォルトの状態だとDllCallが若干早いけど、
SetBatchLine, -1でやったら
>>761 の方法の方が早いかもしれない。
ちなみに本家のヘルプ見直したら
>>761 の方法っぽいのが
FileGetAttrib のとこに書いてあったし、
AHKのコマンドだけで実現できるから、
AHK的にはそっちのほうが正しいんじゃないかな。
でもコマンドあってもいいと思うなこれは…
765 :
762 :2008/11/24(月) 11:19:09 ID:g2UtBFIf0
>>764 そういやダメ文字問題もあったんだっけ…フォローありがとう。
ファイル操作系は信用してないからほとんど使ってなくて、すっかり忘れてた。
>>764 このアドレスでさ、一番上のPathAddBackslashだと、
PathAddBackslashAみたいに最後にAをつけないとダメなんだけど
これってAutoHotkeyだけ?はまった。型名が悪いのかと思って適当に変えてた。
他にプログラミングみたいなことしないからわからなかった。なんでこんなことになるのw?
PathAddBackslash(filename)
{
abc := DllCall("shlwapi.dll\PathAddBackslashA", Str, filename)
return filename
}
>>User32.dll、Kernel32.dll、ComCtl32.dll、Gdi32.dll内の関数の場合、DllFileを省略することができる。 >>また、この場合、関数名の末尾に「A」がつく関数名は、「A」を省略して書くことができる。 shlwapiは含まれていないのでAを付けなければいけないんじゃない?
VBのDeclareなんかもその仕様
>>767-768 なるほど。つけなきゃじゃなくて省略してたんだ、逆か。
764のは省略されてたんだね。納得しました、どうもです。
時間表示など描画しまくる場所に右クリなどのコンテキストメニューが被ると 選択しにくくなるけど回避策あるかな 何回かポチポチしないと押せないときがある
なんか公式に新しいの来てる。
通常の3倍の速度で動く新型ベータだな。
さっそく差し替えてみた。不具合はない。 100000件テキスト読み込み&処理で比較してみたが、 なんとなく速くなった気がするが、変わらない気もする。 もともとWindows側の他タスクの影響でバラツキが多いしなぁ。 正確な測定法があればいいのだけど。
自作スクリプトの、メモリの無駄遣いで悩んでいます。 原因を特定するべく、スクリプト動作中にタスクトレイで右クリックして「OPEN」し、 Ctrl+Vで、Global Variables (alphabetical)を参照しました。 この変数一覧は、アルファベット順でソートされますが、 つかってる変数が多いと最初のほうしか参照できません。 この一覧を、テキストファイルに書き出す方法は無いでしょうか?
776 :
1/2 :2008/11/26(水) 00:47:34 ID:wwN1R5Cc0
ドロップされたファイルに関連づけられている大小開閉アイコンを表示してみるテスト リストビューの表示のさせ方がわけわかなのでとりあえず無理矢理Pictureに描画 FileName := A_ScriptDir ; デフォルト描画:フォルダアイコン Gui,Add,Picture,HwndPhWnd2 W16 H16 section, Gui,Add,Picture,HwndPhWnd4 W16 H16 ys, Gui,Add,Picture,HwndPhWnd1 W32 H32 xs section, Gui,Add,Picture,HwndPhWnd3 W32 H32 ys, Gui,+Resize ToolWindow AlwaysOnTop autosize Gui,show,autosize,ファイルドロップでアイコン表示 Loop,4 DrowIcon(FileName,PhWnd%A_Index%,A_index-1) return GuiDropFiles: Gui,Hide Gui,Show Loop,4 DrowIcon(A_GuiEvent,PhWnd%A_Index%,A_index-1) return GuiEscape: GuiClose: ExitApp
777 :
2/2 :2008/11/26(水) 00:48:21 ID:wwN1R5Cc0
DrowIcon(filename,hWnd,siz=0) { ;--- ファイルアイコン取得 --- sfi_size = 352 ; Structure size of SHFILEINFO. VarSetCapacity(sfi, sfi_size) uFlags := 0x100|siz ; SHGFI_ICON + アイコンサイズ DllCall("Shell32\SHGetFileInfoA", str,FileName, uint,0, str,sfi, uint,sfi_size, uint, uFlags) hIcon = 0 Loop 4 hIcon += *(&sfi + A_Index-1) << 8*(A_Index-1) ;--- 表示 --- hDC := DllCall("GetDC", UInt,hWnd, UInt) ret := DllCall("DrawIconEx",UInt,hDC, Int,0, Int,0, UInt,hIcon, Int,0, Int,0, Uint,0, UInt,0, UInt,3) DllCall("DestroyIcon", UInt,hIcon) DllCall("ReleaseDC", UInt,hWnd, Uint,hDC) }
スクリプトを実行中に現れるタスクトレイアイコンの上に、 マウスカーソルが乗っかったかどうかを判別する方法はありますか?
>>778 流行らせるページ
MyScripts
タスクトレイアイコン操作
よく分からんけど、 Ctrl とかが押しっぱなしになる。解決はよく分からんが対処法としてアラートだすようにした。 if書きたくないから、三項演算子だいすき #SingleInstance #Persistent keys = Ctrl|Shift|Alt|LWin|RWin alertDur = 3000 ;(ms) SetTimer, Alerter,200 return Alerter: alert = Loop, PARSE, keys, | { %A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField% alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > alertDur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : "" } Tooltip, %alert% return
>>782 もしかして、ロジクール製マウス+Setpointを使ってる?
俺もそれに悩んだが、原因はSetpointだった。
・15秒以上押されていたら、押しっぱなし警告表示
・30秒以上押されていたら、Setpoint殺す→Setpoint再起動
ってのを作って、いまはあまり意識せずにすむようになった。
ボタンへの割り当てをahkでやってもダメなの? うちでもロジマウスを使ってるけど、 6個目以降のボタンやチルトに、 SetPointのxmlでF13〜を割り当てて、 それをahkで変更させて快適生活だよ
俺も昔はロジだったが、やはり同じような症状が出るんで、 ドライバレスのゲーマー用マウスに乗り換えたな アプリ毎の定義なんかはAHKで出来るし、 今はロジにこだわらんでも良いマウスはいくらでもあるかと
チルトホイールいらないならロジもSetpoint不要で動くけどな。 ドライバレスならどっちにしろ5ボタンまでしか効かないんだろうし Setpointだけアンインスコすればマウス買い替えは必要なかった気ガス
スレ違いだけど、しばらく前にロジスレでCtrl押しっぱなしになるのはSetPointの不具合 って話に落ち着いてた気がする。SetPointのバージョン変えたら良いかもね。
>>782 これいいね。
Synergyのせいでよく「押しっぱなし状態」になるので、使わせてもらうよ。
ありがとう。
マウスドライバの所為だったのか… うちでもCtrl押しっぱなし現象が頻発するんでAHKの使用を断念しちゃったんだよな Esc押したらスタートメニューが開いたりとかで、その度にOSリブートを余儀なくされてキレてしまったんだけど、 原因がわかったからまた使ってみよう
mayuのせいかと思ってたがsetpointのせいだったのか。 チルトにF13とか、やっぱり似た使い方する人はいるもんだな。
792 :
782 :2008/11/27(木) 20:29:53 ID:pOwnMABe0
やはり、mayuスレと似た流れになったなぁ
無効では VMWare のフィルタドライバが悪さしてるとかなんとか・・・
路地関連は該当PCには全く使ってない。
Synaptics のドライバは入ってる。(USB TravelNavi)
mayu7(dat落ち
ttp://pc11.2ch.net/test/read.cgi/win/1180379801/851- キー押下状態監視して、Send, {Ctrl Up} 、しても無理だから
ストレス溜まるけど、アラート出すことで注意喚起することでどうにかなるんで
とりあえず放置かなっと。
FIREFOXと相性悪い? なんかFIREFOXに割り当てたホットキーを使うと頻繁にキーが固まる。 そうなるとPC再起動しないと直らない
うちの場合、例えばAltが押しっぱなし状態になった時は、 左Altを押しても直らないけど右Altを押すと直ったりすることがある。
押しっぱなしといえば、「今まさに押されているキー」を 取得する方法ってないですか? keyhistoryだと、専用のウインドウを開くことしかできないし、 GetKeyStateだと、対象となるキーを指定しないといけない。 汎用的に取得できる方法があれば、ctrl,alt以外にも、 押しっぱなし検出が、ほぼ全部把握できるのだけど、 なにかよい取得方法はないでしょうかね。
inputじゃないの
これWin+Eとかだと上書きできるけど、Win+Lだけ効かないのはWindows側の仕様ですか? ロック無効にできればいいんだけれども方法探しても見あたらないしどうしたもんか
うちでは Win+Lを、ランチャの編集ショートカットとして定義して、ふつうに常用してるよ。
俺も「L」で始まるソフト用ランチャーで使えてるよ
どうせ駄目なのはVista。騒ぎたいだけに違いない。
たまに快適度が薄れると思ったら、
>>757 の現象が、うちでも出てることがわかった。
異常判断テストスクリプト
start:=A_Tickcount
Loop,10000000
{
str=A_Index
}
end:=A_Tickcount
time:=end-start
msgbox,【10000000Loop】 %time% msec.
これを実行すると、正常時は2秒〜2.5秒で終わるが、一旦おかしくなると10秒ほどかかる。
OSがこの状態になると、キー定義+αしかやってないスクリプトでも、
CPUを常時17%位食うようになってしまい、PC全体が重くなる。
AHKを終わらせるとCPU負荷は元に戻る。AHK以外の動作は、ふつうに使える。
OSを再起動すると、AHKのもっさりは直る。
どんなタイミングで、この異常動作になるかは不明だが、計測結果は再現性がある。
環境
XP SP3
IntelG45 E2180 4GB
AHK 1.0.47.5 2バイト文字対応改造版
802 :
757 :2008/12/01(月) 01:53:26 ID:oVBCocp/0
この現象はかなり前からあったよ。 少なくとも一年以上前からあった。 特に、以前キー定義を試行錯誤で何度も作り直してた時期は、 一日に数十回ahk再起動とかやってたけど、 その時期は暴走する率がかなり高かった覚えがある。 最近はログイン時に一度起動したっきりが多いんだけど、 暴走回数はかなり減ってる。 うちではahkの優先度を通常以上で動かしてるので ahkが暴走すると大変なことになって困る。 ちなみに現状の環境は XP SP3 PenM1.3Ghz 2GB AHK 1.0.47.06
このソフトであるウィンドウが表示されたら あるソフトを強制終了して再度起動するスクリプト作れますでしょうか?
はい
AHKで作成したツールチップをAHKで割りあてたキーで操作しようとしても きかないのですが、なんででしょうか。
>>805 嘘つき
~a::tooltip,aaa,1,1
~b::tooltip
昔のバックアップを整理するのに、CDを読み込めるようになったら FastCopyかFFCでコピーして、終了したらディスクを排出して待機、 みたいなスクリプトを組みたいんですが CDドライブの開閉を監視する方法ってありませんか?
DriveGetじゃね? てかヘルプ嫁
ダイアログで一時停止して、ボタンが押されたらスクリプトからディスクを格納したほうがいいんじゃ
>>731 過去スレでこういう修正も
AutoHotkey Thread 2
http://pc7.2ch.net/test/read.cgi/software/1129836713/721 721 名前:719[sage] 投稿日:2006/05/15(月) 14:14:36 ID:I+/Q9YXe0
自己解決しました。
前回のデータが残ってしまうのは、
BREGEXP.AHKの
return result
の部分を、
test:=result
VarSetCapacity(result,64)
return test
のように変更することで解決しました。
$が効かないのはオプションにgを入れてないからでした。
>>808 ありがとうございます。
Loopで回して、DriveGetで監視って手順は考えてはみたんですけど、
メディアを入れたとき自動再生のイベントを拾うような方法とかがあれば
そっちのがいいのかなあ、と思ったもので。
>>809 ありがとうございます。
書いてなかったんですが、環境がノートPCだったもので
格納は手動でやらなくちゃいけないんです。
>>811 OnMessage(0x219,"WM_DEVICECHANGE")
WM_DEVICECHANGE(wParam){
if(wParam=0x8000)
MsgBox, 入った
if(wParam=0x8004)
MsgBox, 出た
}
>>806 すみません。ツールチップではなく、
Menu,shortcut,Add で作ったメニューでした。
これだと、矢印キーやESCキーを割り当てたキーが効かなくないですか?
すれっど
>>782 プログラムくわしくないんだけどLoopの中が見たことない書き方でびびった。
三項演算子とかいうのを勉強すればifの羅列を避けられるのかな?
>>814 スレッドの説明を読みましたが、
Thread, Priority,n のnの値を上げ下げしてもうまくいかず、
詰まってしまいました。どうすればよいのでしょうか。
>>813 こういうことね。
メニュー出しても、リマップやらホットキーで設定したESC等が効かない。
下の例ならzやxでメニューが操作できないと言うことか。確かに出来ないね。
別スクリプトでホットキーを作ればいいよ。割り込みができないんじゃないかな?
Menu, M2, Add, &A upを送る, keya
Menu, M2, Add, &B ESCを送る, keyb
Menu, M2, Show
return
keya:
send, {up}
return
keyb:
send, {esc}
return
z::send,{up}
x::esc
うお >810氏とIDかぶったw
ネットに繋がっているかどうかを調べるのってどうすればいいんでしょう。 URLDownloadToFileでyahooなりを落としてみればわかるにはわかるんですがスマートではないので、何か方法があるなら教えてください。
>>821 おぉ、こんなものが。ありがとうございます。
これで解像度を変える方法ありませんか?
>>812 サンプルまで、わざわざありがとうございます。
OnMessageって使ったことなかったので、勉強させてもらいます。
>817 そうそう、それです。ありがとうございます。 別スクリプトで、やってみます。
実は釣りでした
誤爆w
>>827 面白い。自分はあまり使わないが
環境が環境ならすごく便利そうだ。
>>827 さいこー。TTBaseのDragScrollと同じだね。欲しかった。
自分で作ろうとしたけどスキルの問題でできなかった。すげー勉強になるし。
TTBase使わなくなって唯一最後の喉から手が出るほど欲しい機能だったから。
デフォルトのままだと左右は進行方向と逆に少し動いてる感じがした。
移動量の変更と変化した分遊びを持たせるためにちょい適当にいじった。
274行目は dx := (x- Sx)*15, dy := (y -Sy)*3
275行目はif (Abs(dx) > 20)
227行目はif (Abs(dy) > 5) {
833 :
832 :2008/12/04(木) 07:06:45 ID:YdYzer7Q0
変更したところは解像度とかマウススピードの設定で人によって違うか 舞い上がっちゃった(・∀・)イイ!!
ドラッグスクロールってMouseGesture.ahkで出来た気がするが
メッセージダイアログを表示させたままで 処理を続行させるにはどうすれば良いのでしょうか?
ダイアログは基本的にモーダル(表示が終わるまでスレッドが止まる)なんで、スレッドでの割り込みが無いと基本的に止まったまま。 スレッドでの割り込みは ホットキーイベント、タイマー、Guiの操作、WindowMessage受け取ったときとか、、、 というか、下を見ても分かると思うけど、数を1ずつインクリメントして表示するだけなのに結構めんどくさい。 日付みて何かの処理をするとかの軽い処理なら↓のを改変でいいけど、、、 つまり、よく分からんならGUI作った方が早いよってこと。 SetTimer, Main, 100 Exit Main: SomeFunc() return SomeFunc() { static count:=0 CoordMode, Tooltip, Screen count++ Tooltip, %count%,0,0,20 if (count = 50) SetTimer, ShowSomeMessage, -1 } ShowSomeMessage: MsgBox, Here you can find some mesage! return ~Esc::ExitApp
■ 思った通りに動かない例 メインの処理が一時中断されて、タイマーから呼び出されたスレッドが終わるのを待っているため Loop, 1000{ Tooltip, %A_Index%,0,0,20 if (A_Index = 50) SetTimer, ShowSomeMessage, -1 Sleep, 100 } Exit ShowSomeMessage: MsgBox, Here you can find some mesage! return ~Esc::ExitApp では、メインスレッドじゃなく別スレッド作ってと考える。結局は上と同じ理由で動かない。 SetTimer, Main, -1 Exit Main: Loop, 1000{ Tooltip, %A_Index%,0,0,20 if (A_Index = 50) SetTimer, ShowSomeMessage, -1 Sleep, 100 } return ShowSomeMessage: MsgBox, Here you can find some mesage! return ~Esc::ExitApp
ループして判断する何処かのスレッドがあったとする。 Thread1: →(値取得)→(判断)→(スレッド呼び出し)★→ ↑ ↓ ←ーーーー ループの先頭に戻る ーーーーー 条件にマッチしたら Thread2 が呼ばれてこのスレッドは★で一時停止。 何らかの判断で呼び出され、処理をやるスレッドが起動する Thread2: Send, {Enter} return Thread2はキーを送ってすぐ終了なので、即座に★に戻り滞りなく終わる。 更に、何かの判断で、Thread3 が呼ばれ、同じように★で Thread1が停止する。 Thead3: MsgBox, 朝ですよ!`n起きてください! return このスレッドは OK を押すまで終わらない。つまり、Thread1は★でとまったまま。 なら、解決というか回避するにはどうするかというと、上でも書いたけど、 判断するループはやめて、判断するスレッド自体すぐ終わるようにしてタイマで呼ばれるようにする。 まー、でも MsgBox 出すくらいなら・・・面倒だし、Gui作っちまえばいいかと。
見てくれ悪いけど、何か表示するだけならProgressが楽かも。10個まで使えるし。 count := 0 Loop, 1000{ Tooltip, %A_Index%,0,0,20 if (Mod(A_Index,10) = 0) { count++ pNo := Mod(count, 10) + 1 y := (pNo - 1) * 60 tooltip, %pno% Progress, %pNo%:x0 y%y% Zy0 Zx0 Zw0 Zh0 M2, メッセージ%count%回目, タイトル Progress, %pNo%:Show } Sleep, 100 } Exit ~Esc::ExitApp
質問者じゃないけど、ためになる講座だな。
>>838 >→(値取得)→(判断)→(スレッド呼び出し)★→
ここでの「スレッド呼び出し」について質問。
スレッド呼び出しの部分を、settimer,ABC,-1としてABCスレッドを1msec後に
呼び出せば、Thread1の分岐ループは、「ABCへ飛べ」というジャンプ指示が
どんどん増える(上限1)だけで、ループ自体はずっと止まらない という理解でよい?
また、すでにABCスレッドに飛んで処理中の場合、ABCスレの中でmsgbox押され待ちがあった場合、
その処理が終わるまでは、分岐ループThread1の★部分で、判断スレッド自体が止まってしまうの?
書いておきながら、ABCってラベルが例に存在しなかったので、 例にならうとABC→Thread3と置き換えてください
ttp://lukewarm.s101.xrea.com/misc/Threads.html > AutoHotkeyは実際はパフォーマンス低下を防ぐため、擬似的なマルチスレッドを採用している。
> 現在のスレッドの実行中にホットキー、タイマー、メニューアイテム選択により別のスレッドが呼び出されると、
> 割り込みにより新たなスレッドが開始され、現在のスレッドは新たなスレッドが終了するまで停止する。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 割り込みは何重にも行われることが可能。
要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
→ 実行中、 …: 割り込み終了待ち
Loop1開始 Loop2開始
元スレッド →→→→→→→→→→→……………………………………→→→→
★割込 ↑再開
割り込みスレ →→→→…………→→→→→→END
◆割込 ↑再開
更に割り込み →→→END
で、何でタイマーで判断処理を作れって書いたかというと。他のJobが実行中でも割り込んで次回の判断が出来るから。
でも、処理自体は1本しか走らないので時間がかかるやつだと結構面倒、つか無理かも。
このスレでも何度も出てるけど、他のAHK作って Run するのがいいかも。
判断スレ1 →→End
タイマ割込
Job1スレ →→→……→→→→→→End
タイマ割込
判断スレ2 →→End
で、GUI作れってのは、表示だけなら一瞬で終わる、つまり元スレッドにすぐに復帰できるため。
更に言うと、ボタン押下イベント設置すればそれ自体が割り込みとなって現行スレに割り込みができるっていうのもある。
>>842 なるほど、解説乙。条件分岐のみ行うスレッドも、結局は止まってしまうわけか。
役割ごとにスクリプトを分けて単独で実行させ、連携させるのがよさそうだね。
補足、いや、蛇足)
Ajaxとかで流行の Javascript も結局本スレとタイマとイベント割り込みって感じで同じ。
でも、本スレでタイムスライスして、includeした他スクリプトを eval で数行ずつ実行する恐ろしいヤツがあるとか無いとか。
ちなみに他のAHKからの終了信号を貰いたいなら、
1) Job側が終了コードを隠し呼び出し側のGUIに何か書き込む (
>>457 の方法)
2) 呼び出し側がOnMessage(0x400, "WM_USER") とかの待ち受け関数作って、
Job側が Post/SendMessageする
3) WM_USERと同じだけど、色々とやりたいなら特定の文字列用のmsg番号をWin側が用意してくれるので
両方で同じ番号で OnMessage, と SendMessage で話し合う。。。めんどくせぇ
ex) HogeCallBackMsg := DllCall("RegisterWindowMessage", Str,"HogeHoge", Int)
とか・・・
>>827 ThinkPad使いだがスクロール機能OFFにすると中ボタンとして使えること初めて知ったよ。
トラックポイント使っててずっと不便に感じてたMS-Officeやエディタなんかの分割ペインで
スクロールできない件も解消できないかと思って
http://lukewarm.s101.xrea.com/up/file/085.zip と混ぜ合わせてみたらイイ感じになった
ただ、スクロールの速度の調整が難しい。
>832のパラメータを適当にいじって試してみてるけど値の設定ルールがわからないので
最適値がぜんぜんわかんないだわ
846 :
827 :2008/12/05(金) 16:49:28 ID:5jfWCA+k0
ttp://lukewarm.s101.xrea.com/up/file/093.zip 1000行超えた。うぇ
[2008/12/05]
機能修正/追加
WheelScroll.ahkの機能を大幅に取り入れ以下を実現した
Excel等のMDI小窓の横スクロール
各種設定をほぼそのまま取り込んで各アプリで動作するようにした
感度・動作閾値の設定が出来るようにした
縦スクロール量算出方法を2種類(移動量に比例、移動量の2乗に比例)にし選択出来るようにした。
横スクロールに左右キーエミューレートモード(ほぼMozilla専用)を追加
横スクロール加速実装 (WM_VSCROLLと同じ方式)
Ctrl or Shift or RButton が押されているときは一時的に固定移動モードになるようにした
IE や Firefox 等の履歴・拡大率の変更時には固定の方が都合がよい
特定のツールのタブ移動のマウスジェスチャがあったりするため
ScrollLock On 時に挙動が変化するようにした(以下から選択可能)
VScroll 制限 : 縦スクロールしない(横だけ移動)
HScroll 制限 : 横スクロールしない(縦だけ移動)
FixMove : 常に一定値でスクロールする(縦横とも)
内部仕様の変更
Start/Stop 関数を整備、InitHotkey 関数を利用しなくても組み込みやすくした
フル関数化 (ホットキー、メニュー用ラベルは除く)
変数保持関数を追加し、グローバル変数を一部を除き利用しなくした
以前の初期化関数はそのまま使えるはず
847 :
845 :2008/12/05(金) 17:58:14 ID:uIVSFyDO0
やってること同じだ。笑た
あ...初期化設定がテスト設定のが残ってる... ま、分かるからいいよ・・・ね
すげー便利な上、ソースとコメントが綺麗すぎて驚いた。
>>846 093 改良版さわってみたけどスクロールがかなりいい感じに仕上ってますね。
ところで追加部分のグルーバル変数や関数の名前が
TrackWheel_xxx だったり TrackScroll_xxx だったりするのは意図的に分けられてるのかな。
とりあえず _BrotherScroolBarList 変数が
AutoExecute部 と 実際に使ってる関数 TrackScroll_GetScrollBarHwnd()で
接頭語が違ってるようです。
いや・・・最初はTrackScrollで開発してて・・・ 気づいたら同じのがあったのであわてて変えた訳で。 頭の中は未だにTrackScrollだったりするんで、まちがえるのです。はい。 >とりあえず _BrotherScroolBarList 変数が >AutoExecute部 と 実際に使ってる関数 TrackScroll_GetScrollBarHwnd()で >接頭語が違ってるようです。 各自直してくださいw もし次Upするなら直しておきます。
了解です。
845のやつ最新ソースでマージしてみました。
http://lukewarm.s101.xrea.com/up/file/094.zip 改造点とか
・WheelScroll.ahk からの GetScrollBarHwnd() 部分を TrackWheel向けに最適化
TrackWheel_GetScrollBarHwnd() 一度のCallで縦横スクロールハンドル両方返すようにした。
・接頭語が TrackScroll_ になってる変数/関数 を TrackWheel_ に統一 >851-852
ものぐさ用 勝手改造
・タスクトレイのアイコンを例のアレに(単体起動時)
・システムの設定でバルーンメッセージ殺されてる時は ToolTip(20)に情報表示
・組込み時にGoSubで初期化しやすいようにAutoexecuteにラベルをつけてみた。
アイコンやメニューの指定は単体/組込みどちらでも支障がないように
(アイコンファイルの場所 : A_LineFileと同じディレクトリ
メニュー名は単体時は "Tray" : 組込み時は "TrackWheel_Menu")
尚 OnExitは本家と同じ自分で追加する仕様
その他どうでもいい変更
・互換モードリストに 萌ディタのコントロールクラス(TkfView)追加
・縦スクロールで PostMessageを使ってみる(何となく負担が少ないかと思って)
Content-lengthが... 現在Ini版に改修中。ってか色々な初期化のラッパーになってるだけw
>>853 094.zipのファイルサイズが0KBですよ。
(ノ∀`) アチャー 上げ直しました ていうか ID:5jfWCA+k0氏 更にモデファイ中? また余計なことやっちまったか。
常にモディファイ中です。趣味みたいなもんでw diffしたけど、マージは楽そうなんで無問題。 >また余計なことやっちまったか。 他の人のコード見るのは楽しいのでおk > PostMessageを使ってみる ループ処理で名目上10msしか寝ないんで、Postで投げっぱなしだと受けとるアプリによっては スクロールと再描画が追いつかないことがあってやめてみた。 スクロール処理終わっても延々とだらだらスクロールしてるアプリがある、 ってか今まさに使ってたDFで試したらそうなる。
下にドラッグしたら上に進むっていう疑似iPhoneライクな物なら作ったなー
一部の人しか使わんだろうけど、まぁ許してくれや。
TrackWheel VER.20081206
ttp://lukewarm.s101.xrea.com/up/file/095.zip >>853 を一部マージ
機能修正/追加
INIファイルでの初期化を追加。デフォルトとした。このため初期化がAutoexecブロック1行で済む。
INIファイルで初期化を行ったときのみ、トレイメニューからINIファイルの編集が出来るようにした。
コントロールだけでなく、ウィンドウクラス名、実行ファイル名でのマッチングも可能にした。(オプション)
正規表現でのマッチングを可能にした。(オプション)
トレイチップが出ないとき、自動で消えるツールチップを出すようにした。
トレイアイコンを変更するようにした。(既に変更してあるときは変えない)
「ホイールポストアクション」の追加。未タイムアウト時のキー送信以外のカスタマイズをしやすくした。
スクリプト終了時のOnExitで飛ぶラベルをIniファイルで設定できるようにした。
内部仕様の変更
Ini初期化関数で、多重初期化抑制と初期化失敗を検知しユーザ通知するようにした。
動作に関わる全てのグローバル変数を無くした。
上記の内容に伴い、デバッグモードのの時のみデータストアクラスの内容表示が出来るようにした。
コメント追加/修正、未使用コードの削除など
コード560行、コメント593行、空行101行 だった。コメント大杉。 つか、クラスってなんだよw
>>859 乙です。グローバル変数撤廃とは徹底してますね。
自分もまねしてみようかと思ったけどListVarsで見えないからデバッグが大変そうだw
あ、958行のフラグ判定は逆みたいです。
バルーン殺してるアホ用にしか影響しないのでほとんど無問題でしょう。
if (TrackWheel_GetValue("Balloon")) {
if (!TrackWheel_GetValue("Balloon")) {
それと、SendMessageの件も納得です。ちゃんと調べられてるんだなぁ
ジョイスティックのボタンが離された時にキー入力をするように以下のようなスクリプトを組んだのですが、 ボタンを押した時にhogehogeが出力されてしまいます。どこを直したらいいかわかりますか? Joy1::onKeyDown() onKeyDown(){ SetTimer, WaitForButtonUp_1, 10 return } WaitForButtonUp_1: if GetKeyState(Joy1) return SetTimer, WaitForButtonUp_1, off send, hogehoge return
GetKeyState("Joy1")
864 :
862 :2008/12/07(日) 22:42:02 ID:oUMsfI430
>>863 ありがとうございます。動くようになりました。
ものすごい凡ミスでしたね。
マウスのカーソル位置のクラスじゃなくて、キーボードのカーソルがある部分のクラス名って取得出来るの?
ControlGetFocus A_CaretX,A_CaretY
自前キーリピート。いまいち $*Left:: KeyRepeat() $*Right::KeyRepeat(120, 1, 5) $*Up:: KeyRepeat(100, 1, 10) $*Down:: KeyRepeat(300, 50, 50) KeyRepeat(startDur=120,minDur=1,step=20) { SetBatchLines, -1 SetKeyDelay, -1 keyName := RegExReplace(A_ThisHotkey, "^\W+", "") dur := startDur, mindDur := minDur < 1 ? 1 : mindDur Loop { if (!GetKeyState(keyName, "P")) break mod := (GetKeyState("Ctrl","P") ? "^" : "") . (GetKeyState("Alt","P") ? "!" : "") . (GetKeyState("Shift","P") ? "+" : "") Send, %mod%{%keyName%} dur -= step if (dur < minDur) dur := minDur Sleep, %dur% } }
868 :
名無しさん@お腹いっぱい。 :2008/12/13(土) 17:19:08 ID:IsgFPQ1F0
http://www.multisoft-lab.com/minismtp/index.html これを使ってメールを送信するスクリプトを作成していてるんですが
DLL内の関数が見つからず(ErrorLevel-4が帰ってくる)送信することができません
readmeの内容をみていろいろ試してみたんですがうまくいきませんでした
○MiniSmtpMailer.dllのメソッド
1.DWORD SmtpGetVersion();
バージョン情報の取得メソッドです。DWORD型で返されます。
MSB(上側)16ビットと下側(LSB)16ビットで構成されています。
例えば、Ver.1.0の場合はMSB側は1でLSB側は0です。
ver := DllCall("MiniSmtpMailer.DLL\SmtpGetVersion()","Uint")
ver := DllCall("MiniSmtpMailer.DLL\SmtpGetVersion","Uint")
ver := DllCall("MiniSmtpMailer.DLL\SmtpGetVersion();","Uint")
ver := DllCall("MiniSmtpMailer.DLL\DWORD SmtpGetVersion()","Uint")
試す気はないが、引用符内の括弧は要らんはず
>>868 C++で作られてるっぽいので内部名が違うみたい?
詳しくないけどとりあえず以下の方法でできたっぽい。
Dependency Walker等でMiniSmtpMailer.dllを開いて関数名を調べる
SmtpGetVersionの内部名は"?SmtpGetVersion@@YAKXZ"っぽいとわかるので、
DllCall("MiniSmtpMailer.dll\?SmtpGetVersion@@YAKXZ")
他の関数は試していない。
自分の作ったGUIにホットキー割り当てたいときってこんなんでいいの? 動くからいいんだけど、、、。 Gui, +LastFound WinGet, hwnd, ID Hotkey, IfWinActive, ahk_id %hwnd% Hotkey, ^s, SubLabel_Save Hotkey, ^o, SubLabel_Open Hotkey, ^c, SubLabel_Copy : Hotkey, IfWinActive
ホットキーでスクリーンショットを保存するスクリプト組みたいんだけど PrtScキー拾ってクリップボードからデータ拾ってきて書き込みじゃダメだった\(^o^)/ 手軽に保存する方法ないかな?
Irfan使ってる。結構楽。 PrintScreen:: Run, %A_ProgramFiles%\iview\i_view32.exe /capture=2 /convert="%A_Desktop%\%A_Now%.png" return +PrintScreen:: CaptureMode := Mod(CaptureMode + 1, 4) str := (CaptureMode = 0) ? "Whole Screen" : (CaptureMode = 1) ? "Current Monitor" : (CaptureMode=2) ? "Current Window" : "Current Window Client Area" Tooltip, Capture = %CaptureMode% : %str% SetTimer, TipOff, -3000 return TipOff: Tooltip return
あ、間違った 2行目のところ、 /capture=%CaptureMode% にして
DLLとかスマートなんだろうけど そこまで行っちゃうとマの余技になっちゃって いまいち潤いがないんだよな もっとアホな使い方してる俺としては
ttp://www.autohotkey.com/forum/topic8795.html 英語だから敬遠してたけど公式から逝けるフォーラム見ると結構楽しいな。
まぁ、今更何をって感じだろうけど。
こんなの簡単にできると楽しいわ。
Gui, +LastFound
Gui, Add, MonthCal
SetChildWindow(WinExist(), WinExist("ahk_class Progman"))
Gui, Show
SetChildWindow(cHwnd, pHwnd) {
Return DllCall("SetParent", "uint", cHwnd, "uint", pHwnd)
}
ちと質問です。 アクティブなアプリごとに、割り当てキーを替える場合はどうしたら良いでしょうか? IfWinActive, ahk_class Notepad { JoyKey8 = a } IfWinActive, ahk_class OpWindow { JoyKey8 = b } Joy8::send,%JoyKey8% return これだと、うまく変数が更新されないようです。 割と頻繁に幾つかのアプリケーションを行き来するので、何とか自動化できると良いのですが・・・
キーが押された後に分岐させる あるいは#IfWinActiveを使う
:をRightと認識させるにはどう書けばいいでしょう? これじゃ駄目ぽ sc07B & `::: Send, {Blind}{Right}
>882 ちょいと質問まちがえた :をエスケープするにはどう書くの?
::: Send, {Blind}{Right}
885 :
882 :2008/12/17(水) 22:23:39 ID:+5duKaXz0
>884 どもです sc07B & ::: Send, {Blind}{Right} ↓ Error:Invalid hotkey になります どこが間違ってるでしょうか? 他のキーなら動くんですが
886 :
882 :2008/12/17(水) 22:25:16 ID:+5duKaXz0
*:: で動きました。謎。
887 :
880 :2008/12/17(水) 23:01:06 ID:DoJGzKvY0
>>881 ありがとうございます。#IfWinActiveでやってみたところ出来ました。
概ね問題無いのですが、PhotoShopの「スペースキー+ドラッグ でスクロール」が
動きませんでした。(パッドのキーにスペースキーを割り当てました)
KeyHistoryで見る分にはスペースが送信されてはいるようですが、SendModeを変えたり
キーコードで送ってもやっても同じようです。
他のキーの処理の仕方と違うのでしょうかね?
sc07B & : Up::
>>886 そういう裏技もあるのかw
正攻法で行くならvkBAとかsc028で出来る。
仮想キーコードやスキャンコードはタスクトレイアイコンをダブルクリックして出るメインウィンドウのメニューから
View→Key history and script infoで見れる
確認したいキーを押したあとF5で最新情報に更新する。
890 :
889 :2008/12/17(水) 23:25:20 ID:0fLfKxJZ0
あ、補足。ホットキー設定するか#InstallKeybdHookを記述してないと見れない。
↑の本家公開スクリプト(mymenu.ahk)は、代替のスタートボタンを押すと 常にCtrl+Escが送信されるため、スタートボタンを2度押したときに メニューを開け閉めすることができない。 下記のように1回おきに 開 と 閉 を別々に送るようにしたら、 オリジナルのスタートボタンとほぼ同じ操作感になった。 StartM: count++ ;奇数ならスタートメニューを出す、偶数ならキャンセルを送信 if mod(count,2)=1 Send ^{ESCAPE} else Send {ESCAPE} return ただ、スタート以外の場所でクリック(キャンセル)すると、記憶フラグ(count)の整合性が取れず、 動作がズレる。完璧を求めるなら、スタートメニューが開いているかどうかを判別する 必要があるが、俺はそのやりかたを知らないので、どなたかフォロー求む。
チルトがマウスウェア側で全く割り当てできなくてもahkで割り当てれますか? FAQには適当に頑張れとしか書かれていなくて、頑張れば出来るのかどうかが書かれてませんでした 購入するかで迷っているので教えて貰えれば幸いです。
マウスウェア側で全く割り当てられないマウスを買おうとしてるの?他のにすれば?
>>891 ControlGetPos,cX,cY,cW,cH, Button1, ahk_class Shell_TrayWnd
WinGetPos,wX,wY,wW,wH, ahk_class Shell_TrayWnd
pos := (wW > A_ScreenWidth) ? (wY < 0 ? "上" : "下") : (wH > A_ScreenHeight) ? (wX < 0 ? "左" : "右") : "浮いている?"
isMulti := (wH > cH * 2) && InStr("上下", pos)
MsgBox, % "スタートボタンのところは" (isMulti ? "複数" : "単数") "行で、タスクバーの位置は " pos
やばい、面白い。偽TClock。 ClockFormat := "MM/dd`nHH:mm" FontName := "MeiryoKe_Console", FontSize:=9, FontBold:="Bold", TextAlign:="Center" dW:=10, dH:=20, OffsetX:=-6, OffsetY:=-8 OnExit, ExitEvent ControlGetPos, tX,tY,tW,tH, TrayClockWClass1, ahk_class Shell_TrayWnd Gui, +LastFound -Caption +ToolWindow shellTrayHwnd := DllCall("SetParent", UInt,WinExist(), UInt, WinExist("ahk_class Shell_TrayWnd")) Gui, Margin, 0,0 x:=tX+offsetX, y:=tY+OffsetY, w:= tW + dW, h := tH + dH Gui, Font, s%FontSize% %FontBold%, %FontName% Gui, Add, Text, x0 y0 w%w% h%h% vTClock Border %TextAlign%, % FormatNow(ClockFormat) Control, Hide,, TrayClockWClass1, ahk_id %shellTrayHwnd% Gui, Show, x%x% y%y% SetTimer, Timer, On return Timer: GuiControl,, TClock, % FormatNow(ClockFormat) return FormatNow(format) { FormatTime, str, %A_Now%, %format% return str } ExitEvent: Gui, Destroy Control, Show,, TrayClockWClass1, ahk_class Shell_TrayWnd ExitApp
>>894 そのマウスはマウスウェア以外の部分が魅力的なんです
>>898 >>5 のAutoHotkey_LはWheelLeftとWheelRightに対応してるみたいだけど、これではだめ?
チルトついてるマウス持ってないので試せないから、合ってるか自信はないんだが。
>>899 すみません環境を伝え忘れましたが、XPなのでその機能は使えないみたいです。
具体的にマウスの製品名を書いた方が良いのでは
902 :
891 :2008/12/19(金) 10:05:40 ID:J8qNPk240
>>896 コードまで作ってくれて感謝!
ただ、うちの環境では、残念ながら複数でも単数でも
「単数行」としか認識しなかった。(XP SP3 Luna)
これをベースにして研究してみます。
>>891 SysGetのMonitorWorkAreaでタスクバーを除いたデスクトップ領域取れるから、
全体のサイズから引いたらタスクバーの大きさ取れないかい?
「ショートカットキーを入れ替える」 例)Ctrl+Alt+Nを押したら、Ctrl+Alt+MをPCに送る あるいは文字列を別の文字列に置き換える 例)btwを押したら> by the way をPCに送る のは、可能ですが Alt+L,K,V を押したら、 を Alt+L,K,NをPCに送る、という方法はないでしょうか?
それはAltとKLVを押したらAltとKLNを返すってことかい?
+なんだかorなんだか言葉としてのアルファベットなんだか分からないね。
何となくWinMenuSelectItemで済む話のような気もするが わからん。
何が言いたいのかさっぱりわからん
911 :
827 :2008/12/22(月) 00:18:24 ID:E5M+jAjH0
変数の最後に半角スペースを付け足したいので hoge=%hoge% (↑わかりにくいけど最後に半角スペースがついてます) みたいにやったんですけどうまく付け足してくれません。 どなたかアドバイス頂けませんか?
913 :
912 :2008/12/23(火) 02:03:21 ID:ZB3r/RYD0
あ、投稿したら例文の半角スペース消えちゃった…。
hoge=%hoge%%A_Space% hoge.=A_Space hoge.=" " hoge.=Chr(20)
AutoTrim, Offもいるかもねー
2chやブログでは半角スペースやタブは消えるので、全角スペースと入れ替えるとどうにか見かけを保持して表示できるけど、 AutoHotkeyは全角スペースを受け付けてくれないからコピペするとエラーになるソースコードになってしまう。
>>911 マウスを使ってますが
使えるところを色々といただいて
スクロール周りが快適になりました
充実のドキュメントのお陰です
ありがとうございました
2ch専ブラのログが増えると、ファイルシステム中のあちこちに散らばってしまう。 AHKのINI読み書きコマンドで、板ごとのログを1つのINIファイルにまとめてみた。 ini名を板名.ini、セクションをスレNo、キーをレス番にして、順番にひたすらIniWrite。 貯めたログを読みたいときは、readの指示を与えて、DAT形式で吐き出すようにした。 DATの数はスッキリと激減し、目的達成。1つのiniファイルのサイズは1GBを超えた。 新規スレの追記はfileappendを使って一瞬だが、保存済みのDATを最新に更新する動作は 1スレあたり0.5秒ほどかかる。それでもちゃんと正確に動いてる。 こういう使い方はSQLiteみたいなDBソフトが適任だが、テスト目的でAHKで作ったら 意外にも実用的に動いてしまい、AHKの底力を感じた。参考になればと思い、チラ裏報告。
ttp://lukewarm.s101.xrea.com/up/file/098.zip TrackWheelを捨てて、全部書き直した。全く反省していない。
- コード量が1/3以下になった
- 動作機序を根本から変えた
- Autohotkeyである理由が希薄
- 設定がかなり少なくなった
Win32APIのマウスフックなんだけど、LowLevelMouseProcならDLLが要らんようなので使ってみた。
これでマウスをピタッと止めて、dx,dy をメッセージをトラップして自窓に再度ポストできるようになった。
一日中MSDN見ていた
>>919 乙。実行してみたが135行目でdllがサポートしてないとエラーが出て終わってしまう。
dynamic function calls are not supported.
@XPPRO-SP3
あ、AHK v1.0.47.06以降でないと.... 駄目文字対応版とかだと v1.0.47.05 なんで
多分 if 〜 else にすれば動く、、、はず。 駄目文字対応版(v1.0.47.05)で確認した。 134行目から if (lineX != 0) { if (funcH = "Vkey") TW_MainHVkey(lineX, ctrl, hsHwnd, sX, sY, keys) else if (funcH = "Scroll") TW_MainHScroll(lineX, ctrl, hsHwnd, sX, sY, keys) else if (funcH = "Wheel") TW_MainHWheel(lineX, ctrl, hsHwnd, sX, sY, keys) } if (lineY != 0) { if (funcV = "Vkey") TW_MainVVkey(lineY, ctrl, vsHwnd, sX, sY, keys) else if (funcV = "Scroll") TW_MainVScroll(lineY, ctrl, vsHwnd, sX, sY, keys) else if (funcV = "Wheel") TW_MainVWheel(lineY, ctrl, vsHwnd, sX, sY, keys) }
ネトゲで簡単なマクロを使いたいのですが、 ゲーム内で動作してくれません。 ゲーム外での動作テストは意図した通りに動きます。 nProは未使用ですがソフトウェアを介す処理は弾かれているようです。 何かいい方法はないでしょうか?
垢BANされて死ね
フィルタドライバ書けばいいんじゃない
自作ソフトからキーを発行し、ahkに捕まえてもらうにはどのようなWINAPIを使用すればよいのでしょうか?
>920
確かに dynamic function calls だと DLL 関数の呼び出しっぽいけど、
%funcname%(arg1, arg2)
みたいな評価結果を関数名として行う呼び出しのことです。
>921
うちの駄目文字微対策版かな、ということで、1.0.47.06 にパッチ当て直してみました。
ttp://yak.myhome.cx/junks/#ahk.cp932
タブとテキストボックスで簡単なタブメモ帳でも作ろうと思ったらいろいろ面倒だ タブ作成、削除するにも|区切りだし 全タブ数調べたいのに現在のページしか取得できないし (GuiControlGet, ControlGet共に) 手軽に表示&編集したいからAutoHotkeyでいいと思ってたら・・・
>>930 Visual Studio持ってるからやろうと思えばできるんだけどね
GUIはオマケ程度で考えられてるのかな
tabを押した後、2秒間の間tabをおしても無視する様にしたいのですが どのようにすればいいですか?
Tab:: Send,{Tab} sleep 2000 return とかどう?試してないが。
それだとループするかも。 $Tab:: Send,{Tab} sleep 2000 return
936 :
933 :2008/12/27(土) 10:47:10 ID:sIpY6Z9M0
出来ました。 ありがとうございます
>>919 mbutton押しても反応しない時があるような
>>935 基本的なことですまんが、
先頭に$をつけると、自分自身を呼び出さなくできるの?
$は強制フック(NT専用)
>>937 ttp://lukewarm.s101.xrea.com/up/file/099.zip TrackWheel うp。 Docをまじめに書いた。
2008/12/27
機能修正/追加
外部ファイルで個別設定の取り込みを可能に
スクロール方法の自動選択をかなり強化
Scroll選択でもCtrl,Shift押下中はWheelを送るようにした(拡大/縮小,履歴など)
怪しい挙動(!)がかなり減った
内部仕様の変更
開始・終了時の致命的なバグをFix
自ユーザ以外のプロセスに attach しようとして初期化落ちしていたのを fix
スクロールバーの検出方法の強化(クラス名に非依存)
※ 個人的にはトラックポイント機能の代替が出来たレベルになったと思う
>>940 GJ
ボタンを押したときのレスポンスがよくなってるね
943 :
940 :2008/12/28(日) 17:03:50 ID:qgaPB3TC0
ハイレベルな流れの中で申し訳ないのですが、キーボード・マウス入力を自動化しようとしているのですが 意図した動作をしてくれないので、直そうとしても動きが速すぎてどこでこけたのかいまいち分らないので 一個一個のコマンドの間?を何秒か空けることって出来ませんかね?
SleepまたはWinWait〜
SetBatchLinesらへんも参考に
>>944 ん〜、もう系統が違うモノなんで・・・。
あっちはもうメンテする気がないっす
マウスポインタが見えていてもいいんなら、フラグで処理丸ごと飛ばせるっす。
467行目あたりのをのフラグを false にすればいいっす。
TW_HIDE_MOUSE := false
多分前のと違ってカーソルが見えていてもぴくりとも動かないはず。
>>948 Guiも表示されたままだからなぁ…
とりあえずぱっと調べてみたところ
普通ならTW_Start→TW_CursorHide(1)〜 TW_End→TW_CursorHide(0)と処理されるはずが
対応してない?所で素早くホイールクリックするとTW_StartとTW_Endがほぼ同時に呼び出され
順番的にはTW_Start→TW_End→TW_CursorHide(0)→TW_CursorHide(1)と呼ばれてる様子
細かい所は分からんのだが、なんとかならないのかな
Gui作成のヒントになりました Label付けるとGuiSizeとか変更できるの知らなかった
>>949 原因はなんとな〜く分かった。
前処理で、対象窓にAPIとか使って色々投げてるんだけど、Busyで返事が返ってこない。
で、その間に ButtunUpしてる。で、HOOK ON。だからもう、Buttun Up 拾えない orz
その辺をチェックするようにした。面倒だけど監視スレッドも1本増やした。
レンダリング中のブラウザとか、追従性の悪いスクロールするやつには弱い...
ttp://lukewarm.s101.xrea.com/up/file/101.zip 開始処理が終了する前にボタン押上イベントが発生したときの後処理が行われない不具合を対処したつもり
952 :
945 :2008/12/29(月) 01:06:31 ID:490uJ6s90
>>946 >>947 レスありがとうございます。初めてのプログラミングで四苦八苦してますが、頑張ってみます。
もうひとつ質問なんですがエディタってメモ帳でもいいんでしょうが、なんかお勧めの物ってありますか?
自分はxyzzyでahk-mode
メモ帳からxyzzyは敷居が高すぎるような でも自分もxyzzy使ってて、他を知らないから薦められないw
VxEditor使ってる 起動早いしマジオススメ
>>954 他のエディタでクセがついてない方が馴染みやすいってのもあるんじゃない?
ま、そういう俺は秀丸使いなんだけどさw
俺はEmacs系に馴染めなかったのでvi系てかVim
>>956 ,959
俺もメモ帳で書いてるんだけど、VxEditorはとっつき安そうで良いね。
xyzzyやVimも試してみたんだが、操作に慣れるのが大変で・・・
レス番号も頃合いだし、次スレのFAQに追加してもいいんじゃないだろうか。
こんな感じか?エディタはデフォで定義があるヤツ以外で適当にスレ見て見つかったヤツを書いた。
Q:エディタは何を使えばいいの?
A:好きなエディタを使えばいい。過去スレ見ると色々報告がある。
いくつかのエディタについてははキーワード定義が以下に添付されているので参考に。
{AutoHotkeyフォルダ}\Extras\Editors
他ののエディタ:
VxEditor
ttp://lukewarm.s101.xrea.com/test/read.cgi/bbs/1146398137/58-59 xyzzy(ahk-mode) (補完よろしく)
秀丸 (補完よろしく)
サクラエディタ (補完よろしく)
TeraPad (補完よろしく)
上にければ、\Extras\Editors\Syntax 内のファイルを利用して自分で作る!
具体名を列挙する必要は無いと思うけどな。 入力補完やシンタックスハイライト程度じゃ、無条件に「AHK書くならコレ」って推薦できるもんでないだろうし、 そもそもエディタなんて、それ以前に機能や動作の好み、その人のスキルで選ぶもんだし。 つか1スレに1、2回くらいしか出ない話題だし、プログラミング言語なら当然の話だし、 FAQに書く必要あるのか微妙だと思う
FAQにする必要はないな
そうかぁ。 - ユーティリティソフトの設定ファイル - スクリプトファイル のどっちと認識してるかでだいぶ印象が違う気がしたんでね。 前者は結構いて、発言してないだけなのかなと。 まぁ、要らないというのなら...
せっかくアーカイブ内に設定ファイルがまとまってるのに、存在感ゼロでもったいない。 ほとんどの人が、言われるまで気づかないだろうから、書いておいて損は無いと思う。
おがわさんのエディタの俺 ハイライトはないので自力で
ちょっと便利っぽい関数できた。キーの複数押しを検出する関数。 連続で押した回数 - 1 を返す。なので一発押しは 0。 MultiHit() { Static count count := A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey > 50 and A_TimeSincePriorHotkey < 250 ? count + 1 : 0 return, count } 使い方はこんな感じ。 1:: If MultiHit() = 1 Msgbox, This hotkey was hit twice. return 2:: If MultiHit() = 2 Msgbox, This hotkey was hit three times. return
モールスすげぇな
小ネタ。電源状態の変化を検知してサブルーチンを呼ぶ。 以下に列挙した変数に該当したイベントの通知があった場合、同名サブルーチンラベルを呼ぶ。 レジュームから醒めて録画したいときとかにでも。 PBT_APMBATTERLOW := 0x9 ; バッテリ電力が低下した PBT_APMOEMEVENT := 0xB ; OEM定義のイベントが発生した PBT_APMPOWERSTATUSCHANGE := 0xA ; パワー状態が変化した PBT_APMQUERYSUSPEND := 0x0 ; 待機要求をする PBT_APMQUERYSUSPENDFAILED := 0x2 ; 待機要求が拒否された PBT_APMRESUMEAUTOMATIC := 0x12 ; システムが自動的に復帰しようとしている PBT_APMRESUMECRITICAL := 0x6 ; 致命的な待機状態からシステムが復帰しようとしている PBT_APMRESUMESUSPEND := 0x7 ; 待機状態から復帰しようとしている PBT_APMSUSPEND := 0x4 ; システムが待機状態になろうとしている OnMessage(0x218, "WM_POWERBROADCAST") return WM_POWERBROADCAST(wParam, lParam, msg, hwnd) { global static names:="PBT_APMBATTERLOW,PBT_APMOEMEVENT,PBT_APMPOWERSTATUSCHANGE,PBT_APMQUERYSUSPEND,PBT_APMQUERYSUSPENDFAILED,PBT_APMRESUMEAUTOMATIC,PBT_APMRESUMECRITICAL,PBT_APMRESUMESUSPEND,PBT_APMSUSPEND" Loop, PARSE, names, `, if (wParam == %A_LoopField% && IsLabel(A_LoopField)) SetTimer, %A_LoopField%, -10 return 1 } ; 例) レジューム復帰時に呼ばれるのサブルーチン PBT_APMRESUMESUSPEND: MsgBox,待機状態から復帰しようとしている return
ふと思ったがエディタでのリピート操作のマクロみたいなのを AHKでできたら面白そうだね。
ちょっと質問 data0に行数 data00に列数 data11に1行目1列目の値 data12に1行目2列目の値 ・・・ って入れたんだけど Loop, %data00% { rowCount := A_Index Loop, %data0% { ;Msgbox使ってrowCount行A_Index列の値を表示させたい } } 二次元配列は向いてないんだろうか?
974 :
973 :2008/12/30(火) 02:33:32 ID:x2CL5LgwP
すみません、勝手に自己完結
MsgBox, % data%rowCount%%A_Index%
で大丈夫っぽい
ちなみに
>>973 はdata00とdata0の値が逆になってたのでここで修正
次スレ近いのにスレ汚しすみませんでした
少しお聞きしたいのですが、複数の指定ウインドウを同時に 前面に持ってくる(SetForegroundWindows的な)ことはできませんでしょうか? GroupAdd と GroupActivateでいけるかな?と思ったのですが、 GroupActivateだと読んだ順番に1つずつ前面に来てしまいます。 GroupAddしたもの全部同時に前に出したいのですが、 よい方法はありませんでしょうか?
下記を参考にしたところ、
WinGet
http://lukewarm.s101.xrea.com/commands/WinGet.html こんな感じでいけました。
Process, Exist, notepad.exe
if ErrorLevel = 0
return
WinGet, id, list, ahk_pid %ErrorLevel%
Loop, %id%
{
StringTrimRight, this_id, id%a_index%, 0
WinActivate, ahk_id %this_id%
}
return
おさわがせしました。ありがとうございました。
以下のようなことをしたい場合は、どのようにすればいいのでしょうか? ・LeftShift+Backspaceを押すと、Deleteが押されたことにする ・LeftCtrl+LeftWindowskey+LeftAlt+Aを押すと、Deleteが押されたことにする ・↑を押すと、マウスカーソルが上に移動する
特殊でもなさそうだから、ふつうにコードを書けばいいんじゃね?
常駐プロセス減らすために先ほど入れてみた これTTBaseみたいにひとつのプロセスでプラグイン(スクリプト)読み込んで実行してくれるのかと思ってたら スクリプト分起動してメモリもタスクトレイも圧迫するんだな・・ コンセプトが常駐統合じゃなくて常駐作成支援ってとこを見落としてた俺が悪いんだけど
たくさん常駐させるか、あるいは人の作ったものを改変してマージして それぞれが自分のスクリプト育てるような使い方になるね。 なんかうまい方法あればいいのに。
>>979 AutoHotKey.iniに全部突っ込めばOK
>>981 スクリプトによって無理じゃない?管理もしづらくなるし。
常駐減らそうと思って使っても、
利便性を高める軽い処理を任せるようになるから、スクリプトの数は多くなる。
単一のプロセスやトレイにしたければ、自分でまとめて書くとか、 スクリプトローダみたいな書くとかすればいいだけでは。 その分プロセスやスレッドの割り当てが自分で好きに出来たり、 他人のスクリプトをカスタマイズできたりするんだから、 多少敷居は高くとも、これくらいの自由度ある方が有り難いな。
勝手に追加FAQ?
Q: GUI作るのめんどくせ〜〜
A: 公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使え
Q: ファイルパスに駄目文字があるんだが、、、
A: 駄目文字微対策版(
ttp://yak.myhome.cx/junks/#ahk.cp932 )を使え。
Q: 「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A: 多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
Q: AHKってマルチスレッドじゃないの?
A: 「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …: 割り込み終了待ち
> 元スレッド →→→→→→→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
誤爆したすまそ
確認したらreadme.txt間違ってるや Sample.ahkじゃなくてDBTest.ahkになってます
>>985 なんというGJなテンプレ!
このスレで出た新規の内容が、ほぼ全部網羅されとる。
>>987 GJ
Dynamic Function 使って、コールバック関数放り込めるといいなぁ、なんて。
AutoHotKeyみたいな簡易スクリプトでDBって酔狂だなw
>>990 そこらへんよく分かってないので勉強中ということで
>>991 まあ他の言語の方が絶対的に向いてる
それでも公式のフォーラムで似たようなの見つけて
考える人は同じだなーと実感
スクリプト言語こそ貧弱なデータ操作を外部DBに任せてもいいんじゃないかなぁ。 俺は作りかけ(とはいってもDLLのバージョン表示くらいまでw)で放置してた。 考えるヤツは考える。
>>985 の図はGood job!
Windows板なんかに初心者用スクリプト相談スレ建てても過疎るかな?
>>994 それは絶対にやめてくれ。
いまこのスレは 質のいい質問者と、レベルの高い回答者が揃ってて好循環だから、
そこにヘンなのが流入してクズだらけの質問で埋まると困る。
クレクレとドキュメント読まない厨が集まるんだろうな…
test
良スレでつね。
>>994 それはやめてくれ。
初心者側としても読むスレが増えるだけでありがたくない。
#今日AHKを知った新参としての意見。
1000 :
994 :2009/01/01(木) 20:51:13 ID:/LfLEbsk0
>>998 了解。
ただ、Part1〜2くらいは初心者混合なんだけどな。今は古参ばかり。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。