[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 02/12 04:32 / Filesize : 228 KB / Number-of Response : 702
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

AutoHotkey スレッド part5



1 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/01/28(月) 15:48:16 ID:LAzeYh1N0]
(テンプレ>>1)
■公式
www.autohotkey.com/

■解説
AutoHotkeyを流行らせるページ
lukewarm.s101.xrea.com/

■過去スレ
1 pc7.2ch.net/test/read.cgi/software/1098531338/
2 pc7.2ch.net/test/read.cgi/software/1129836713/
3 pc11.2ch.net/test/read.cgi/software/1157043396/
4 pc11.2ch.net/test/read.cgi/software/1184556627/

関連リンク>>2以降も参照

566 名前:名無しさん@お腹いっぱい。 [2008/05/17(土) 12:51:31 ID:cUZz5sdV0]
特定のウィンドウではキー変更せず
それ以外ではキーを変更するにはどうすればよいでしょうか?
下のようにしてみましたが、NotepadでCtrl+Aすると
#MaxHotkeysPerInterval に達してしまいます。
「~」をつけると逆にNotepad以外でもCtrl+Aが入ってしまいます。

^a::
IfWinActive, ahk_class Notepad
Send, ^a
Else
Send, b
Return

567 名前:564 mailto:sage [2008/05/17(土) 13:02:38 ID:l+1Pu63/0]
>>565
ありがとうございます。おかげさまでヒントになり、解決しました。

 MouseGetPos, , , , OutputVarControl ,
 If Outputvarcontrol<>【指定したいClassNN】
  return ;違うなら無効ということで、戻る

 〜以下やりたいこと

これで認識できました。

568 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/17(土) 14:13:34 ID:hJizOrmY0]
>>566
#IfWinNotActiveじゃだめかい

569 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/17(土) 15:41:23 ID:cUZz5sdV0]
>>568
ありがとうございます。それでできましたが、
除外したいウィンドウが複数ある場合はどうしたらいいのでしょうか?
単純に #IfWinNotActive を複数書くと
どちらも無効になってしまうようなのですが・・・

570 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/17(土) 18:26:03 ID:L03/NFhv0]
>単純に #IfWinNotActive を複数書くと
これがよくわからんが

#IfWinNotActive window1
{
#IfWinNotActive window2
{
#IfWinNotActive window3
{
なんとか
}}}

論理条件だとこうなりそうだがこれだとダメなのか?

571 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/17(土) 20:32:11 ID:/leBUyky0]
つウィンドウグループ

572 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/17(土) 22:51:18 ID:cUZz5sdV0]
>>570
入れ子にせずに独立に2つ書いてたんですが、
入れ子にしてみるとあとに書いたものしか有効になってないようです。

>>571
こういうのがあるんですね。
ちょっとやってみます。

573 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 01:15:23 ID:jn7VlSlu0]
ショートカットキーで特定のアプリ(Firefoxとか)に対して
タスクトレイに最小化/最大化をトグルするということはできますか?
よろしくお願いします。

574 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 03:25:19 ID:1OtJdJTx0]
Access97のモジュールウィンドウでマウスホイールによるスクロールはできないでしょうか?

Visual Basic 6.0 IDE でマウス ホイール イベントが機能しない
ttp://support.microsoft.com/kb/837910/ja

を試してみたのですがAccess2000以降でないと動かないようなので、とりあえずキーを送るだけのものを書いてみたのですが
どうもいまいちな気がしますので。

#IfWinActive ahk_class OMain
*WheelDown::
Send,{DOWN 2}
return

*WheelUp::
Send,{UP 2}
return
#IfWinActive



575 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 03:29:23 ID:1OtJdJTx0]
ちなみにWheel Redirectorやかざぐるマウスでは動きませんでした。

576 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 04:36:47 ID:87P/lABM0]
>>574
別にその解決法でいいと思うけど、どうしても気になるなら
WM_SCROLLかWM_VSCROLLメッセージをコントロールに送れば良いんじゃね?
「どこでもホイール」がそんなことやってたような。
Access97は触ったことないので上手くいくか分からないけども。

577 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 09:29:46 ID:1OtJdJTx0]
>>576
ありがとうございます。

しかしどこでもホイールも試してみましたが動きませんでした。
Access2000以降でないとWM_MOUSEWHEELでホイールメッセージを検出できないようです。(よくわかっていませんが)
このあたり
ttp://www.asahi-net.or.jp/~uk8t-ktu/wincode/global/0010.htm
を参考にすればできそうな気もしますが、AHKはまだ使い始めなのでどう書けばいいのかさっぱりな状態です。

578 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 11:25:55 ID:HJA6d0Re0]
>>573
タスクトレイにFirefoxがあるなら最大化、無ければ最小化でいいんじゃないか?
タスクトレイのものを操作するサンプルは流行らせるページにあったはず

579 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 12:00:49 ID:ab0+UOCY0]
>>577
多分 WM_VSCROLLでスクロールコマンド投げる時にスクロールバーのハンドルを
指定してやらんといかんのじゃないかな。

検証してやりたいけどAccess97はもう持ってないので、この辺り使って自分で試行錯誤してくれ
表示ペインとスクロールバーのクラス名や関係性は Winspectorとかで調べると分かりやすいと思う
ttp://lukewarm.s101.xrea.com/up/file/085.zip

580 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 12:28:21 ID:q+GwzdQJ0]
>>572
Regular Expressions を使うといいんじゃないかな?

SetTitleMatchMode RegEx
#IfWinNotActive ahk_class (window1|window2|window3)

581 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 13:50:53 ID:7i8b10K90]
1つのPCで、複数のAHKスクリプトを動かす際、
ホットキーの優先順位を決めることは可能でしょうか。

PCを起動している間、必ず常駐させるスクリプトが1つある状況で、
たまに使いたいスクリプトをあとから実行して2つ存在させると、
同じ定義下にあるホットキーを入れた際、発動するスクリプトが
不定期に入れ替わるようです。

2つ目のスクリプトが起動している間は、1つ目のホットキーを
無効にさせたいのですが、ネットワークでいう「メトリック」みたいな
動きは、どのように作るのがベストベストでしょうか。

582 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/18(日) 14:08:37 ID:1OtJdJTx0]
>>579
ありがとうございます。

ちょっと今Accessの勉強をしないとまずいので暇を見てやってみることにします。
ハンドルやクラス名の取得はClsinfoというのを使っていたんですがWinspectorは細かく調べられていいですね。
かざぐるマウスとかで簡単にいけると思ったんですが甘かった..

583 名前:574 mailto:sage [2008/05/19(月) 19:51:51 ID:xrRjgNKk0]
579でいただいたスクリプトを適当に書き換えてAccess97でもマウスホイールによるスクロールができるようになったので
一応報告しておきます。場当たり的修正なので汎用性は0です。WheelScrool.ahkは93行辺りで変数を初期化しているよう
なので38行辺りの設定が無効になっているような感じです。
--- WheelScrool.ahk~ Sat Nov 03 00:14:08 2007
+++ WheelScrool.ahk Mon May 19 00:41:40 2008
@@ -137,6 +137,11 @@
scmode = 0
}

