AutoHotkey Thread 2at SOFTWARE
AutoHotkey Thread 2 - 暇つぶし2ch78:名無しさん@お腹いっぱい。
05/11/02 02:11:33 L1tQPzXC0
スペース0
スペース1
スペース2
スペース3
スペース4


79:名無しさん@お腹いっぱい。
05/11/02 02:13:48 L1tQPzXC0
>>78

80:名無しさん@お腹いっぱい。
05/11/02 02:15:47 L1tQPzXC0
スペース0
 スペース1
  スペース2
   スペース3
    スペース4

81:名無しさん@お腹いっぱい。
05/11/02 02:23:32 L1tQPzXC0
スペース0
スペース1
スペース2
スペース3
スペース4

>>78はコピペミス。

 または と書くと、半角スペースに変換される。
半角スペースが連続しても1個に変更されてしまうことがないみたい。


82:名無しさん@お腹いっぱい。
05/11/02 03:25:15 yA1z2EuC0
ギコナビで特殊文字変換してる

83:名無しさん@お腹いっぱい。
05/11/02 17:33:22 y7CD98+Z0
>>77
世の中にはインデントがないほうが見やすい人も存在する

84:名無しさん@お腹いっぱい。
05/11/02 18:48:13 Oarl5uV80
>>83
>コーディングルールは個人の好き好きではあるけど、AHKの場合は
>人から貰ったソースを手を入れずにそのまま使えるケースは少ないし
>他人が見てもわかりやすい記述は知ってて欲しいと思うので


85:名無しさん@お腹いっぱい。
05/11/02 20:23:36 5+koFFKw0
>>84
>>83

86:名無しさん@お腹いっぱい。
05/11/02 21:00:58 mmYbLWLG0
>>84-85
#SetThreadMood, Mataari



87:名無しさん@お腹いっぱい。
05/11/03 04:45:03 CGo3fQX00
キャプションを非表示にすることってできますか?
たぶんSendMessageを使うんだろうけど、見つかりません。

88:87
05/11/03 05:08:44 CGo3fQX00
みつかりました。
SendMassageではなくてWinSetだけれど。

WinSet, Style, ^0x00C00000

89:名無しさん@お腹いっぱい。
05/11/03 16:00:33 aDGTml8d0
あるアプリAを起動すると、別のアプリBも自動的に起動するようにするには、どのようにすればよいのでしょうか?

90:名無しさん@お腹いっぱい。
05/11/03 16:16:15 RQBG0Gu80
条件をもっと絞ってくれないとな。
単純な方法から高い連動性を求めるものまでいろいろあるから

91:名無しさん@お腹いっぱい。
05/11/03 16:53:28 aDGTml8d0
アプリAが何らかの方法で起動されると、プロセスを監視していたAutoHotKeyがそれを察知してアプリBも自動的に開くようにしたいのです。
何秒後に開く、とかの指定は必要なく、アプリAを終了したらアプリBも終了する、などの機能も必要ありません。
AutoHotKeyの監視はできれば5分ごとに監視するようにしたいのですが、常に監視するのでもかまいません。

方法をご存じの方がいましたら、お願いします。

92:名無しさん@お腹いっぱい。
05/11/03 17:47:09 GMRToEkf0
#Persistent
Settimer,kansi,5000
kansi:
IfWinExist,A
If hoge = 0
{
{
IfWinExist,B
{
hoge = 1
}
else
{
Run,B
}
}
return
}
else
{
hoge = 0
return
}

こんな感じでいいんでしょうか?

93:名無しさん@お腹いっぱい。
05/11/03 17:49:07 GMRToEkf0
スレの流れからして俺、最低だな・・・。

94:名無しさん@お腹いっぱい。
05/11/03 18:42:44 CgkRLY9O0
あー、Ifがネストしちゃうと漏れは完全アウトだな。
パッと見ではもちろんじっくり考えても全然理解できない。

で、エディタに貼っつけてインデントしてから考えてみたんだけど
一番上位のIfWinExist,A の{ }抜けてるけどいいのんかい?
あと 7,16行の { } に意味なくないか、これ


95:名無しさん@お腹いっぱい。
05/11/03 18:47:37 6IkeUy0z0
>>91
つProcess

96:名無しさん@お腹いっぱい。
05/11/03 20:16:45 IdqDMTZK0
ThumbSenseのように、タッチパッドに触れているかどうかを判定できるようになるといいなあ。

97:名無しさん@お腹いっぱい。
05/11/03 21:22:00 myFIFexE0
TAB使えばいいじゃん

98:名無しさん@お腹いっぱい。
05/11/03 22:56:37 ZNzLxnpo0
もしどなたかソースコード解凍できる人いましたら
ソースからShellExecuteというAPI検索して6個目(=最後)の引数何になってるか
確認していただけませんか?

99:98
05/11/03 23:06:30 ZNzLxnpo0
ごめんやっぱりいいです。
でもやっぱりなんかおかしい。

100:名無しさん@お腹いっぱい。
05/11/04 22:35:21 GuCt95u60
マウスカーソルを変更したり消去するコマンドは無かったorz
ノーマウスカーソルの機能をぱくれると思ったが残念

101:名無しさん@お腹いっぱい。
05/11/05 00:12:48 1+JQ8ek+0
>>100
前スレより。 DAT落ちしてるみたいなんでコピペ

> 627 名前:625[sage] 投稿日:2005/05/20(金) 23:58:26 ID:jhPL19PD
> とりあえずLoadCursorFromFileで直接カーソルファイル指定で
> システムのポインタは変えれるぽい
> (LoadCursorも試してみたがイマイチ挙動がよくわからん)
>
> #1::  SetSystemCursor(LoadCursorFromFile("C:\WINDOWS\Cursors\hoge.cur"),32512)
> #2::  SetSystemCursor(LoadCursorFromFile("C:\WINDOWS\Cursors\hoga.cur"),32512)
>
> LoadCursorFromFile(lpFileName)
> { ; カーソルファイルからマウスカーソルを作成する
>   return DllCall("LoadCursorFromFile",Str, lpFileName, Int)
> }
> SetSystemCursor(hCur,id)
> { ;システムカーソルを変更する
>   return DllCall("SetSystemCursor", Uint,hCur, Int,id ,Int)
> }
>
> 630 名前:592[sage] 投稿日:2005/05/25(水) 12:53:24 ID:62rl7YBY
> IME状態表示用のアイコン作ってみた
> URLリンク(lukewarm.s101.xrea.com)
>
> 631 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2005/05/25(水) 12:54:38 ID:62rl7YBY
> あ、マウスカーソルに訂正

102:名無しさん@お腹いっぱい。
05/11/05 03:27:14 kQuWg8rN0
dllcallでShowCursorを使えばいけそうだけど

#y::DllCall("User32\ShowCursor", "int", 0)
テストで作ってみても反応無かったorz 助けて

103:名無しさん@お腹いっぱい。
05/11/05 04:50:06 /8hJVayJ0
>>102
それ自分のプロセスのウィンドウにしか利かない

104:名無しさん@お腹いっぱい。
05/11/05 15:21:11 q4T/nF7a0
URLリンク(www.autohotkey.com)
の OnClipboardChange の例にある%A_EventInfo%ですが
誰か解説してほしい・・・

とりあえず、文字やファイルだと1
bmpだと2になるんだが、

文字とファイルの区別はつかないのかな

105:名無しさん@お腹いっぱい。
05/11/05 16:06:10 1+JQ8ek+0
>>104
URLリンク(lukewarm.s101.xrea.com)

106:名無しさん@お腹いっぱい。
05/11/05 16:07:29 1+JQ8ek+0
違った。こっちの下のほう
URLリンク(lukewarm.s101.xrea.com)

107:名無しさん@お腹いっぱい。
05/11/05 16:12:49 1+JQ8ek+0
何度もスマソ、ちなみにクリップボード内のフォーマットはDllCallでAPI使えば取得できる
サンプル URLリンク(d.hatena.ne.jp)

108:名無しさん@お腹いっぱい。
05/11/05 19:25:38 q4T/nF7a0
>>106
ありがとう。
日本語のヘルプ(chm)しか見てなかった・・・すまん

>>107
こっちも参考にしてみる。ありがと

 今週初めにAutoHotkey知ったんだがおもしろい。
これでCaps入れ替えができれば完璧なんだが・・・


109:名無しさん@お腹いっぱい。
05/11/05 20:23:00 YtsoQGy80
やっとサッカーチームが!

110:名無しさん@お腹いっぱい。
05/11/05 20:24:40 rpDKFDGY0
戦う相手がいません!

111:名無しさん@お腹いっぱい。
05/11/06 16:38:36 7Hz8Kh6P0
こんなスクリプト書いてくださいってのは、ここ的にアリですか?

112:名無しさん@お腹いっぱい。
05/11/06 17:44:40 PoGd2lip0
(ω・ )ゝ なんだって?

113:名無しさん@お腹いっぱい。
05/11/06 19:45:09 7Hz8Kh6P0
>>112
こんなスクリプト書いてくださいってのは、ここ的にアリですか!!!

