1 名前:名無しさん@お腹いっぱい。 [2005/10/21(金) 04:31:53 ID:qy14hWPT0] If You = beginner Read, Template, >>2-6 Previous Thread:: AutoHotKey Thread pc7.2ch.net/test/read.cgi/software/1098531338/ If Res > 950 Please, Build, NextThread
175 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/15(火) 18:34:11 ID:Fr3rXntL0] +Up:: Ifwinnotactive,XXXX Send,{Pgup} return これで全部書いたほうが短かくてわかりやすい気がするのだが
176 名前:名無しさん@お腹いっぱい。 [2005/11/16(水) 01:46:01 ID:EX3GaO8n0] 任意のアプリのタスクトレイアイコンを非表示にすることってできないでしょうか? わからないなりに調べてみたらShell_NotifyIconというAPIがあるようなので これをDllCallで呼びせさばできそうな気が。 DLLについてはまったくの初心者なので今奮闘しています。
177 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/16(水) 02:17:34 ID:ExozuSiy0] これって構造体扱えるんだっけ? 構造体扱えなかったらShell_NotifyIconも使えないだろ
178 名前:176 mailto:sage [2005/11/16(水) 13:41:19 ID:EX3GaO8n0] >>177 ttp://lukewarm.s101.xrea.com/commands/DllCall.htm ここの「構造体と配列の扱い」によればできるようなのですが、 いかんせんまだ勉強中なので難しくて
179 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/16(水) 14:43:39 ID:YfyIAE/u0] >>178 うまいこと考えたな〜
180 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/16(水) 16:26:24 ID:ExozuSiy0] 構造体は扱えないけど、逃げ道はあるってことか 面倒そうなので漏れはパス
181 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/16(水) 17:08:15 ID:YfyIAE/u0] >>178 べつに難しく考えること無いよ。外部にあるからDllCall使ってロードしてやらなきゃならないだけで、 考え方は普通の関数扱うのと変わらない とりあえず、そこにある関数コピペすれば構造体に値をセットしたり読み出したりは出来る。 関数の中身は知らなくていい。 一番下のサンプルみれば使い方はわかるはず。
182 名前:176 mailto:sage [2005/11/16(水) 23:23:04 ID:EX3GaO8n0] WinGet, whd, ID, A VarSetCapacity(NotifyIconDate, 24, 0) InsertInteger(whd, NotifyIconDate, 4) DllCall("Shell_NotifyIcon", Int, 0x00000002, Str, NotifyIconDate) Return InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4) { mask := 0xFF Loop %pSize% { DllCall("RtlFillMemory", UInt, &pDest + pOffset + A_Index - 1, UInt, 1, UChar, (pInteger & mask) >> 8 * (A_Index - 1)) mask := mask << 8 } } わからないなりに作ってみましたが、うまくいかないです。 たぶん色々勘違いしてると思うのですが。
183 名前:名無しさん@お腹いっぱい。 [2005/11/18(金) 03:16:50 ID:/PztpgYi0] テキスト入力欄かどうかを取得するにはどうすればいいでしょうか? If(A_CaretX <> "")だと入力欄でないところでも反応してしまいます
184 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/18(金) 22:11:48 ID:KVZUSxn10] たしかA_CaretXとA_CaretYはエディット以外の場合は コントロールの左上の座標になるから そんな感じで弾けばいいと思うよ
185 名前:183 mailto:sage [2005/11/18(金) 22:16:55 ID:/PztpgYi0] >>184 例えばSleipnirとかJaneとかでテキストを選択してコピーしたら その位置にキャレットがあると見なしてしまいまして
186 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 01:56:22 ID:adRLoPdI0] EDITコントロールか否かの判定はControlGetでLine数を取得してチェックしてる。 非EDIT コントロールの場合 0が返るので ControlGet,line_cont,LineCount,,%ctl%,ahk_id %hwnd% if line_cont > 0 { ;テキスト入力欄の処理 } あとSendMessageで EM_xxx あたりの情報を調べるとか。 www.winapi-database.com/Message/EM/ 編集不可だがコントロールはEDIT使ってる場合(AU3_Spy.exeとか)もあるので そういう場合はどうにかしてLoked状態を確認しないといかんかも知れん
187 名前:183 mailto:sage [2005/11/19(土) 02:20:34 ID:EUr5m4mr0] >>186 ありがとうございます ですがライン数取得では上手くいかないものが多くて諦めていましたが、 殆どのクラス名に「Edit」が入っていたのでクラス名取得して分岐するようにしました。
188 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 10:46:19 ID:q++McXD/0] >>176 > 任意のアプリのタスクトレイアイコンを非表示にすることってできないでしょうか? これぜひ俺も知りたい。 自分が使ってる常駐ソフトはほとんどアイコン非表示にできるが、1つ2つできないのがある。 XP付属の「アクティブでないインジケータを隠す」はあまり好きではないし。
189 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 12:11:21 ID:adRLoPdI0] >>182 試してないしちょっとググって調べて見ただけだが、とりあえずhIconをどうにかして 取得して構造体にセットしてやらんといかんのとちゃうか? NOTIFYICONDATA構造体 Type NOTIFYICONDATA cbSize As Long 構造体のバイト数 hWnd As Long 対象のウィンドウハンドル uID As Long タスクバーアイコンのユーザー定義のID (つまり、アイコンを複数使うときのアイコンの番号のこと) uFlag As Long 有効なメンバを示す定数の組み合わせ uCallbackMessage As Long ユーザー定義のメッセージ (アイコンの上でマウスイベント(クリックなど)が発生すると ウィンドウに送られてくるメッセ―ジ) hIcon As Long 追加・削除・変更するアイコンのハンドル szTip As String * 64 チップヘルプのテキスト (アイコンの上にマウスを1秒くらい置いた時に表示される文字列) End Type
190 名前:名無しさん@お腹いっぱい。 [2005/11/19(土) 12:23:12 ID:iPF8NBAy0] 一応聞くけどautohotkeyでやりたいって趣旨なんだよね フリーソフトを使ったら出来るけど
191 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 12:24:18 ID:q++McXD/0] >>190 ちなみにそのソフトとは?
192 名前:名無しさん@お腹いっぱい。 [2005/11/19(土) 13:04:10 ID:z99JDpKz0] 使ったことないけどニュースサイトとかで何種類か見た とりあえず今ぐぐったらコレがあった 常駐しないのがあるかは知らん ttp://www.vector.co.jp/soft/win95/util/se293688.html
193 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 13:51:07 ID:adRLoPdI0] タスクトレイ アイコン 整理 でググると TrayManager とか Tray Wizard とかTrayExpand とか出てくる。 TrayExpandはソースも公開してるみたいだし、AHKでやりたいなら参考にしてみては?
194 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 14:04:50 ID:0di78jxb0] >>182 とりあえず、戻り値ぐらいみれ。 >>189 トレイアイコンの削除するだけならhIconはいらないが、uIDが必要。 まぁ、既存のソフト使ってしまった方がいいようなきもする・・・AHKでやるメリットあまりないような・・
195 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 14:32:32 ID:q++McXD/0] TrayExpandが自分には良さそう これ使うことにします
196 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/19(土) 14:33:46 ID:q++McXD/0] お礼言う前に途中で送信してしまった・・・・ >>192-193 ありがとうございます
197 名前:189 mailto:sage [2005/11/20(日) 05:00:08 ID:zlspGYDE0] >>194 フォローサンクス ええかげんなレスしてスマンカッタ
198 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 06:10:35 ID:i5sKQ9wq0] タスクトレイの項目をメニューで表示させることはできるでしょうか? フリーソフトでもこういった感じのソフトは自分で探した限り見つからなかったので 知っている方がいたら教えていただきたいのです
199 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 10:52:17 ID:u5r0IAMMO] >>198 >>193
200 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 17:09:08 ID:9waBFH8F0] SetTimerってAutoHotkey.iniに書いても動かないの?
201 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 19:14:54 ID:zlspGYDE0] 動くよ
202 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 20:09:01 ID:9waBFH8F0] >>201 動くのか・・・ 特定のウインドウが表示されたらOKボタンをクリックしたいんだけど .ahkに書くと動くんだけど、AutoHotkey.iniに書いても動かない これじゃだめなの? SetTimer,b,250 return b: IfWinActive,Aterm WARPSTAR { ControlClick,OK,Aterm WARPSTAR return } return
203 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 21:37:35 ID:MfpEbr860] 常駐するSetTimerはAutoHotkey.iniの頭に書いて、 サブルーチンをAutoHotkey.iniの終わりに書いてみては 俺はそれで IfWinActive,リンク先を探す,指定したリンク先は、デスクト IfWinExist,ahk_class MSBLPopupMsgWClass などのウインドウを操作できてる
204 名前:名無しさん@お腹いっぱい。 [2005/11/20(日) 21:41:56 ID:Gk4qhKIS0] 多分常駐させてないだけだろ
205 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 21:51:08 ID:0DdRRu/u0] SetTimerの上のほうに、Returnかホットキーの設定が書いてある気がする。
206 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 22:49:48 ID:zlspGYDE0] ホットキー指定のないスクリプトは #Persistent入れないと常駐しないから
207 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/20(日) 23:56:30 ID:JR1lWgkn0] >>203-206 ありがとう >常駐するSetTimerはAutoHotkey.iniの頭に書いて、 >SetTimerの上のほうに、Returnかホットキーの設定が書いてある気がする。 これだった。無事に動きました。ありがとう
208 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 00:06:01 ID:FWsdNj/u0] iTunesを操作させるにはどうしたらいいですかね?
209 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 00:18:49 ID:5v2PJ0mq0] 努力したらいいと思うよ
210 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 00:39:50 ID:ZVwQTLlG0] >>208 曖昧すぎ。
211 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 02:04:10 ID:Nz+dKwd30] >>210 質問がな
212 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 21:26:10 ID:OOnUpq930] AutoHotkeyでiTunesを操作させるにはどうしたらいいですかね?
213 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 22:37:36 ID:jfEQAnS10] 「:」に対してキーを割り当てたいのですが、うまくいきませんでした。 ::: ←ここでエラー ごにょごにょ 何か他に書き方があるのでしょうか?
214 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/21(月) 23:02:40 ID:Y2LksryB0] lukewarm.s101.xrea.com/KeyList.htm の下のほう 仮想キーコードやスキャンコードで何とか対応しる
215 名前:名無しさん@お腹いっぱい。 mailto:meanbloke777@yahoo.co.jp [2005/11/23(水) 11:44:06 ID:w4Ag56cD0] NetworkStumblerというアプリを最大化で起動して、 その中のウィンドウをさらに最大化しようとしています。 NetworkStumblerが最大化で起動しても、アクティブになるまで 3秒ほどかかります。 起動してから「ALT+w+t」で中のウィンドウが最大化できますが AutoHotkey.iniで下のように書いてもうまくいきません。 最初の最大化で起動のみが成功し、中のウィンドウは変化がありません。 "Send, {LALT}wt"の部分は個別に動作確認できていますので、 その間の記述の仕方が問題でしょうか? #0:: run "D:\apli\netstumbler\Network Stumbler\NetStumbler.exe", , max WinWaitActive, Network Stumbler if ErrorLevel <> 0 Send, {LALT}wt else return
216 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/23(水) 16:33:51 ID:vpU2R36Y0] If の判定が間違ってるのと、Elseが不要(書くならもう一行returnが必要) 子ウィンドウを枠一杯に広げるので満足なら Send,!wt でもいいけど SendMessage使えば本当の最大化もできるよ #0:: run "D:\apli\netstumbler\Network Stumbler\NetStumbler.exe", , max WinWaitActive, Network Stumbler if ErrorLevel = 0 { SendMessage, 0x229, 0,0,MdiClient1,A ;WM_MDIGETACTIVE SendMessage, 0x225, %ErrorLevel%, 0,MdiClient1,A ;WM_MDIMAXIMIZE } return
217 名前:215 mailto:meanbloke777@yahoo.co.jp [2005/11/23(水) 21:55:25 ID:w4Ag56cD0] >>216 ご丁寧にありがとうございます! しかし、<>を=に変更してelse消しても現象は変わらず。 Send, !wtの後にreturn付けても同じでした。 SendMessage使ったやつをコピペでもダメでした。。。orz とりあえず、子ウィンドウを広げられるだけで満足です。 もしかしてErrorLevelが0になってないのでしょうか?
218 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/23(水) 22:40:29 ID:vpU2R36Y0] 大分前に入れた奴なんでバージョン古いけど うちでは上手くいってる XP SP1 Autohotkey Ver 1.0.38.1 NetStumbler ver 0.3.30 とりあえず MsgboxやOutputDebugでErrorLevelの値見たり if msgbox,OK else msgbox,NG とかやって試してみたら?
219 名前:215 mailto:meanbloke777@yahoo.co.jp [2005/11/23(水) 23:56:41 ID:w4Ag56cD0] >>218 ちなみに私の環境は 2000 SP4 Autohotkey Ver 1.0.40.06 NetStumbler ver 0.4.0 >とりあえず MsgboxやOutputDebugでErrorLevelの値見たり そういうやり方があるのですね。 if ErrorLevel = 0 { msgbox,OK return } else msgbox,NG return ↑を試したところ、タイトルバーが青くなる前に 「OK」が出ました。なのでSend, !wtが実行される のが早過ぎるみたいですね。
220 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/24(木) 01:13:43 ID:YIxfmvQf0] Verupしたね
221 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/24(木) 12:40:50 ID:0jaOpLGO0] >>219 MsgBoxに制御が奪われたからアクティブになれなかったってオチじゃないような? そこまでつきとめたら Sleepでウェイトいれてやればよろし
222 名前:215 mailto:meanbloke777@yahoo.co.jp [2005/11/24(木) 22:05:57 ID:3njavchq0] >>218 >>219 おかげさまで望み通りの動作ができました! 感謝します。 ;【NwtStumbler起動】 #7:: IfWinExist, Network Stumbler { WinMaximize WinActivate return } else run "D:\apli\netstumbler\Network Stumbler\NetStumbler.exe", D:\apli\netstumbler\aplog, max WinWaitActive, Network Stumbler if ErrorLevel = 0 { Sleep, 3000 Send, !wt return } else return
223 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/26(土) 13:41:58 ID:cSvLT2hD0] LastFoundWindowってWinWaitで機能しないんですか?
224 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/26(土) 20:49:42 ID:ekIkW6EI0] %1%や%2%はコマンドライン引数が分解されて格納されていますが、 コマンドライン引数全体を表す変数はないんでしょうか?
225 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/26(土) 21:01:35 ID:TeG9pCZU0] >>224 引数を「"」で囲めばだいたい解決すると思いますが Loop, %0% { Part := %A_Index% Unite = %Unite%%Part%%A_Space% } MsgBox, "%Unite%" どうしようもない場面では 「0」に引数の数が入るのでこんなのでどうにかしてます。
226 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/26(土) 21:59:47 ID:m0vUMe840] >FileAppend [, Text, Filename] >ファイル名の代わりに「*」を指定すると、標準出力にテキストを書き出せる。 lukewarm.s101.xrea.com/commands/FileAppend.htm --- test.ahk -------- FileAppend,Hello,* --------------------- コンパイルしてプロンプトで test と打っても文字は何も表示されない。 test > a.txt とリダイレクトさせるとファイルには正常に出力される、何でだろ?
227 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/26(土) 22:33:10 ID:ekIkW6EI0] A_Indexを1度別の変数に入れちゃえばいいのか。 "でくくられていたかどうかが正確には判断出来ないですけど、 実用上は問題ないですね。 ありがとうございました。
228 名前:名無しさん@お腹いっぱい。 [2005/11/27(日) 12:34:40 ID:R5M1hxQO0] Send,{LWin Down}やSend,{LWindown} で押し下げ状態にしたWinキーを元に戻すにはどうすればいいでしょうか? Send,{LWin Up}やSend,{LWin}とやっても戻りませんでした。
229 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/27(日) 15:26:46 ID:GjCd3Btu0] 任意のアプリをタスクバーにボタンを表示しないようにしたいんだけど Gui,+ToolWindowに相当するものってない? ウィンドウスタイルを見てもそれらしいのがないっぽい
230 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/27(日) 16:30:10 ID:m61GJs8S0] 試してないけど 0x00000080 WS_EX_TOOLWINDOW あたりは?
231 名前:229 mailto:sage [2005/11/27(日) 17:10:05 ID:GjCd3Btu0] >>230 見落としてた しかし、小さいタイトルバーになってAltTabメニューにも表示されなくなるけど 何故かタスクバーには表示されたまま 色んなウィンドウで試してみたけど変わらない WinSet,ExStyle,^0x00000080,A
232 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/27(日) 20:16:28 ID:RGnUnyxH0] ひらがなカタカナキ-にaltを割り当てたいのですが *vkF2::Send,{alt Down} *vkF2 up::Send,{alt Up} とするとaltが押しっぱなしになってしまいます 仮想キー押し上げにコマンドを割り当てることは出来ないのでしょうか?
233 名前:名無しさん@お腹いっぱい。 [2005/11/28(月) 08:04:43 ID:QtDqyH5O0] TListViewの情報を取得するにはどうしたらいいでしょうか? ContrloGetのListはSysListVew32のようですし
234 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/28(月) 20:15:46 ID:S9ZDzThA0] コマンドライン引数の取得の仕方がわかったので書いておきます。 GetArgs() { args := DllCall("GetCommandLine", str) StringGetPos, pos, args, %A_ScriptName% StringLen, length, A_ScriptName count := pos + length + 1 StringTrimLeft, args, args, count return args } args := GetArgs() MsgBox, %args%
235 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/11/28(月) 20:24:26 ID:bOHdUc5Q0] トンクス いただいた。
236 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 00:40:06 ID:Boevp9qL0] 解説サイトの説明が糞だな。 窓使いの憂鬱も分かりづらくて導入しにくいところがあったが こっちはさらダメダメ。アホか。 流行らせる気全然ね〜だろ。ぼけだろ。
237 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 00:58:39 ID:vf5AX1eU0] 236がアホでぼけで理解力がダメダメなのはわかった
238 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 01:06:12 ID:ziZg2yDd0] 単に翻訳してるだけだし その労苦だけでもありがたいと思うけどね
239 名前:233 mailto:sage [2005/12/04(日) 01:53:09 ID:c5I9hufm0] WinAPIやWindowMessageもできるだけ調べましたが、未だに解決できません TListViewの情報取得は無理でしょうか?
240 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 11:08:29 ID:MlVaVrV10] >239 TListView って SysListView32 のサブクラスっぽいからそのまま使えるんじゃない?
241 名前:233 mailto:sage [2005/12/04(日) 11:20:41 ID:c5I9hufm0] >>240 もちろん試しました SysListView32のところでは取得できたので記述が間違っているってことはないと思います WindowMessageのLVM_xxxxで色々操作できるみたいなんですが、テキストは取得できないみたいで・・・
242 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 11:21:34 ID:t+Kdt+4/0] まだ悩んでいたのかよ ListVewのこたしらんがTEDITもEditコントロールとして認知、制御できるし ControlGetで取れる名称がSysListVew32だっつうなら その名を指定してやれば情報は取れるだろ。
243 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 11:22:58 ID:t+Kdt+4/0] できないのか、 ならGontrolGetTextでは?
244 名前:233 mailto:sage [2005/12/04(日) 11:27:01 ID:c5I9hufm0] >>242 Contolの引数のことろにTListViewではなくSysListVew32を指定するってことですか? もちろんやってみましたが無理のようです
245 名前:233 mailto:sage [2005/12/04(日) 11:29:30 ID:c5I9hufm0] >>243 それも試しました いくつかのアプリで試しているので取得したいアプリが特殊という可能性は低いと思います
246 名前:233 mailto:sage [2005/12/04(日) 19:16:26 ID:c5I9hufm0] VarSetCapacity(LvItem,52,0) InsertInteger(1,LvItem,0) InsertInteger(0,LvItem,4) InsertInteger(0,LvItem,8) InsertInteger(&pszText,LvItem,20) InsertInteger(100,LvItem,24) SendMessage,0x1005,0,&LvItem,TListView1,A Msgbox,%pszText% ttp://yokohama.cool.ne.jp/chokuto/urawaza/listview2.html ここを参考にしましたが これでいけると思ったけど駄目でした InsertInteger()関数は書いてあります エラー内容 モジュール 'comctl32.dll' のアドレス 5ABBD830 でアドレス 00D15714 に対する読み込み違反がおきました。 構造体は素人なので見よう見まねで書いてみましたが どこかおかしいでしょうか?
247 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 20:11:58 ID:t+Kdt+4/0] AHKは万能なソフトってわけでもないのでそれだけ努力してダメなら無理なのかもしらんね とりあえず半端なレスして悪かった。
248 名前:233 mailto:sage [2005/12/04(日) 20:29:14 ID:c5I9hufm0] >>247 >とりあえず半端なレスして悪かった いえいえ >AHKは万能なソフトってわけでもないので もしどうしても駄目なら他のソフトやスクリプトを通してでも取得したいのですが・・・ どなかたお知恵をお貸しください
249 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 20:39:34 ID:LHEUZAAE0] 単に別プロセスのメモリー読もうとしてるからエラー出てるのでは? TListViewはListView用のLVM_〜が使えた気がする
250 名前:233 mailto:sage [2005/12/04(日) 20:47:32 ID:c5I9hufm0] >>249 >TListViewはListView用のLVM_〜が使えた気がする そうです、使えるようです。 実際LVM_GETITEMCOUNTでアイテム数は取得できますし。 >>246 のリンク先にもありますが、SendMessageの0x1005はLVM_GETITEMのことです >単に別プロセスのメモリー読もうとしてるからエラー出てるのでは? これについては自分にはよくわからないです
251 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 21:06:52 ID:OzfEcy140] >>250 VirtualAllocEx MapViewOfFile を駆使すれば取得できるが面倒
252 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/04(日) 21:09:06 ID:LHEUZAAE0] LVM_GETITEMCOUNTはSendMessageの戻り値がそのままアイテム数だから問題ないけど LVM_GETITEMはLVITEMのポインタをLPARAMで渡してそこに情報を書き込んでもらう奴だから LVITEM*が指すメモリーを共有メモリにするか、SendMessageする側でフックをかけてプロセスに割り込まないといけない 共有メモリー使う方法は ttp://techtips.belution.com/ja/vc/0001/ あたりを参考にすれば出来るかな
253 名前:233 mailto:sage [2005/12/04(日) 21:10:52 ID:c5I9hufm0] >>251-252 ありがとうございます とりあえず提示されたものを頑張って調べてみます
254 名前:233 mailto:sage [2005/12/05(月) 12:27:58 ID:pnvrA0j10] 色々やってみたんですが、行き詰っています ttp://techtips.belution.com/ja/vc/0001/ これってメモリアドレスから変数を参照できないと無理なのでは? まだ調べ始めて1日なので何か勘違いしてるだけのような気もしますが
255 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/05(月) 12:48:04 ID:yS+6IGXX0] gui,add,edit,vtitle R1 W300 gui,show return こんな感じでエディットボックスを作ってるんですが、日本語入力すると確定するまで表示されません。 普通に変換中に表示されるようには出来ないのでしょうか?何かオプションがあるのかな?
256 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/05(月) 12:55:38 ID:stKSCaAE0] >>255 うちで使ってる簡単なもの。これで試して駄目だったらなんかIMEとかに問題ありそうな。 #NoTrayIcon #SingleInstance Gui, Add, Edit, vSrc X Y W210 Gui, Add, Button, Default gSrc x+6 ys-2, &Search Gui, Show, , Amazon検索 return Src: Gui, Submit Run, www.amazon.co.jp/exec/obidos/search-handle-url/index=blended&field-keywords=%Src% ExitApp GuiEscape: GuiClose: ExitApp
257 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/05(月) 13:30:59 ID:fH9XPvqW0] >>255 うちでは普通にでるけどなぁ・・・ win2ksp4 Atok16 MSIME2k どっちもOK
258 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/05(月) 13:33:22 ID:fH9XPvqW0] いちおう追記、AHK v1.0.40.05
259 名前:255 mailto:sage [2005/12/05(月) 15:14:33 ID:yS+6IGXX0] >>256 >>257 ありがとうございます。早速試しましたが、やはりうまく表示されません。 例えば わたしは と打つと w しか表示されないです。 Returnを押すと、わたしは と表示されます Version 1.0.40.10をいれてみましたが、症状はかわらず。 どーもうちのIMEの不具合か、設定の問題かもしれません。 ちなみにAHK以外の日本語入力は不具合ありません。
260 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/05(月) 15:38:36 ID:N0kdWIqG0] >>259 OSの種類とIMEのバージョンや設定(ナチュラルインプットとか詳細サービスとか)書いたら? 解決したかったら人任せじゃだめだよ
261 名前:255 mailto:sage [2005/12/05(月) 16:21:24 ID:ONVNYKfr0] 情報が足らず申し訳ありませんでした。 Windows Xp pro sp1 AHK Version 1.0.40.10 Microsoft IME Standard 2002 ver. 8.1 詳細なテキスト サービスをオフにするにチェック IME Watcherを使用 英字を常に半角で変換以外は設定をいじってません。 英語圏のソフトなのでこういう仕様なのかと思っていました。 我が家のPCの問題のようですので自力でがんばります。 皆様のお手を煩わせてほんとに申し訳なかったです。すみませんでした。
262 名前:233 mailto:sage [2005/12/06(火) 00:06:41 ID:zKABzlSJ0] 何度もすみません やっぱり自分には無理のようです・・・ とういうか、>>252 のURLの内容とほぼ同じものが ttp://www.yoshibaworks.com/ayacy/inasoft/lv2csv/lvcsvcom/chapter3.html に載っているんですが、同じサイトの ttp://www.yoshibaworks.com/ayacy/inasoft/lv2csv/index.html をダウンロードして使ってみたところTListViewは取得できませんでした 下のURLのアプリは上のソースコードとは仕組みが違うのかもしれませんが 自分にとってTListViewが取得できることによってAHKはかなり便利になると思います ずうずうしいようですが、TListViewを取得できるものが誰かの手によって書かれるのを期待します もちろん自分でもこれからもチャレンジしていきたいと思います
263 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 00:11:30 ID:BfjYx7dY0] TlistViewってそもそも何?
264 名前:260 [2005/12/06(火) 00:20:18 ID:061B1eK40] >>261 俺も>>256 を試したら同じ現象が起きた XP HOME SP2 IME2002でIME Watcherは使ってない 今さらで悪いけど、むかし同じ現象が出て InputBoxを使って回避した気がする。忘れてた… その時は、会社のマシンだったから割と起こりやすい現象みたい
265 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 00:28:05 ID:+pinJF560] >>262 ぱっとソースを見た感じクラスがListView32じゃないと動作しないように書いてある これ→if ( strcmp(szClassName, WC_LISTVIEW) == 0 ) { 確かTListViewはクラス名が違ったと思う
266 名前:233 mailto:sage [2005/12/06(火) 00:30:50 ID:zKABzlSJ0] >>265 ということは>>262 のソースを再現すればAHKでも実現できるわけですね 少し希望が湧いてきました
267 名前:255 mailto:sage [2005/12/06(火) 20:02:45 ID:BjDsaEX90] exeファイルにして、友達のPCで試してもらいました。 買ったままいじってないWinxp home sp2 やはり同じように入力がおかしかったようです。 これは、エディットボックス自体の不具合かな。あきらめてほかの方法をとることにします。
268 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 22:19:27 ID:cuFKTqtn0] InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4) ; To preserve any existing contents in pDest, only pSize number of bytes starting at pOffset ; are altered in it. The caller must ensure that pDest has sufficient capacity. { mask := 0xFF ; This serves to isolate each byte, one by one. Loop %pSize% ; Copy each byte in the integer into the structure as raw binary data. { DllCall("RtlFillMemory", UInt, &pDest + pOffset + A_Index - 1, UInt, 1 ; Write one byte. , UChar, (pInteger & mask) >> 8 * (A_Index - 1)) ; This line is auto-merged with above at load-time. mask := mask << 8 ; Set it up for isolation of the next byte. } } ExtractInteger(ByRef pSource, pOffset = 0, pIsSigned = false, pSize = 4) { SourceAddress := &pSource + pOffset ; Get address and apply the caller's offset. result := 0 ; Init prior to accumulation in the loop. Loop %pSize% ; For each byte in the integer: { result := result | (*SourceAddress << 8 * (A_Index - 1)) ; Build the integer from its bytes. SourceAddress += 1 ; Move on to the next byte. } if (!pIsSigned OR pSize > 4 OR result < 0x80000000) return result ; Signed vs. unsigned doesn't matter in these cases. ; Otherwise, convert the value (now known to be 32-bit) to its signed counterpart: return -(0xFFFFFFFF - result + 1) }
269 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 22:21:14 ID:cuFKTqtn0] GetListViewText(hListView, iItem, iSubItem, ByRef lpString, nMaxCount) { ;const NULL = 0 PROCESS_ALL_ACCESS = 0x001F0FFF INVALID_HANDLE_VALUE = 0xFFFFFFFF PAGE_READWRITE = 4 FILE_MAP_WRITE = 2 MEM_COMMIT = 0x1000 MEM_RELEASE = 0x8000 LV_ITEM_mask = 0 LV_ITEM_iItem = 4 LV_ITEM_iSubItem = 8 LV_ITEM_state = 12 LV_ITEM_stateMask = 16 LV_ITEM_pszText = 20 LV_ITEM_cchTextMax = 24 LVIF_TEXT = 1 LVM_GETITEM = 0x1005 SIZEOF_LV_ITEM = 0x28 SIZEOF_TEXT_BUF = 0x104 SIZEOF_BUF = 0x120 SIZEOF_INT = 4 SIZEOF_POINTER = 4 ;var result := 0 hProcess := NULL dwProcessId := 0
270 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 22:21:36 ID:cuFKTqtn0] if lpString <> NULL && nMaxCount > 0 { DllCall("lstrcpy", Str,lpString, Str,"") DllCall("GetWindowThreadProcessId", UInt,hListView, UIntP,dwProcessId) hProcess := DllCall("OpenProcess", UInt,PROCESS_ALL_ACCESS, Int,false, UInt,dwProcessId) if hProcess <> NULL { ;var lpProcessBuf := NULL hMap := NULL hKernel := DllCall("GetModuleHandle", Str,"kernel32.dll", UInt) pVirtualAllocEx := DllCall("GetProcAddress", UInt,hKernel, Str,"VirtualAllocEx", UInt) if pVirtualAllocEx == NULL { hMap := DllCall("CreateFileMapping", UInt,INVALID_HANDLE_VALUE, Int,NULL, UInt,PAGE_READWRITE, UInt,0, UInt,SIZEOF_BUF, UInt) if hMap <> NULL lpProcessBuf := DllCall("MapViewOfFile", UInt,hMap, UInt,FILE_MAP_WRITE, UInt,0, UInt,0, UInt,0, UInt) } else { lpProcessBuf := DllCall("VirtualAllocEx", UInt,hProcess, UInt,NULL, UInt,SIZEOF_BUF, UInt,MEM_COMMIT, UInt,PAGE_READWRITE) }
271 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 22:22:07 ID:cuFKTqtn0] if lpProcessBuf <> NULL { ;var VarSetCapacity(buf, SIZEOF_BUF, 0) InsertInteger(LVIF_TEXT, buf, LV_ITEM_mask, SIZEOF_INT) InsertInteger(iItem, buf, LV_ITEM_iItem, SIZEOF_INT) InsertInteger(iSubItem, buf, LV_ITEM_iSubItem, SIZEOF_INT) InsertInteger(lpProcessBuf + SIZEOF_LV_ITEM, buf, LV_ITEM_pszText, SIZEOF_POINTER) InsertInteger(SIZEOF_TEXT_BUF, buf, LV_ITEM_cchTextMax, SIZEOF_INT) if DllCall("WriteProcessMemory", UInt,hProcess, UInt,lpProcessBuf, UInt,&buf, UInt,SIZEOF_BUF, UInt,NULL) <> 0 if DllCall("SendMessage", UInt,hListView, UInt,LVM_GETITEM, Int,0, Int,lpProcessBuf) <> 0 if DllCall("ReadProcessMemory", UInt,hProcess, UInt,lpProcessBuf, UInt,&buf, UInt,SIZEOF_BUF, UInt,NULL) <> 0 { DllCall("lstrcpyn", Str,lpString, UInt,&buf + SIZEOF_LV_ITEM, Int,nMaxCount) result := DllCall("lstrlen", Str,lpString) } }
272 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 22:22:41 ID:cuFKTqtn0] if lpProcessBuf <> NULL if pVirtualAllocEx <> NULL DllCall("VirtualFreeEx", UInt,lpProcessBuf, UInt,0, UInt,MEM_RELEASE) else DllCall("UnmapViewOfFile", UInt,lpProcessBuf) if hMap <> NULL DllCall("CloseHandle", UInt,hMap) DllCall("CloseHandle", UInt,hProcess) } } return result }
273 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/06(火) 22:23:18 ID:cuFKTqtn0] ;const MAX_TEXT = 260 ;var iItem := 0 iSubItem := 0 x := 0 y := 0 VarSetCapacity(szText, MAX_TEXT, 0) VarSetCapacity(szClass, MAX_TEXT, 0) VarSetCapacity(point, 8, 0) DllCall("GetCursorPos", Str,point) x := ExtractInteger(point, 0, true, 4) y := ExtractInteger(point, 4, true, 4) hListView := DllCall("WindowFromPoint", Int,x, Int,y) DllCall("GetClassName", UInt,hListView, Str,szClass, Int,MAX_TEXT) if DllCall("lstrcmpi", Str,szClass, Str,"SysListView32") == 0 || DllCall("lstrcmpi", Str,szClass, Str,"TListView") == 0 { GetListViewText(hListView, iItem, iSubItem, szText, MAX_TEXT) Msgbox, %szText% } return
274 名前:233 mailto:sage [2005/12/06(火) 22:52:52 ID:oOmblgWA0] すごい!感動しました! 感謝してもしきれないです 本当にありがとうございます
275 名前:名無しさん@お腹いっぱい。 mailto:sage [2005/12/07(水) 00:24:52 ID:+IISIZwk0] 引数が足りなかった DllCall("VirtualFreeEx", UInt,hProcess, UInt,lpProcessBuf, UInt,0, UInt,MEM_RELEASE)