+ if (ccls = "OModule") ; 追加
+ {
+ scmode = null
+ }
+
if (!scmode)
MOUSEWHELL(ctrl,mx,my,"",AcclSpeed,AcclTOut)
Else SCROLL(ctrl,mode,shwnd,"",ScrlCount,AcclSpeed,AcclTOut)
@@ -283,6 +288,8 @@
ACount := ScrlCnt
Else
ACount += ScrlCnt * ASpeed
+
+ ACount = 3 ; 追加

;wParam: 方向
if (dir = "")

AutoHotkey.iniには以下で
#IfWinActive ahk_class OMain
#Include, %A_ScriptDir%\Extras\Scripts\WheelScrool.ahk
Gosub,WheelInit
#IfWinActive

584 名前:574 mailto:sage [2008/05/19(月) 21:58:09 ID:xrRjgNKk0]
失礼。これだけでいいみたいです。これなら汎用性もありそうです。
--- WheelScrool.ahk~ Sat Nov 03 00:14:08 2007
+++ WheelScrool.ahk Mon May 19 21:53:35 2008
@@ -94,6 +94,7 @@
,VDisavledList, VScroolList, MdiActivateList
,BypassCtlList, NullShwndTabooList, HDisavledList

+ Gosub,WheelInit
CoordMode,Mouse,Screen
MouseGetPos,mx,my,hwnd,ctrl,3
WinGetClass,wcls, ahk_id %hwnd%



585 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/20(火) 00:01:32 ID:z9u7+QjX0]
>>583
>WheelScrool.ahkは93行辺りで変数を初期化しているよう
>なので38行辺りの設定が無効になっているような感じです。

そこは関数内でglobal変数を直に使えるよう再宣言してるだけで初期化はされない筈…
一応うちではちゃんと動いてるんだけど、値引き継がれない?
XP SP2 / AHK Version 1.0.47.06

586 名前:585 mailto:sage [2008/05/20(火) 02:08:31 ID:z9u7+QjX0]
ああ解った、AutoHotkey.ini側の記述の問題だわ
AHK常駐時に初期化する前提だから AutoExecute部(ファイル先頭)に書かないとダメ
;--- AutoHotkey.ini ---
#Include, %A_ScriptDir%\Extras\Scripts\WheelScrool.ahk
Gosub,WheelInit

あくまで#IfWinActiveでAccessにのみ適用したいなら WheelScrool.ahkの Hotkeyの前後に入れる
;--- WheelScrool.ahk : Line 77 ---
#IfWinActive ahk_class OMain
+WheelDown:: WheelRedirect(1)
+WheelUp:: WheelRedirect(1)

WheelDown:: WheelRedirect()
WheelUp:: WheelRedirect()
#IfWinActive

ttp://lukewarm.s101.xrea.com/up/file/085.zip
HDD漁ったらロジクールのチルトでの横スクロールのテストとかした時に作った新しいのがあったんで
上げ直しときます。互換リストにOModule追加してみたんで良かったらコメント外して使って見て下さい。
(ちなみに >583 scmode = null は 0でなく "null"という文字列が代入されてる模様)

587 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/20(火) 20:13:17 ID:zd0pXxS10]
AutoHotkeyで取り扱いたいファイルのハッシュ値を計算するための、簡単な方法はないでしょうか。

@IT:Windows TIPS -- Tips:ハッシュ値を利用してファイルの同一性をチェックする
www.atmarkit.co.jp/fwin2k/win2ktips/597fciv/fciv.html

上記で解説しているマイクロソフト製の「fciv.exe」をRunで渡してみました。

 cmd=fciv.exe "%hashfile%" -xml hash.txt
 runwait %cmd%,,Hide,pid

が、fciv.exe側が日本語のファイル名に対応していないようで、
ほとんどのファイルが、見つからない旨のエラーになってしまいます。
(コマンドラインで渡してもダメだったのでAHkのダメ文字ではないようです)

日本ではfasthash.dllというのが有名のようですが、
dllを使うには、どのように記述すればよいでしょうか。

FastHash.dll
hp.vector.co.jp/authors/VA033110/fasthashdll.htm

588 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/20(火) 21:11:57 ID:+6tZiYR+0]
>>587
日本語のファイル名に対応していないなら、一時的にAHKでリネームすればいいじゃない。

589 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/20(火) 22:00:36 ID:jzwbJ8Aa0]
>>586
わざわざありがとうございます。

かざぐるマウスと併用できるようなのと加速が意外と便利なのでAccess以外にも適用させて使おうと思います。
というかマウスジェスチャーや音量の調節も出来るようだし、AHKがあればかざぐるマウスはいらなそうです。
AHKになさそうなのは設定ダイアログをだしていてもメインウィンドウを動かせる機能ぐらいじゃないかと思います。

590 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 18:01:23 ID:+Xi75qRh0]
PCのビープ音を鳴らす「Soundbeep」って、状況把握に便利なんですが、
鳴らしている間はスクリプトが完全に止まってしまいますよね。

ビープは鳴らすけど、スクリプト自体は止まらせない方法ってありますか?

591 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 18:02:57 ID:P1fIW2PZ0]
別のスクリプトに書いてRun

592 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 19:29:17 ID:08CXmI6t0]
>>590
SetTimer,Beep,10
Return

Beep:
soundbeep
Settimer,beep,off
return


593 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/21(水) 21:46:37 ID:+Xi75qRh0]
>>591-592
ありがとうございます。うまくいきました。

594 名前:名無しさん@お腹いっぱい。 [2008/05/22(木) 02:08:12 ID:Bhfqc5ef0]
WinXPのエクスプローラーでアドレスバーを非表示にしているとき
ツリービューとフォルダビューの間をTabで行き来しようとすると
ツリービュー→フォルダビューはTab1回でいけますが
フォルダビュー→ツリービューはツリービューを閉じるための×印に
一旦フォーカスがあたるため2回Tabを押さないといけません。
これを1回で行うためにフォルダビューにフォーカスがあるときは
Tabが2回送られるように下のようにしたのですが、
なぜか×印がフォーカスされてしまいます。
どうすればよいでしょうか?

#IfWinActive, ahk_class ExploreWClass
~Tab::
ControlGetFocus, ClassNN
if ErrorLevel = 0
if ClassNN = SysListView321
Send, {Tab}



595 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 14:35:58 ID:UGRCaXb90]
tab送りじゃなくてControlにFocusを合わせるようにすれば?

596 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/22(木) 23:25:56 ID:Bhfqc5ef0]
>>595
なるほど
↓でいけました。ありがとうございます。

#IfWinActive, ahk_class ExploreWClass
Tab::
ControlGetFocus, ClassNN
If ClassNN = SysListView321
ControlFocus, SysTreeView321
If ClassNN = SysTreeView321
ControlFocus, SysListView321

597 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 10:45:11 ID:NPhBXbgz0]
デバッグをするため、ウインドウのClassNNが特定の値になっているときに、
ToolTipメッセージをマウスカーソル付近に連続で表示させる動作をさせています。

しかし、マウスカーソルがToolTip自身に乗っかってしまうと、
ClassNNが「特定の値」ではなく、空白になってしまいます。

ClassNNが空白のエリアを除外させたところ、
ToolTip以外の、本当にClassNNが空白の場所との区別ができなくなりました。

ToolTipを表示させる際、ToolTipのClassNNを指定することは可能でしょうか。

598 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/23(金) 23:56:26 ID:/hthvnSA0]
互換シェル使っててLWinをモディファイアに
いろんなソフト起動させてるんだけど

LWinをちょんと押すだけのときにシェルメニュー
表示とか割り当てたい

でもLWinをモディファイアにしてるバインドと
ぶつかっちゃうんだけどどうしたら解決できるか
わかる人いますか?

599 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/24(土) 00:14:55 ID:jR+OEghm0]
LoopでGetKeyState取得して
キーが離されるまでのループ回数で分岐とか

KeyWaitで時間指定して
それを越えたときのKeyStateで分岐とか

600 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/24(土) 01:51:22 ID:kkBoRCJr0]
GUI画面にテキストを表示させた際、操作者がGUIの内容を更新する操作をしたとき、
表示したテキストを別のテキストに置き換えて再描画したいです。

普通に同じ座標にAddで追加すると、前のテキストと重なって表示されてしまいます。

GUI画面を破棄するDestroyを入れるとできますが、画面の全部を作り直すため、
かなりチラついてしまいます。

症状確認用テストスクリプト

 Test:
 loop
 {
 Gui, Destroy
 Gui, Add, Text,,■■■TESTです■■■→%A_Index%
 Gui, Show,,GUIテスト
 sleep,100
 }

これだと、ものすごくチラついてしまいます。
また、Gui, Destroyをはずすと、最初に表示された内容から変わってくれません。 

おそらく、何かやり方があるとは思うのですが、GUI画面の一部の項目を
書き換えて再描画するには、どのように書けばいいのでしょうか。

601 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/24(土) 02:35:35 ID:kLdoO1vi0]
Gui, Add, Text, vMyText
でテキストを変数MyTextに指定

GuiControl,, MyText, 実際に表示する内容
で書き換える

流行らせるページリファレンスのGUI
OSDサンプルとか見れ

602 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/24(土) 14:17:41 ID:kkBoRCJr0]
>>601
ありがとうございます。うまくいきました。
100倍くらい速くなりました。

603 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 07:38:54 ID:7/PfvJsA0]
初心者で申し訳ないんですが、
右Alt+jでテンキー1にしたいんですが、
>!j::Numpad1
だと効きません。
j::Numpad1だと問題なく動くんですが、修飾キーをつけたとたん動かなくなります。
Winキー以外のShiftやCtrlでも効きません。何が間違ってるんでしょうか?

604 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 08:14:16 ID:k6NKzcvt0]
98とかME使ってんじゃね



605 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 15:56:56 ID:7/PfvJsA0]
>>604
流石にそれはないですw俺の環境だけかな?
ノートでNumLockしたくないから、右Altや右Ctrl押してるときだけ有効っぽくしたいんだけど。
あふとかフォトショ使うときに楽になるかなと思ったんだけど。
なぜこんなに難しいんだろ。

606 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 16:43:04 ID:pwVrvVFl0]
>>603
なぜ動かないかはわからんが、
!j::
Send,{Numpad1}
return
で動く。たぶん「仕様」ってやつでは?

607 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 17:01:33 ID:DsBFwt0y0]
すいません。WheelScroll.ahkですが
Vieasというイメージビューアソフトのマウスホイールでの画像の拡大・縮小が無効になってしまうので
#IfWinNotActive ahk_class Vieas_vwin_class
WheelDown:: WheelRedirect()
WheelUp:: WheelRedirect()

;Shiftホイールで横スクロール
+WheelDown:: WheelRedirect(1)
+WheelUp:: WheelRedirect(1)
#IfWinActive

と書き換えてみたのですが、これだとVieasのウィンドウがアクティブになっているときに下のウィンドウが
マウスホイールでスクロールできません。
マウスホイールが通常動作するクラスを指定するというようなことはできないでしょうか?

608 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 17:03:41 ID:7/PfvJsA0]
>>606
おおっ
>!j::Send,{Numpad1}と
>^/::Send,{NumpadEnter}
で右Altや右Crtlでいけました。有難うございます。
仕様と思います。AHKさいこー。

609 名前:603 mailto:sage [2008/05/25(日) 18:20:04 ID:7/PfvJsA0]
モバイルノートに右Altが無かったし、右Ctrlじゃキーが押しにくいので結局、無変換+でやることにした。
言語の設定で無変換を無効化して無問題。
以下、簡単だし別に使う人もいないだろうけど報告まで。

~vk1Dsc07B & j::Send,{Numpad1}
vk1Dsc07B & k::Send,{Numpad2}
vk1Dsc07B & l::Send,{Numpad3}
vk1Dsc07B & u::Send,{Numpad4}
vk1Dsc07B & i::Send,{Numpad5}
vk1Dsc07B & o::Send,{Numpad6}
vk1Dsc07B & 7::Send,{Numpad7}
vk1Dsc07B & 8::Send,{Numpad8}
vk1Dsc07B & 9::Send,{Numpad9}
vk1Dsc07B & m::Send,{Numpad0}
vk1Dsc07B & .::Send,{NumpadDot}
vk1Dsc07B & @::Send,{NumpadEnter}
vk1Dsc07B & /::Send,{NumpadDiv}
vk1Dsc07B & sc028::Send,{NumpadMult}
vk1Dsc07B & `;::Send,{NumpadAdd}
vk1Dsc07B & -::Send,{NumpadSub}

右Altや無変換でいろいろホットキーを追加してみよっと。

610 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 21:29:11 ID:PNVW0ixZ0]
>>607
VieasのメインウィンドウだとControlが存在せずハンドルが取れてなかったみたい。
コントロールが取れない時はウィンドウハンドルを指定してWHEEL投げるように修正かけました。
ttp://lukewarm.s101.xrea.com/up/file/085.zip


611 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/25(日) 23:50:21 ID:DsBFwt0y0]
>>610
ありがとうございます。動作確認しました。

やっぱりAHKいいですね。アプリケーションを問わずに操作できるのがいい。
自分もいろいろ書けるようになるといいんですけどね。

612 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/26(月) 23:03:49 ID:xhUv6vGn0]
Guiの質問です。


 Gui, Add, Picture,Section,***

で作成すると、ClassNNに「Static**」という名称が割り当てられますが、
作成したGuiのClassNNを、特定の文字列で指定することは可能でしょうか。

613 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 01:11:05 ID:0qIAl9sc0]
Excelで平成20年1月1日を ^#Dとホットキーを使った場合に
2008/01/01 とするにはどうしたらいいでしょうか?

#IfWinActive ahk_class XLMAIN
^#D::  このあとどのように記載したらいいか教えてください.
よろしくお願いいたします.

614 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 01:33:15 ID:10H1JCGL0]
2chで使われているような「1201502896」の形式の日付を、
YYYYMMDD形式に変換するには、どのような解決方法が
ありますでしょうか。



615 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 01:44:23 ID:mvWayqr00]
>>613
Ctrl+CをSendしてStringReplaceしてから
はっつければいいんでは?

>>614
19700101000000 にその数値を秒数で足せば良いんじゃないかな?

616 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 03:35:18 ID:4BLlhUiO0]
窓キーと3を押すのをトリガーにしようとして
# & 3::hogehoge
と書いたらキーボードの3が効かなくなりました。
そこで、
#3::hogehogeと書き直したら直りました。
これは既知の現象ですか?

617 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 03:40:10 ID:4BLlhUiO0]
>>616
間違えた。
窓キーと2をトリガーにしようとして
# & 2と書いたら3のキーが効かなくなった、というのが正しいです。

618 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 03:46:50 ID:Ci2ft8P00]
>>616
一つ目のキー自体のもともとの機能は無効化される。
一つ目のキーにチルダ(~)をつければ、そのキーは無効化されず、普通に入力される。
一つにつけておけば、一つ目のキーが同じほかのホットキーでは指定されていなくても、そのキーは無効化されなくなる。

#はShift+3の#と勘違いされただけ。使い方が間違っている。Win & 3て書かないと。

619 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 04:03:06 ID:4BLlhUiO0]
>>617
連投済まん。
Hotkeys (Mouse, Joystick and Keyboard Shortcuts)のヘルプにあったこれが答えかも。
lose its original/native function when it is pressed by itself
#がある3のキーが効かなくなることが説明できますね。
人騒がせで済みませんでした。夜中にパニックに陥っていたもので。。。(汗

620 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 04:04:31 ID:4BLlhUiO0]
>>618
おっ!書き込んでから発見しました。
こんな夜中にありがとうございます。

621 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 12:14:58 ID:10H1JCGL0]
>>615
ありがとうございます。変換できました。

622 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 13:47:20 ID:3gCvGmfE0]
>>613
^#D:: Send,^1!c{End}!tyyyy/mm/dd{Enter}

んでも IME ONだと失敗するし、素直にExcelマクロで
Selection.NumberFormatLocal = "yyyy/mm/dd"
したほうがスマートだと思うが。

623 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 13:53:59 ID:3gCvGmfE0]
↑はExcel2002の場合ね、他のバージョンだとアクセラレータキー違うかもしれんし上手く動くかわからん。
Winキー発動はできんけどやっぱマクロ作ってでショートカットキー割り当てたほうがいいと思う。

624 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 19:03:51 ID:10H1JCGL0]
・文字列 string を1行ずつループで回す
・取り出した1行にタブが含まれていたら、タブを別の文字「%okikaemoji%」に置き換える
・結果をstringに戻す
・ループをbreakで終了する

という動作を下記の4通りで試しましたが、どれもタブが置き換わってくれません。

1案
 value=`t
 StringReplace, string, A_LoopField,%value%,%okikaemoji%,all

2案
 value=%A_Tab%
 StringReplace, string, A_LoopField,%value%,%okikaemoji%,all

3案
 StringReplace, string, A_LoopField,%A_Tab%,%okikaemoji%,all