114:名無しさん@お腹いっぱい。
05/11/06 19:55:01 FAFXojQr0
   /.─┬  /⌒ヽ ┌─┴─┐ .  |  ヽヽヽ       ―┼―         .|  ヽ  | \
 /| ┌─┐|    ノ     ̄フ   .  ̄| ̄ヽ |    , |      |   |   \   ̄| ̄ヽ | . |
   | └─┘|    |    ─┼─    ,ノ  │   ノ . | \ |  ゝ   |     |  ノ  │   |/ ̄ヽ
   |     J   ○      J  .   ノ  ヽノ  .   J   \_   レ     ノ  ヽノ     _ノ
  _____
 ____ー┼ー     |   /   _/_
  --  二二_   /~| ̄/ヽ    /   ヽ  |   \
   ̄ ヽ | | ノ  .|  ∨   |  /  _|   |     |
  | ̄|  ノ l____,  \ノ   ノ    (_ノヽ  レ
    ̄

115:名無しさん@お腹いっぱい。
05/11/06 19:56:57 0hkV63L40
>>111
いちいちそんな無駄レスせずにさっさと本題書けよ。印象悪いぞ。
過去スレからの流れを見てるとこのスレは自分である程度試行錯誤する人間には
手助けするけど、丸投げは(・A・)イクナイ!って感じだからそれを踏まえた上でヨロシク。

116:名無しさん@お腹いっぱい。
05/11/06 21:48:46 A0mk0Y990
横やりですいません。>>102のヒントお願いします。。。

117:名無しさん@お腹いっぱい。
05/11/06 23:40:35 z+zoLLJT0
>>111
無し

ヒントを教えてくれとかならまだしも、丸投げはダメだろ

118:名無しさん@お腹いっぱい。
05/11/07 00:15:52 Lx44qPKh0
>>116
>103で答えは出ていると思うのだが

119:名無しさん@お腹いっぱい。
05/11/07 04:00:09 S2Pl78Ca0
>>111
とりあえず、なにがしたいんだ?怒らないから言ってみなさい

120:名無しさん@お腹いっぱい。
05/11/07 18:35:53 7cDsa3uM0
>>111
やっぱり怒る

121:名無しさん@お腹いっぱい。
05/11/07 20:21:01 rV/rS1+v0
^p::
IfWinActive, ahk_class Notepad
Send, ^o
else
Send, ^p
return

こんな感じのスクリプトを書いているんですが、指定ウィンドウ以外で無限ループしちゃいます。
こういう時どうしたらいいんでしょうか?


122:名無しさん@お腹いっぱい。
05/11/07 20:39:04 PUaC//G70
>>121
一行目に
#UseHook
を追加

123:名無しさん@お腹いっぱい。
05/11/07 21:58:01 Lx44qPKh0
$^p::

124:名無しさん@お腹いっぱい。
05/11/07 23:09:43 rV/rS1+v0
>>122-123
無限ループしないようになりました。
ありがとうございます。


125:名無しさん@お腹いっぱい。
05/11/07 23:58:04 d1b3VXPA0
>>117
では、ヒントをお願いします。

>>119
優しいお言葉どうもです。書いてみます。
起動していたらアプリをアクティブ、起動していなかったらアプリを起動。
これは出来ました。これにさらに、Ctrlを押していたらアプリを終了。
Altを押していたら、アプリを最前面にをトグルということをやりたいです。
Win + H >秀丸を起動、起動していたらアクティブ。
Win + Ctrl + H>秀丸を終了、起動していなかったら何もしない。
Win + Alt + H>秀丸を最前面に、起動していなかったら起動して、最前面に。
これ単純にすべてのホットキーを設定しちゃえばいいのですが、
いろいろなアプリに対応させたいので、関数っていうんですか?
処理をうまいことまとめられたらいいなぁとおもいまして。

>>120
ひぃ…そこをなんとか。ヒントだけでも。

126:名無しさん@お腹いっぱい。
05/11/08 01:56:56 BqfIoljv0
どのへんを関数化したいのかわからんのだが
取り零しとかあるしトリガは素直にホットキー使ったほうがよい
モデファイヤキーの押下状態で内部分岐もできるが
これだとhが入力できなくなるので ~ つけるか中でSendするとかの処理が必要

*h::
dsp=
if (GetKeyState("CTRL"))
dsp = ctrl
if (GetKeyState("SHIFT"))
dsp = %dsp% sift
if (GetKeyState("ALT"))
dsp = %dsp% alt
if (GetKeyState("LWIN") || GetKeyState("RWIN"))
dsp = %dsp% win

ToolTip,%dsp%
return


127:名無しさん@お腹いっぱい。
05/11/08 07:16:19 OmlMtwX30
SetHotkey("n" , "notepad.exe", "C:\WINNT\System32", "max")
SetHotkey("c", "calc.exe", "C:\WINNT\System32", "")
return

SetHotkey(key, appPath, appWorkDir, appWinState)
{
global
appPath%key%:=appPath
appWorkDir%key%:=appWorkDir
appWinState%key%:=appWinState
Hotkey, #%key%, launchApp
;Hotkey, ^#%key%, quitApp
;Hotkey, !#%key%, toggleWindow
Return
}

launchApp:
StringRight, key, A_ThisHotkey, 1
appPath:=appPath%key%
appWorkDir:=appWorkDir%key%
appWinState:=appWinState%key%
Run, %appPath%, %appWorkDir%, %appWinState%
Return

hotkeyが関数に対応してないからめんどくさかった・・
とりあえずこれで動的に割り当てられるはず。

ヤレヤレダゼ( ゚д゚)y─┛~~

128:名無しさん@お腹いっぱい。
05/11/08 08:00:45 AQU/ZuaD0
「=」と「:=」ってどう使い分けるんですか?

129:名無しさん@お腹いっぱい。
05/11/08 10:08:44 U5/qb0is0
>>128
一緒

130:128
05/11/08 10:19:07 AQU/ZuaD0
>>129
そうなんですか?
あとIfの時()で囲むか囲まないかってのもいまいちよくわかりません。

131:名無しさん@お腹いっぱい。
05/11/08 10:32:21 w31TiB9U0
>>128
a:=A_AhkVersion

a=%A_AhkVersion%
だとaが同じ内容になる。
d=%abc%xyz%%
ってやりたくても出来ないので、こんなときは
b:=adc%xyz%
これで似たような意味になる。こう解釈してんだけど間違ってたらごめん。

132:131
05/11/08 10:34:58 w31TiB9U0
ごめん。
d=%abc%xyz%%→b=%abc%xyz%%
間違えました。

133:名無しさん@お腹いっぱい。
05/11/08 13:01:31 x8v+5Rvv0
>>126
>>127
ずばり答えまで書いてくださって、ありがとうございます。
内容を解釈しながら、改良してみます。

134:名無しさん@お腹いっぱい。
05/11/08 13:16:32 OmlMtwX30
>>127
あー、寝ぼけてるな・・・
hotkeyが関数に対応してたとしても別段コード変わらんよな・・

>>133たしかに、ヒントじゃないなw
がんばってね

135:名無しさん@お腹いっぱい。
05/11/08 15:15:11 ZVndp7Og0
>>129
おいおい。。。
違うやろ、ifの = と == は文字列比較以外はほぼ一緒だけど
>131の解釈でだいたい合ってる

136:128
05/11/08 19:12:51 AQU/ZuaD0
「=」と「:=」の使い分けはわかりました。

「If」と「If()」は?

137:名無しさん@お腹いっぱい。
05/11/08 19:27:52 BqfIoljv0
If var = value
 → 従来仕様、1行に1判定文しかかけない

If (var1 = var2) and (var1 = "value")
 → 後から追加された形式、AND や OR で複数の判定を連結できる

AHKは 1.0.25と1.0.34あたり(うろ覚え)で大幅な仕様追加があった。
 := や if () 、Functionは従来の記述ルールでできない部分を拡張する形で導入された記述形式
従来仕様とチャンポンになってるので後から入ってきた人には分かりにくいかもしれないな

138:128
05/11/08 19:32:07 AQU/ZuaD0
>>137
なるほど。
ありがとうございました。

139:名無しさん@お腹いっぱい。
05/11/08 22:48:46 x8v+5Rvv0
>>134
続きを改良しつつ、作ってみました。
SetHotkey(key, appPath, appTitle, appWorkDir="", appOpt="")
{
global
appPath%key%:=appPath
appTitle%key%:=appTitle
appWorkDir%key%:=appWorkDir
appOpt%key%:=appOpt
Hotkey, #%key%, launchApp
Hotkey, ^#%key%, quitApp
Hotkey, !#%key%, toggleWindow
Return
}

launchApp:
StringRight, key, A_ThisHotkey, 1
appPath:=appPath%key%
appTitle:=appTitle%key%
appWorkDir:=appWorkDir%key%
appOpt:=appOpt%key%
ifWinNotExist, %appTitle%
Run, %appPath%, %appWorkDir%, %appOpt%
else
WinActivate, %appTitle%
return
Return

140:名無しさん@お腹いっぱい。
05/11/08 22:50:31 x8v+5Rvv0

quitApp:
StringRight, key, A_ThisHotkey, 1
appTitle:=appTitle%key%
ifWinNotExist, %appTitle%
Exit
else
WinClose, %appTitle%
return
Return

toggleWindow:
StringRight, key, A_ThisHotkey, 1
appPath:=appPath%key%
appTitle:=appTitle%key%
appWorkDir:=appWorkDir%key%
appOpt:=appOpt%key%
ifWinNotExist, %appTitle%
Exit
else
WinSet, Topmost, TOGGLE, %appTitle%
return
Return

んー >>126さんの言うとおり、取りこぼしがあるし、
Topmostのトグルが出来てないような。
折角作ってもらったのに、ホットキーの方が確かってことなんですかねぇ。

141:名無しさん@お腹いっぱい。
05/11/08 23:08:59 BqfIoljv0
いや、取りこぼしが発生するのは LoopやSettimerで自力監視する場合の話
Hotkeyコマンドは動的に割り当ててるだけでトリガはAHKまかせだし
問題ない筈だが

142:名無しさん@お腹いっぱい。
05/11/08 23:28:51 BqfIoljv0
Returnを2回重ねてるところと Exit使ってるのの意味がわからんのだが

toggleWindow:
 StringRight, key, A_ThisHotkey, 1
 appTitle := appTitle%key%
 ifWinExist, %appTitle%
   WinSet, Topmost, TOGGLE, %appTitle%
Return

でいいんじゃね? (If あるんで全角インデントした)

143:名無しさん@お腹いっぱい。
05/11/08 23:38:44 x8v+5Rvv0
>>141
なんか反応が鈍い時があるんですよね。

>>142
メタメタだ…。

144:名無しさん@お腹いっぱい。
05/11/09 07:51:17 HqHg5smR0
ていうかappTitleにどんな値指定してんだか知らんけど
秀丸みたいに多重起動できるアプリだとウィンドウを限定できねんじゃね?
判定は ifWinExist じゃなくて ifWinActiveにして
任意のウィンドウがアクティブなときに動作させないと誤爆するな

あと秀のようにアプリ自体がTopmostの機能をもってる場合はSendで
ショートカットキー投げるとかしてそっち使ったほうが話は簡単かもしれんよ

145:名無しさん@お腹いっぱい。
05/11/09 15:43:04 +AeGgYao0
>>143秀丸落として試してみたが、うちでは問題なくトグル出来るが・・・
それと>>141が言うようにhotkeyコマンド使って設定した場合、ホットキーラベルで設定したのと同じ動作になるはずで、
反応鈍いって事はないだろう。ホントにそうならAHK自身のバグとしか考えられん。



>>144
ifWinExistでもちゃんとできるみたい。

同タイトルのウィンドウが存在した場合、まず最前面ウィンドウが優先され、
最前面がない場合と複数最前面がある場合、アクティブの時にはそのウィンドウに、
非アクティブの場合、最後にアクティブだったウィンドウに適用されるっぽいな。
違ったらごめん。


気になったのが、非アクティブの最前面ウィンドウを非最前面にしたときに
一度そのウィンドウをクリックしてやらないと、
他のウィンドウクリックしても後ろに行ってくれないが、
ここらへんはOSの仕様のような気がする。
topmostトグルするまえにWinActivateつかってアクティブにしてやれば一応解決するが。

146:名無しさん@お腹いっぱい。
05/11/10 21:56:38 RwGjNG9H0
ウィンドウ指定の条件をandじゃなくてorにすることはできないでしょうか。
IfWinActiveとかを何度も書かなきゃだめですか

147:名無しさん@お腹いっぱい。
05/11/10 22:01:45 We9gQrEX0
>>146
URLリンク(lukewarm.s101.xrea.com)

148:名無しさん@お腹いっぱい。
05/11/10 22:25:50 RwGjNG9H0
>>147
なるほど。ウィンドウのタイトルを変数に入れてIf var inでマッチリストと
比較するわけですね。
or条件を使うときはIfWinActiveではなくこれを使ってみることにします。
ありがとうございました。

149:名無しさん@お腹いっぱい。
05/11/11 03:42:19 khVemMEi0
タイマー作るのって無理?
InputBoxで入力した時間Sleepしてアクションを起こすってことはできるけど
残り時間の表示をどうやればいいのかわからない。

150:名無しさん@お腹いっぱい。
05/11/11 04:01:08 xFnBvB+A0
>>149
time=%A_Sec%
settimer,count,1000
count:
rest:=time-A_Sec+30
tooltip,%rest%
return

esc::exitapp

こんなんでええのだろうか

151:149
05/11/11 04:05:08 khVemMEi0
>>150
なるほど!
これはは思い浮かばなかった。
迅速なレスありがとうございます。

152:149
05/11/11 04:10:33 khVemMEi0
あ、いやちょっと待って。
よく考えたら全然ダメじゃん。

数秒確認しただけでレスしちゃった。

153:名無しさん@お腹いっぱい。
05/11/11 04:24:46 xFnBvB+A0
returnの前にこれ追加しといて
if rest=0
exitapp

的外れだったらすまん。つーか何がダメなんかわからん、とりあえずカウントダウン表示してみただけだし。

154:129
05/11/11 04:31:30 khVemMEi0
たとえば、今、○時○分55秒だったとします。

55-55+30=30
55-56+30=29
55-57+30=28
55-58+30=27
55-59+30=26
55-00+30=85
55-01+30=84

こういう計算だと思うんですが・・・・。
私の方が間違っているのかな。

155:名無しさん@お腹いっぱい。
05/11/11 05:53:00 FTok57/z0
A_TickCountつかえ

156:名無しさん@お腹いっぱい。
05/11/11 07:51:44 A6pk7vW20
時間関係の計算はよくわからんルールになってるぞ
一人で脳使ってないでヘルプ熟読してきなされ

157:名無しさん@お腹いっぱい。
05/11/11 18:08:09 KIS/mZVoO
ちょっとくらいヒントをくれてもいいじゃないですか。

158:名無しさん@お腹いっぱい。
05/11/11 18:52:34 A6pk7vW20
とりあえず149はA_Sec参照して何がやりたいんだ?
単純に残り秒数カウントダウンしたいだけなら

dwncnt := 30 ;残り秒数
settimer,count,1000

count:
dwncnt--
tooltip,%dwncnt%
return

きちっと精度上げたいならSetTimerの値を小さくして>155が言うようにA_TickCount使う

159:149
05/11/11 20:12:02 khVemMEi0
○時間○分○秒というタイマーも使えるようにしたかったので
A_TickCountではなく、YYYYMMDDHH24MISSで記述した物からEnvAddでSecondsを指定して
1秒ごとに-1加算するようにしたら上手くできました。

160:名無しさん@お腹いっぱい。
05/11/13 18:02:11 A/9NzbIG0
あるSetTimerがonの時とoffの時で条件分岐って無理?

161:名無しさん@お腹いっぱい。
05/11/13 19:35:11 N8ylNJMv0
タイマーが動いてるかどうかを調べる方法はなかったはず
自分でフラグ変数用意して現在の状態覚えとくようにすればOKだけど

162:160
05/11/13 19:37:47 A/9NzbIG0
>>161
どういうことですか?

163:名無しさん@お腹いっぱい。
05/11/13 19:41:43 5IyRr/ha0
自分で変数を用意する。

164:160
05/11/13 19:53:57 A/9NzbIG0
こんな感じ?

SetTimer, ABC, 3000
ST_Flag = on

#A::
If(ST_Flag = "on")
{
SetTimer, ABC, off
ST_Flag = off
}
Else If(ST_Flag = "off")
{
SetTimer, ABC, on
ST_Flag = on
}
return


165:名無しさん@お腹いっぱい。
05/11/13 21:50:43 N8ylNJMv0
そう、それか↓みたいにしてもいいし

#A::
If (interval > 0)
{
interval = 0
}
else
{
interval = 3000
}
SetTimer,ABC,%interval%
return

166:名無しさん@お腹いっぱい。
05/11/13 21:52:52 N8ylNJMv0
0だとOFFにならんのか

#A::
If (interval > 0)
{
SetTimer,ABC,OFF
interval = 0
}
else
{
interval = 3000
SetTimer,ABC,%interval%
}
return

167:160
05/11/13 22:19:27 A/9NzbIG0
>>166
なるほど
ありがとうございます

168:名無しさん@お腹いっぱい。
05/11/14 03:42:28 tpTqEc+p0
>+Up::send,{PgUp}
>+Down::send,{PgDn}
>+Left::send,{Home}
>+Right::send,{End}
こんな風に割り当てますよね。
これをあるウィンドウだけは適用したくないのですが、
そういった場合はどう書けばいいんでしょうか?

169:名無しさん@お腹いっぱい。
05/11/14 05:14:00 h9uxRFHg0
>>168
+Up::
WinGetActiveTitle, ActTitle
If(ActTitle <> "割り当てたくないウィンドウタイトル")
send,{PgUp}
return

タイトルで上手くいかなかったらウィンドウハンドル取得して分岐

170:名無しさん@お腹いっぱい。
05/11/15 13:59:54 3R61f5fz0
>>169
どうもです。
169さんの方法だと、一キーずつ割り当てるしかないんですよね。
一気にやる方法があったら、便利だな。

171:名無しさん@お腹いっぱい。
05/11/15 15:34:14 Qg1alPao0
一気にやるってどういう意味だよ。

172:名無しさん@お腹いっぱい。
05/11/15 16:41:57 g/ADYEbp0
+Up::
+Down::
+Left::
+Right::

WinGetActiveTitle, ActTitle
If(ActTitle <> "割り当てたくないウィンドウタイトル")
{

send,{PgUp}
}
return


173:名無しさん@お腹いっぱい。
05/11/15 16:44:53 g/ADYEbp0
すまん途中で書きこんでもうた。関数にしてパラメータ指定するようにしたほうがよりスマート

+Up::
+Down::
+Left::
+Right::
WinGetActiveTitle, ActTitle
If(ActTitle <> "割り当てたくないウィンドウタイトル")
{
if A_ThisHotkey = +Up
send,{PgUp}
else if A_ThisHotkey = Down
send,{PgDn}

}
return

174:名無しさん@お腹いっぱい。
05/11/15 18:16:51 Qg1alPao0
ヒドスwwwww

175:名無しさん@お腹いっぱい。
05/11/15 18:34:11 Fr3rXntL0
+Up::
Ifwinnotactive,XXXX
Send,{Pgup}
return

これで全部書いたほうが短かくてわかりやすい気がするのだが

176:名無しさん@お腹いっぱい。
05/11/16 01:46:01 EX3GaO8n0
任意のアプリのタスクトレイアイコンを非表示にすることってできないでしょうか?
わからないなりに調べてみたらShell_NotifyIconというAPIがあるようなので
これをDllCallで呼びせさばできそうな気が。

DLLについてはまったくの初心者なので今奮闘しています。

177:名無しさん@お腹いっぱい。
05/11/16 02:17:34 ExozuSiy0
これって構造体扱えるんだっけ?
構造体扱えなかったらShell_NotifyIconも使えないだろ

178:176
05/11/16 13:41:19 EX3GaO8n0
>>177
URLリンク(lukewarm.s101.xrea.com)
ここの「構造体と配列の扱い」によればできるようなのですが、
いかんせんまだ勉強中なので難しくて

179:名無しさん@お腹いっぱい。
05/11/16 14:43:39 YfyIAE/u0
>>178
うまいこと考えたな~

180:名無しさん@お腹いっぱい。
05/11/16 16:26:24 ExozuSiy0
構造体は扱えないけど、逃げ道はあるってことか
面倒そうなので漏れはパス

181:名無しさん@お腹いっぱい。
05/11/16 17:08:15 YfyIAE/u0
>>178
べつに難しく考えること無いよ。外部にあるからDllCall使ってロードしてやらなきゃならないだけで、
考え方は普通の関数扱うのと変わらない

とりあえず、そこにある関数コピペすれば構造体に値をセットしたり読み出したりは出来る。
関数の中身は知らなくていい。
一番下のサンプルみれば使い方はわかるはず。

182:176
05/11/16 23:23:04 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:名無しさん@お腹いっぱい。
05/11/18 03:16:50 /PztpgYi0
テキスト入力欄かどうかを取得するにはどうすればいいでしょうか?
If(A_CaretX <> "")だと入力欄でないところでも反応してしまいます

184:名無しさん@お腹いっぱい。
05/11/18 22:11:48 KVZUSxn10
たしかA_CaretXとA_CaretYはエディット以外の場合は
コントロールの左上の座標になるから
そんな感じで弾けばいいと思うよ

185:183
05/11/18 22:16:55 /PztpgYi0
>>184
例えばSleipnirとかJaneとかでテキストを選択してコピーしたら
その位置にキャレットがあると見なしてしまいまして

186:名無しさん@お腹いっぱい。
05/11/19 01:56:22 adRLoPdI0
EDITコントロールか否かの判定はControlGetでLine数を取得してチェックしてる。
非EDIT コントロールの場合 0が返るので

ControlGet,line_cont,LineCount,,%ctl%,ahk_id %hwnd%
if line_cont > 0
{
 ;テキスト入力欄の処理
}

あとSendMessageで EM_xxx あたりの情報を調べるとか。
URLリンク(www.winapi-database.com)

編集不可だがコントロールはEDIT使ってる場合(AU3_Spy.exeとか)もあるので
そういう場合はどうにかしてLoked状態を確認しないといかんかも知れん

187:183
05/11/19 02:20:34 EUr5m4mr0
>>186
ありがとうございます

ですがライン数取得では上手くいかないものが多くて諦めていましたが、
殆どのクラス名に「Edit」が入っていたのでクラス名取得して分岐するようにしました。

188:名無しさん@お腹いっぱい。
05/11/19 10:46:19 q++McXD/0
>>176
> 任意のアプリのタスクトレイアイコンを非表示にすることってできないでしょうか?

これぜひ俺も知りたい。
自分が使ってる常駐ソフトはほとんどアイコン非表示にできるが、1つ2つできないのがある。
XP付属の「アクティブでないインジケータを隠す」はあまり好きではないし。

189:名無しさん@お腹いっぱい。
05/11/19 12:11:21 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:名無しさん@お腹いっぱい。
05/11/19 12:23:12 iPF8NBAy0
一応聞くけどautohotkeyでやりたいって趣旨なんだよね
フリーソフトを使ったら出来るけど

191:名無しさん@お腹いっぱい。
05/11/19 12:24:18 q++McXD/0
>>190
ちなみにそのソフトとは?

192:名無しさん@お腹いっぱい。
05/11/19 13:04:10 z99JDpKz0
使ったことないけどニュースサイトとかで何種類か見た
とりあえず今ぐぐったらコレがあった
常駐しないのがあるかは知らん
URLリンク(www.vector.co.jp)

193:名無しさん@お腹いっぱい。
05/11/19 13:51:07 adRLoPdI0
タスクトレイ アイコン 整理 でググると TrayManager とか Tray Wizard とかTrayExpand とか出てくる。
TrayExpandはソースも公開してるみたいだし、AHKでやりたいなら参考にしてみては?

194:名無しさん@お腹いっぱい。
05/11/19 14:04:50 0di78jxb0
>>182
とりあえず、戻り値ぐらいみれ。

>>189
トレイアイコンの削除するだけならhIconはいらないが、uIDが必要。


まぁ、既存のソフト使ってしまった方がいいようなきもする・・・AHKでやるメリットあまりないような・・

195:名無しさん@お腹いっぱい。
05/11/19 14:32:32 q++McXD/0
TrayExpandが自分には良さそう
これ使うことにします

196:名無しさん@お腹いっぱい。
05/11/19 14:33:46 q++McXD/0
お礼言う前に途中で送信してしまった・・・・

>>192-193
ありがとうございます

197:189
05/11/20 05:00:08 zlspGYDE0
>>194
フォローサンクス ええかげんなレスしてスマンカッタ

198:名無しさん@お腹いっぱい。
05/11/20 06:10:35 i5sKQ9wq0
タスクトレイの項目をメニューで表示させることはできるでしょうか?
フリーソフトでもこういった感じのソフトは自分で探した限り見つからなかったので
知っている方がいたら教えていただきたいのです

199:名無しさん@お腹いっぱい。
05/11/20 10:52:17 u5r0IAMMO
>>198
>>193

200:名無しさん@お腹いっぱい。
05/11/20 17:09:08 9waBFH8F0
SetTimerってAutoHotkey.iniに書いても動かないの?

201:名無しさん@お腹いっぱい。
05/11/20 19:14:54 zlspGYDE0
動くよ

202:名無しさん@お腹いっぱい。
05/11/20 20:09:01 9waBFH8F0
>>201
動くのか・・・

特定のウインドウが表示されたらOKボタンをクリックしたいんだけど
.ahkに書くと動くんだけど、AutoHotkey.iniに書いても動かない
これじゃだめなの?

SetTimer,b,250
return
b:
IfWinActive,Aterm WARPSTAR
{
ControlClick,OK,Aterm WARPSTAR
return
}
return

203:名無しさん@お腹いっぱい。
05/11/20 21:37:35 MfpEbr860
常駐するSetTimerはAutoHotkey.iniの頭に書いて、
サブルーチンをAutoHotkey.iniの終わりに書いてみては
俺はそれで

IfWinActive,リンク先を探す,指定したリンク先は、デスクト
IfWinExist,ahk_class MSBLPopupMsgWClass

などのウインドウを操作できてる

204:名無しさん@お腹いっぱい。
05/11/20 21:41:56 Gk4qhKIS0
多分常駐させてないだけだろ

205:名無しさん@お腹いっぱい。
05/11/20 21:51:08 0DdRRu/u0
SetTimerの上のほうに、Returnかホットキーの設定が書いてある気がする。


206:名無しさん@お腹いっぱい。
05/11/20 22:49:48 zlspGYDE0
ホットキー指定のないスクリプトは #Persistent入れないと常駐しないから

207:名無しさん@お腹いっぱい。
05/11/20 23:56:30 JR1lWgkn0
>>203-206
ありがとう

>常駐するSetTimerはAutoHotkey.iniの頭に書いて、
>SetTimerの上のほうに、Returnかホットキーの設定が書いてある気がする。
これだった。無事に動きました。ありがとう

208:名無しさん@お腹いっぱい。
05/11/21 00:06:01 FWsdNj/u0
iTunesを操作させるにはどうしたらいいですかね?


209:名無しさん@お腹いっぱい。
05/11/21 00:18:49 5v2PJ0mq0
努力したらいいと思うよ

210:名無しさん@お腹いっぱい。
05/11/21 00:39:50 ZVwQTLlG0
>>208
曖昧すぎ。

211:名無しさん@お腹いっぱい。
05/11/21 02:04:10 Nz+dKwd30
>>210
質問がな

212:名無しさん@お腹いっぱい。
05/11/21 21:26:10 OOnUpq930
AutoHotkeyでiTunesを操作させるにはどうしたらいいですかね?

213:名無しさん@お腹いっぱい。
05/11/21 22:37:36 jfEQAnS10
「:」に対してキーを割り当てたいのですが、うまくいきませんでした。
::: ←ここでエラー
ごにょごにょ

何か他に書き方があるのでしょうか?

214:名無しさん@お腹いっぱい。
05/11/21 23:02:40 Y2LksryB0
URLリンク(lukewarm.s101.xrea.com) の下のほう
仮想キーコードやスキャンコードで何とか対応しる


215:名無しさん@お腹いっぱい。
05/11/23 11:44:06 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:名無しさん@お腹いっぱい。
05/11/23 16:33:51 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
05/11/23 21:55:25 w4Ag56cD0
>>216
ご丁寧にありがとうございます!
しかし、<>を=に変更してelse消しても現象は変わらず。
Send, !wtの後にreturn付けても同じでした。
SendMessage使ったやつをコピペでもダメでした。。。orz

とりあえず、子ウィンドウを広げられるだけで満足です。
もしかしてErrorLevelが0になってないのでしょうか?




218:名無しさん@お腹いっぱい。
05/11/23 22:40:29 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
05/11/23 23:56:41 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:名無しさん@お腹いっぱい。
05/11/24 01:13:43 YIxfmvQf0
Verupしたね

221:名無しさん@お腹いっぱい。
05/11/24 12:40:50 0jaOpLGO0
>>219
MsgBoxに制御が奪われたからアクティブになれなかったってオチじゃないような?
そこまでつきとめたら Sleepでウェイトいれてやればよろし

222:215
05/11/24 22:05:57 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:名無しさん@お腹いっぱい。
05/11/26 13:41:58 cSvLT2hD0
LastFoundWindowってWinWaitで機能しないんですか?

224:名無しさん@お腹いっぱい。
05/11/26 20:49:42 ekIkW6EI0
%1%や%2%はコマンドライン引数が分解されて格納されていますが、
コマンドライン引数全体を表す変数はないんでしょうか?

225:名無しさん@お腹いっぱい。
05/11/26 21:01:35 TeG9pCZU0
>>224
引数を「"」で囲めばだいたい解決すると思いますが

Loop, %0%
{
Part := %A_Index%
Unite = %Unite%%Part%%A_Space%
}

MsgBox, "%Unite%"

どうしようもない場面では
「0」に引数の数が入るのでこんなのでどうにかしてます。

226:名無しさん@お腹いっぱい。
05/11/26 21:59:47 m0vUMe840
>FileAppend [, Text, Filename]
>ファイル名の代わりに「*」を指定すると、標準出力にテキストを書き出せる。
URLリンク(lukewarm.s101.xrea.com)

--- test.ahk --------
FileAppend,Hello,*
---------------------
コンパイルしてプロンプトで test と打っても文字は何も表示されない。
test > a.txt とリダイレクトさせるとファイルには正常に出力される、何でだろ?

227:名無しさん@お腹いっぱい。
05/11/26 22:33:10 ekIkW6EI0
A_Indexを1度別の変数に入れちゃえばいいのか。
"でくくられていたかどうかが正確には判断出来ないですけど、
実用上は問題ないですね。
ありがとうございました。

228:名無しさん@お腹いっぱい。
05/11/27 12:34:40 R5M1hxQO0
Send,{LWin Down}やSend,{LWindown}
で押し下げ状態にしたWinキーを元に戻すにはどうすればいいでしょうか?
Send,{LWin Up}やSend,{LWin}とやっても戻りませんでした。

229:名無しさん@お腹いっぱい。
05/11/27 15:26:46 GjCd3Btu0
任意のアプリをタスクバーにボタンを表示しないようにしたいんだけど
Gui,+ToolWindowに相当するものってない?
ウィンドウスタイルを見てもそれらしいのがないっぽい

230:名無しさん@お腹いっぱい。
05/11/27 16:30:10 m61GJs8S0
試してないけど
0x00000080 WS_EX_TOOLWINDOW
あたりは?

231:229
05/11/27 17:10:05 GjCd3Btu0
>>230
見落としてた
しかし、小さいタイトルバーになってAltTabメニューにも表示されなくなるけど
何故かタスクバーには表示されたまま
色んなウィンドウで試してみたけど変わらない

WinSet,ExStyle,^0x00000080,A

232:名無しさん@お腹いっぱい。
05/11/27 20:16:28 RGnUnyxH0
ひらがなカタカナキ-にaltを割り当てたいのですが

*vkF2::Send,{alt Down}
*vkF2 up::Send,{alt Up}

とするとaltが押しっぱなしになってしまいます
仮想キー押し上げにコマンドを割り当てることは出来ないのでしょうか?

233:名無しさん@お腹いっぱい。
05/11/28 08:04:43 QtDqyH5O0
TListViewの情報を取得するにはどうしたらいいでしょうか?
ContrloGetのListはSysListVew32のようですし

234:名無しさん@お腹いっぱい。
05/11/28 20:15:46 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:名無しさん@お腹いっぱい。
05/11/28 20:24:26 bOHdUc5Q0
トンクス
いただいた。

236:名無しさん@お腹いっぱい。
05/12/04 00:40:06 Boevp9qL0
解説サイトの説明が糞だな。
窓使いの憂鬱も分かりづらくて導入しにくいところがあったが
こっちはさらダメダメ。アホか。

流行らせる気全然ね~だろ。ぼけだろ。

237:名無しさん@お腹いっぱい。
05/12/04 00:58:39 vf5AX1eU0
236がアホでぼけで理解力がダメダメなのはわかった

238:名無しさん@お腹いっぱい。
05/12/04 01:06:12 ziZg2yDd0
単に翻訳してるだけだし
その労苦だけでもありがたいと思うけどね

239:233
05/12/04 01:53:09 c5I9hufm0
WinAPIやWindowMessageもできるだけ調べましたが、未だに解決できません

TListViewの情報取得は無理でしょうか?

240:名無しさん@お腹いっぱい。
05/12/04 11:08:29 MlVaVrV10
>239
TListView って SysListView32 のサブクラスっぽいからそのまま使えるんじゃない?

241:233
05/12/04 11:20:41 c5I9hufm0
>>240
もちろん試しました
SysListView32のところでは取得できたので記述が間違っているってことはないと思います

WindowMessageのLVM_xxxxで色々操作できるみたいなんですが、テキストは取得できないみたいで・・・

242:名無しさん@お腹いっぱい。
05/12/04 11:21:34 t+Kdt+4/0
まだ悩んでいたのかよ
ListVewのこたしらんがTEDITもEditコントロールとして認知、制御できるし
ControlGetで取れる名称がSysListVew32だっつうなら
その名を指定してやれば情報は取れるだろ。

243:名無しさん@お腹いっぱい。
05/12/04 11:22:58 t+Kdt+4/0
できないのか、
ならGontrolGetTextでは?

244:233
05/12/04 11:27:01 c5I9hufm0
>>242
Contolの引数のことろにTListViewではなくSysListVew32を指定するってことですか?
もちろんやってみましたが無理のようです

245:233
05/12/04 11:29:30 c5I9hufm0
>>243
それも試しました
いくつかのアプリで試しているので取得したいアプリが特殊という可能性は低いと思います

246:233
05/12/04 19:16:26 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%

URLリンク(yokohama.cool.ne.jp)
ここを参考にしましたが
これでいけると思ったけど駄目でした
InsertInteger()関数は書いてあります

エラー内容
モジュール 'comctl32.dll' のアドレス 5ABBD830 でアドレス 00D15714 に対する読み込み違反がおきました。

構造体は素人なので見よう見まねで書いてみましたが
どこかおかしいでしょうか?

247:名無しさん@お腹いっぱい。
05/12/04 20:11:58 t+Kdt+4/0
AHKは万能なソフトってわけでもないのでそれだけ努力してダメなら無理なのかもしらんね
とりあえず半端なレスして悪かった。

248:233
05/12/04 20:29:14 c5I9hufm0
>>247
>とりあえず半端なレスして悪かった

いえいえ

>AHKは万能なソフトってわけでもないので

もしどうしても駄目なら他のソフトやスクリプトを通してでも取得したいのですが・・・
どなかたお知恵をお貸しください


249:名無しさん@お腹いっぱい。
05/12/04 20:39:34 LHEUZAAE0
単に別プロセスのメモリー読もうとしてるからエラー出てるのでは?
TListViewはListView用のLVM_~が使えた気がする

250:233
05/12/04 20:47:32 c5I9hufm0
>>249
>TListViewはListView用のLVM_~が使えた気がする

そうです、使えるようです。
実際LVM_GETITEMCOUNTでアイテム数は取得できますし。
>>246のリンク先にもありますが、SendMessageの0x1005はLVM_GETITEMのことです

>単に別プロセスのメモリー読もうとしてるからエラー出てるのでは?

これについては自分にはよくわからないです

251:名無しさん@お腹いっぱい。
05/12/04 21:06:52 OzfEcy140
>>250
VirtualAllocEx MapViewOfFile
を駆使すれば取得できるが面倒

252:名無しさん@お腹いっぱい。
05/12/04 21:09:06 LHEUZAAE0
LVM_GETITEMCOUNTはSendMessageの戻り値がそのままアイテム数だから問題ないけど
LVM_GETITEMはLVITEMのポインタをLPARAMで渡してそこに情報を書き込んでもらう奴だから
LVITEM*が指すメモリーを共有メモリにするか、SendMessageする側でフックをかけてプロセスに割り込まないといけない
共有メモリー使う方法は URLリンク(techtips.belution.com) あたりを参考にすれば出来るかな

253:233
05/12/04 21:10:52 c5I9hufm0
>>251-252
ありがとうございます
とりあえず提示されたものを頑張って調べてみます

254:233
05/12/05 12:27:58 pnvrA0j10
色々やってみたんですが、行き詰っています

URLリンク(techtips.belution.com)
これってメモリアドレスから変数を参照できないと無理なのでは?
まだ調べ始めて1日なので何か勘違いしてるだけのような気もしますが

255:名無しさん@お腹いっぱい。
05/12/05 12:48:04 yS+6IGXX0
gui,add,edit,vtitle R1 W300
gui,show
return

こんな感じでエディットボックスを作ってるんですが、日本語入力すると確定するまで表示されません。
普通に変換中に表示されるようには出来ないのでしょうか?何かオプションがあるのかな?

256:名無しさん@お腹いっぱい。
05/12/05 12:55:38 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, URLリンク(www.amazon.co.jp)
ExitApp
GuiEscape:
GuiClose:
ExitApp


257:名無しさん@お腹いっぱい。
05/12/05 13:30:59 fH9XPvqW0
>>255
うちでは普通にでるけどなぁ・・・
win2ksp4 Atok16 MSIME2k どっちもOK

258:名無しさん@お腹いっぱい。
05/12/05 13:33:22 fH9XPvqW0
いちおう追記、AHK v1.0.40.05

259:255
05/12/05 15:14:33 yS+6IGXX0
>>256
>>257
ありがとうございます。早速試しましたが、やはりうまく表示されません。
例えば  わたしは と打つと w しか表示されないです。
Returnを押すと、わたしは と表示されます
Version 1.0.40.10をいれてみましたが、症状はかわらず。
どーもうちのIMEの不具合か、設定の問題かもしれません。
ちなみにAHK以外の日本語入力は不具合ありません。

260:名無しさん@お腹いっぱい。
05/12/05 15:38:36 N0kdWIqG0
>>259
OSの種類とIMEのバージョンや設定(ナチュラルインプットとか詳細サービスとか)書いたら?
解決したかったら人任せじゃだめだよ

261:255
05/12/05 16:21:24 ONVNYKfr0
情報が足らず申し訳ありませんでした。

Windows Xp pro sp1
AHK Version 1.0.40.10
Microsoft IME Standard 2002 ver. 8.1
詳細なテキスト サービスをオフにするにチェック
IME Watcherを使用
英字を常に半角で変換以外は設定をいじってません。

英語圏のソフトなのでこういう仕様なのかと思っていました。
我が家のPCの問題のようですので自力でがんばります。
皆様のお手を煩わせてほんとに申し訳なかったです。すみませんでした。

262:233
05/12/06 00:06:41 zKABzlSJ0
何度もすみません
やっぱり自分には無理のようです・・・

とういうか、>>252のURLの内容とほぼ同じものが
URLリンク(www.yoshibaworks.com)
に載っているんですが、同じサイトの
URLリンク(www.yoshibaworks.com)
をダウンロードして使ってみたところTListViewは取得できませんでした
下のURLのアプリは上のソースコードとは仕組みが違うのかもしれませんが


自分にとってTListViewが取得できることによってAHKはかなり便利になると思います
ずうずうしいようですが、TListViewを取得できるものが誰かの手によって書かれるのを期待します
もちろん自分でもこれからもチャレンジしていきたいと思います


263:名無しさん@お腹いっぱい。
05/12/06 00:11:30 BfjYx7dY0
TlistViewってそもそも何?


264:260
05/12/06 00:20:18 061B1eK40
>>261
俺も>>256を試したら同じ現象が起きた
XP HOME SP2
IME2002でIME Watcherは使ってない

今さらで悪いけど、むかし同じ現象が出て
InputBoxを使って回避した気がする。忘れてた…
その時は、会社のマシンだったから割と起こりやすい現象みたい

265:名無しさん@お腹いっぱい。
05/12/06 00:28:05 +pinJF560
>>262
ぱっとソースを見た感じクラスがListView32じゃないと動作しないように書いてある
これ→if ( strcmp(szClassName, WC_LISTVIEW) == 0 ) {
確かTListViewはクラス名が違ったと思う


266:233
05/12/06 00:30:50 zKABzlSJ0
>>265
ということは>>262のソースを再現すればAHKでも実現できるわけですね
少し希望が湧いてきました

267:255
05/12/06 20:02:45 BjDsaEX90
exeファイルにして、友達のPCで試してもらいました。
買ったままいじってないWinxp home sp2
やはり同じように入力がおかしかったようです。
これは、エディットボックス自体の不具合かな。あきらめてほかの方法をとることにします。

268:名無しさん@お腹いっぱい。
05/12/06 22:19:27 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:名無しさん@お腹いっぱい。
05/12/06 22:21:14 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:名無しさん@お腹いっぱい。
05/12/06 22:21:36 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:名無しさん@お腹いっぱい。
05/12/06 22:22:07 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:名無しさん@お腹いっぱい。
05/12/06 22:22:41 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:名無しさん@お腹いっぱい。
05/12/06 22:23:18 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
05/12/06 22:52:52 oOmblgWA0
すごい!感動しました!
感謝してもしきれないです
本当にありがとうございます

275:名無しさん@お腹いっぱい。
05/12/07 00:24:52 +IISIZwk0
引数が足りなかった
DllCall("VirtualFreeEx", UInt,hProcess, UInt,lpProcessBuf, UInt,0, UInt,MEM_RELEASE)

276:名無しさん@お腹いっぱい。
05/12/07 00:33:06 WQOB4lVi0
>>233
具体的にどういう使い方をするのかちょっと興味あるんだけど、教えてくんない?

277:233
05/12/07 16:47:00 Fl/Gr8/X0
>>275
普通に動いてたので気づきませんでした
どちらにしても感謝です

>>276
ここまでしてもらってなんですが、ご勘弁を


278:名無しさん@お腹いっぱい。
05/12/07 16:57:01 x7hOLdd40
>>277
エロDVDのタイトルの整理か何かですか?

279:名無しさん@お腹いっぱい。
05/12/07 23:01:34 SL+OhssX0
匿名掲示板で詳しく言えないって事は犯罪絡みか

280:名無しさん@お腹いっぱい。
05/12/07 23:29:33 EMbBN43/0
それか業務がらみとか

281:名無しさん@お腹いっぱい。
05/12/08 01:24:26 kFp6FhOt0
変数一覧のところの一番上に

0[1 of 1]: 0

ってのが必ずあるんだけどこれって何?

282:名無しさん@お腹いっぱい。
05/12/08 19:29:26 tAZLc0Al0
コマンドライン引数の奴

283:281
05/12/08 19:30:54 kFp6FhOt0
>>282
あ、なるほど

284:名無しさん@お腹いっぱい。
05/12/10 23:31:57 8fYJs8aX0
質問なのですが、このソフトでIME起動時に全角文字を入力として挿入することは
比較的楽に出来ますでしょうか?

なにがしたいかと言いますと、自分はIMEは「かな入力」の人間でして、
チャット等の、通常会話に近い文を書いてる時は、!や?が、かな文字と
同じくらいの平易さで出現するのですが、かな入力ですと、入力するのが
ちょっと面倒なのです(かな/英数を切り替えてからShift+1で再びかな/英数など)
そこで、IME(ATOK2005)が起動している時は、かな入力状態でも
[Shift]+[1]で“!”を、[Shift]+[/]で“?”を入力出来るようにしたいのですが、
そう言ったことは可能でしょうか?

自分の程度としましては、DOS3からなのでbatは書けますがvbsは読んで修正するのが精一杯、
サイトの引っ越しでUWSCでIEを半自動実行で転記させる50行×8本くらいのサブルーチンを
書いた程度で、最近は正規表現がなんとか使えてきて楽しいというようなレベルです。

外国産みたいなので、IMEの起動を検知できるのかと、起動したIMEに文字を直接送ることが
出来るのかがネックかなと思っているのですが…

よろしくお願いします。

285:名無しさん@お腹いっぱい。
05/12/11 00:22:31 XJ0qF38r0
> そう言ったことは可能でしょうか?
可能

それと、おまえのレベルなんて知ったこっちゃない
このソフトが使えないレベルなら他を当たれ
使えるなら勝手にしろ
といっても、流行らせるページ見ればこの程度バカでも出来るがな

ソフトに限ったことじゃないが、便利なものを使いたければ
それに応じた実力(知識や技術など)を身につけろってこった

286:名無しさん@お腹いっぱい。
05/12/11 00:39:49 apES3Z+g0
まぁ要望を長々と書いたところで、マジメに読んでもらえる訳が無い。

がんばればアンタでもできるんじゃねーの?としか言いようが無い。

287:名無しさん@お腹いっぱい。
05/12/11 00:59:00 78+mCWVm0
つーか俺なら変換キー連打で解決するね

288:名無しさん@お腹いっぱい。
05/12/11 01:23:09 LXjhHQ7b0
辞書登録で1→! 0→?(テンキーを使っているなら)とか
ぬ→! め→? とでも登録した方が分かりやすい上に
てっとり早いんじゃないか?

289:名無しさん@お腹いっぱい。
05/12/11 01:27:32 78+mCWVm0
>>288
>>287

290:284
05/12/11 13:39:45 OA29yvnX0
お返事ありがとうございます。
ソフトによっては、ユーザー側に有る程度の素養が要求されると思いますので、
現実的に見て、自分のレベルで作業するのに問題が無いか、
取り組む前に確認させて貰いたかったのですが、スレの空気を乱す発言になった
ようで、すみませんでした。

お返事を見る限り、無理な要求という感触では無いようですので、
参考にさせていただいて、検討いたします。

291:名無しさん@お腹いっぱい。
05/12/11 13:46:13 n6eRmNGz0
とりあえずお前が人のアドバイスを試す気がないカスなのは分かった

292:名無しさん@お腹いっぱい。
05/12/11 13:48:53 2lWo/Yh80
プッ

293:名無しさん@お腹いっぱい。
05/12/11 20:13:50 /OTbplQs0
しばらく過疎ってる間にえらく空気悪くなってるな
>>290
IME制御に関しては過去何度か話題に上がってるので調べてみれ
なまず氏が自分とこのブログで最近とりあげてたし

294:名無しさん@お腹いっぱい。
05/12/13 00:21:18 sRReWFce0
URLリンク(www.tamanegi.org)
ここのmigemo-isearchってAHKでできます?
dllのことはよくわからないんですが、これに入ってるのをDllCallすれば可能?

295:名無しさん@お腹いっぱい。
05/12/13 03:10:20 UEU0KJ8o0
もうある

296:名無しさん@お腹いっぱい。
05/12/13 13:57:25 sRReWFce0
>>295
本当ですか?
一応「migemo ahk」「migemo autohotkey」などで検索しても見つかりませんでした

297:名無しさん@お腹いっぱい。
05/12/13 14:41:54 DtKvDaaE0
流行らせるページにある奴じゃないのかな。

298:名無しさん@お腹いっぱい。
05/12/13 14:47:52 sRReWFce0
>>297
ありました
これ昔からありましたっけ?

299:294
05/12/13 17:20:20 sRReWFce0
これをブラウザで使うやり方がさっぱりわからない・・・・

そもそもサンプルが上手く動かないです
例えば「a」と打つと「シリアス」だけがマッチ(他にもaはたくさんあるのに)
どんな文字でも2文字目を打つと何も表示されず
意味がよくわからないです

300:294
05/12/13 17:39:57 sRReWFce0
自分でlist=を作ってやってみましたが
アルファベットだけがマッチ
漢字・ひらがな・カタカナ全滅

私が何かをすごく勘違いしてる気がしますが・・・・

301:294
05/12/13 17:52:44 sRReWFce0
ただ単に辞書パスが違っているというアホな間違いでした
すみません

でもブラウザで使うやり方は未だわからず

302:名無しさん@お腹いっぱい。
05/12/13 18:03:09 DtKvDaaE0
いつから日記スレになったんだ

303:294
05/12/13 18:05:03 sRReWFce0
>>302
本当にスレ汚しすみません

304:名無しさん@お腹いっぱい。
05/12/13 18:05:04 JxXQO2OP0
さっさと消えろよ、うざいなぁ。

305:名無しさん@お腹いっぱい。
05/12/13 18:23:00 McRsgk3+0
なんか最近スレの空気悪いなぁ。

っていうかmigemoの存在を初めて知った。
ちょっと感動。

流行らせるページのスクリプト見てみたけど
>>294と同じ機能をAHKからブラウザで使うのは無理じゃね?

306:名無しさん@お腹いっぱい。
05/12/13 20:54:54 wLsVmh5S0
俺も知識不足でサンプルで何をやっているのか全然わからないので
流用できなかった。
任意のファイラ上でmigemoでファイルを選択したかったんだけどね。

マッチングを行わせたい文字列をリストにしてスクリプトに
読ませるんだというのはなんとなくわかるけど
マッチした内容を任意のソフトに対してどうやって反映させたら
いいのかさっぱり。
誰か使っている人いたら具体的なスクリプトを教えてくれないかな。

307:名無しさん@お腹いっぱい。
05/12/13 22:44:18 tDGCBqUo0
>>304
お前が消えろよ

308:名無しさん@お腹いっぱい。
05/12/13 22:54:36 hY2eSXDW0
ファイラーはMigemizeExplorer
ブラウザは窓使いの憂鬱
2chブラウザはJaneView
エディタはサクラエディタ

ってな具合にmigemoを使ってる。
ただ、繭で使ってるのはmigemoのみだから繭をなくしたいんだよね。
別に不具合はないけど。
ブラウザ乗り換えも何度も検討した結果、今使ってるものになってるし。

309:名無しさん@お腹いっぱい。
05/12/14 12:55:41 RrhosKDn0
今現在、Win用・繭不要でmigemo対応のブラウザは

fub.net
ぶら。  ※拡張機能で。

Bagel
Firefox  ※XUL/Migemo
Sylera2

オレはSylera2だけど他にもあるような…

310:名無しさん@お腹いっぱい。
05/12/14 14:43:44 NCzEYHK/0
Janeのトレース画面を一発で出し入れできるスクリプトって無理かな


311:名無しさん@お腹いっぱい。
05/12/15 09:04:11 Oeo3ug/h0
質問ですけど、スクリプトでMSNメッセンジャーを取り込み中に変えたりオンラインに戻したりするにはどうしたらいいですか?

312:名無しさん@お腹いっぱい。
05/12/15 09:16:32 vmIlAlU20
>>311
AutoHotkey以外での実現方法を知っているなら、そのとおりに実装すればいいのでは。
手始めに "MSN Messenger" Messenger.UIAutomation.1 で検索するとかして。(英語も読もう)

313:311
05/12/15 09:21:36 Oeo3ug/h0
>>312
レスどうもです!
> AutoHotkey以外での実現方法
はタスクトレイのアイコンを右クリックしてやる方法しか知らないです・・・
ちょっとググってみます!
英語は・・・読める限り・・・

314:名無しさん@お腹いっぱい。
05/12/15 12:34:59 quYc50MH0
>>310
出し入れというかマウス系のコマンド使って瞬間的に
ドラッグして消しているように見せるだけの奴なら作ってみた。
結構良い感じでうまく動いたよ。

そういう意味では出来ると答えておきます。

他に方法があるかもしれないけど漏れにはわかりません。

315:名無しさん@お腹いっぱい。
05/12/15 15:12:30 Ro4rZY7t0
>>314
やっぱそれしかないかー
と思ったが、Hideenテキストを取得するスクリプト書いて
MSGBOX出せば、トレース画面出さなくても
デバッグログがみれるかもと思った。

316:名無しさん@お腹いっぱい。
05/12/15 15:21:14 quYc50MH0
あ、トレース画面を別ウィンドウで浮かせたいってことが言いたかったのか。
勘違いしてスマソ。
うーん。Janeのソースいじってしまった方が速いんでないかい?

まぁ、でもText拾ってGuiで別Window作成して表示させれば、できるだろな。

317:名無しさん@お腹いっぱい。
05/12/15 15:28:31 Ro4rZY7t0
>>316
あ、いや、その解釈であってるよ。
最初は外部コマンドからトレース画面をある程度の幅で
ウィンドウ内に出せればいいなと思ってたんだけど。
でも、AU3_Spyで見たらトレース画面のテキストが取得できてたんで
別に本体で見なくてもいいかなと思って。

318:名無しさん@お腹いっぱい。
05/12/15 18:13:10 RHa3zC2W0
Jane作者に要望だせば?

319:名無しさん@お腹いっぱい。
05/12/15 22:56:34 3cBKpG8E0
>>294にあるdll使って

DllCall("dllのパス\migemo-isearch.dll\ie_isearch_fmRi",Int,0)
としてみたが何も起こらず。
返り値はなし、ErrorLevelは-4(DLLは見つかったが、Functionで指定した関数が無かった)

どこが間違っているでしょうか?
そもそも無理?


320:名無しさん@お腹いっぱい。
05/12/19 16:48:21 T6Ojlipz0
CPU使用率を取得するにはどうすればいいでしょうか?

URLリンク(www.vector.co.jp)
これを使って呼び出そうとしましたが、上手くいきません

321:名無しさん@お腹いっぱい。
05/12/19 17:50:39 m4JgEdVJ0
>>320
残念ながら力になれないが (DllCallを今初めて使った)、
どのような記述をして、どのように動かなかったのかの説明は書いておいた方が良いと思うよ。
ちなみに自分が試したのはこんな感じ。

;コード
#O::
Ret := DllCall("getcpust\GetCpuStatus", IntP, rate)
MsgBox, 返値:%Ret%`n使用率:%rate%`nエラーコード:%ErrorLevel%
return

;メッセージボックス
返値:1
使用率:0
エラーコード:A4

引数無しにするとエラーは出なくなるけど、それだと意味ないしなぁ。
以下DLLのReadmeから引用。他の人回答ぷりーず。
>int GetCpuStatus( int *rate )
>をEXPORTします。
>第1引数に引き渡したint型のメモリにCPU使用率が格納されます。
>返値は失敗するとFALSE(0)を、成功した場合はそれ以外を返します。





322:320
05/12/19 17:53:49 T6Ojlipz0
>>321
自分もほぼ同じ記述です

ただ、引数の最後にCdeclを追加するとErrorLevelは0になります(返値1・使用率0は変わらず)

323:名無しさん@お腹いっぱい。
05/12/20 14:08:58 VYjzBC0S0
>>322
調べてみたらその関数の呼び出し規約はcdeclだった(関数を公開するなら明示すべきだが)。
mp3でも再生しながら再計測してみては?

324:320
05/12/20 14:14:45 yg2tqewb0
>>323
ん?つまり記述はあっているけど私のCPU使用率は0だから0を返してるってことですか?
負荷を上げても0のままです

325:名無しさん@お腹いっぱい。
05/12/20 15:28:39 6fVVhLVx0
もしかして、とおもってやってみたらドンピシャ。

#Persistent
OnExit, ExitSub
hModule := DllCall("LoadLibrary", str, "getcpust.dll")
if hModule=0
{
ExitApp
}
SetTimer, GetCpust, 500
return

GetCpust:
Ret:=DllCall("getcpust\GetCpuStatus", "Int*", cpust, "cdeclInt")
ToolTip, 返値 %Ret%`ncpust %cpust%`nErrorLevel %ErrorLevel%
return

ExitSub:
DllCall("FreeLibrary", UInt, hModule)
ExitApp

326:320
05/12/20 15:35:13 yg2tqewb0
>>325
なるほど、そうやるんですね
勉強になりました

ありがとうございます

327:名無しさん@お腹いっぱい。
05/12/20 15:41:31 6fVVhLVx0
これみてピンとキタ━(゚∀゚)━ヨ。
URLリンク(lukewarm.s101.xrea.com)

>DLL確保/開放の手動化
>DLLの処理によっては、処理の途中でDLLが開放してしまうと正常に動作しない場合がある。
>その場合、上記の例のように手動でLoadLibrary/FreeLibraryを行うことで、本来の動作になることがある。


できるだけ、この方法使った方が正常に動作するのかもしれませんね。

328:320
05/12/20 15:44:01 yg2tqewb0
>>327
そこには目を通していたはずなのに実行してみなかった自分が恥ずかしいです

329:名無しさん@お腹いっぱい。
05/12/20 15:45:24 6fVVhLVx0
>>327
URLリンク(lukewarm.s101.xrea.com)
だった・・

>>328案外見落としてしまうですね^^

330:名無しさん@お腹いっぱい。
05/12/20 16:14:40 e8aKpTDx0
平日の真昼間にいきなり活性化してんのな
学生ってもう冬休みに入ってるのかなw

331:名無しさん@お腹いっぱい。
05/12/20 16:19:32 e8aKpTDx0
↑末尾のwは Alt+w(書き込み)の押し間違いだorz

332:名無しさん@お腹いっぱい。
05/12/20 16:59:12 f5Fr+yX00
Ctrl+Alt+Delを無効にしようと思うんだけど

^!Del::return

としても変化なし
何か特別なことをしなければならない?

333:332
05/12/20 17:22:32 f5Fr+yX00
もっとよく調べてから質問すればよかった・・・

URLリンク(nienie.com)
コンパイルする環境にないのでコンパイル済を探しているところ
・・・ってこれはスレ違いか

334:名無しさん@お腹いっぱい。
05/12/21 22:00:44 C94x2s+u0
>>333
俺もそれほしくてコンパイル済みを探したけど見つからんかった。
どなたかお願いします・・

335:名無しさん@お腹いっぱい。
05/12/22 02:31:48 MS28PmO/0
>>333-334
コンパイルだけなら出来ないこともないが、
さすがにそんなシステムの根幹に関わるファイルは試したくないし、
そのまま上げて、うまく動かなくてシステム復旧できなくなっても責任取れないし。
第一、こんな危険度の高いファイルを匿名掲示板の誰とも知れぬヤツに
頼むのはどうかしてるとしか思えない。

336:名無しさん@お腹いっぱい。
05/12/22 16:11:43 7k5DRGNJ0
335の言うとおり。どれほど危険かわかっていってんのかね。

337:名無しさん@お腹いっぱい。
05/12/22 17:01:29 V901fh0D0
何度もいう必要は無いよ
一度言えば分かる
もしやる奴がいれば上げればいいし
自己責任で使えばいい

338:名無しさん@お腹いっぱい。
05/12/22 18:39:00 8FMcnaKn0
とりあえず自力でコンパイルできる位のスキルがある奴でないと危ないってこった

339:名無しさん@お腹いっぱい。
05/12/22 18:44:59 KsC0+Fth0
何度もいう必要は無いよ
一度言えば分かる
もしやる奴がいれば上げればいいし
自己責任で使えばいい


340:名無しさん@お腹いっぱい。
05/12/22 22:47:41 1UNMjvMz0
乱数が必要なときどうしてます?

341:名無しさん@お腹いっぱい。
05/12/22 23:14:28 mI5CV1Yi0
Random使ってますが

342:名無しさん@お腹いっぱい。
05/12/22 23:14:55 MS28PmO/0
Random, OutputVar [, Min, Max]

343:340
05/12/22 23:16:16 1UNMjvMz0
関数の方で探してましたorz

344:名無しさん@お腹いっぱい。
05/12/22 23:26:11 1UNMjvMz0
もしかして16進数←→10進数もあったりする?

345:名無しさん@お腹いっぱい。
05/12/23 00:08:10 6+7NW5wO0
>>344
ある。探し方が下手なだけだと思う。

346:名無しさん@お腹いっぱい。
05/12/23 00:24:43 HDLrFyls0
>>345
ありました
SetFormatですね

今度一からリファレンスを見直そうかな・・・・

347:名無しさん@お腹いっぱい。
05/12/23 17:22:00 6+7NW5wO0
一部のソフトのバグが原因(だと思われる)でフォーカスの横取りがうまくされなくなる問題の解決のために、
フォーカスを奪いたいソフトを実行させる前に以下のコマンドを実行するようにしてみた。

GetFocus:
RegRead, fore, REG_DWORD, HKCU, Control Panel\Desktop, ForegroundLockTimeout
IfNotEqual, fore, 0
{
RegWrite, REG_DWORD, HKCU, Control Panel\Desktop, ForegroundLockTimeout, 0
Sleep, 500;反映待ち
}
return

しかし、実際にレジストリの方は書きかわっているものの、きちんとフォーカスを奪ってくれず、
TweakUIで該当の項目を見てもチェックが付いたまま…もちろんTweakUIでチェックを外せば奪うようになる。
他に何をすればAHKでも反映されるようになるんかな。


348:名無しさん@お腹いっぱい。
05/12/23 19:43:26 JrNibnEe0
あーなんか昔クリップボード拡張ソフトのスレでそれっぽいの見たような記憶が
今ちと忙しくて過去ログ探してる暇がないが
Charu3起動するとフォーカス関係がおかしくなる奴

349:347
05/12/23 21:18:22 6+7NW5wO0
>>348
そのスレ自体は知っているんだけど、やっぱり原因となってるソフトを特定して、
作者に直してもらうほか無いのかなぁ。

350:名無しさん@お腹いっぱい。
05/12/23 22:08:11 4kg8U7Th0
>>347
その手の設定はレジストリ変えた後に「再設定したよ」ってOSに知らせないといけないのかも
確かそんなAPIがあったはず

351:名無しさん@お腹いっぱい。
05/12/24 00:50:55 qmuEaf2G0
最強クリップボード拡張ソフトはこれだ!Part5
スレリンク(win板:371-383番)
CharuシリーズサポートBBSの下のほう
XPでフォアグラウンドアクティブできなくなるのですが…
URLリンク(8537.teacup.com)

自分このときCharuの作者さんに報告したものだけど
問題部のソース晒して貰った上でバグ部分を特定してるので
>347氏のも同じ現象ならソフトの作者さんに報告すれば直して貰える確率は高いと思う
常駐物もいったん全部外して、常用ソフト一個ずつ起動終了ごとにTweakUIで状態確認、で
原因のソフトは特定できると思うよ。ちと手間だけど

352:名無しさん@お腹いっぱい。
05/12/29 13:16:24 kRbce90V0
age

353:347
06/01/02 13:16:01 ECSj1xL10
状況報告
Tweak UIの挙動をSpy++で確認。レジストリ変更後、↓を確認。
WM_SETTINGCHANGE wFlag:2001 pszMetrics:0006F4B4
ということで、スクリプトに↓を追加。
SendMessage, 0x1A, 0x0002001, 0x0006F4B4,, ahk_id 0xFFFF

これで試したところ、以下のような良く分からん状態に。
  Tweak UIでチェックをつけてOKを押す 該当レジストリが200000になる
↓AHK実行 レジストリが0になる
↓フォーカスをきちんと奪うようになる
↓Tweak UI起動して確認するとチェックが付いたまま レジストリの方は0になっている
↓そのままOKを押す
↓AHK実行 レジストリは0のまま
↓フォーカスを奪えない Tweak UIの方もチェックが付いたまま

↓のようにいろいろ変えてみても効果無し。
SendMessage, 0x1A, 2001, 0x0006F4B4,, ahk_id 0xFFFF
SendMessage, 0x1A, 0x0002001, "Control Panel\Desktop",, ahk_id 0xFFFF
SendMessage, 0x1A, 0x0002001, "HKEY_CURRENT_USER\Control Panel\Desktop",, ahk_id 0xFFFF
SendMessage, 0x1A, 0, 0x0006F4B4,, ahk_id 0xFFFF
SendMessage, 0x1A, 0, 0,, ahk_id 0xFFFF

354:347
06/01/02 13:23:01 ECSj1xL10
続き

参考にしたのは↓のサイト
URLリンク(www.sxlist.com)

何か根本的に間違っているのかそれとも足りないのか…
ちなみに原因となってるソフトを探してみるものの、問題が起こるときは何度でも起きるし、
起きないときは全然で、再現性が無くて困り中。
何かSyleraが怪しい気もするけど確証が取れず。複数ソフトが原因だったらお手上げっす。

長文スマンね。

355:名無しさん@お腹いっぱい。
06/01/03 07:25:06 jyT5EMJg0
JoeのようなAltTab代替アプリを実現しようと思ったんですが、
アイコンの取得の仕方がわかりません。

インスタンスハンドルを取得できればWinAPIを使ってできそうなんですがうまく取得できず。

356:名無しさん@お腹いっぱい。
06/01/03 12:14:30 Tw0iMMgh0
HDD漁ったら昔作ったアイコン存在チェックソース出てきた。時間ないので未検証でコピペするお

;WNDCLASSEX 構造体にセットされたアイコン
GCL_HICON := DllCall("GetClassLong", Uint,hWnd, Int,-14) ;GCL_HICON
GCL_HICONSM := DllCall("GetClassLong", Uint,hWnd, Int,-34) ;GCL_HICONSM

;WM_SETICON メッセージによってセットされたアイコンを取得
SendMessage,0x007F,0,0,,ahk_id %hWnd% ;ICON_SMALL
ICON_SMALL := ErrorLevel
SendMessage,0x007F,1,0,,ahk_id %hWnd% ;ICON_BIG
ICON_BIG := ErrorLevel
SendMessage,0x007F,2,0,,ahk_id %hWnd% ;ICON_SMALL2(XP)
ICON_SMALL2 := ErrorLevel
OutputDebug, GCL_HICON=%GCL_HICON% GCL_HICONSM=%GCL_HICONSM% ICON_BIG=%ICON_BIG% ICON_SMALL=%ICON_SMALL% ICON_SMALL2=%ICON_SMALL2%

357:355
06/01/03 17:40:06 jyT5EMJg0
>>356
ありがとうございます。
これでアイコンハンドルは取得できました。

ListViewのGuiのIL_Add()ではアイコンのファイル名が必要なんですが
ハンドルからファイル名は取得できるのでしょうか?

358:名無しさん@お腹いっぱい。
06/01/03 21:17:52 Tw0iMMgh0
取得したアイコンハンドラを元にGUIへ反映する方法はわからんです。
(自分はウィンドウのタイトルバー左上にアイコンがあるのかどうか調べるためだけに
アイコンハンドル取得してみてるだけなので)
APIでどうにかできそうとのことだったので、むしろフィードバックを期待してたんですが

単純にexeのアイコンが表示できればいいのなら、管理人さんの
プロセスIDを指定して実行ファイルパスを得る関数で .exeフルパス取得して
セットしてやればいいと思われ

URLリンク(cgi19.plala.or.jp)

359:355
06/01/03 21:27:09 jyT5EMJg0
>>358
その管理人さんの関数で解決できそうです。

ありがとうござました。

360:355
06/01/03 21:45:14 jyT5EMJg0
最後のほうの
DllCall("psapi\CloseProcess","Int",hProcess)
のErrorLevelが-4になってしまうんですが大丈夫なんでしょうか?


361:名無しさん@お腹いっぱい。
06/01/04 15:29:26 SbxpZ6KF0
ホイールの挙動がなんかおかしいです

SetTimer,tip,1000
return

tip:
GetKeyState,ks,WheelDown,P
ToolTip,%ks%
return

で調べると、一度でもWheelDownをするとそのあとマウスから手を離しても
ずっとksの値はDのままになってしまいます。


362:名無しさん@お腹いっぱい。
06/01/04 15:49:26 x6p42A6B0
>>360
これはCloseHandle()の間違いらしい。
DllCall("CloseHandle", "Int", hProcess)

363:名無しさん@お腹いっぱい。
06/01/04 16:55:55 95AmdYfp0
>361
ホイールの回転はホイール押下みたいなUP/DOWNが有るイベントじゃないから
状態を取ること自体間違ってる気がする


364:361
06/01/04 17:01:50 SbxpZ6KF0
>>363
ホイールが回転されるまで待機、ってことがやりたいんですが
無理ですか?

365:名無しさん@お腹いっぱい。
06/01/04 19:47:56 95AmdYfp0
単にWheelDown::に処理書いてやって,フラグ立てるなり終了するなりすればいいんでは


366:361
06/01/04 19:50:45 SbxpZ6KF0
>>365
& WheelDown::の最中で待機したかったんですが
あきらめて他の仕様にすることにします

367:名無しさん@お腹いっぱい。
06/01/05 01:16:03 YlkDRsZz0
フォルダのパスを引数として渡し、
「フォルダの参照」ダイアログのツリーを操作して
引数のフォルダを選択させる、ということをしたいのですが、
どのようにすればいいのでしょうか?

DialogSetやDialogHandlerが使えないソフトにも
自前で対応させようとしているのですが、
「フォルダの参照」ダイアログがどうにもできず困っています。
助言をいただきたいです。

368:355
06/01/05 01:17:18 n7Jr+2qn0
>>362
亀レスすみません
エラー出なくなりました。ありがとうございます。

369:名無しさん@お腹いっぱい。
06/01/05 01:40:30 8eGMClaI0
>>367
「フォルダの参照」の場合、パスをセットする場所がないので
ルート(マイコンピュータ)からインクリメンタルサーチで1階層ごとに
フォルダ選択していくしかないのでは?
DialogHandlerは随分とうまいことやってるけど、多分100%の無理そうな気がする。

370:名無しさん@お腹いっぱい。
06/01/05 01:41:29 8eGMClaI0
×多分100%の無理そうな気がする。
○多分100%の精度での実現は無理そうな気がする。

371:名無しさん@お腹いっぱい。
06/01/05 10:54:01 mE3SDKUy0
一応フォルダの参照ダイアログの選択フォルダを指定する
方法はあるが(>>369のような不確かな方法ではない)
AutoHotKeyでは無理っぽい気がする。
とりあえずSHBrowseForFolder SHGetPathFromIDList
あたりでググってみるといい。この方法は環境に問題がなければ
精度はほぼ100%だよ。(完全に100%かもしれないが、
言い切れるほどの確認はしてないので)

372:367
06/01/05 15:29:16 YlkDRsZz0
>>369 >>371
レスありがとうございます。どうも難しいようですね。
「フォルダの参照」の場合はDialogHandlerに丸投げすることにしました。

373:名無しさん@お腹いっぱい。
06/01/07 16:48:04 g9rnGIxl0
特定のアプリにのみ有効にすることはできますか?
また、マウスジェスチャ(←→ならESCなど)を指定することはできますか?

374:名無しさん@お腹いっぱい。
06/01/07 17:08:20 E/GD5dod0
そのように書けばできますYO!

375:名無しさん@お腹いっぱい。
06/01/09 15:47:48 OvYu84cO0
>>347
AutoHotkeyユーザーではありませんが、347さんと同じような現象で困っていてこのスレにたどり着きました。
tuneappスレ(Windows2000/XP チューンナップ専用スレ Part17)にも書き込んでます。
以前はこんな現象は起こらなかったので困ってます。
常駐ソフト切ったり、バージョンを変えたり(上げたり落としたり)しても同じく原因がわからないんですよね・・・
レジストリを書き換えても(tuneappでも可)、TweakUIの「アプリケーションにフォーカスを横取りさせない」のチェックボックスに変化無し。
チェックボックスを外してもいつの間にかチェック状態に戻ってしまう・・・
Windows2000を普段使ってまして、WindowsXPだと起きていないので
Windows2000の何かが原因なんですかね。
ネットで調べたらWin32 APIてのが関係してるかもしれないようですが、お手上げ状態です。

376:名無しさん@お腹いっぱい。
06/01/09 17:38:31 r9CSfa8s0
>>347
今更だが、Regmon辺りで書き換えてるアプリ探すのが一番かと
ForegroundLockTimeoutでフィルタリングして放置しておけばそのうち引っかかると思うぞ

377:347
06/01/09 21:51:22 gCdov2U80
>>376
残念ながらそれはもう試してた。Regmonでは引っかからなかったよ。
Tweak UI等での正規の方法で変更する場合は関知してくれるけど、このバグの場合は無理らしい。
いっそ、この問題が起こる人用のスレでも立てて、全使用ソフトを書き連ねる→共通するソフトが容疑者
って方法でも取らないと無理かなぁ…ちなみにOSはXP SP2です。

とりあえず原因が除去できないならってことで、>>347で書いたものの代わりにこんな感じで無理矢理対処。
SendMessage等を用いたもっとスマートなやり方を誰か分かれば頼む。

TweakFocus:
Run, TWEAKUI.EXE
WinWait, Tweak UI
ControlSend, SysTreeView321, {Down}{Right 2}, Tweak UI
Sleep, 50
Control, UnCheck, ,Button2, Tweak UI
Sleep, 50
ControlClick, Button6, Tweak UI
return

378:名無しさん@お腹いっぱい。
06/01/09 23:37:50 r9CSfa8s0
>>377
Regmonでダメだったのか
古典的なwin.iniのCompatibility95セッションに追加する手法は?

379:347
06/01/10 00:20:10 YKl99lMm0
>>378
こんな簡単な解決方法があったとは…
根本的な解決になったわけではないけど、実用上は何の問題もなし。
激サンクス!

380:名無しさん@お腹いっぱい。
06/01/10 12:26:18 edhaETY50
今更かもしれませんが・・・前スレ749さん

hModule := DllCall("LoadLibrary", str, "DengakuDLL.dll")

p := DllCall("DengakuDLL.dll\TOHANKAKU", "str", "01234567890", "str")
msgbox, %p%
DllCall("lstrcpy", "str",str1, "str", p)
msgbox, %str1%

DllCall("FreeLibrary", UInt, hModule)

で、動きました。処理途中で解放されていたのが問題だったぽいですね。
すでに解決してたらすいません。

381:名無しさん@お腹いっぱい。
06/01/10 21:55:48 h3Yb+cm+0
DllCall("SetCaretBlinkTime",UInt,100)
とやってもすぐに反映されず、何かアクションを起こさなければ速度はそのままです。
何か足りないんでしょうか?


382:前スレ749
06/01/11 01:30:09 95IZTI+k0
>>380
あ! LoadLibraryで確保すればOKだったのか。
管理人氏がBRegExp.dll でやってたのは知ってたけど再検証はしてなかったです。
(自分でも忘れてた) 秀マクロ用のDLLが使えるようになるのは結構大きいかも。
教えてくれてアリガトン

てことは、AHKでも田楽DLLのSETVER/GETVERでグローバル変数が扱えるのかな
iniとか経由なしでオンメモリ上で秀マクロや他のアプリとデータを共有化できるのか
うはw夢がひろがりんぐwww


383:名無しさん@お腹いっぱい。
06/01/11 04:51:40 tIP7xIJe0
起動するとそのままタスクトレイに入るソフトがあるんですが、
これをScrollLockで起動・終了したいんですね。
で、こんな風に書いてみたんですが……

~ScrollLock::
Process, Exist, task.exe
if ErrorLevel = 0
Run, task.exe
else
WinClose, ahk_pid %ErrorLevel%
return

これだとそのソフトの終了ができないんです。
ここの「WinClose」が「Process, Close」にすれば「強制終了」はできるんですが、
強制終了でなくふつうの終了がしたいんです……。ソフトの挙動が変わってしまうので。

タスクトレイアイコンを右クリックでxすると終了できるので、
この「WinClose」の行を「Send, #b & AppsKey & x」とかやってみたんですが、
別のアイコンにフォーカスが当たってしまい、、、どうにもうまくいきません。教えてください。

384:名無しさん@お腹いっぱい。
06/01/11 05:02:56 XYQfQQRG0
トレイメニューの「閉じる」のコマンド番号を調べておいてWM_COMMANDで送ってやればいいような

385:名無しさん@お腹いっぱい。
06/01/11 07:58:09 95IZTI+k0
挙動の本質とは関係ないかもしれないけど、Locks系の押下情報は
OSが返してくる値がおかしいからホットキーに割り当てるのは控えたほうが良いと思われ

386:名無しさん@お腹いっぱい。
06/01/12 01:07:46 rmvCVckQ0
なまず日記すげえな。

387:383
06/01/12 03:13:12 HWiUEJ9g0
助言ありがとうございました。

Send, #b{APPSKEY}x
これでいけました。
これ「ソフトがタスクトレイの左端にある」ことを決めてかかっているのでよくないですが、
紹介いただいた「コマンド番号を調べる」方法を知らないので……(^^;
ぐぐって見て、
ResouceHackerでできるという話があったのでやってみたんですが、
それらしいエントリが見つからず……断念。

388:名無しさん@お腹いっぱい。
06/01/12 03:30:15 5XY6ilOR0
Direct Command
URLリンク(members.jcom.home.ne.jp)

終了命令はこれで調べられる可能性があるよ
SendCmdをRunさせてもいいし、
AHK内でも処理できる。

389:383
06/01/12 21:12:12 HWiUEJ9g0
ありがとうございます。
ただ、流行らせるページで紹介されている方法も含め、ソフトが特殊なのかうまくいきませんでした……。
件のソフトはWorkCheckerという、キーの押下回数をカウントするソフトなんですが(^^;
終了時にCSV形式でファイルを出力するもので、強制終了するとこれをやってくれないんですよ。

「終了」のほうは、とりあえず何とかなっているのでこれでいいとして、
もう一つうまく行かないことがありますので、よろしければお願いします。

Media Player Classicを「フルスクリーン」にしているときに、
383で挙げているスクリプトを走らせると、MPCのフルスクリーン化が解除されてしまうんですね。
これが「ウィンドウの最大化」なら、特に解除されることもないんですが……。

問題の部分はこんな感じになってます。

WinGetActiveTitle, player
Send, #b{APPSKEY}x
WinActivate, %player%

このSendをした際に、
タスクトレイにフォーカスが移ってタスクバーが出たままになるのを何とかしたくて
このような処理をしてみたんですが、先にも書いたとおり、
最大化したウィンドウでは期待どおりに動くものの、全画面化した場合はうまくいきません。
WinGetActiveTitleが、タイトルの取得のためにウィンドウ表示に戻してしまうんでしょうか……。

ちなみに、playerにはMPCの決め打ちができません。

390:名無しさん@お腹いっぱい。
06/01/12 21:23:04 HWiUEJ9g0
あ、ちなみに、MPC以外でも同じ状態になります。

それと、
WinGet, player, PID

WinActivate, ahk_pid %player%
とか、PIDじゃなくてIDだとかの場合も試しましたが、これもうまくいかず。

391:名無しさん@お腹いっぱい。
06/01/13 01:26:59 +pozkCUx0
今プログレスバーを半透明にしようとしているのですが、期待した表示になりません。

Progress,cwFFFFFF ,,name,time
winset,TransColor ,FFFFFF 50,time
return

esc::exitapp

ウィンドウを半透明にして文字とバーは透過なしにしたいのですが、出来ないのでしょうか?
これだとウィンドウが完全な透明、文字とバーが半透明になります。
Trans ,で設定するとウィンドウは半透明なのですが文字も半透明に。。トホホ。

392:名無しさん@お腹いっぱい。
06/01/13 12:15:47 5XB+c2x50
2枚重ね

393:391
06/01/13 17:00:20 dZX44Wpz0
>>392
ありがとう!発想を変えれば良かったんですね。希望の動作になったので報告までにはっときます。
オプションでツールウィンドウを指定してるのは、タスクバーに表示させたくないためです。

gui,add,text
Gui, Color,000000
gui,+ToolWindow +AlwaysOnTop +OwnDialogs -border
gui,show,w300 h200,back
winset,Trans, 50,back

Progress,cwC8D0D4 ctFFFFFF B,,name,time
Progress,50,,,time
winset,ExStyle,+0x00000080,time
winset,TransColor ,C8D0D4 255,time
return

esc::exitapp

394:381
06/01/14 21:15:58 6j6GF4sd0
いまだ解決せず。
キャレットの速度変更した後、Send,{Left}{Right}とか無理やりアクション起こすと
色々不具合がでるソフトもあるし・・・
SmartCaretはどうやってるんだろう。

395:383
06/01/17 10:21:04 aCgAJjPo0
一段落したのでまとめをさせてください。
したかったのは、プログラム全画面化時のキー押下回数のカウントでした。
カウントには>389で挙げているWorkCheckerというソフトを利用することにしていました。

はじめ>383にてScrollLockを使おうとしていたのは、
全画面化時でもキーボードインジケータによって動作中かどうかがわかるためです。
これによって挙動がおかしくなったかどうかはわかりませんが、>385さんの助言を受け、
起動キーを変更して(NumpadSubに)、動作情報はツールチップに表示させるようにしました。

いろいろ調べてみましたが、WorkCheckerのメッセージによる終了のさせ方がわからず、
タスクトレイにフォーカスを当ててキーをSendするというムリヤリな解決法をとりました。
その後WorkCheckerの使用をやめ、AutoHotkeyスクリプト内部の処理でカウントすることに。
これでスクリプト終了の問題は一応決着がつきました。

が、その数値をファイルに書きこむ際、エントリ名を取得しようとInputBoxを出すと、
>389と同じ状況になり、全画面化が解除されてしまいます。
最大化でなく全画面化なので、WinMaximizeでも状態を復帰させることができません。
いろいろやってみたところ、WinGetActiveTitleとかWinActivateには問題がなく、
プログラムの全画面化が解除されるのは、タスクトレイやInputBoxなど
他のウィンドウにフォーカスが移ったときであることを突き止めました。
また、この現象は、プログラムの最大化時や、
IEのキオスクモード(F11を押すとできる一種の全画面化)では発生しないこともわかりました。

以上です。
全画面化の解除問題は解決してないのですが、うまくいきそうにないので諦めることにしました。
プログラムはPerlのワンライナー程度のスクリプト処理をちょっとかじっていただけ、
Windowsプログラミング経験なしのド素人なので、
コメント行やエラー処理も含めて100行を越えるスクリプトを書いただけでいっぱいいっぱいです(^^;
皆さん、助言どうもありがとうございました。

396:名無しさん@お腹いっぱい。
06/01/17 13:41:14 aCgAJjPo0
まとめてみて、もしや、と思って試してみました。

全画面化中にAlt+Tabをしてみると、AHKスクリプトでの全画面化解除の挙動と一緒でした。
つまり、AHKスクリプト中に全画面化解除されるプログラムは、Alt+Tabでも解除され、
AHKスクリプト中に解除されないプログラムは、Alt+Tabでも解除されませんでした。
(最大化した場合や、IEのキオスクモード)
この問題の発生はAutoHotkeyに直接関係がなかったようです。お騒がせしました。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch