AutoHotkeyと窓使いの憂鬱を使っていてCtrlが押しっぱなし現象が起きるんですが
>>9 の
>>782 スクリプトの導入仕方教えてください。
ctrl_alert.ahkというファイルを作り、
>>9 のスクリプトをコピペ保存して
AutoHotkey.iniの先頭に
#include ctrl_alert.ahk
と書いてAutoHotKey再起動でいいのかな。
563 :
562 :2010/05/10(月) 00:06:12 ID:BGU/cq2PP
>>562 の方法だとAutoHotKey.iniで設定したホットキーが全然効かなくなってしまいました・・・
#include ctrl_alert.ahk をコメントアウトして一旦回避してるんですが、
どうするのが本来の組み込み方なんでしょうか?
そのAHKファイルはどこに置いてるの?
565 :
562 :2010/05/10(月) 01:59:48 ID:BGU/cq2PP
>>564 ahkファイルはAutoHotkey.iniとともにAutoHotKeyのexeと同じディレクトリに置いてあります。
#include ctrl_alert.ahk
AutoHotkey.iniの先頭に上記のように書いてAHKを再起動すると、ctrl_alert.ahk は動作するのですが、
AutoHotkey.iniのその他の記述動作しないという状況のようです。
>>565 auto-execute sectionって仕様
includeせず単独で起動するのが手っ取り早い
バリバリ使いこなしているが、autohotkey.iniというファイル名では 一度も作ったことがない。なんか、説明書見てもわかりにくいよね。 全部.ahkでやるのがシンプルでいいよ。 単純にahkファイルをd&dすれば動くから。 iniファイルは別途作るべし。
>>565 その方法でやるならば、ctrl_alert.ahkに書いてある
returnで実行が止まっちゃうので
最初のreturnをgoto, end_of_ctrl_alert_ahkとか適当に書き換えて、
スクリプトの最後にend_of_ctrl_alert_ahk:を追加したら動くんじゃないかなー
ラベル名は被らなければ何でもいいけど。
一応補足するけど、 gotoは多用するとワケワカメなプログラムになりやすいので、通常は避ける。 だけど、こういう使い方の場合は分かりにくくなることはまずないのでいいと思う。 スクリプト自体に殆ど影響しないしね。
570 :
562 :2010/05/10(月) 07:04:51 ID:BGU/cq2PP
ごめん。ちょっと弄ってました。
最初の returnはコメントアウトしてました(結局一緒でしたが)
結局
>>568 の方法でうまくいきました。
トップレベルでreturnしたらそこで終了なんですね、なるほど。
; ctrl_alert.ahk
#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
;return
goto, end_of_ctrl_alert
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
end_of_ctrl_alert:
SetTimerにラベルじゃなくfunctionが指定できればSetTimerの始動やSetTimerのイベントも含めて関数化してすっくりできるのかもしれませんね。
今回の場合、言語仕様を理解しないままincludeしただけで動くのを目指したので混乱したようです。
ModAlerter(alertDur=3000, timerDur=200) { static Keys:= "Ctrl|Alt|Shift|LWin|RWin", dur, Ctrl, Alt, Shift, LWin, RWin dur := alertDur SetTimer, ModAlert_Timer, %timerDur% ModAlert_Timer: ListLines, Off alert= Loop, PARSE, Keys, | %A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%, alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > dur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : "" Tooltip, %alert% Return } 関数ライブラリスクリプトにするならこんなもんかな。 しかし、変数の挙動が怪しいなぁ… 関数内のタイマー用ラベルって基本的に関数外にあるのと同じだと思ってたけど、違うのかなぁ Keys や dur は static なんで関数ローカルで、かつタイマ側からも参照可能。 同様に static 宣言しているがタイマーで上書きする Ctrl,Alt,Shift,LWin,RWin はグローバルになってる 何の宣言もしていない alert は ListVar には出てこない上に、static のような感じでクリアしてやらんといけない これってどういう事?教えてエロイ人!
<< 演算子を使った関数外の変数が 関数内からなぜか使えた気がする
AHK_L を Win 7 x64 で動かしています。 AHK でメモリーリークの原因を追求するにはどうしたら良いでしょうか? 自作の 130 行くらいのスクリプト (ToDo リスト管理用) が、 少なくとも MsgBox のたびにメモリー消費量が増えてしまうようです。
576 :
574 :2010/05/11(火) 00:19:58 ID:RQ4U7xzI0
>>575 レスありがとうございます。やっぱそうですか > 地道
紹介のフォーラムで新たに知ったのは、Loop もリークを起こす可能性があるということでした。
とりあえずコメントアウトを試してみます。
Loop コマンド自体がメモリリークを起こすんじゃなくて、 タイマーやループのように複数回実行するところで解放されない変数(メモリ)が生じる可能性があって それが実質メモリリーク状態になるってことでしょ AHKの変数だけならListVarsで確認はできるけど、DllCall で怖いのが確保したメモリは AHKの管理外なんで確認する手段が無いって事かな(COMオブジェクト含む) ToDoリストだと多分配列使ってるんだろうけど、変数の管理がちゃんと出来ているかを見直すのが まず一番にすべき事じゃないのかね
~RButton & LButton::MsgBox AHKテスト成功 ↑はできるのに↓はできんね。どうして? ~RButton & LButton:: send,^C あるいは ~RButton & LButton:: Send,{Ctrl down}{Insert}{Ctrl up}
>>578 まずはその動作を物理デバイスで手動でやってみて、PCが反応するか試してみたら?
Send, ^C と Send, ^c とは違うよ
>>579 ctrl + c でコピーできるんですが、send,^cでは無理ですね。
>>580 初耳でした。しかし、Send, ^c でも
{Ctrl down}{Insert}{Ctrl up}
でもできません。左右クリックに割り当て無理っぽいですね。
MsgBoxはきちっと通るのに
>>582 うちの環境ではいずれも動くよ。
但し、MouseGesture.ahkを実行していると効かないけど。
競合しているかもしれないのでAutohotkeyスクリプト全てを終了し、
それだけ記述したスクリプトのみ実行して試しては?
※場合によっては他のカスタマイズ系ソフト(IntellipointやSetpoint含む)を全て終了しないとダメかも。
584 :
562 :2010/05/12(水) 01:09:26 ID:JAu96k7wP
>>571-573 おお、つっこみサンクス。
SetTimerは関数内のラベル指定でいけるんですね。
>>572 関数を一度も実行しないで関数外からSettimerで関数内ラベルに飛んだ場合にも
ちゃんとローカル変数になるみたいだな。
そしてstaticな変数は既に確保されて初期化されているみたい
あと、%%で展開された変数がグローバル変数になってるみたいで
staticで宣言した変数などとは別物になってるっぽい
ワケワカメだけど、こういう抜け道は上手く利用すれば便利かもしれないね
>>585 >あと、%%で展開された変数がグローバル変数になってるみたいで
>staticで宣言した変数などとは別物になってるっぽい
よく気づいたね
これは思っても居なかった
587 :
574 :2010/05/12(水) 10:11:50 ID:bVCo4tkH0
メモリーリークの件です。 少なくとも当方の環境では、MsgBox が問題のようでした。 ---- Loop, 1000 Msgbox ---- このスクリプトで OK を押すたびに、プライベート領域が上昇していくようです。
AutoHotKey_L Rev.51で試してみた マジだどういうことだこれw
ちょっとフォーラムでも聞いてみます
これ、今現在ユーザー側で出来る対策ってあるの? 常駐するスクリプトだと定期的に再起動?
そんなはっきりしたバグならすぐに直るでしょ 2GB積んでるようなマシンならしばらく放置しといたら あるいはtraytipで代用するとか
XP SP3 32bit だといくらループしてもメモリ使用量変わらんなぁ
本家の方なら増えないな7x86でもXPx86でも
あるアプリのウィンドウに対して、その実行ファイルのフルパスを取得する方法って 対象が32bitアプリと64bitアプリのどちらでも対応できる様にするには どうすればいいでしょうか? 検索して見つけた下記の関数だと32bitアプリに対してしか動作しない様です。 GetModuleFileNameEx(ProcessID) ; modified version of shimanov's function { ; #define PROCESS_VM_READ (0x0010) ; #define PROCESS_QUERY_INFORMATION (0x0400) hProcess := DllCall( "OpenProcess", "UInt", 0x10|0x400, "Int", False, "UInt", ProcessID) if (ErrorLevel or hProcess = 0) Return FileNameSize := 260 VarSetCapacity(ModuleFileName, FileNameSize, 0) CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize) DllCall("CloseHandle", hProcess) Return ModuleFileName }
プロセスのハンドル精度が違うから無理なんじゃないのかね
行き詰ったので質問させてください。
過去ログとなまず日記を参考にしてゲームパッドの「ボタン13」を2回押しした際に「t」を。
「ボタン15」を2回押しした際に「b」を返すスクリプトを作ってみました。
これをPCゲームで利用しようと思いAHKを起動した状態でプレイしてみたのですが、
いざゲーム上でボタンを2回押ししてみても反応がありません。
メモ帳では正常に動作。
今までJoyAdapter(
http://www.vector.co.jp/soft/win95/util/se069688.html )を使用していたため
ゲーム本体に外部ツールを無効化する機能がついている可能性は低そうです。
改行多すぎだそうなので分割。 こちらが作成したスクリプトです。 ~Joy13:: KeyWait,Joy13 SetTimer, Joy13_CheckCnt, 200 Joy13_cnt += 1 if(Joy13_cnt == 2) { Send,t } return Joy13_CheckCnt: SetTimer, Joy13_CheckCnt, Off Joy13_cnt = 0 return ~Joy15:: KeyWait,Joy15 SetTimer, Joy15_CheckCnt, 200 Joy15_cnt += 1 if(Joy15_cnt == 2) { Send,b } return Joy15_CheckCnt: SetTimer, Joy15_CheckCnt, Off Joy15_cnt = 0 return
1 そのJoyadapterとやらのツールに、そもそもキーがちゃんと伝達されているかテスト 2 WinActivateをいれて、送信する場所を決め打ち 3 AHKを、もっと単純にしてみる。例 loopでまわして強制的に一定間隔でsendしてテストするとか 4 Joyadapterを、AHK以外の別のツールで制御してみて、ゲームに伝達されるかテスト ってな感じか
JoyAdapterの代わりにAHKを使うってことだろ
ああ、ほんとだ。 じゃあ動かない原因は、AHKがキーを送信する階層がユーザプロセスに近いせいかもね
SendMode だと勝手に予想
>>598-602 説明不足で余計な誤解を招いてしまったようで申し訳ない。
結果から報告しますと、「Send」を「SendEvent」に置き換え、
AHKを管理者権限で実行したところ正常に動作しました。
レスどうもありがとうございました。
特に有力な情報をくれた
>>598 、
>>601 の両名には深い感謝をば。
ControlClick って、使用ができる用途・ケースがごく限られたコマンドなのでしょうか? iTunesの再生ボタンをウインドウが前面になくてもクリックしたいと格闘したんだけど、成功しなかった。 ググってみたけど、controlsendのスクリプトはあるんだけど、controlclickのスクリプトって あんまないよね
これじゃだめなの? ControlClick,Button6,ahk_class iTunes
>>605 ありがとうございました。
あれ・・・できた、なんでだろ
ControlClick,Button10,ahk_class iTunes
でクリックできた。前面にきちゃうけど。
前やったときはぜんぜんクリックしてくれないので
Button10, ahk_id %itunes%, , LEFT, 1, NA (めちゃくちゃ)
っていうオプションをいろいろつけて苦戦してたんだが。
>>605 あれ、やっぱ、
>>605 じゃ出来ないときがあるね。どうしてだろう。
引数を足したら安定するんだろうか。
趣旨とちがうけど
DetectHiddenWindows , On
ControlSend , ahk_parent, {space}, iTunes ahk_class iTunes
DetectHiddenWindows , Off
こっちのほうが安定してるね。
controlclick期待してんだが。
CabinetWClassとExploreWClassにWinClose割り当てて窓を閉じるジェスチャにしたんですが アプリの終了も同じジェスチャで指示出来るような方法はありますでしょうか? 個別に指定していくとキリが無いのでアプリ全般といった指定がしたいんですが
ジェスチャをどうやって実現しているかによるな
Ctrl+w もしくは Alt+F4 送れば大抵のアプリは閉じられるんじゃない?
TVTestのSDKを使って、情報の読込みや設定の変更って出来ますか?
AHKは ・ウィンドウを特定して、任意の座標をクリックしたりキーを送ったりできる ・ウィンドウを特定して、PostMessage/SendMessageできる ・任意のDLL内の関数をコールできる(構造体の利用可) で判断してくれ
>>609 >>610 レスどうもです
Alt+F4…なんでこんな簡単な事気づかなかったんだw
助かりました、どうもです
ジェスチャで大概のブラウザ見たいに←で戻るとか→で進むとか単純な操作は登録出来ますか? Cabinetとエクスプローラあたりでその操作にしたいんですが…
Alt+Left/Right か Browser_Back /Forward 送ればそれっぽくなるんじゃない?
>>615 レスどうもです
試して見た所概ね良好みたいで今のところ競合とかも無さげです
このソフトは使う前に基本コマンド覚えた方が早く慣れそうだと気づきました
助かりました、ありがとうございます
文字列中から、ある一文字の出現回数を調べたいです loop,parse 以外でこれを調べる方法はありますか?
StringSplitにある一文字を指定して分割された要素数を求めればいいんじゃね?
書き忘れたけど、「分割された要素数 - 1 = 出現回数」な。
あ、しったかしてゴメン。 ある一文字が文字列中に連続して出てくるとダメかもしんない。
splitだと1文字の区切り文字しか認識できないので、 stringreplaceを使うとよい searchword=あいうえお stringreplace,dummy,string,%searchword%,,ALL UseErrorlevel msgbox,個数=%errorlevel% これでOK
質問者のレスを再度見たら、1文字でいいのか。
じゃあ
>>618 の方法で十分だな
AHK_L rev. 51 + Win 7 x64 を使用しています。 下記 (のような) 関数をタイマーで 1 秒ごとに呼び出し、常駐ソフトも含めて プロセス監視をしています。スクリプト全体の中でこの関数の負荷がやや高めで もう少し改善できないかと思っています。 何か良い方法があれば教えて下さい。 GetCurrentProcesses() { DetectHiddenWindows,On WinGet, winid, List Loop, % winid { WinGet, proc, ProcessName, % "ahk_id" winid%A_Index% list .= proc "`n" } StringReplace, list, list, .exe,, All Sort, list, U D`n DetectHiddenWindows,Off Return, % list }
test=aaa inputbox,hoge msgbox,%hoge% inputboxで%test%と打ち込んだ場合 msgboxでaaaと表示させるにはどうすればよいでしょうか?
test=aaa inputbox,hoge msgbox,% %hoge% これでtestって打てばaaaだけどね・・・ %test%って打ちたいとなるとどうだろ?
inputboxを利用してこのソフトでcraftlaunchみたいな コマンド入力型のランチャーって作れるのでしょうか? すでにスクリプトが作られているのでしょうか? 欲しい
>>1 のAutoHotkeyを流行らせるページ(AutoHotkeyを流行らせるページ跡地)
の「その他スクリプト」の中の「FileLaunch」がそれっぽいものかな
32bitのWin7ですが、物理メモリが足りず、ページファイルを使いまくってるときに AHKで警告メッセージを出したいです。 タスクマネージャのパフォーマンスタブに表示されている 「メモリ」の値を取得する方法があればベストなのですが、 やり方がわかりません。 はやらせるページさんの GetMemoryState() では、 XPでは問題なく動いていましたがWin7でメモリを4GB積んでいると 取得できる値がおかしくなる気がします。 認識できる上限の値をかさ上げするかしないかの仕様が変更された せいでしょうか。 それとも、たんにやりたいことを実現するには、もっと簡単な方法が あったら、ヒントいただけると幸いです。
タスクマネージャ起動しっぱなしでいいんなら、ControlGetTextで取ればいいんじゃないの
ドロップされたファイルのリストを表示するGuiについて質問させて下さい。 #NoTrayIcon Gui, Add, Edit, x7 y67 w300 h120 Gui, Show, h198 w314, test Return GuiClose: FileDelete, %A_ScriptDir%\temp.txt ExitApp GuiDropFiles: DropFilesList = %A_GuiEvent% Sort, DropFilesList MsgBox, %DropFilesList% ;FileAppend, %DropFilesList%, %A_ScriptDir%\temp.txt ;FileRead, DropFilesList, %A_ScriptDir%\temp.txt ControlSetText, Edit1, %DropFilesList% Return これで作成したGuiに複数のファイルをドロップすると、 MsgBoxでは改行された状態でリストが表示されるのですが テキスト欄では改行が無視された状態で表示されます。 コメントアウトしている下から3行目と4行目を有効にすると正しく表示されるのですが、 この原因はどこにあるのでしょうか?訂正すべき点をご指摘下さい。
>>632 改行コードをCR+LFにしてみるとか。
Sort, DropFilesList,D`r`n
>>633 StringReplace, DropFilesList, DropFilesList, `n, `r`n, All
を挿入で解決しました。ありがとうございました
ゴミ箱の中にあるファイル名を取得したりできませんか?
MouseGesture.ahkからキーを送ることでアプリケーションを操作してるんだけれど
ポップアップメニューが開いたままだとCtrl+Wを送信するばあいの場合「....(W)」ってメニューが実行されちゃうので
できればポップアップメニューが開いている場合のみ先にSend,{ESC}でとじてからSend,^wとかしたいんだけど
AHKからポップアップメニューが表示されているかどうかの確認は可能?
ttp://sakura.qp.land.to/?Customize%2F%C5%EA%B9%C6%2F49 あとサクラエディタ用の強調キーワード設定ファイルが古かったから最近の追加してみた
>>636 IfWinExist, ahk_class #32768
{
Send, {esc}
Send, ^w
}
あ、ちがう、こうだった IfWinExist, ahk_class #32768 Send, {esc} Send, ^w
>>638 おおーばっちりです!本当にありがとう!
Gui, Add, Hotkey,vkeyでホットキーをGUIで設定してそのホットキーを サブルーチンラベルにするにはどうすればよいのでしょうか?
Hotkey, %KeyVar%, LabelName
できました!ありがとうございます。
SoundPlay,%file% でWAVファイルを再生すると、そのスクリプトを終了させるまで ファイルハンドルを掴んだままになってしまい、リネームや削除ができません。 マシンによって挙動が異なるような気がするのですが、みなさんのPCでは どうでしょうか。 なにか対策する方法はないでしょうかね。
SoundPlay,%file% SoundPlay,unko %file%はうんこによって開放されます。
それで開放されないって話じゃないの?
コピーして再生、ハードリンク張って再生
>>644 ありがとうございます。うんこを与えたところ解決できました。
テンキーの00キーにカンマを割り当てたくって、
見つけたのがこのスクリプト
http://www.autohotkey.com/docs/scripts/Numpad000.htm だけどこれって、000キー用で、00キー用じゃないんだよね。
で、なんとなくカンで、
else if Numpad0Count = 0
Numpad0Count = 2
を削ったら、ちゃんと動くようになった。
.....のはいいんだけど、普通の0キーをキーリピートさせると、時々カンマが出ちゃう...orz
00もリピートしないし(....ってそれはこのスクリプトではむりか)
キーリピートはどうやって解決したらいいんでがんしょ?
キーボードの仕様が分からないからはっきりとしたことは言えないが、 ストロークの発生間隔か、キーアップが送られてきていることを手がかりにすればいいと思われ。 NILScriptなら1〜2行くらいで書ける気がする。
>>636 ,638読んで思ったんだけどポップアップメニューのクラスってWindowSpyじゃ取得できないけどどうやって確認するの?
例えばFirefoxのポップアップはMozillaDropShadowWindowClassらしいんだけど
WindowSpyでカーソルをポップアップ上に持っていってもポップアップの下のFirefoxメインウインドウの情報が表示される
f1:: MouseGetPos,,, hwnd WinGetClass, class, ahk_id %hwnd% msgbox, %class% return
メモ帳かIEのウィンドウがアクティブになるまで待機 みたいなこと出来るコマンド、コードあれば教えてください。
WinWaitActive
>>651 なるほどその手があったか
ずっと不思議だったんだ
ありがとう
特殊なPS/2キーボード(教育用途らしい〜12個キーがついてる)を入手したので AutoHotkeyでキーアサインしようと思ったんですが、 ほとんどのキーは、幻のファンクションキーF13〜F24が割り振ってあって 簡単にアサインできたのですが、 2つのキーだけはとても特殊でした。 1つめは VKがFFでSCが072 2つめは VKがFFでSCが074 それぞれ vkFFSC072::A vkFFsc074::B のように書いても、両方のキーどちらを押しても、 先に指定したAの方が出てしまいます。 どちらのキーもvkが共通でFFだからかもしれないですが、、、、 一応AutoHotkeyの仕様としては記述法は間違いないですよね? これはバグなんでしょーか? ちゃんとAHのKeyHistoryにはそれぞれのvkとscがちゃんと上記のように表示されます。 なにか解決法はないでしょうか? 別の指定方法とかありませんでしょうか?
スキャンコードの指定のみだとエラーになってしまいます。。。
すいません、自己解決しました sc072::send A sc074::send B これだけでOKでしたw AHのKeyHistoryで調査したときに、 vkとscの値は出ても、その右に「not found」と表示されるキーは sc072::A みたいな記述法だとエラーになるので、ちゃんとsendを書かないとだめみたいです。 こんな簡単なことに気づくまでに1時間もかかってしまい...orz
F13からF24などのキーって、今はついてるキーボードがないですが、
こういう古いキーボードについてるんですね
http://geekhack.org/showwiki.php?title=Island:7358 このページによると
SC072はCrSelキー
SC074はExSelキー
に相当するみたいですね。
最初、PS/2をUSBに変換するアダプタをかましてやってみたら、
全くキーコードを吐かないので、おかしいなと思ったら、
そのページにもありますが、PS/2-USB変換アダプタでは
F13からF24はブロックされてしまうのが普通のようですね。
シンプルなことだったけれど、いろいろ勉強になりましたw
しかしたった12個のキーがついた特殊キーボードだから
F13からF24を全部、単純にアサインすればいいのに…と思うんですが、
F19とF20とF23は未使用でなぜか3つのキーにはSC072とSC074とSC006がアサインされていて
何故なのかかなり謎...
同時に使う特殊キーボードで既に使われているキーだったのかしらん...
スイスの教育キーボードらしいのですでに知る術はないですが...
一時間なら短い方だぜ
いいなぁ、F13〜F24が直打ちできるなんて、AHK的にうらやましすぎる。 そのキーボードを見てみたいから写真うpよろしく。
>>660 わはは、みなさんいろいろ苦労されてるんですね…w
>>661 早速写真うpしてみました
http://mac.hitobashira.org/up/src/maka0243.jpg スイスのmastereyeという教育システム用のようで、1998年製造のようです。
製造はGMK electronic design gmbHという会社のようで、ちゃんとメカニカルで打鍵感もすばらしいです。
日本では株式会社エルテックスっという会社が2003年から学校用に販売していたみたいです。
ジャンク扱いの品がオクなどで出ることももしかしたらあるかもしれないので要チェックです。PS/2えす。
その後わかったのですが、AHのKeyHistoryで調査したときに、
vkとscの値は出てもその右に「not found」と表示されるキーをリマップするとき、
やっぱりちょっとAutoHotKeyは謎仕様なのかもです...
vkEDsc006のキーが1つあったんですが、
vkEDsc006::Aで普通に通ります。
vkED::Aも普通に通ります。
でも
sc006::Aと書いても、エラーが出ずに普通に通っちゃいます。
上に書いた「not foundのキーはsendしなくてはエラーが出る」という法則が早速崩れてしまいましたw
…ただし、エラーは出ないんですが、ちゃんとリマップされない、これが。
やっぱり、AHのKeyHistoryで調査したときに、vkとscの値は出ても、
その右に「not found」と表示されるキーは
リマップするときなど、いろいろ試してみる必要がありそうです。
かっけー。 いいなぁ。ジャンク屋で見つけたら捕獲するわ。
デザインいいねコレ うらやますぅいー
666 :
名無しさん@お腹いっぱい。 :2010/05/21(金) 22:34:57 ID:W97jAZBA0
今フォトショップのショートカットにキーを割り当てているんですが このままだと、一度wとqを推してしまうとctrキーlが押しっぱなしになってしまうようで、うまくいきません。 この記述だけでは不足しているものがあるんでしょうか? #ifWinActive ahk_class Photoshop w:: send {ctrl down}{NumpadAdd down} q:: send {ctrl down}{NumpadSub down} #IfWinActive, ahk_class Photoshop
〜Downは〜Upが贈られるまでずっと押し下げ状態 send, ^{NumpadAdd}とsend, ^{NumpadSub} でどう?
押しっぱなしになるように記述してるだけじゃん Send, ^{NumpadAdd} とかすると思うが
こう書かないとwキー押すとそのすぐ下のqキーのコマンドも実行されてしまう #ifWinActive ahk_class Photoshop w::send, ^{NumpadAdd} q::send, ^{NumpadSub} #ifWinActive またはreturnを付ける #ifWinActive ahk_class Photoshop w:: send, ^{NumpadAdd} return q:: send, ^{NumpadSub} return #ifWinActive
>>663-665 ジャンク品で見つけたときは、全部のキーに日本語が書いてあったんだけど
実は全部シールで、剥がしたら下がこうなってたw
うれしい誤算だったよw
671 :
名無しさん@お腹いっぱい。 :2010/05/21(金) 23:19:54 ID:W97jAZBA0
>>667 >>668 >>669 w::
send,^{ctrl}{NumpadAdd}
return
q::
send,^{ctrl}{NumpadSub}
return
すいません。こう記述してみたのですが動かないです。
photoshop側のショートカットの拡大縮小がctrl++とctrl+-となっていまして
これらがもデイファイア必須なショートカットでして
それらをwとqだけで動くように設定したいのですが、どうもうまくいきません。
この記述を参考につくってみたのですが これはちゃんと動くんです。
z::
{
send {alt down}
mouseclick, right,,, 1, 0, d
Loop
{
sleep, 10
GetKeyState, state, z, p
if state = u
break
}
mouseclick, right,,, 1, 0, U
send {alt up}
return
}
}
673 :
名無しさん@お腹いっぱい。 :2010/05/21(金) 23:58:30 ID:W97jAZBA0
>>672 なるほどすいません。
#ifWinActive ahk_class Photoshop
w::
send {ctrl down} {NumpadAdd down} {NumpadAdd up} {ctrl up}
return
q::
send,{ctrl down} {NumpadSub down} {Numpad up} {ctrl up}
return
#ifWinActive
他の人の記述を参考にこう書き直したら動きました。
このスクリプトの意味がよくわからないのですが、
一度押下げしたあとに押し上げるコマンドを同時にいれて、コマンドをリセットしているという感じでしょうか?
わからないって・・・これほどわかりやすいスクリプト例は他に無いだろう。 downを「ボタンを押す」 upを「ボタンを離す」 で読み替えてみ?
同時じゃなくて逐次実行 Ctrl押して、NumpadAdd押して、Ctrl離して、NumpadAdd離して を順番にエミュレートしてる ^{NumpadAdd} は、Ctrl+NumpadAdd を一定時間投げる かたくなに^を使わないのにはなんか訳あるのかね 単に意味わからんからスルーしてるのか up/down 分けなきゃ動かないのか
使わないわけではなくこうしないと動かないんです。 どうもありがとうございました。
Autoohotkeyをコンパイルしてexeで起動さておいて、 そのexeのショートカットにファイルをドラックした時に%1%のような感じで受け取ること出来ますか? 起動していないときなら出来きます。
>>677 過去ログに似た問答があったのでコピペ
>455 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 15:17:20 ID:svMF3G070
>独立したahkスクリプトに対して、既にそのスクリプトがが起動していたら引数を渡すだけ、ということは可能なのでしょうか。
>
>Run,Autohotkey.exe hoge.ahk "hogehoge"
>みたいな感じで起動して、hoge.ahkが既に存在しているならhogehogeを渡したいのですが。
>
>やりたいのは、一般的なメディアプレーヤーみたいにプレイヤーが立ち上がってたらそれでファイルを再生、そうでなければ起動+再生みたいなことです。
>
>460 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 19:11:01 ID:VZ8xmIkr0 (2回)
>
>>455 >既に起動しているスクリプトに起動パラメータで引数渡すのはたぶん無理
>やりたかったらGUIでGuiDropFilesラベル有効にしといて
>cdropや管理人さんのファイルドロップ関数で渡してやるのが簡単なんじゃないかな。
>それか OnMessage() か RegisterCallback() あたり使うとか。
>
>461 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/10/16(木) 20:24:03 ID:JCUO9F070 (3回)
>
>>459 >言われてみればその通りかも。ファイル構成を再検討してみます。
>
>AHK同士の連携は、
>>460 のGuiDropFiles法でいとも簡単にできました。
>こんな便利な方法があったとは。
既に起動してる場合は%1%をtextで吐き出して 起動してるやつでtextを読みこめばいけるじゃん
購入したUSBテンキーに=ボタンがついていて どうもエクセル用らしいので、私はエクセルを使わないので 全く無意味なキーなのですが、、、 こんなキーコードを履きます A2 01D d 9.59 Ctrl 66 04D d 0.02 Num 6 66 04D u 0.00 Num 6 61 04F d 0.02 Num 1 61 04F u 0.00 Num 1 A2 01D u 0.02 Ctrl このキーになにか別の文字を割り当てるのはどうしたらいいでしょう? どうもうまくいかなくて、、、、
>>682 それ、書いてあるまんまのキーだから、
割り当て変更すると通常キーも変更される。
最初のCTRLが送られた段階でホットキーを発動させるようにする ↓ その中でkeywaitなりgetkeystateで待ち構えて、指定された順番に あとのキーが送られてくることを確認する ↓ 確認できたら、メインの処理を実行、順番が違ってたり、確認できなければreturn でOKじゃないかな
AHK で OS のアイドル状態を取得するにはどうしたら良いでしょうか。 以下の方法を考えたり試してみましたが、うまく行きません。 1. OS のアイドル状態を直接取得する 全く手掛りがありません。 DllCall などを使うとできるのかもしれないのですが…。 2. A_TimeIdle / A_TimeIdlePhysical を使う キー入力アイドル状態は対応できますが、動画プレイヤーのような 起動しっぱなしのものには対応できません。 3. スクリーンセーバーの状態を取得する 基本的にスクリーンセーバーを使いたくないのがホンネです。 またスクリーンセーバーは各々別のクラスを持っているので "スクリーンセーバー" としての一元管理は難しそうです。 何かよい方法があればご指南下さい。 ちょっと抽象的な質問ですいません。
はやらせるぺージにCPU関連の値を取得する関数があるので、それを使えばOK
687 :
682 :2010/05/23(日) 02:50:26 ID:lkhhCpMe0
レスありがとうございました。 Ctrl & Numpad6:: KeyWait,Ctrl send,{Del} return 結局、超シンプルになりました テンキーの「エクセル用"="キー」の吐くコードは Ctrlダウン→Num6のダウン→アップ→Num1のダウン→Num1のアップ→Ctrlのアップ なので、本当はNum1に関しても判定したかったのですが、 いろいろやってみても、なぜかNum1が判定にひっかからず...タイミングの問題でしょうか...orz よく考えると、Ctrl+Num6というのはとりあえず現状使わない組み合わせなので、 完璧ではないですが、一番最後のCtrlのアップで判定してシンプルになっちゃいました。。 00キーや000キーもそうですが、複数のキーコードを連続で吐くキーは少々やっかいですね...
If( hoge ){ ほ〜 げ〜 } みたいに If hoge In foo,bar { ほ〜 げ〜 } とか Loop, Parse, hoge { ほ〜 げ〜 } って書けないのが不満
そのレベルの不満を言い出したら言語仕様のほとんどすべてを叩きたくなってくるぞw
Runコマンドとかで不正なパスを指定した場合エラーがでるんですが エラーメッセージを出さずにそのまま終了、または無視ようなことはできますか?
このスレを「UseErrorLevel」で検索
>>691 理解しました。
ありがとうございます^^
%関数%_01 って感じで変数に111って代入しました。 Msbox で表示しても %関数%_01 って表示されて、111って表示されません。 どうすれば表示されるようになりますか?
おまいのいう「変数」は何なんだ?
エスパー力のある人にアドバイスを求めるより その動かないスクリプトをそのままコピペしたほうが一般人からもアドバイス貰えると思うよ
>>694 >>695 000 := "xxx"
111_%000% := 200 + 22 + 2
Msgbox. 111_%000%
って感じです。
Msgbox. %111_www%
ってすると表示されるのですが、xxxの部分がコロコロ変わります。
>>696 ・変数名は数字で始めない(数値と区別できないから)
・引数に式を渡す場合は%+空白で始める
i := "xxx"
a_%i% := 200 + 22 + 2
Msgbox % a_%i%
Msgbox %a_xxx%
>>696 Msgbox, % 111_%000%
こういうこと?
>>697 >>698 ありがとうございました。
Msgbox % a_%i%が使えたんですね。
本当にありがとうございました。
700 :
685 :2010/05/23(日) 23:11:30 ID:IibYX0kd0
>>686 情報ありがとうございます。
試してみたところ、CPU や HDD の稼動状況は確認できましたが、
OS のアイドル状態 (スクリーンセーバー起動やディスプレイ電源
オフの条件) は同定できませんでした。
そこで、ディスプレイの電源状態を取得するため、以下のスクリプト
を書いてみました (まだ動きません)。
hDisp := DllCall("CreateFile", "Str", "\\.\LCD", "UInt", 0xC000000, "Int", 0, "Int", 0, "Int", 0)
DllCall("GetDevicePowerState", "UInt", hDisp, "Int", stat)
MsgBox % stat
Windows API の知識もなく、DllCall を使うのも初めてなので
どこから直せばよいのか分かりません。
アドバイスをいただけたら幸いです。
アイドル状態なんて、自分で定義すればいいんじゃないの? CPU利用率が5%以下が5分以上続いたら発動 とか 何をやりたいかを書かないと、質問文も回答文も無駄になりがち。
目的は、アイドル状態となった時に常駐スクリプトのタイマーを止めることです。
その常駐スクリプトは、各実行ファイルの起動時間を計測しており、いくつかのソフトの
使いすぎを防止しています (ウェブブラウザ、ゲーム、メディアプレイヤーなど)。
現在は A_TimeIdle を用いてアイドル状態を定義しています (問題点 は
>>685 )。
CPU 利用率と時間を組み合わせるのは思いつきませんでした。
もう一度試してみます。
同時に、アイドル状態の定義を OS と共有するため (
>>685 )、"AHK でディスプレイ
の電源状態を取得する方法" についてもアドバイスいただければ幸いです。
モニタの電源やスクリーンセーバならOnMessage で WM_SYSCOMMAND トラップして SC_SCREENSAVE や SC_MONITORPOWER を検知するんじゃないの
>>703 ありがとうございます。以下のスクリプト でOnMessage 試してみました。
----
Gui, Add, Text, w100, test
Gui, Show
OnMessage(0x0112, "WM_SYSCOMMAND")
Return
WM_SYSCOMMAND(wParam)
{
MsgBox % wParam
}
----
SC_SCREENSAVE や SC_MONITORPOWER 等のメッセージを拾えるのは
このスクリプトで生成される GUI がアクティブな時だけのようでした。
TVTestのウィンドウを右クリックしたときに表示される項目って取得できますか? その項目に表示されている再生オフの常態のレ点をチェックしたいです。
ControlGet,test,Visible,,VideoRenderer1,TVTest
再生オフかどうかを知りたいだけなら706の方法でいけるよ メニューのチェック状態を見てるわけじゃないけどね #1:: ControlGet,test,Visible,,TVTest Video Container1,TVTest If (test==0) ToolTip, 再生オフ else ToolTip, 再生中 return
>>709 >>709 できました。ありがとうございます。
これはレ点の表示常態をチェックしているんですかね?
メニューの情報、VideoRenderer1とかメニュー番号?の調査ってどうやってやるんですか?
715 :
710 :2010/05/26(水) 09:10:00 ID:+viqPDa30
>>711 大変申し訳ありませんでした。
自分の環境だと、ClassNNがBon DTV EVR Video Winodowになっていて、
TVTest Video Container1が表示されていないのに
>>709 のahkで正常に動いた
ので混乱してしまったようです。
*選択するレンダラによって、ClassNNが変化しているみたいです。
MX-Rのサイドホイール↑↓にF14とF15を割り当ててMouseGesture.ahkを使ってアクティブウインドウを最小化するってことをやりたいのですが WinMinimize, ahk_id %ActiveHWND%ではJaneなど一部のアプリケーションでうまくいきません ControlClickでアクティブウインドウの最小化ボタンをクリックしたことにするにはどうすればよいのでしょうか
WinMinimizeの日本語解説ページを隅々まで読むといいよ
>>717 PostMessage, 0x112, 0xF020, , , ahk_id %ActiveHWND%
でできました、ありがとう!
MouseGesture.ahkはほんといろいろ組み込めるんだな SetpointでやってたOneTouch Searchとかホイールリダイレクトとかマウスまわり全て統合しちゃった
gui,2:add,text,,aaa gui,2:show return GuiDropFiles: msgbox,aaa これだとGuiにファイルをドロップすることができませんでした。 ウィンドウ番号1以外のGuiにファイルをドロップさせてGuiDropFilesに飛ばすにはどうすればよいのでしょうか?
Gui, 1:Default Gui, +LabelHoge Gui, Show, w100 h100 x100 y100, Hoge Gui, 2:Default Gui, +LabelFuga Gui, Show, w100 h100 x300 y100, Fuga Return HogeDropFiles: FugaDropFiles: MsgBox, Gui=%A_Gui%`n%A_GuiEvent% Return
・ホイールリダイレクト ・反転選択したワードをGoogle検索 ・反転選択したtp:// tps://を開く ・反転選択したパスをエクスプローラーで開く ・ウインドウを全てプライマリモニタに移動する ・ウインドウをモニタの端にくっつける アイデアが尽きた
「キーを押したらコードAを実行する、キーを離したらコードBを実行する」 っていう感じのを作りたいんだけどどうすればいい? ループ系処理を使わずに実装したいんだけど
>>75 散々やったさw
でもループ処理を利用しない方法が分からないんだよ…
ループ使うと連打になっちゃって上手くいかない
これは盲点だったsory ずっとgetkeystateでどうにかやろうと考えてましたorz
KeyWaitでも出来るわな。〜 Upの方が合目的的だけど
リファレンスのページを隅から隅まで読めとは言わないけど Hotkeysやらキーリストのページすら読まずに「散々」やったとか言われてもな
Emacsみたいに一行選択って出来ませんか? 一応クリップボードとShift+十字キーを組み合わせて実装してみたものの、 処理が汚いわ、遅いわで使い物にならず
事故解決しました
あ
複数行に渡るスクリプト(例えば、あるウインドウを全面にしてF5をうつ) をキーワード入力型で実行させたいのですが、無理あるでしょうか? 理想でいえば、AutoHotkey.iniのなかにある複数行のスクリプトに なにかラベルをつけて、そのラベルをINPUTボックスで入力エンターすると そのスクリプトが起動するようにしたいです。 FileLaunchやAutoHotFileというahkはHDDのなかにあるexeを みつけて起動するタイプのもので、複数行のスクリプトは 選択して起動できないですよね? GUIを作って、マウスクリックからスクリプトを起動する というのはなんとなくわかるのですが、キーボードからのコマンド入力で スクリプトを選択して実行というのは無理でしょうか? おしえてください
>>734 なにをやりたいのか、さっぱりわからない
>>736 ありがとうございます。こんなんあったんですね。
Hotstringのスクリプト実行型ですね。うまく希望にかなうかな。
候補がでてほしいような。しかし非常に使える機能ですね。
>>735 コマンドライン入力型のランチャーをAHKで作って
複数行に渡るスクリプトを選択実行したい。
InputBox, keyword If IsLabel(keyword) Gosub, %keyword%
>>738 そのあとどうやって補っていくのか分からないけど
イケル気がする。
ラベルのつけ方わかんないけど、なんか。
ありがとうございます。
#E:: InputBox, keyword, スクリプト選択実行, コマンド?, , 200, 110, 0, 0, , 30 if (IsLabel(keyword)) { Gosub, %keyword% } else { MsgBox, 該当処理なし ; 合致するサブルーチンが無いとき } return test: MsgBox, 成功! return --------------------------------- これで一応できたのかな? ちょっと嬉しい。過去スレより もっとスマートにできたらいいが。ありがと。
AHKをLinux(Ubuntu)上で動かす方法なんて、無いよね? あったら、スクリプトを使いまわせてかなり便利なんだけどなぁ・・・
x64キタ━━━━(゚∀゚)━━━━!!!!
x64 版だと ThumbRemap は動かないよ
キーボードとマウスの掃除をしようと思って #Persistent BlockInput On Msgbox 入力無効化中`nCtrl+Alt+Del を入力し ESC で終了してください。 KeyWait Esc ExitApp って書いてみたけどダメだった ボスケテ
>>747 Win + L で Windows をロックして、その間に掃除したら?
あと当然だけど64bitアプリにも
>>594 とか使えるようになってた
>>751 レスありがとうございます。
そのFileLaunchちょっとだけ使ってたことあるんですが、
あれって、基本、HDDのなかにあるexeを実行するだけで
複数行からなるスクリプトを実行することって無理じゃないですか?
できるとしたら.ahkファイルごと実行したりすることのような。
初心者なのでreadme読んでもたしかにチンプンカンプンなんですが。
いやすまん、UI部のサンプルのつもりだった。 実行部分に関してはIsLabelなり、IsFuncなりで好きなとこ飛ばすよう書き換えればいいかとと思って
>>752 どうもありがとう!
64ビットになるとハンドルの長さが倍になるの忘れてました
88→96に拡張してその分NumPut先ずらしたら無事動きました
・・Ptrとかあるの初めて知ったびっくりした
>>754 あー、なるほど。それができればむちゃくちゃ理想に近づく。
そこまでのスキルないけど。なるほどね。
FileLaunchほんとにありがたいんだけど、普通用途で使ってても
登録されてない文字をエンタで打つとエラーで落ちたり
いまいち不安定のような。ただでもらっといてなんですが&ありがたいんですが。
公式フォーラムもこれっぽいものないし。AutoHotFileはすごくUI綺麗なんだけどなー。
できたと思ったらただAutoHotkey_Lx86で実行していただけだった・・しばらく考えてくる
>>747 px := A_ScreenWidth/2-220
py := A_ScreenHeight/2-20
msg = 入力無効化中`nCtrl+Alt+Del で終了してください。
BlockInput, On
Progress, W300 X%px% Y%py% B1 C00 ZH0 ZW0 ZY2 FM16 WM200 WS200 CWFFFFBF, , %msg% ; Tooltip風Progress
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770"))
Sleep, 100
Progress, Off
BlockInput, Off
PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる
759 :
747 :2010/06/04(金) 21:36:23 ID:CGxYHNQg0
>>748 スペースキーで復帰しちゃいました
>>758 入力が無効にならずに、Ctrl+Alt+Delを押すとユーザ切り替えやログオフとかのメニューになりました
環境を書き忘れてました
Windows7 64bitでAutoHotKey 1.0.48.05です
64bitがまずいのかもなので、今までどおり電源を切った時に掃除します
せっかく答えてもらったのにごめんなさい
While !(Hwnd := WinExist("Windows タスク マネージャ ahk_class #32770")) の WinExist("Windows タスク マネージャ ahk_class #32770") の部分をWin7のタスクマネージャーのウィンドウハンドルが取得されるように書き換えて PostMessage, 0x111, 40002, 0, , ahk_id %Hwnd% ; ダスクマネージャーを閉じる の部分を Send, {esc} に置き換えると動くかもよ Win7の環境がないので動くか分らんけど
BlockInput中でも、RegisterRawInputDevicesでの直接入力は読み取れるんで、ゴニョゴニョできるけどね
>>757 すまんDllCallも\Shell_NotifyIcon"直後のUInt以外は変えないとだね。
環境ないからこれでだめならわからないや。
>>763 アラインメントかorz アドレスがそれぞれ2,4,8の倍数以外からの
16,32,64bitロード/ストアはパフォーマンスが落ちるからそうなってる。
cbSizeもお尻4バイトはpadと思われ。
それはともかく乙。
>>764 おお、なるほどー
詳しい解説ありがとうございます
ふう、これでやっとx64移行できる
簡単そうな質問ですみません スペースキーを押してる間だけマウスの左ボタンを中央ボタンにするには どうすればいいんでしょう LButton:: if GetKeyState("Space") MouseClick, Middle else MouseClick, Left return これだと左ボタンのドラッグ操作ができなくなっちゃいますよね…
$Space:: Hotkey,Lbutton,LtoM,ON $Space up:: Hotkey,Lbutton,LtoM,OFF LtoM: Send,{MButton Down} KeyWait,%A_ThisHotkey% Send,{MButton Up} return
質問者じゃないけど、
>>767 の、downしてkeywaitしてupって方法は俺も使用してる。
けど、この方法だと、たまにdownになりっぱなしになっちゃうんだよね。なんでだろ。
>>767 ありがとうございました!
実際に試してみたところ、%A_ThisHotkey%にがSpaceが入ってしまったぽいので
KeyWait,Lbutton
と直接指定するようにしましたら、上手く動作しました。
これでメタセコイアでもグラフィックソフトと同様Space+ドラッグ移動ができるようになります
たすかりましたー
AHKの系譜ってこんな感じかな AHK(本家) ┣ 駄目文字微対策版(CP932) ┣ AHKL ━━ AHKL(オブジェクト) .━━━┳ AHKL(ANSI) ┃ ┃ ┗ AHKU(Unicode) →┗ AHKL(Unicode) ┃ ┃ ┗ AHK64(x64) ┃ ┗ AHK_N (組み込み用DLL) ┣ IronAHK (.NET) ┣ PocketPC版 : AHK_Nって、単に組み込み用インタプリタなだけだと思ってたけどマルチスレッドとか色々出来んのね
すごく助かってるんだが、 もうちょっと真っ当な文法に変更した(拡張した)バージョンはないんだろうか
ホットストリングってXP じゃ使用できないのですか? いっさい動かないのですが。 NT専用ってそういうことなのですか?
↑すいませんできました。終了文字を打たないといけないのを しりませんでした
>>771 32bitに限定して言うと、AHKLの機能拡張版と言えるかな。
今のところ追加ライブラリなしでCOMが使える。
> ComObjCreate("SAPI.SpVoice").Speak("Hello. This is AutoHotkey!")
オブジェクト、DllCall, RegisterCallback等バリバリ利用している常用スクリプトがそのまま動くか試したみたら、あっさり動いた。
>>775 すげーそんな機能が
ちょっと置き換えてくる
ダウン機能あるならアップ機能もつけてほしい
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/ Revision 52 - June 12, 2010
* Fixed: ObjRemove's Key parameter is now optional, as with Object._Remove.
* Fixed: Files were improperly locked while reading, unlike in older versions.
* Fixed: Uppercase Hex format caused negative integers to become unsigned.
* Fixed: RegExMatch was corrupting output array items when specific conditions were met. See bug report.
L52
>>383 ,419の読み込まれるAHKファイルのロックは直ってるな
AutoHotkey_Lw で BREGEXP.ahk を使おうとしたけど無理でした。 対応させる方法や対策ってありますか?
DllCallのStrをAStrにするとか?
ユニコード版だと普通に日本語の正規表現( [あ-お]+ とか)通るけど、BREGEXPを使うメリットあんの?
全角のファイル名を半角にしたいです。 どうすればいいですか?
FileMoveでリネームする 全角半角変換はNKF使うか、StringReplaceをひたすら列挙 ただしファイル名に使えない置換が起きる(「/」→「/」、「?」→「?」など) のを考慮しないと上手くいかんよ
AHK標準版で、Unicodeの含まれたファイル名をリネームしたいのだけど、 filemoveだとできないね。送り側のファイルを認識してくれない。 これさえ解決できれば、互換性の低いUnicode版でやきもきしないで すむのだけどなぁ・・・
>>785 なんとなくわかりました。ありがとうございました。
788 :
名無しさん@お腹いっぱい。 :2010/06/17(木) 11:35:40 ID:G2zpoNzk0
GUIでウィンドウ内にコントロールが収まらない場合 右端にスクロールバーを出すようにできますか?
スクロールバーを「出すだけ」なら、GUIのオプションを変更するだけなので簡単できる。 Gui, +0x00100000 ; WS_HSCROLL Gui, +0x00200000 ; WS_VSCROLL ただ、これだけだと何も起こらない。スクロールバーの位置すら動かない。 スクロールバーが操作されたメッセージを拾ってウィンドウ内のオブジェクトを動かしたり スクロールバーを移動したりする処理をいちいち書いてやらなければならない。 やりたいことは出来るだろうけど、Win32APIゴリゴリ使える人じゃないと厳しい。
>>789 ありがとうございます
せっかく簡単にGUI作れるのにそういうところも簡単にできればいいんですが
やはり専門の知識がないと難しいんですね。
Win7x64でControlSendうまく動いてる人いる? 何度試しても↓が動かない・・ SetTitleMatchMode, 2 #If hWnd:=WinExist(" - Mozilla Firefox") WheelDown::ControlSend,,{WheelDown},ahk_id %hWnd% WheelUp::ControlSend,,{WheelUp},ahk_id %hWnd% #If
FireFox は内部でWheelRedirectみたいなことしていて、 WheelUp/Down を送ってもマウス直下がスクロールする所じゃないと無反応。 これは Send でも同じだし、WM_MOUSE(H)WHEEL 送っても同様。
>>792 なるほど、すっきりした
試しに^wでやってみたらちゃんと動いた
ありがとう
たぶんXP限定だけど IfWinExist, ahk_class BaseBar { WinActivate } ってやるとタスクバーとは独立した画面の四隅に張り付けるタイプの ツールバーを前面に呼び出せるね。 Win+Dやるよりはるかにレスポンスがいい。 右クリ自動的に隠すにチェックつけておけばクリック後は自動的に隠れて復帰の手間も省けるし。 もうツールバーが9段に増殖し続けてるw これとマウスカーソルの位置に応じて複数のランチャやスイッチャを切り替える メタランチャ的なコードと組み合わせると便利かも。 CoordMode,Mouse,Screen MouseGetPos, mx, my SysGet, width, 78 SysGet, height, 79 if(my < height / 3) { LauncherTop() } else if(my > height *3/4) { LauncherBottom() } else if(mx > width / 2 ) { LauncherRight() } else { LauncherLeft() }
複数マウスのボタン定義を変えてみる RegisterRawInputDevices で直接入力拾うとホットキーより先に処理が始まるみたいなんで、 デバイスIDをグローバル変数に定義してやる方法で出来た。 AHKL の #If で思ったよりあっさりと定義できる、本家でも If 分岐でイケる。 ただデバイスIDを予め取っておかないといけないし、抜き差ししたりするとId変わるので面倒だ。 #NoEnv DetectHiddenWindows, On OnMessage(0xFF, "WM_INPUT"), VarSetCapacity(dev, 12, 0), NumPut(1, dev, 0, "UShort"), NumPut(2, dev, 2, "UShort"), NumPut(0x100, dev, 4) ; UsagePage / Usage / dwFlags = RIDEV_INPUTSINK Process, Exist NumPut(WinExist("ahk_class AutoHotkey ahk_pid " ErrorLevel), dev, 8) DllCall("RegisterRawInputDevices", "Ptr", &dev, "UInt", 1, "UInt", VarSetCapacity(dev)) Return WM_INPUT(wParam, lParam) { global deviceId Critical DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "UInt", 0, "UIntP", size, "UInt", 16) VarSetCapacity(raw, size, 0) DllCall("GetRawInputData", "UInt", lParam, "UInt", 0x10000003, "Ptr", &raw, "UIntP", size, "UInt", 16, "Int") SetFormat, IntegerFast, h deviceId := (NumGet(raw, 0, "Int") == 0) && NumGet(raw, 20, "UShort") > 0 ? NumGet(raw, 8) : 0 } #If (deviceId = XXXXX) ; デバイスIDを指定 MButton:: ; 何か〜 Return
UTF-8ファイルをFileReadで読み込んだら 文字化けして変数に格納されるけど 文字化けせずに変数に入れる方法ありませんか? 予めFileEncoding,UTF-8と設定してれば問題ないけど そしたらshift-jisのテキストファイルが文字化けしてしまうので 文字コードを判別して読み込むとかできたら助かるんですが。
エンコーディングの自動判別はブラウザやテキストエディタだって間違うことがあるんだぜ Ahkには自動判別するルーチンがないんで、 バイナリで読み込んでエンコード毎の特異なバイナリ配列で判断して再度読み直すか、 バイナリでバッファに格納してからNKFなどの自動判別のできる DLLにバッファアドレスを引き渡すなどをしてやる、ってかんじかな。 ただエンコードが混在の方が問題じゃないのかなぁ、とは思う
非常に初歩的な質問で申し訳ないのですが WinGetText, tx1, A MsgBox, The text is:`n%tx1% としてWindowsのメモ帳ですと書いた本文を取得してくれるのですが タブ型のサクラエディタですと本文を取得してくれません。 IEでもウィンドウの本文テキストを取得できないようです。 なんとか取得方法を教えていただければ幸いです。
>>798 WindowSpy機能で、どこから取得すべきなのか、そのつど考える方法が一番無難
ありがとうございます。 WindowSpy機能を使って調べたところ >>>>>>>>>( Now Under Mouse Cursor )<<<<<<<< ClassNN: EditorClient1 Text: EditorClient このClassNNを指定してやれば動くかと思ったのですが WinGetText, tx1, ahk_class EditorClient1 MsgBox, The text is:`n%tx1% や ControlGetText, tx1, ahk_class EditorClient1 MsgBox, The text is:`n%tx1% を試したところ思うような結果が得られません。 その他ahk_idなども試してみましたがダメなようです。 しばらく試行錯誤してみます。
>>800 > しばらく試行錯誤してみます。
ヒントくれ
教えてくれ
じゃ無くて立派
Win/ControlGetText でテキストが取得できないコンポーネントも結構あるよ
>>798 >>800 原始的な方法w
ControlSend, EditorClient1, ^a^c, ahk_class TextEditorWindow
MsgBox, %Clipboard%
必要ならClipboardのバックアップ+書き戻しとかサクラエティタの全選択の解除とかを追加
あと
>>800 のスクリプトは↓こう書くべきだけど、まあどっちにしても
>>802 の言うとおり取得できない
ControlGetText, tx1, EditorClient1, ahk_class TextEditorWindow
たしかに、取得したくてもどうしようもないアプリはあるね。 俺はそういう場合、ウインドウタイトルから、編集中のテキストファイルをフルパスで取得し、 抜き取ったファイル名をifexistで調べて存在確認し、あればそれをfilereadして、 別枠で処理してる。 タイトルにフルパスを表示できないアプリの場合、 起動時のコマンドラインオプションを覗く。(はやらせるページの関数で) それでもダメなら、アプリを起動する際に、本番のアプリを 起動するための踏み台プログラム(ラッパー)をAHKで作ってる。 エディタを起動する際、必ずこのラッパーを通すようにすれば、 編集中のファイルをあとから確実に追跡できるようにしている。 まあこれだとエディタで「開く」などの処理をしてしまうとズレてしまうけど。 いまのところ、この方法のどれかで落ち着いている。
テキスト取得って例えば何に使うの? 便利なんだろうけど思いつかない・・
>>805 個人的に・・・AHK関連なら
・スクリプト内で使ってる関数の一覧や個数、登場位置を、別ウインドウでリアルタイムに出す
・関数やコマンドの使い方(引数など)をtooltip表示
・文法チェックや大括弧の階層カウント
とかは地味に便利。
エディタのマクロで作れるような機能も、あえてAHKで作ってる。
理由は、一度作ってしまえば、エディタの専用機能やプログラムに依存せず、
エディタを乗り換えても使えて、使いまわし的に有利だから
うおおおおおおおおおおおおおお そんなこともできるのか!!!!
a & b::msgbox ab a & c::msgbox ac ; a & 〜がたくさん a up:: if (A_TimeSinceThisHotkey < 300) Send a return こう書いて、aは修飾キーにしたまま、aだけを300ms以上押していた場合は 何も入力しないようにしたかったんですが、 押していた時間にかかわらず、upのタイミングで入力されてしまいます 期待通りに動かすにはどうしたらいいのでしょうか?
>>806 なるほどーありがとう
そういえば、本家AutoHotkeyのzipにそんな感じのスクリプトが入ってた気がする
S And S のタイムアウト付きバージョンて感じだな。
$A::
Keys_With_A := False
KeyWait, A, T0.3
If (ErrorLevel && !Keys_With_A)
Send, a
Return
~B::
~C::
:
~Y::
~Z::
Keys_With_A := GetKeyState("A")
Return
列挙が嫌ならこのスレを「列挙」で検索する。または、LL Hook や RawInput でフラグ変更。
LL Hook だと
http://pc12.2ch.net/test/read.cgi/software/1253888736/177 あたりが使えるかな。
あ、 Keys_With_A := GetKeyState("A") は Keys_With_A |= GetKeyState("A") のほうがいいね
わかる >> あえて AHK
813 :
名無しさん@お腹いっぱい。 :2010/06/22(火) 13:03:31 ID:2AiDr8uk0
>>811 横レスですが、その場合の
:= と |=
では処理上どのような違いが出るのでしょうか?
前者は返値の代入で後者は返値の論理和の代入ということだけは
分かりました
代入の速度が速くなるのでしょうか?
前者だと上がったフラグが再度下がることがあるけど、 後者だと上がったフラグは下がらない
馬鹿にも分かるように説明してくれ
Ifに置き換えると (前者) If (条件) flag := True Else flag := False (後者) If (条件) flag := True
質問者じゃないけど
>>810 これってどうやって使いこなせばよいの?
ためしにAと同時押しのランチャでも作ってみるかーと思ったけど、
>>808 の
>押していた時間にかかわらず、upのタイミングで入力されてしまいます
になっちゃうね
>>817 俺も質問者でも回答者でもないけど
ErrorLevel→!ErrorLevel
Send, aの下にKeyWait, Aを追加で期待の動作になるんじゃないかな?
でもこのホットキー常時有効にしたらまともに文章打てなくなると思う
autohotkeyって打ったら、uatohotkey とか utaohotkey になるw
>>818 thx。動いたよ。たしかに、日本語の入力も、ままならない状態になるね。
こういうランチャの常駐は、原理的に不可能か。
・Aを押したことをいち早く伝えなければ、キー入力に支障が出る
・Aが長押しされたかどうか判別するには、ある程度待たなければならない
しかし、待つと(ry
>>819 俺はAutoHoeKey_Lでこんな感じのしょぼいランチャ使ってる
NumLockのあと1秒間隔以内で00〜99までのキー入力
NumLock::
FirstKeyWait = 1
Sleep, 1000
FirstKeyWait =
Return
#If FirstKeyWait = 1
Numpad0::
1〜8も列挙
Numpad9::
FirstKeyWait =
SecondKeyWait = 1
Sleep, 1000
SecondKeyWait =
Return
#If
#If SecondKeyWait = 1
Numpad0::
1〜8も列挙
Numpad9::
SecondKeyWait =
MsgBox, % RegExReplace(A_PriorHotKey A_ThisHotKey, "\D", "")
Return
#If
おおすげぇ。 >#If FirstKeyWait = 1 これってAHK_Lの新機能だっけ? かなり便利そうだね。
ほほう、そんなものが ユニークな機能だ
ダメ文字の部分で引っかかったのでAutoHotkey_Lを使ってみたのですが その場合すべてのスクリプトの文字コードをUTF-8に変更しないとダメなのでしょうか? あと互換性はどんな感じなんでしょうか?
ところで、800超えたんで提起するが、テンプレどうする? 流行らせるページも消えたし、AHKLがかなり変わった上にしユーザも増えてるっぽいけど。
827 :
798 :2010/06/24(木) 00:01:38 ID:n51ivsKf0
遅くなってすみませんが
お答えいただいた方々ありがとうございました。
なかなか万能とは行かないようですが、
>>803 の方の方法でやってみようかと思っています。
みなさま書き込みを参考に少しずつレベルアップしていきたいです。
828 :
808 :2010/06/24(木) 21:28:29 ID:saliTuFK0
>>810-811 コピペして少し考えると目的の動作になりました
ありがとうございました
>>818 本来は無変換キーを修飾キーにしようとしていましたが、
質問を見やすくするためaにしました
忙しかったため遅レスですみません
829 :
823 :2010/06/24(木) 21:33:23 ID:ryPilJcc0
>>824 ありがとうございます。
DllCallなどよくわからずに流用してる物が多いのですが
手直しなども必用なんですね
文字コードはUTF-8とUTF-16LEが正常に読み込めたのですが
どっちにした方がいいのでしょうか?
相変わらず1行もコードを書かずにコンパイルしても マカフィーでウイルス反応が出るのだけど誰も報告したりしないのだろうか UPXも関係無いみたいだし
FileSelectFile や FileSelectFolder でダイアログを表示する時に ダイアログの表示位置を指定することは出来ないのでしょうか?
GUIのウインドを印刷したいんですが、プリンタにデータ送るのってむずかしいんでしょうか。 ハードコピーだと文字が汚くなるので、できれば普通の印刷みたいにプリンタにデータを送りたいのですが。
>>832 ありがとうございます
処理の分岐だけできればいいので、今回はメニュー項目をクリックしたら子メニューを出す方法で実装してみます
すみません、もう一つ質問なのですが、
GUIにAdd,Tabでタブ1、タブ2、タブ3、タブ4・・・とタブを登録したAHKウィンドウを表示しているとき
タブ2を削除して以降1つずつ前にずらしたりタブnを追加したりと動的にタブを扱うことは可能でしょうか?
それぞれのタブにEditを表示して付箋みたいなことをしたいのですが、
追加/削除するたびにGui,Destroy→Gui,Add,Tab/Gui,Add,Editとするのはどうにも無駄な気がしてしまって
Guicontrolでコントロールの内容を変更した時は gオプションで指定したラベルに飛ばさないようにできませんか?
>>833 普通は出来ないけど、タイマ使って表示されたら移動するみたいな姑息なkとはできる
>>834 AHKLの Gui, Font, qN でアンチエイリアスをある程度制御できるけど、根本解決にならないね
PDFとかHTMLへの文字列埋め込みを使う方が確実かと。
>>835 出来るけど面倒かと。
GuiControl,, TabControlName, NewTabName, でタブ追加出来るけど、
タブは先頭に追加されるんで、各ページにあるアイテムをずらしてやんないといけないし。
だったら、タブの高さを文字分だけにして Edit コントロールは1個。
タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。
切り替えの度にキャレットの位置などを待避・復元したいなら
EM_XXXX あたりで情報取得・操作が必要になるけど。
http://yokohama.cool.ne.jp/chokuto/urawaza/message/
>>837 >だったら、タブの高さを文字分だけにして Edit コントロールは1個。
>タブ切り替えのイベントで Edit ボックス内を書き換えとかの方がいいんでないのかね。
思いつかなかった・・ありがとうございます!
メッセージの方も見てみます
>>836 それ、フラグでやったことはあるなぁ
Gui, Add, Edit1, vEdit1 gEdit1_OnChange
:
Edit1_SkipEvent := True
GuiControl,, Edit1, HogeHoge
Edit1_SkipEvent := False
:
Edit1_OnChange:
If ( Edit1_SkipEvent )
Return
メイン処理
Return
>>839 これはw
質問する前に全く同じことやりました
やっぱりこういう手段しかないんですかね
ご親切にありがとうございました。
情報取得?それとも表示?その両方?どっちにしろ、あまり得意でないと思うよ。 Samurize 使った方が幸せだと思う
Samurizeも最近弄ってなさ過ぎで全てを忘れちまったなぁ・・・
ホットキーに対応してどうこうじゃなく 外部からmemo.ahkを起動してメモ帳にキーを送って即座に終了って どう書けばいいんですか? ; memo.ahk IfWinExist, 無題 - メモ帳 { Send,hello } じゃうまくいかないようでした。
IfWinExist, ahk_class Notepad { IfWinNotActive, ahk_class Notepad WinActivate, ahk_class Notepad Send, hello }
>>842 了解です、ありがとうございます。
AHKで既製品がないようなので、似たようなものをGUIで1から作ることにします
流行らせるページのシステムモニタが同じような感じだった
>>1 のzipに入ってる
せんせー!AutoHotkeyで作ったGUIがSetWinEventHookにひっかかってくれないのはどうしてですか!
>>53 の例でいうと
>, "UInt", 0x0003 ; dwFlags : WINEVENT_SKIPOWNTHREAD | WINEVENT_SKIPOWNPROCESS
を
"UInt", 0x0000 ; 自分のプロセスやスレッドを無視しない
にする
最小化時にタスクトレイに格納できるけど、 タスクトレイからウィンドウを復帰するホットキーのない アプリ(Twit)で、 タスクトレイ格納・復帰をトグルさせるキーは、 どう書けばよいでしょうか。何か調べる方向性を示す ヒントをお願いします。
ウィンドウがあったら閉じて、無かったら起動で良いんじゃない。
>>850 下に行くほど面倒。
1) MouseClick で座標指定でトレイ操作。
必要に応じてメニューのアクセラレータキーをSend
欠点:アイコンの誤爆が有り得る
2) (1)の前にImageSearchで座標を調べる処理を追加
3) 跡地から「タスクトレイアイコン操作」拾ってトレイ操作をエミュレート。
4) リソースハッカーなどでコマンドID調べて隠し窓にPostMessage。
ただし調べても分からないことがある。
>>849 うおーありがとう、ありがとうございました!
BOMなしUTF-8のテキストって絶対文字化けするんだね
856 :
835 :2010/07/02(金) 16:40:49 ID:Y8HaskfWP
タブの件ですが、なんとか解決できました 流行らせるページのGuiControlの説明にはタブ項目をすべて再設定する方法が記載されていませんでしたが、 試しにDropDownListの方法を試してみたところ、GUIの再生成なしにタブ項目を再設定できました 文字列操作でタブを左右に移動とか項目名変更とかできそう Gui, Add, Tab, VMyTab, a|b|c|d|Default|| Gui, Show Msgbox, タブ項目を再設定します sNewTabItems = Default||b|c|d|e GuiControl, , MyTab, |%sNewTabItems% 既出というか当たり前のことだったらごめん これで1週間近く悩んでた
以下のコードで、A_Loopfieldで取り出した文字列に、スラッシュ等が入っていると、 エラーダイアログが出て、スレッドが停止してしまいます。 fileread,data,c:\a.txt loop,parse,data,`n { %A_LoopField%:=A_Index } 変数として定義するとエラーになる文字を、確実に取り除くことってできますか? エラーが出るたび、stringreplaceで空白に置き換えて除外していますが、 なにか手はない物かと・・・ こんな感じで考えています↓ fileread,data,c:\a.txt loop,parse,data,`n { filter:=filter(A_LoopField) %filter%:=A_Index } filter(string) { なにか }
AHKLのオブジェクトを使えばいいんジャマイカ filter := Object() Loop, 〜 { 〜 filter[A_LoopFiled] := A_Index 〜 }
>>850 おれはcentigrade氏のアイディアを拝借、一部改変し利用させてもらってるよ
これでタスクトレイ格納・復帰のトグルが実現できる
ただし、WinXPからWin7 64bitへ移行したらタスクトレイからの復帰ができなくなったorz
解決策わかる方ヒントplz m(_ _)m
#include TaskTrayIcon.ahk
ActivateOrLaunch(commandPath="") {
SplitPath, commandPath, appName
Process, exist, %appName%
appPID:=errorlevel
if (appPID <> 0)
{
WinGet, WIN,, ahk_pid %appPID%
IfWinExist, ahk_id %WIN%
{
IfWinActive, ahk_id %WIN%
WinMinimize,A
else
WinActivate
}
else
{
DetectHiddenWindows,On
cnt:=Tray_GetCount()
Loop,%cnt%{
Tray_GetInfo(A_Index,hwnd,uid,msg,icon)
WinGet,pn,ProcessName,ahk_id %hwnd%
if(pn=appName){
PostMessage,%msg%,%uid%,0x203,,ahk_id %hwnd%
break
} } DetectHiddenWindows,Off } } else { Run, % commandPath,,UseErrorLevel If ErrorLevel msgbox, %appName%は存在しないか、またはエラーにより起動できません } return } 引数にはコマンドのフルパスを渡す。 #^p:: ActivateOrLaunch("C:\path\to\app.exe")
AHK64使って、更にx64用にトレイ関連ライブラリを改変する必要がある。
>>749 ,752,755,757,762-765 辺りが参考になる。
>>861 アドバイスありがとう!
該当レスをよく読んで勉強してみます
863 :
名無しさん@お腹いっぱい。 :2010/07/05(月) 12:21:58 ID:lqlb3yyb0
上の方で、本当のマルチスレッドを扱えるautohotkeyの派生が 取り上げられているけど 実際のところ、atutohotkeyの擬似マルチスレッドよりも 本当のマルチスレッドを使う利点はある? というのも、擬似マルチスレッドでたいていのことが済んでしまうと思うから できれば、本当のマルチスレッドの実例を見てみたいです
実際の所、常駐スクリプトだとタイマーやイベント監視で条件分岐して、 いくつかのコマンド投げるってことが殆どだろうから、擬似マルチスレッドでも殆ど問題ないなぁ マルチスレッドだと、分割DLしたいとか、デカいデータを並列で処理したい、とかなんで、 ホットキーやタイマでのアラートみたいな使い方だと無理して使う必要はないんじゃないのかね。 あとはGUI作って、ボタン押すとゴリゴリ演算するってやつ走らせた時は、 演算系は別スレッドで動かしたいなぁと思うことはあった。 あとAHK_Nは、AHKの中にAHKの実行環境を作って操作するみたいなんで、 他のスクリプトをRunするので代用できてるなら無理して使う必要も無いんじゃないかな。 (メモリ効率とかは良いと思うけど)
ファイルをロックしたいんですができますか? 移動できなくしたりリネームできなくしたいんですが
できました ありがとうございます!
読みだけは許可したいとかなら、共有モードフラグで許可できるよ
869 :
名無しさん@お腹いっぱい。 :2010/07/06(火) 12:23:28 ID:ZVJLgCTK0
>>864 なるほど、演算部分とguiの部分を分離させるというのは
すぐに使えそうな案ですね
参考にします
OSはXP32bitで、物理メモリを2GB積んでいて、消費メモリは1GB程度です。 自鯖で、runwaitをsettimerで回してzip圧縮など定型処理を長期間やっていると、 「システムリソースが足りないため、要求された処理を実行できませんでした」 と出ることが多くなってきました。 (以前は数ヶ月に1度程度、最近は3日持たない) これが出ると、AHKのダイアログが出てスレッドが止まってしまい、 タスクトレイアイコンで右クリして手動でリロードすることもできなくなります。 素のXPをクリーンインストールしてみましたが、同じスクリプトを動かすと 同じ症状になります。 めもりーくりーなー という常駐ソフトを試したところ、仮想メモリを1GBほど食い潰して CPUが100%になる症状が出て、クリーニングどころか逆効果でした。 それで相談ですが、システムリソースが溢れて制御不能に陥る前に、AHKをつかってPCの再起動などを やらせたいのですが、システムリソースの値を取得する方法またはコマンドラインツールは、ないでしょうか。 XPでシステムリソースが溢れること自体が稀なようで、計測できるソフトが見つかりません。
monitorだった・・
メモリクリーナーとかやらは、大量のメモリを確保することで、 実メモリにあるデータをスワップに追い出しているだけで、 システムリソース不足に対しては効果無いんでわ
875 :
562 :2010/07/08(木) 08:44:06 ID:T3ptACPyP
>>870 そもそも何がメモリーを占有しているか確かめないと
メモリが圧迫されているときは、タスクマネージャやXPならProcessExplorerで確かめるクセをつけよう
俺はガジェットでメモリ占有率上位いくつかを表示しておいて、すぐにわかるようにしている
XPでも互換ガジェット入れられるぞ
と思ったら、サーバーか。コマンドラインでモニタしてるわけか
>>875 不足しているのは、タスクマネージャ等で参照できる「物理メモリ」じゃなくて、
いまどきなぜ足りなくなるのか謎な「システムリソース」です。
タスクマネージャで参照できるメモリ消費量は常に監視していて、
それは最初に書いたとおり2GBのうち1GB程度です。
今は、
>>871 で教えていただいたdesktop-heapの値を定期観測しています。
WinSta0\Defaultの値が、OS起動時に20%からはじまり、じわじわと上昇しています。
> Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
> Copyright (c) Microsoft Corporation. All rights reserved.
> -------------------------------------------------------------
> Session ID: 0 Total Desktop: ( 5312 KB - 7 desktops)
>
> WinStation\Desktop Heap Size(KB) Used Rate(%)
> -------------------------------------------------------------
> WinSta0\Default 3072 25.6
> WinSta0\Disconnect 64 4.5
> WinSta0\Winlogon 128 9.7
> Service-0x0-3e7$\Default 512 11.4
> Service-0x0-3e4$\Default 512 4.3
> Service-0x0-3e5$\Default 512 8.1
> SAWinSta\SADesktop 512 0.5
> -------------------------------------------------------------
WinSta0\Defaultを上昇させるプログラムまで特定できればベストですが、
おそらくそれはできないですよね。
とりあえずこれをAHKで定期観測して再起動トリガを発動すれば
対症療法はできそうなので、助かりました。
システムリースと書いてあるのに、メモリと勘違いしてたスマソwww Windowsのリソースは長いこと起動していると枯渇するよな Win9XのころはGDIリソースがすぐになくなったが、 今は見えないだけで上限引き上げられているけど存在するというのがやっかい プログラム側でリーク起こしているとなくなるんだよな サーバーはわからんが、デスクトップだとかなり顕著だよ
MouseGesture.ahkでマウスのボタンに閉じるを割り当てているのですが、 WinCloseやSendMessageで閉じるのではなく閉じるボタンがウィンドウ上に存在する場合、そのボタンをクリックするという動作は可能でしょうか?
いつもウィンドウ内の特定の位置にあるなら MouseClick コマンドで特定座標をクリックしてやる。 リサイズできるウィンドウの左上とかなら、WinGetPos でサイズ取って計算する。 もしくは ImageSearch でボタン画像の座標を探す。
× 左上 ○ 右上
>>879 ありがとうございます
どちらも試してみます
だれか初心者のスクリプトの添削お願いします。 アプリの立ちあげが遅く、ウインドウが立ち上がるのを まってから右クリックをそのウインドウ上でさせたいのですが うまくいきません。どこがおかしいのでしょうか。 ループしてくれません。音がなりませんし、一回で終わってるっぽいです。 #m:: Run C:\silo\network\pcypLiteW\pcwmp\pcwmp.exe sleep, 100 Loop, 10 { WinActivate, ahk_class TpcwmpMain.UnicodeClass WinWaitActive, ahk_class TpcwmpMain.UnicodeClass, , 1 if ErrorLevel <> 0 ;エラーがあるとボックスで表示 { sound *-1 sleep, 200 return } else break } send, {APPSKEY} ;ControlSend,ATL:131D4BD01,{APPSKEY},ahk_class TpcwmpMain.UnicodeClass sleep, 200 Send, {DOWN 6}{RIGHT} sleep, 200 Send, {DOWN}{ENTER}
>>882 とりあえずsleepを10倍にして様子見してみたら?
あとwinwaitactiveって、コマンド実行時点ですでにアクティブになってたら
待ちコマンドってちゃんと働くんだっけ?
俺がそういうのを作る場合、アクティブウインドウのタイトル文字列で判別させてる
TimeOut := A_TickCount + 10000 Loop { IfWinExist, ahk_class TpcwmpMain.UnicodeClass { WinActivate, ahk_class TpcwmpMain.UnicodeClass break } Else If( TimeOut < A_TickCount ) { MsgBox, TimeOut ExitApp } Else { Sleep, 200 } } ウィンドウ表示されるの待つならこれでどうだろう
レスありがとうございます。
>>883 sleepを長めにとればできそうですが
なんかかっこわるいかなぁって。
待ちコマンドっていうのわからない。
>>884 ありがとうございます。なんか複雑で理解できませんが
導入します。助かります。
カッコがいっぱいありますね。これタイムアウトした場合
Loopって終わるんですか?制限値がないみたいですが。
と初心者は思いました。
僕の書いたのどこがダメなんだろう。
ありがとうございました
あ、書いてから気づいたんだけど、WinWaitがあった・・
#m:: Run C:\silo\network\pcypLiteW\pcwmp\pcwmp.exe WinWait, ahk_class TpcwmpMain.UnicodeClass WinActivate, ahk_class TpcwmpMain.UnicodeClass Send, {APPSKEY} ;ControlSend,ATL:131D4BD01,{APPSKEY},ahk_class TpcwmpMain.UnicodeClass Sleep, 200 Send, {DOWN 6}{RIGHT} Sleep, 200 Send, {DOWN}{ENTER} ごめんこっちで
>>887 ありがとうございます。
>>884 でもうまくいってたのですが
もしかして
>>887 みたいなシンプルなものでも上手くいくのでしょうか?
たしかに今のところ不都合でてきてません。
そうか、winactiveで待てばいいのですか。。。
たしか自分で書いてたはずと思ったが、違うやつだった。
activeを待つほうだった。
ありがとうございました。^ー^
むしろ、
>>887 の方が処理的に良いと思う
タイムアウトで処理分岐したいなら、WinWait の第3引数に待ち時間入れて ErrorLevel で分岐すりゃいい
AHK_Lのオブジェクトのメンバ関数?って、ベースで最初に設定してから継承って形でないと使えない? これベースの方はうまく動かないけど継承するとちゃんと動く ; ベース objHoge1 := Object() objHoge1.HOGEHOGE := "HOGEHOGE" objHoge1.HOGEHOGEHOGE := "HOGEHOGEHOGE" MsgBox, % objHoge1.HOGEHOGE() MsgBox, % objHoge1.HOGEHOGEHOGE() ; 継承 objHoge2 := Object( "Base", objHoge1 ) MsgBox, % objHoge2.HOGEHOGE() MsgBox, % objHoge2.HOGEHOGEHOGE() ; メンバ関数 HOGEHOGE(obj){ return "HOGEHOGE" } HOGEHOGEHOGE(obj){ return "HOGEHOGEHOGE" }
>>890 ■ メソッド呼び出しのルール
オブジェクトのメソッド(メンバ関数)呼び出しがあったとき:
オブジェクトに該当メソッドがある → 引数はそのまま渡して関数を呼び出す
オブジェクトに該当メソッドがない → 再帰的に base オブジェクトを検索し該当メソッドを探す
見つかったら、第一引数にオブジェクト自身を渡す
■ 関数呼び出しのルール
引数が足りていない場合、引数にデフォルト値が設定されていれば、その分はあるものとして補完するが、
デフォルト値が設定されていない場合は、呼び出しは失敗する(シグナチャが異なるため)
base のメソッドを引数無しで呼んだ場合は、該当関数名は見つかるが引数が足りないため呼び出しは失敗。
結果として空文字列が返る。
拡張オブジェクトの場合は、自身にメソッドが無いため継承元オブジェクトのメソッドが検索され、
オブジェクト自身が引数として関数コールするが、引数は満たされているため成功する。
※ 引数が過多な場合は切り捨てられるのでコール自体は成功する
あ、、関数というか「動的関数呼び出しの」場合ね
>>891 なるほど
つまりオブジェクトのメンバ関数からオブジェクト内をいじくり回すには継承しないとだめなのかー
どうもありがとう
EXE化したAHKスクリプトをショートカットあるいはバッチで呼び出して実行する際、 実行を開始した際のカレントディレクトリを取得する方法ってありますか? A_Scriptdirだと、EXEファイルの置かれたフォルダになってしまいました。
普通に A_WorkingDir
>>895 ありがとうございます。バッチから手動で呼び出したときはうまくいきました。
やりたいことは、EXEファイルを、スタートアップフォルダからショートカットで
呼び出されたかどうかを判別して、スタートアップのときだけ別の処理をしたいのです。
ふつうにショートカットを作ると、ショートカットの詳細の「作業フォルダ」が
強制的にEXEファイルの場所に指定されるようです。
ためしに、これを空欄に変えたところ、識別できました。
が、これを変えないまま判別させる方法は、ありそうでしょうか。
OSの仕様だからなぁ スタートアップのショートカットには /startup とかのパラメタ与えて引数で分岐すりゃいいと思うけど
PixelGetColorによってきちんとした値がまったく得られません。 カーソルを動かしてそこで取得させてるつもりなのに 値がまったく変わりません 以下のHPにあるスクリプトをpaint上で使いました。 ^!z:: MouseGetPos, MouseX, MouseY PixelGetColor, color, %MouseX%, %MouseY% MsgBox, The color at the current cursor position is %color%. return どうしてでしょうか?windowspyではちゃんとそこの色の文字列が変化しているのですが。 そもそも全画面でやる3DFPSゲームの特定箇所のピクセルの色が 指定したものであればどこそこをクリックするというものが作りたかったのです。 おしえてください。
>>898 それそのまま使ったらちゃんと動いたぞ。
mspaintのことならマウスカーソルの+マークの中心の0x00000が取得されちゃってるんじゃ?
>>899 まじっすか。じゃぁいままで他に追加してるcfgの内容がわるいのだろうか。
>>900 メモ帳で試してみましたが、それでも無理でした。んーなんだろ
ずっと同じ文字列
autohotkey.iniにF12のスクリプトだけ書いて ほか全部削除したが、ずっと同じ文字列しか メッセージボックスにでない。おわったか
>>902 ちなみにどんな数値が取得される?
上で貼りつけたのがコピペなら必要ないが、一応スペルミスも確認。
あとは…各行の間にSleep挟んでみるとか?
他にAutohotkeyスクリプトが動いているとか? タスクマネージャーの「プロセス」でAutohotkey.exeが複数実行されているならあやしい
898デス。レスしていただいた方々まことに申し訳ないです・・・。 アホすぎました。コピペしてつもりでしたが、 それからいろいろ文字をいじくったために、その余波で中身の変数の文字が微妙に違っていました。 前後でちゃんとおなじ変数の文字にしたら解決しました。 おさわがせしました。
>>905 まぁよくある失敗だなw
同じ数字ならMouseGetPosの変数をスペルミスしてるのかもとは思った。
Loop, % count Menu, MyMenu, Add, ほげほげ〜 (&%A_Index%), HogeLabel Menu, MyMenu, Show HogeLabel: Msgbox, %A_ThisMenuItemPos%ほげ〜
あ、書き込んじった こういう動的にメニューを生成するスクリプトで、アクセスキーを割り当てたいんですが、 1~9までは数字で、10~はa,b,c,d,e....っていう感じで割り当てるにはどうすればいいでしょうか? count := 10 Loop, % count Menu, MyMenu, Add, ほげほげ〜`t&%A_Index%, HogeLabel Menu, MyMenu, Show return HogeLabel: Msgbox, %A_ThisMenuItemPos%ほげ〜
909 :
名無しさん@お腹いっぱい。 :2010/07/16(金) 15:54:45 ID:mQGY0ums0
>>908 こんな感じでどう?
Loop, 35 {
String := "123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
StringMid, AccessKey, String, %A_Index%, 1
MsgBox, % AccessKey
}
Lexikos: PostPosted: Fri Jul 16, 2010 10:24 am > Regardless of any arguments for or against either syntax, I won't be abandoning command syntax. > Changing some commands to be functions or allowing either syntax to be used are possibilities. > Allowing %obj.var% would essentially require the overall arg to be evaluated as an expression, > but is also a possibility. > Note that expressions are generally less efficient (in terms of CPU cycles) than traditional syntax > for simple cases - i.e. % "text" . var . "text" is much less efficient than text%var%text. ふむ。旧文法をばっさりとはやらんつもりのようだ。
まずはStrLen()とかInStr()みたいな関数はもっと増えてもいい
Win7のExplorerで、カーソルやマウス左クリックで選択したファイル名を 抜き出す方法ってありますか? XPだと controlget filename, list, selected col1, SysListView321, A で取れましたが、Win7であれこれ考えてみましたが、うまく取れません。 クリップボードを経由する以外で、なにかよい取得方法はないでしょうか。
AHK 64(
>>741 )使って、かつCOM使えばなんとかなるんでわないかと
>>913 Win7はたしかCtrl+Cでファイルをコピーしたらクリップボードにフルパスが入るからSplitPathで抜き出せばいいかも
916 :
名無しさん@お腹いっぱい。 :2010/07/17(土) 22:34:58 ID:rG1nfbLo0
AHKLにインストーラパッケージきたね。 6/12に落としたバイナリと、現在ZIPで配布されているバイナリと、 インストーラ版のバイナリのハッシュが全部違う
つまり・・・どういうことだってばよ?
公式AHKと同じファイル構成になった ヘルプがAHKL対応になった
0が3回きたことを検出して、別の処理をさせればよい
>>920 ホットストリング使ってみたらいかがですか?
>>921-922 普通に0を3回連打したら、誤動作しない?
書き方が全然わからん
~0::
0::
0::
return
`,::
KeyWait,F10
KeyWait,F10
return
>>923 000ののほうはこんな感じで
:*:000::
MsgBox
Return
AutoHotKeyの作業ディレクトリを実行するディレクトリに簡単に設定して起動する最も簡単な方法はないでしょうか? 今は、Runコマンドで Run, \software\mother-fucker\fuck.exe, \software\mother-fucker\ としていますが、冗長性が高く感じます。
Run, fuck.exe, \software\mother-fucker\ でいけると思うけど
>>926 あ、なるほど
パス渡したら、そのexeのあるディレクトリを作業ディレクトリとして実行みたいなコマンドやオプションあるかな、と思っていたんですが、
特にないのかな
質問があります。 常駐アプリを起動して、起動するまで待ってホットキーを送ることはできないでしょうか? ウインドウが出るアプリならWinWaitあたりで待てばよいと思うのですが、 目に見えるウインドウがでないアプリの場合どうしたものかと
案1) Sleep で適当に待ってみる 案2) 不可視ウィンドウを検索してみると結構あるんで(トレイアプリとか)、 そのウィンドウを DetectHiddenWindows, On してから WinWait してみる。
>>924 0を3回連打したらMsgBox出てもうた
>>931 んじゃこれでどう?
このままだと手動連打でも反応するけど、T0.1をT0.05に変更すると手動ではまず反応しない
調度良い時間に調整してみてね
ちょこっといじれば「,」キーも出来るんじゃないかな
0::
Count=0
Loop,2
{
KeyWait,0,T0.1
Count+=ErrorLevel
KeyWait,0,T0.1 D
Count+=ErrorLevel
}
If Count=0
MsgBox
Return
933 :
名無しさん@お腹いっぱい。 :2010/07/20(火) 08:12:29 ID:j1lGbx/k0
#IfWinExist, でウィンドウタイトルと ahk_class を両方指定する方法はないですか? どちらか一方だけだと、それぞれ重複するウィンドウがあるため誤判定してしまうんです。
#IfWInExist, タイトル ahk_class クラス
「お忍びリネーム」のパクり。リネーム中のF2連打で選択範囲変更。本家及びL(A&U)onXP32bitにて動作確認。 #IfWinActive,, FolderView $F2:: ControlGetFocus, classNN, A If (classNN = "SysListView321") { Send, {F2} Return } Else If (classNN != "Edit2") Return ControlGetText, itemName, %classNN% length := StrLen(itemName), lastDotPos := InStr(itemName, ".", 0, 0) - 1 VarSetCapacity(buff, 8, 0x00) SendMessage, 0x00B0, &buff, &buff+4, %classNN%, A start := NumGet(buff, 0, "Int"), end := NumGet(buff, 4, "Int") Goto, % (start == 0 && end == length) ? "Explorer_Select_Name" ; 全選択時 : (start == 0 && end == lastDotPos) ? "Explorer_Select_Ext" ; ファイル名選択時 : (start == lastDotPos+1 && end == length) ? "Explorer_Select_None" ; 拡張子選択時 : "Explorer_Select_All" Explorer_Select_All: SendMessage, 0x00B1, 0, -1, Edit2, A Return Explorer_Select_None: SendMessage, 0x00B1, -1, 0, Edit2, A Return Explorer_Select_Name: SendMessage, 0x00B1, 0, lastDotPos, Edit2, A Return Explorer_Select_Ext: SendMessage, 0x00B1, lastDotPos+1, length, Edit2, A Return
3回くらい似たようなのを見た
正規表現でダブルクォーテーションを指定する方法はありますか? RegExReplaceで"を置換したいのですが\"では動かなくて
str := """hoge""" MsgBox, % RegExReplace(str, "^""|""$")
939 :
937 :2010/07/22(木) 22:17:27 ID:bBJpxwFN0
>>938 ありがとうございます。
""でよかったとは
AutoHotkeyで作ったGUIウィンドウが非アクティブになったらウィンドウを隠す、という処理はどうすればいいでしょうか GUIからMsgBoxなど表示しても非アクティブになってしまう気がします
原始的だけど、settimerで0.1秒ごとにAHK_GUIウインドウを監視してみたら?
Menu, Tray, Add, ShowGui OnMessage(0x0006, "WM_ACTIVATE") ShowGui: Gui, Show, w200 h200, Test Return WM_ACTIVATE(wParam, lParam) { If (A_Gui == 1 && wParam == 0) Gui, %A_Gui%:Hide }
AHKの内部でCPUの種類を取得して、能力別に処理を分けたいのですが、質問です。 マイコンピュータで右クリックして、システムのプロパティに表示される、 CPUの型番を、システムのプロパティを開かないで、レジストリや コマンドラインツール等で、取得する方法ってありますか?
systeminfo
>>946 ありがとうございます。試してみたのですが、
>プロセッサ,1 プロセッサインストール済みです。[01]: Intel64 Family 6 Model 23 Stepping 10 GenuineIntel ~2833 Mhz
ここまでは出ました。
システムのプロパティのほうで表示されている、肝心の「Core(TM)2 Quad CPU Q9550@2.83GHz」
という文字が、含まれていないようです。
自己レスです。 regreadコマンドで regread,value,HKEY_LOCAL_MACHINE,HARDWARE\DESCRIPTION\System\CentralProcessor\0,ProcessorNameString ここから情報を抜き取ると、取得できました。ありがとうございました。
VLCにはWebインターフェイスとかあるからそっちで何とかすれば
VLCを起動して試したけど、ControlGetTextで取得できたよ
>>951 なるほど、その手もありますね。参考になりました。
>>952 あらためて試してみましたが、どうにも出てきません。
こちらで検証しているVLCのVerは1.0.5です。
ControlListで一覧を取得し、
> QWidget1
> QWidget2
> QWidget3
> VLC DirectX1
> VLC DirectX video1
> QWidget4
> QWidget5
> QWidget6
> QWidget7
が出てきて、これを全部取得してみました。テキストが出てきたのは
> ControlGetText,var,VLC DirectX1,A
var=VLC (Direct3D output)
これだけで、ほかはテキストが出てきませんでした。
すみませんが、どのように取得されましたでしょうか。
ControlGetTextで取得できたVLCのVerは0.8.6です。 Ver1.1.1を試してみたけど取得出来なかった。 UWSCのPOSACCだと取得できるので何らかの方法はあるんだろうけど、詳しくないので解らない。
>>954 なるほどthxです。
>>955 それもダメでした。VLCのVerが1以上になって、仕様が変わったせい?
1.1.1で取れたけど・・・。 おやっ、一度フルスクリーンして解除すると取れる。不思議!
>>957 何度も申し訳ないです。フォーラムにあったコードを汎用にしてまとめてみました。
F1::
ControlGetText, Q, QWidget,VLC
ControlGetText, Q6, QWidget6,VLC
WinGetText, wText,VLC
msg=
(
Q=%Q%
Q6=%Q6%
W=%wText%
)
msgbox,%msg%
clipboard=%msg%
return
これで、VLC1.1.1の上でF1を押して実行すると、フルスク後、通常ともに
以下のようになってしまいます。
Q=
Q6=
W=VLC (Direct3D output)
qt_rubberband
このコードで取得できますでしょうか。
テキストが取得できなかったりするのは、クロスプラットフォームのソフトではよくあること。 VLCは今もインターフェイスが糞だから、何とかして対応させてもまたすぐ仕様変更されるだろう。 さっさと諦めるのが吉。 とっくにAHKで効率化して節約できる以上の時間を無駄にしてるはずだ。
まぁ、仰るとおりですな。 何だか調べたらACC(IAccessibleインターフェイス)をごにょごにょすると、 ユーザ補助のスクリーン読み上げの機構で読み取りが可能になるとかならないとか、、 出来たとしても、元アプリ自体のコンパイル時になにかしとかなきゃ駄目だとか何とか、 この辺はFireFoxなどでもそうらしい。 経験上、ウィンドウの中身が、 FXWindow(FoxToolKit), QWidget(Qt)、MozillaWindowClass(Mozilla)、SWT_Window(JavaSWT) で満たされていたらお手上げにしてしまっている。
ミラー消えたのか
まあxreaは基本クソだからな よくあること
んなこと言ってたら過去スレ増えるたびに削っていかないとだめになるだろ
64とかDLLとかの派生版はどうせそのうちLに吸収されるだろうから要らないか。 IronAHKは、Linuxとかで十分に動作するなら入れて欲しいけど、誰か試してみた?
おおなんだか凄いことになってるなあ
初心者が迂闊に手を出すと、互換性の問題などで無駄につまずく恐れもあるし、
キーマップとか自動操作などの基本機能を使うだけなら本家でも十分だし、
本家標準機能の簡単な組み合わせだけでは実現できない複雑なプログラムを作るなら、
MSVCやPerl/Ruby/Pythonなどのまともなプログラミング言語を使った方がいいから、
AutoHotkey_Lを含め、派生版は
>>1 には入れない方がいいと思うな。
言いたいことは分かるけど ・ダメ文字の問題がないこ ・ファイルエンコーディング ・配列 あたりはかなりの恩恵があるけどなぁ。 インストーラも整備されたしヘルプもあるし問題は少ないと思う。 Unicode版は少なからずのユーザが居ると思うよ。 ってかフォーラム見ると _L が開発の土台に なりつつあるのが分かる
そういう機能を必要とするのは、何でもAHKで済ませたがるマニアだけだから、
>>2 以降で紹介すれば十分って事だろ。
行数に余裕が出来たら、「派生版では修正しないと使えないスクリプトもあります」みたいな注意書きも欲しいな。
AHK_Lは、日本語のファイル処理や、Unicodeの処理とか便利そうだけど、 本家で作られたスクリプトが _L で動かなかった事例って、どんなものがあるの? いま本家を使ってるけど、日本語ファイル名をsplitpathしたあとに\の位置を 誤検出しているかどうかを調べるためifexistで確認して、あるはずのファイルがなければ 例外処理を入れてる。 こういうスクリプトを_Lで動かすと、例外処理の前段階でそのまま処理できちゃうから、 例外処理を取り除かないと不具合が出る・・・ってことなのかな。
逆に本家AHKを使うメリットってないと思ってる
せやな
ファイル処理とか文字列処理なんてライトユーザーには必要ないだろ。
特に必要もないのに派生版に手を出した奴が「MouseGesture.ahkの表示がおかしい」
とか、使っているバージョンも書かずに質問してきたらウザいから、
>>2 以降に引っ込めといた方がいいんじゃないかってこと。
派生版を使うなってわけじゃない。
979 :
名無しさん@お腹いっぱい。 :2010/07/29(木) 13:06:53 ID:9gWJAPxv0
AHKL(unicode)でunzipする処理をしたいです
7zのような外部アプリを使わずにOSの機能だけを使用して展開してみようと思いました
ですが、COM_L を使用してunzipしようとすると、エラーが出ます。ソースはこれです
SetWorkingDir, %A_ScriptDir%
;
http://www.autohotkey.com/forum/topic22923.html ; #include COM.ahk
; "AutoHotkey_Lw.zip" を "hoge" に展開する
Unz("AutoHotkey_Lw.zip", "hoge")
return
;
http://www.autohotkey.com/forum/post-335359.html#335359 Unz(sZip, sUnz)
{
psh := COM_CreateObject("Shell.Application")
psh.Namespace( sUnz ).CopyHere( psh.Namespace( sZip ).items, 4|16 )
return
}
#includeでCOM.ahkを読み取れないと言われたので、
COM.ahk の中身を全てコピペで取り込み再度実行したら↓のエラーが出ました
COM Error Notification
Function Name: "items"
ERROR: No COM Dispatch Object!
()
Will Continue?
どこを修正すればよいのでしょうか
混乱の元だというのはわかるが、メリットの方が大きいし、
ライブラリ側の対応もかなり進んでるよ。
x64対応も進んでるし、本家のままだとまともに動かないコマンドもあるし
じり貧になるのは必至かと。
本家+旧流行ページの遺産で細々とつないでいきたい人は
別にそれでいいけど、良いものを紹介しないでどうすんのさ。
>>975 ダメ文字用の処理は不要なんで意図しない結果になる。
それよりも文字列処理かね。
「ABCあいう」が本家(ANSI版でも)だと長さが9、Unicode版が6。
Loop, Parse(区切り文字なし)の回る回数も同じ。
あとはDLL呼び出しあたりなんで、分かってる人用。
一番いらないのは過去スレのURLな気がするw 過去スレに有用な情報があるのは確かだけど dat落ちしたスレはどうせどっかの保管サイトで拾ってくることになるし 過去スレ読んでまで調べようとするやつならその辺自分でできるだろうし
2ch全否定の巻
>>982 全否定どころか、有用だと思いっきり肯定してるんだが何言ってんの?
どうせそのままのurlじゃ読めずにunkarやらミラー変換機やらで探すことになるのに
わざわざ
>>1 ででかいスペース使って載せる意味はないんじゃないかって言ってんだよ
スレ立て失敗。Part6〜10まで俺が建てたんでたまには他の人が建ててくれw
誰か宣言してからのほうが良いよね > スレ立て
>>984 1に書く必要は無いが2以降には必要だろ。
URL無いと探すのも面倒だし、Janeならコマンド経由で即過去ログ取得出来る。
>>980 紹介しない、ではなく >2以降に載せるって言ってるんだと思うけど
ごちゃごちゃするから >1はとりあえず本家のみで、ってことでしょ
>>981 誰もがみんな過去ログ読めないわけでもないし
●持ちとしては過去スレURLの完全撤廃は嫌すぎる
単に 2以降に移動するって話なら特に異論はないけど
大抵の人は専ブラでスレを開いた時に
>>1 も表示されるようにしてると思うけど、
これが
>>2 以降になると、いちいち「全レス表示」みたいなのを選ばないとダメなんだよなあ
993 :
名無しさん@お腹いっぱい。 :2010/07/30(金) 17:58:59 ID:WYf6jtVeP
次スレが立つまで余計な書き込みは控えた方がいいかどうか、多数決で決めよう
やってみる。
■ スクリプト仕様
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:配列変数やハッシュ(仮想配列)は使ええないの?
A2:「式」を使うと配列やハッシュのように変数を参照できる。
Loop, 10
value_%A_Index% := A_Index**2
Q3:テキストエディタでキーワードの色づけなどをしたいんだけど。
A3:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q4:GUI作るのめんどくせ〜〜
A4:公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。
Q5:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A5:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
全角スペースをタブや半角スペースに変換してみよう。
Z
A
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。