4案
 StringReplace, string, A_LoopField,`t,%okikaemoji%,all

どのように書いたら動いてくれるでしょうか。



625 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/27(火) 20:49:16 ID:mvWayqr00]
AutoTrimをOffにする

626 名前:613 mailto:sage [2008/05/28(水) 05:54:16 ID:vTCC4uvQ0]
皆さん お返事遅くてごめんなさい

>>615
  ありがとうございます

>>622
>>623
 マクロは考えてなかったです.
 AHKにこだわりすぎました
 EXCELマクロでやらせていただきます.
 ありがとうございます.
 

627 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 14:00:51 ID:b2k6dMVD0]
CTRLのダブルタップを
lukewarm.s101.xrea.com/myscripts/index.html
を参考にしてやってみたんですが、CTRLを少し押し続けた場合も
起動してしまいます。キーリピートのせいだと思うんですが。
>>389も同様でした。

回避策はありますか?

628 名前:627 mailto:sage [2008/05/29(木) 15:45:51 ID:b2k6dMVD0]
キーリピートの設定を遅くしたらましになったんですが、
他のキーは普通にリピートして欲しいです。
CTRLだけリピートを殺すといった事ができるといいんですが。

629 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 16:59:33 ID:SXLiQ+Fi0]
そもそもCtrlキーにリピートがあるのか?

630 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/29(木) 17:39:08 ID:lv3ZoJSv0]
>>628
lukewarm.s101.xrea.com/commands/KeyWait.html
ここにサンプルある。2カ所KeyWait入ってるけど上は要らんようなキガス


~CTRL::
if(A_PriorHotkey <> A_ThisHotkey){
return
}
if(A_TimeSincePriorHotkey > 400){
KeyWait, Ctrl
return
}
tooltip, double tap!
return

631 名前:627 mailto:sage [2008/05/29(木) 17:55:57 ID:b2k6dMVD0]
>>630
ありがとうございます。
書いてくださった方法でばっちりダブルタップでき、長押しも回避できました。

632 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 20:08:14 ID:yj8hQgNw0]
DllCallでLCMapStringを使って文字列を操作したいのですが
引数の型がまったくわからず、どうやってもErrorLevelが-2になってしまいます

どう書けばよいのかお教え願えないでしょうか?

633 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/30(金) 20:47:51 ID:QxYMGk4z0]
非アクティブのiTunesの停止、再生をしたくて↓のようにしてみたんですが
動きません。

#i::
DetectHiddenWindows,On
ControlSend,WinTitle,{Space},iTunes
return

下のようにクラス指定しても無理でした。
ControlSend,,{Space},ahk_class iTunes

試してみたら、そもそもアクティブにしてもだめだったんですが、打開策はありますか?

634 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 08:25:01 ID:KE70yWJA0]
ホットキー以外で初めて書いてみて動作はきちんとするけど、
もっとスマートに書けるんでしょうか?
メモリが2,000か6,000K(1:4の割合で変化)
CPUが0〜4パー
で動いてるんだけど、低スペックってのもあるw(P3-1G)。
プログラミングしたことないんで不安です。

;EBWinが非アクティブになったら終了。
#Persistent
SetTimer , EBWC , 250
return

EBWC:
WinWait , ahk_class EB_POCKET
if ErrorLevel = 0
{
WinWaitNotActive , ahk_class EB_POCKET
if ErrorLevel = 0
{
Process, Close, EBWin.exe
}
}
else
return



635 名前:634 mailto:sage [2008/05/31(土) 09:24:36 ID:KE70yWJA0]
自己解決しました、これでAHKの常時起動しなくて済みます。
スレ汚しごめんなさい。
それとも、まだやりようがあるのかな?・・・わからん。

;EBWinミニウインドー起動が非アクティブになったら終了。
#NoTrayIcon
Run, EBWin.exe -m , C:\Program Files\EBWin
WinWaitActive , ahk_class EB_POCKET
WinWaitNotActive , ahk_class EB_POCKET
if ErrorLevel = 0
Process, Close, EBWin.exe
else
return

636 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 16:10:10 ID:ErfB/+jr0]
>>634
>メモリが2,000か6,000K(1:4の割合で変化)
の意味が全くわからない

そしてスクリプトで何をしようとしてるのか解説が一切ないので、
なにをやってるのかわからない

結論:いくらチラ裏とはいえ、他人にわかるように書きましょう

637 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 16:21:21 ID:nD99XO9q0]
>>636
正直それはおまえさんの読解力の問題な気が…

638 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 17:51:19 ID:17jzD8JC0]
繭からやっと移行できたと思ったら
これSynergy経由じゃ動かないのかorz

639 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/05/31(土) 19:17:34 ID:nD99XO9q0]
>>638
動いたり動かなかったり。
>>4の無変換+ijklの矢印割り当てくらいなら動いたりするけど、
{Blind}の部分が効かなかったりとか。

640 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 00:07:10 ID:ErfB/+jr0]
プログラムを実行させるとフォーカスを強制的に
フォアグラウンドにしてしまうアプリがあります。

そのアプリをahkからタイマーで呼び出されたのち、呼び出す直前に
作業していた元のウインドウに戻すにはどうしたらいいでしょうか。

その動作を手動で再現させる場合、アプリ呼出し後にALT+TABを押すと
確実に戻れるので、それをAHKで再現できれば解決しそうなのですが。

Run,問題のプログラム.EXE
sleep,2000
send,{ALT DOWN}
sleep,1000
send,!{Tab down}
sleep,1000
send,!{Tab up}
send,{ALT UP}

安全牌で、sleepで余裕を入れてるのですが、タイミングが
合わないことが多く、半分くらいしか成功しません。

641 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/01(日) 00:32:29 ID:f367mMfv0]
>>640
SleepのタイミングについてはPCスペックや同時に動いてるアプリとの兼合いもあるので
自力で調整値を探すしかない。
だが、ALT+TAB使うより Activeウィンドウ操作系のコマンド使ったほうが成功率は上がると思われ

WinGet, hwnd,ID,A
Run,問題のプログラム.EXE
WinWaitActive,問題のプログラムのタイトル
Sleep,任意の待ち時間
WinActivate,ahk_id %hwnd%

642 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 12:52:34 ID:+6qJMD7A0]
質問です。
マウスホイールを下に回した場合batu.bmpを探してそこをクリックしたいのですが、全くできません。
拾い物のスクリプトから考えたのですが・・ご教授お願いします。アプリ名はaaaaに置き換えてます。
Loop {
Sleep,10
IfWinActive,aaaa
{
GetKeyState,mbtn,WheelDown,P
if (mbtn="D") {
Loop {
ImageSearch , OutputVarX, OutputVarY, 0, 0, A_ScreenWidth, A_ScreenHeight, batu.bmp
Sleep,100
Send,{LButton}
GetKeyState,mbtn,WheelDown,P
if (mbtn="U") {
break
}
}
}
}
}
#z::Reload
#x::Pause
#e::ExitApp
#r::return
#u::return
#f::return
#m::return
#IfWinActive aaaa
vk1Dsc07B::Send,@

643 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 13:34:40 ID:0QKb9v/r0]
探した座標使ってないじゃん
MouseClick使え

644 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 13:55:40 ID:Yyr2zU0/0]
なにそのLoop



645 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 17:51:59 ID:T5SyNYp+0]
Loop,fileなどで読んだファイル名にUnicode文字が含まれると、
「A_LoopFileName」などの変数で、ファイル名のUnicode部分が
ハテナに置き換わってしまいます。

結果、ループの中に居るのに対象ファイルが
見つからない事態になってしまいます。

そこで、ループ中にA_LoopFileNameの実体を読んで、エラーなら、
FileMoveで A_LoopFileName → Unicode部分を削除したA_LoopFileName
とリネームを試みたのですが、Renameする時点で元ファイルが
見つからず、できませんでした。よい解決法はないでしょうか。

なお、対象となるファイルは自分で作成したものではないため、
事前にリネームするのは厳しいという状況です。

646 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 18:48:58 ID:K9ohG56c0]
「IMEが変換中」という状態を取得したいのだけど、できない。。
誰か俺が調べた限りの情報出すから助けて。

1.AHKのSendMessageを使用する

2.使用する(と思われる)API/WM_IME_COMPOSITION
kumei.ne.jp/c_lang/sdk3/sdk_281.htm
www.winapi-database.com/Message/WM/WM_IME_COMPOSITION.html

おまけ.IMEの参考
lukewarm.s101.xrea.com/up/file/029.zip

つってもこれだけなんだけどね。
もうだめぽ・・・

647 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 18:50:10 ID:K9ohG56c0]
あ、直リンしちゃった。。ごめんちゃい。

648 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 20:33:23 ID:0QKb9v/r0]
>>645
TransformのUnicode, String
を使えばどうにかならんかね?


649 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:06:24 ID:B0W6ZYcf0]
>>646
俺もいろいろ調べたんだけど、
AHKからは他プロセスの入力コンテキストハンドラ hIMC を取得できない
(ImmGetContext が NULL しか返さない) ので、うまくいかないみたい。

ttp://www.zero.co.jp/develop/free/o1/index.html
こんな情報があるけど、俺には使いこなせない orz

650 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 21:25:10 ID:T5SyNYp+0]
>>648
ありがとうございます。
さっそく試してみたところ、transformに渡す対象文字「string」の
内容自体がすでに「?」に変わってしまっているようです。
結果をファイルに書き出して確認したところ、壊れた結果でした。

651 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/02(月) 22:59:30 ID:uDIyl+SM0]
>>645
過去ログ>538-550あたりを読むと幸せになれるかも。試してないからわからんけど

652 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 00:24:59 ID:8JqjvJlr0]
AttachThreadInputしてみたら?

653 名前:646 mailto:sage [2008/06/03(火) 02:00:34 ID:mB5Ni4140]
>>649 のくれたリンクからファイル落としたんだけど、その中に
>各々のアプリケーションのスレッドはスレッドにアタッチされた複数のIME ウィンドウを持つようになった
って書いてあったので、GetWindowThreadProcessIdとSpy++使って調べてみました。

試しにメモ帳では、「メモ帳」と「メモ帳の入力域」は同じプロセスID・スレッドIDなんだけど、
問題はアクティブウィンドウではなく、IMEのプロセスID・スレッドIDが必要ってことなのかな?

うーん、わかりそうでわからん。。もうなんか今日は1日中これやってるよ。。
こんなにはまるつもりなかったのにな・・・

654 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 02:36:34 ID:5lSXhWR10]
>>653
やっぱり解らないが、
グローバルフックを使うプログラムではDLLを作る必要があるそうな。
ttp://hp.vector.co.jp/authors/VA016117/hook.html



655 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 04:35:08 ID:gzAwAjm60]
タスクトレイに出たアイコンを左シングルクリックしたとき、
特定のルーチンへ飛ばすことは可能ですか?

右クリックの項目はMenuで表示・追加できますが、
そもそも左クリックの設定は、あるのでしょうか。

656 名前:名無しさん@お腹いっぱい。 mailto:age [2008/06/03(火) 22:54:44 ID:w/zWe+Un0]
AutoHotKeyって標準出力を変数に格納して使う事は出来ないんでしょうか?
コマンドプロンプトに打ち込んだコマンドの標準出力を得るみたいな。
調べてみたところどうにも扱えないっぽいので、仕方なく一時的に作業ファイル・・・
つまり cmd > temp.dat みたいに吐いて、 FileReadLineで一行欲しい部分を読み込んで
対処したのですが、いちいち一時ファイル作るのも大げさかな?と。
その後FileDelete, temp.dat しないといけないし・・・。

657 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 23:48:20 ID:Qr7ynoy00]
>>656
>>473

658 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/03(火) 23:55:26 ID:DsQzXGtM0]
うわ、その時お世話になった467ですが
cmdret.dllもよかったけど、流行らせるページの管理人さんが作ったMy Scriptsにある
「プロセスを起動して標準出力を読み書き」の方が外部dllが要らない分使い易いかも

659 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 00:47:46 ID:IKCvfirm0]
ボタンを多数置くときの、飛び先について質問です。

下記のコードで、ボタンを10個設置します。
Loop,10
 {
 button_no=B%A_Index%
 Gui, Add, Button,G%button_no%,ボタン%A_INDEX%
 }

ボタンが押されたときの飛び先ですが、

B1:
B2:
B3:
B4:
B5:
B6:
B7:
B8:
B9:
B10:
ボタンが押された際に行う処理


10個までならなんとかなりますが、
あまり増えるとソースの可読性が悪くなってしまうので、
この「B1:〜B10:」を1つにまとめて書く方法は無いでしょうか。

参考にしたページ:流行らせるページのGオプション
lukewarm.s101.xrea.com/commands/Gui_Add.html

660 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 08:45:15 ID:de6Gu0Xr0]
全部同じラベルに飛ばしといて
押されたボタンの名前で分岐すれば

661 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 12:26:20 ID:Vao1bqW80]
タブファイラのX-FinderやTTBaseのUpperDirPluginにウィンドウの余白でクリックとかで上階層に移動するのがあるけど
あれこれツール増やすのもあれなのでAutoHotKeyでやろうと思ったのだが
ウィンドウの余白の検出はどうすればいいんでしょう・・?

とりあえずウィンドウの色で切り替えてやってみた・・
; 1/2
;ホイールクリックでウィンドウの余白なら上階層へ移動・アイコンの上ではダブルクリック
#Persistent
SetTimer,BlankClick,100
return
BlankClick:
{
MouseGetPos,posx,posy,WindowClass,ClassNN,1
IfInString,ClassNN,SysListView32 ; ファイルを開く・・すれば大体SysListView321になるような
{
pgx:=(posx-10) ; カーソル直下だと文字の隙間とかでうまくないので
pgy:=(posy-10) ; カーソルから(-10,-10)〜(+10,+10)を斜めにてきとーに走査
BlankState:=0 ; 0のままなら余白
Loop,20
{
PixelGetColor,undercolor,%pgx%,%pgy%
if(undercolor=="0xFFFFFF") ; ウィンドウの色を変えてると変えないと・
{
pgx++
pgy++
}
else
{
BlankState:=1 ; 別の色にかかったとき適当になんか入れる
break

662 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 12:27:00 ID:Vao1bqW80]
; 2/2
}
}
If(BlankState==0) ; 余白のとき
{
SetMButtonMode:=11 ; Hotkeyの切り替え用 11はBackspace
Hotkey,MButton,On ; ホイールクリックのホットキーを有効に
}
else
{
SetMButtonMode:=1 ; Hotkeyの切り替え用 1はダブルクリック
Hotkey,MButton,On
}
}
else
{
Hotkey,MButton,Off ; ホイールクリックのホットキーを有効に
}
MButton::
{
If(SetMButtonMode==1)
Click,LEFT,,,,2,
else If(SetMButtonMode==11)
Send,{BACKSPACE}
else
return
}

663 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 16:58:25 ID:de6Gu0Xr0]
#IfWinActiveでやれば?

664 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/05(木) 22:20:16 ID:3BKEexRx0]
その座標をクリックしてみれば、余白だったとき選択項目(フォーカスじゃなく)がゼロ個になるのでは



665 名前:661 mailto:sage [2008/06/05(木) 23:58:37 ID:Vao1bqW80]
MButtonの前の } が1個抜けてた・・

>>663
操作対象がClassNNの時に#IfWinActiveをどのように使うのでしょうか?

>>664
なんらかが選択された状態で余白をクリックしたとき、選択数がゼロ個になるのでは?ということでしょうか
ゼロ個になると思いますが・・そういうことではないとか?

666 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/06(金) 00:52:21 ID:lKgCTuVw0]
>>665
エクスプローラーの余白ダブルクリックで上階層と理解して最小限でやってみた。
フォルダ選択で1 個のオブジェクトを選択、ファイル選択でファイル情報、余白選択でX個のオブジェクトとステータスバーに表示される。
現状他のホットキー押して左クリックでも発動するけど気になるなら適当に直して下さい。

~LButton::
StatusBarGetText, State,Part1,ahk_class CabinetWClass
If (A_TimeSincePriorHotkey<200 && State<>1 個のオブジェクトを選択)
{
IfInString,State,個のオブジェクト
Send,{BackSpace}
}
Return

667 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/06(金) 01:54:43 ID:UApCHu8G0]
AutHotkeyでスクリプトを書き始めました。

デスクトップでダブルクリックした時に、ホットキー(Alt+Numpad1)を実行する
スクリプトを試行錯誤していて、
 ahk_class Progman
での条件判定だとうまくいかなかったところ、>>666のスクリプトを元に、こんな
風にしてみた。

~LButton::
MouseGetPos, MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%
If(A_TimeSincePriorHotkey<300 && color=0x984E00){
Send,!{Numpad1}
}
return

ウチのXPのデスクトップは0x984E00でいいみたいなんだけど、
どんな環境でも、デスクトップ上のダブルクリックを判定できる
ロジックってどんなのがありますか?



668 名前:665 mailto:sage [2008/06/06(金) 09:59:38 ID:89UJiJcz0]
>>666
StatusBarGetTextを使う手がありましたか
ExplorerとBrouseuiはこれ参考にシンプルにできるのがわかりましたが
無数のアプリにある ファイル-開く したときの ahk_class #32770 SysListView321 は対応できないです

>>667
MouseGetPosで拾えるウィンドウIDを
WinGetで調べたデスクトップProgmanのウィンドウIDと比較してみるとか
以下IDのテスト用

~LButton::
MouseGetPos,MouseX,MouseY,WindowID,ClassNN,1
WinGet,DesktopID,,ahk_class Progman
;If(A_TimeSincePriorHotkey<300 && DesktopID==WindowID)
;Send,!{Numpad1}
If(A_TimeSincePriorHotkey<300)
MsgBox,DesktopID %DesktopID% , WindowID %WindowID%
return


669 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/06(金) 10:48:46 ID:P8qHdnIt0]
>>668
問題はデスクトップかどうかの判定じゃないと思うのだが。
>667が言ってるのは多分あんたがつまづいてるとこと同じ

670 名前:665 mailto:sage [2008/06/06(金) 19:45:37 ID:89UJiJcz0]
>>669
うあそういうことか

>>667
自レスも含みますが>666であったファイルの選択の状態を取得する他の方法を探したところ
ControlGetが使えそうなのでそれでやってみたテスト

~LButton::
MouseGetPos,MouseX,MouseY,WindowID,ClassNN,1 ; カーソル下の情報を取得(ClassNN以下いらないような
WinGet,DesktopID,,ahk_class Progman ; デスクトップのウィンドウIDを取得
ControlGet,StateListView,List,Selected,%ClassNN%,ahk_id %WindowID% ; StateListViewにSysListView32の選択項目名を入れる
If(A_TimeSincePriorHotkey<300 && DesktopID==WindowID && StateListView=="") ; デスクトップ上である&選択項目がない
Send,!{Numpad1}
return

アイコンのないところでダブルクリックをしたとき、イベントを乗っ取らないダブルクリックなので、
丁度よく最初のクリックの時点でデスクトップがアクティブになって選択状態が外れる
同じ方法でエクスプローラ・Openダイアログ等の余白をダブルクリックで上階層移動もできる
選択項目を利用するので MButton:: 等では途中に左クリック入れるとかしないとそのままではできない・・

671 名前:667 mailto:sage [2008/06/07(土) 01:12:12 ID:93cVi9ld0]
>>670
すごい!デスクトップの色に関係なく動きました!
(ロジックに色判定がないからあたりまえだけど... )

ControlGetを含め、今回出てきた関数を少しずつ把握していこうと思います。

色やステータスバーではなく、コントロールのIDを参照していくのがキモなんですね。

流れをぶった切った質問になっちゃったと思いましたが、意外な関連があり、新鮮な
驚きです。

>>669もありがとうー。



672 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/08(日) 17:38:22 ID:moLBDXbX0]
Autohotkeyは日付の扱いは苦手なようなのですが、
「2008年1月1日の0時から10000秒後の時刻を求めたい」
みたいな感じのものを容易に計算できますでしょうか。
vbsならDateAdd("s", 10000"2008/01/01")で終わりなのですが。

673 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/08(日) 19:25:46 ID:jZi2GVYs0]
EnvAdd

674 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/08(日) 20:50:51 ID:moLBDXbX0]
>>673
日付計算のオプション合ったんですね。ありがとうございます。



675 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/09(月) 15:53:58 ID:R3Wd7FZq0]
ControlGetのSelectedでエディットコントロールの選択内容を取得したいのですが、
複数行のテキストを全て選択してる状態だとOutputVarが空になってしまいます。

なんとか正常に取得する方法はないのでしょうか?

676 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/09(月) 16:42:03 ID:beY3nkeJ0]
空でエラーレベルも正常なら
ControlGetTextで再取得するとか

677 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/09(月) 18:09:39 ID:R3Wd7FZq0]
ControlGetText忘れてましたorz

ErrorLevelも失敗の1が帰ってきますが、その場合はとりあえず
ControlGetTextで取得してPixelGetColorとかで選択状態を判別する事にします。

ご返答ありがとうございました。

678 名前:名無しさん@お腹いっぱい。 mailto:age [2008/06/09(月) 21:10:27 ID:ctvGfYpS0]
FileInstallでファイルを取り込みたいんですが、
取り込みはどうやら成功しているらしい(.ahk状態で実行して正常に実行可能、コンパイルエラーしない
かつ、Ahk2ExeでコンパイルしてEXE化も正常に出来る)んですが、

いざ出来上がったEXEを実行すると、取り込んだファイル全てが
Could not extract file: っていうダイアログが出てきて取り出せません・・・。
コードはこれです

;driverの中身全部を取り込み
;MsgBox, %A_WorkingDir%
FileInstall, driver\setupdrv.exe, \dest\setupdrv.exe, 1
FileInstall, driver\vnccom.sys, \dest\vnccom.sys, 1
FileInstall, driver\vncdrv.dll, \dest\vncdrv.dll, 1
FileInstall, driver\vncdrv.inf, \dest\vncdrv.inf, 1
FileInstall, driver\vncdrv.sys, \dest\vncdrv.sys, 1
FileInstall, driver\vnchelp.dll, \dest\vnchelp.dll, 1

%A_WorkingDir%からの相対パスで指定したいので、MsgBoxで出力してみると 最後の \ までは
入ってませんでしたので、 \dest とdestの前に\をつけてみました。最初は\なしでやってたの
ですが、どうしてもうまく動作しないので・・・。何がいけないんでしょうか?

679 名前:名無しさん@お腹いっぱい。 mailto:age [2008/06/10(火) 21:53:49 ID:SOxaqh3l0]
すみません、文字列の扱いについてお聞きしたいのですが、
どういうときに " "をつけて囲んで文字列と認識させる必要があるのでしょうか?
" " で囲まずにMsgBoxで出しても囲んでMsgBoxで出しても同じ結果が返ってくるかと
思いきや、囲んでないと何も出てこない時もあり、混乱しています。
普通C言語やJavaでは文字列は必ず " " で囲む物ですが、AHKではその辺
どうなってるのでしょうか?例えば
MsgBox, 文字列
だと「文字列」が出力され、
strValue := 文字列
MsgBox, %strValue%
だと空文字・・いやnullなのかな?どっちか分かりませんが「文字列」が出力されずに
何も出てきません・・・。

680 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/10(火) 22:02:45 ID:fQ25LVyb0]
>>679
× strValue := 文字列
○ strValue = 文字列

:=は、数値の計算結果を代入するときとかに使う。
よって右が文字の場合は、計算のしようが無いので空白になる

681 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/10(火) 22:35:38 ID:BhGK1USa0]
:= 使いたい時こそ " "で囲め

× strValue := 文字列
○ strValue := "文字列"

682 名前:679 mailto:age [2008/06/11(水) 00:28:19 ID:fVOKMAhU0]
レスありがとうございます。
なるほど、分かりました〜。

683 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 01:01:13 ID:Vk8WnOSz0]
str=hoge (変数strの中にhogeという文字列がある)として、
a=hoge
a:="hoge"
a:=str
a=%str%
以上のaの中はすべて文字列hogeである

また、次のif文もすべて同じ
if a=hoge
if a=%str%
if (a="hoge")
if (a=str)

684 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 02:12:24 ID:6MnSS32m0]
横から見ているだけでも役に立つスレだ



685 名前:679 mailto:age [2008/06/11(水) 07:55:51 ID:fVOKMAhU0]
>>683
おお〜、ありがとうございます〜・・・

なるほど・・・道理で素人の私が混乱するわけですよ・・・
色々な書き方があるんですねぇ・・・。

if(a == "hoge")
みたいな、  =(等しいか?)の変わりに ==(等しいか?)を使っても全く同じですか?
だとしたらどうしてこんな演算子があるんだろうかと・・・。

それと自分で試行錯誤して理解したのですが
Loop, 5
{
でブロック開始しないとLoopは正常に処理されない
Loop, 5 {
で開始するとなんかmissing "{" とかエラーが出て・・・。
でもif文は
if(a == "hoge") {
で開始しても
if(a == "hoge")

686 名前:679 mailto:age [2008/06/11(水) 07:58:36 ID:fVOKMAhU0]
途中で書き込んでしまいました。

でもif文は
if(a == "hoge") {
で開始しても
if(a == "hoge")
{
で開始してもどちらも問題なく動きます。

それとかif(a == str) { と% % で囲まずに変数名指定するだけで中身を見てくれるのに
IfWinExist, str
{
とかだと うまく動作せずに、 IfWinExist, %str% としないとだめのようです。
そしてこの構文も
IfWinExist, %str% {
ってやるとエラーが出て
IfWinExist, %str%
{
ってやると正常に動作するんですよ・・。正直言語仕様を理解するのが凄く大変です・・・。
どうしてこんなにトリッキーなんだろう・・。普通のJavaやCと同じような感じにしてくれれば・・・

687 名前:TpMOPuLyPJNoLl mailto:qzfykuue@vcgqowhp.com [2008/06/11(水) 08:02:18 ID:5Nax1wDx0]
comment2, <a href="www.titaniuexport.kiev.ua">titanium sheets</a>, [url="www.titaniuexport.kiev.ua"]titanium sheets[/url], www.titaniuexport.kiev.ua titanium sheets, >:PPP,

688 名前:yOUAjPuxjrUJV mailto:uvcgwhvk@hgdeslns.com [2008/06/11(水) 08:13:50 ID:+P08aPt30]
comment6, <a href="doorppcpc.com/dinosaurs/coloring-pictures-of-dinosaurs.html">coloring pictures of dinosaurs
</a>, doorppcpc.com/dinosaurs/coloring-pictures-of-dinosaurs.html coloring pictures of dinosaurs
, atbow, <a href="doorppcpc.com/dinosaurs/when-dinosaurs-went-extingged.html">when dinosaurs went extingged
</a>, doorppcpc.com/dinosaurs/when-dinosaurs-went-extingged.html when dinosaurs went extingged
, =[[, <a href="doorppcpc.com/medicine/humphries-medicine.html">humphries medicine
</a>, doorppcpc.com/medicine/humphries-medicine.html humphries medicine
, lsj,

689 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 09:13:53 ID:FV4NCQQL0]
>>686
始めは %str% しか使えなかったんだよ
わかりにくいからって後から従来言語互換を追加していった結果カオスになった。

ちなみに
if(a == "hoge") だと厳密な文字列チェック(大文字小文字区別)
if(a = "hoge")  はStringCaseSense依存、デフォだと Hoge、HOGE でもOK


690 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 09:52:21 ID:1HOSiKnd0]
後方互換をちゃんと取ってるのはいいけど、古い仕様はobsoleteで非推奨
ってちゃんとドキュメントに書いてくれたらいいのに

691 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 13:47:40 ID:uoudNQeM0]
そこら辺たしかになんとかして欲しいな。
時々しかスクリプト書かないので
一度覚えてもすぐ忘れて間違えてしまう。

692 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 14:20:51 ID:OcZxtXTQ0]
>>691
わかる。最初AHKでと思うんだけど、すぐに面倒になってHotKey以外の部分は
UWSCで書き出す自分…

693 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 15:16:17 ID:JuWezgpD0]
逆に俺はAHKに慣れすぎてたまにvbsとかjsかくと無意識に変数を%で囲ったりしてる

694 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 16:52:35 ID:rC/xuCxH0]
俺も変数の使い方の部分で1週間ぐらい悩んだな
今でもたまに間違うし



695 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 17:20:20 ID:GfcCYN010]
覚えるのもあほらしいから
毎回何パターンか試して動いたらおkってことにしてるお

696 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 21:16:10 ID:6MnSS32m0]
俺は、%で囲う作業すら面倒になったので、
Win+Vを押すと、クリップボードの内容に%〜%をつけて出力するようにした

string=%Clipboard%
string=`%%string%`%

697 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/11(水) 22:11:00 ID:P7T3f9Wt0]
お前ら丸暗記しようとするから混乱するんだよ
値で扱うか、式で扱うかだけだよ

値で扱う物は文字列は値となるので、変数を使いたい場合に%%で展開しなければならない。
式で扱う物は文字列は変数になってしまうので、文字列を値で扱う為には""で囲まなければならない。

 (値) : (式)
コマンド : 関数
  =  :  :=
  if  :  if()

さらに大まかに分けると、:=と()内は式が使えるとだけ覚えればいい

698 名前:名無しさん@お腹いっぱい。 [2008/06/12(木) 10:10:17 ID:LFiheMSR0]
こんにちは。最近AutoHotKeyを使い始めました。

PDF-XChange Viewer にて、以下のように
スペースキーを右矢印
シフト+スペースキーを左矢印
に置き換えようとしたのですが、
シフト+スペースキーが効きません。

; for PDF-XChange Viewer
#IfWinActive ahk_class DSUI:PDFXCViewer
+Space::Left
Space::Right
#IfWinActive

AutoHotKeyのKey history and script infoでみたいたところ、
Left以外に最初に押したシフトが押されたままになってしまっています。
ところが、PDF-XChange Viewerでは、シフト+右矢印は無効になります。
(右矢印のみは問題ない)
シフト+スペースを押したときに、右矢印のみを押すことはできないでしょうか?
つまり、シフト+スペース時に、シフトを無効にしたいのですが・・・

699 名前:698 [2008/06/12(木) 10:29:25 ID:LFiheMSR0]
これでいけました!

; for PDF-XChange Viewer
#IfWinActive ahk_class DSUI:PDFXCViewer
+Space::
Send {Left}
return
Space::Right
#IfWinActive

お騒がせしました。ご協力いただきありがとうございました。

700 名前:698 [2008/06/12(木) 10:30:33 ID:LFiheMSR0]
あ、returnは余計でしたね。一行でいけるのか
+Space::Send {Left}

701 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/06/12(木) 18:08:31 ID:FoxozYwL0]
マウスをドラッグ中にカーソルを変更したいのですが、
AHKスクリプト内で、マウスカーソルを変更する方法はありますか?

現在のカーソルの種類を読み出すコマンドはあるようですが、
指定する方法は見つけられない状態でして・・・






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<228KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef