08/05/25 17:01:33 DsBFwt0y0
すいません。WheelScroll.ahkですが
Vieasというイメージビューアソフトのマウスホイールでの画像の拡大・縮小が無効になってしまうので
#IfWinNotActive ahk_class Vieas_vwin_class
WheelDown:: WheelRedirect()
WheelUp:: WheelRedirect()
;Shiftホイールで横スクロール
+WheelDown:: WheelRedirect(1)
+WheelUp:: WheelRedirect(1)
#IfWinActive
と書き換えてみたのですが、これだとVieasのウィンドウがアクティブになっているときに下のウィンドウが
マウスホイールでスクロールできません。
マウスホイールが通常動作するクラスを指定するというようなことはできないでしょうか?
608:名無しさん@お腹いっぱい。
08/05/25 17:03:41 7/PfvJsA0
>>606
おおっ
>!j::Send,{Numpad1}と
>^/::Send,{NumpadEnter}
で右Altや右Crtlでいけました。有難うございます。
仕様と思います。AHKさいこー。
609:603
08/05/25 18:20:04 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:名無しさん@お腹いっぱい。
08/05/25 21:29:11 PNVW0ixZ0
>>607
VieasのメインウィンドウだとControlが存在せずハンドルが取れてなかったみたい。
コントロールが取れない時はウィンドウハンドルを指定してWHEEL投げるように修正かけました。
URLリンク(lukewarm.s101.xrea.com)
611:名無しさん@お腹いっぱい。
08/05/25 23:50:21 DsBFwt0y0
>>610
ありがとうございます。動作確認しました。
やっぱりAHKいいですね。アプリケーションを問わずに操作できるのがいい。
自分もいろいろ書けるようになるといいんですけどね。
612:名無しさん@お腹いっぱい。
08/05/26 23:03:49 xhUv6vGn0
Guiの質問です。
例
Gui, Add, Picture,Section,***
で作成すると、ClassNNに「Static**」という名称が割り当てられますが、
作成したGuiのClassNNを、特定の文字列で指定することは可能でしょうか。
613:名無しさん@お腹いっぱい。
08/05/27 01:11:05 0qIAl9sc0
Excelで平成20年1月1日を ^#Dとホットキーを使った場合に
2008/01/01 とするにはどうしたらいいでしょうか?
#IfWinActive ahk_class XLMAIN
^#D:: このあとどのように記載したらいいか教えてください.
よろしくお願いいたします.
614:名無しさん@お腹いっぱい。
08/05/27 01:33:15 10H1JCGL0
2chで使われているような「1201502896」の形式の日付を、
YYYYMMDD形式に変換するには、どのような解決方法が
ありますでしょうか。
615:名無しさん@お腹いっぱい。
08/05/27 01:44:23 mvWayqr00
>>613
Ctrl+CをSendしてStringReplaceしてから
はっつければいいんでは?
>>614
19700101000000 にその数値を秒数で足せば良いんじゃないかな?
616:名無しさん@お腹いっぱい。
08/05/27 03:35:18 4BLlhUiO0
窓キーと3を押すのをトリガーにしようとして
# & 3::hogehoge
と書いたらキーボードの3が効かなくなりました。
そこで、
#3::hogehogeと書き直したら直りました。
これは既知の現象ですか?
617:名無しさん@お腹いっぱい。
08/05/27 03:40:10 4BLlhUiO0
>>616
間違えた。
窓キーと2をトリガーにしようとして
# & 2と書いたら3のキーが効かなくなった、というのが正しいです。
618:名無しさん@お腹いっぱい。
08/05/27 03:46:50 Ci2ft8P00
>>616
一つ目のキー自体のもともとの機能は無効化される。
一つ目のキーにチルダ(~)をつければ、そのキーは無効化されず、普通に入力される。
一つにつけておけば、一つ目のキーが同じほかのホットキーでは指定されていなくても、そのキーは無効化されなくなる。
#はShift+3の#と勘違いされただけ。使い方が間違っている。Win & 3て書かないと。
619:名無しさん@お腹いっぱい。
08/05/27 04:03:06 4BLlhUiO0
>>617
連投済まん。
Hotkeys (Mouse, Joystick and Keyboard Shortcuts)のヘルプにあったこれが答えかも。
lose its original/native function when it is pressed by itself
#がある3のキーが効かなくなることが説明できますね。
人騒がせで済みませんでした。夜中にパニックに陥っていたもので。。。(汗
620:名無しさん@お腹いっぱい。
08/05/27 04:04:31 4BLlhUiO0
>>618
おっ!書き込んでから発見しました。
こんな夜中にありがとうございます。
621:名無しさん@お腹いっぱい。
08/05/27 12:14:58 10H1JCGL0
>>615
ありがとうございます。変換できました。
622:名無しさん@お腹いっぱい。
08/05/27 13:47:20 3gCvGmfE0
>>613
^#D:: Send,^1!c{End}!tyyyy/mm/dd{Enter}
んでも IME ONだと失敗するし、素直にExcelマクロで
Selection.NumberFormatLocal = "yyyy/mm/dd"
したほうがスマートだと思うが。
623:名無しさん@お腹いっぱい。
08/05/27 13:53:59 3gCvGmfE0
↑はExcel2002の場合ね、他のバージョンだとアクセラレータキー違うかもしれんし上手く動くかわからん。
Winキー発動はできんけどやっぱマクロ作ってでショートカットキー割り当てたほうがいいと思う。
624:名無しさん@お腹いっぱい。
08/05/27 19:03:51 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:名無しさん@お腹いっぱい。
08/05/27 20:49:16 mvWayqr00
AutoTrimをOffにする
626:613
08/05/28 05:54:16 vTCC4uvQ0
皆さん お返事遅くてごめんなさい
>>615
ありがとうございます
>>622
>>623
マクロは考えてなかったです.
AHKにこだわりすぎました
EXCELマクロでやらせていただきます.
ありがとうございます.
627:名無しさん@お腹いっぱい。
08/05/29 14:00:51 b2k6dMVD0
CTRLのダブルタップを
URLリンク(lukewarm.s101.xrea.com)
を参考にしてやってみたんですが、CTRLを少し押し続けた場合も
起動してしまいます。キーリピートのせいだと思うんですが。
>>389も同様でした。
回避策はありますか?
628:627
08/05/29 15:45:51 b2k6dMVD0
キーリピートの設定を遅くしたらましになったんですが、
他のキーは普通にリピートして欲しいです。
CTRLだけリピートを殺すといった事ができるといいんですが。
629:名無しさん@お腹いっぱい。
08/05/29 16:59:33 SXLiQ+Fi0
そもそもCtrlキーにリピートがあるのか?
630:名無しさん@お腹いっぱい。
08/05/29 17:39:08 lv3ZoJSv0
>>628
URLリンク(lukewarm.s101.xrea.com)
ここにサンプルある。2カ所KeyWait入ってるけど上は要らんようなキガス
~CTRL::
if(A_PriorHotkey <> A_ThisHotkey){
return
}
if(A_TimeSincePriorHotkey > 400){
KeyWait, Ctrl
return
}
tooltip, double tap!
return
631:627
08/05/29 17:55:57 b2k6dMVD0
>>630
ありがとうございます。
書いてくださった方法でばっちりダブルタップでき、長押しも回避できました。
632:名無しさん@お腹いっぱい。
08/05/30 20:08:14 yj8hQgNw0
DllCallでLCMapStringを使って文字列を操作したいのですが
引数の型がまったくわからず、どうやってもErrorLevelが-2になってしまいます
どう書けばよいのかお教え願えないでしょうか?
633:名無しさん@お腹いっぱい。
08/05/30 20:47:51 QxYMGk4z0
非アクティブのiTunesの停止、再生をしたくて↓のようにしてみたんですが
動きません。
#i::
DetectHiddenWindows,On
ControlSend,WinTitle,{Space},iTunes
return
下のようにクラス指定しても無理でした。
ControlSend,,{Space},ahk_class iTunes
試してみたら、そもそもアクティブにしてもだめだったんですが、打開策はありますか?
634:名無しさん@お腹いっぱい。
08/05/31 08:25:01 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
08/05/31 09:24:36 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:名無しさん@お腹いっぱい。
08/05/31 16:10:10 ErfB/+jr0
>>634
>メモリが2,000か6,000K(1:4の割合で変化)
の意味が全くわからない
そしてスクリプトで何をしようとしてるのか解説が一切ないので、
なにをやってるのかわからない
結論:いくらチラ裏とはいえ、他人にわかるように書きましょう
637:名無しさん@お腹いっぱい。
08/05/31 16:21:21 nD99XO9q0
>>636
正直それはおまえさんの読解力の問題な気が…
638:名無しさん@お腹いっぱい。
08/05/31 17:51:19 17jzD8JC0
繭からやっと移行できたと思ったら
これSynergy経由じゃ動かないのかorz
639:名無しさん@お腹いっぱい。
08/05/31 19:17:34 nD99XO9q0
>>638
動いたり動かなかったり。
>>4の無変換+ijklの矢印割り当てくらいなら動いたりするけど、
{Blind}の部分が効かなかったりとか。
640:名無しさん@お腹いっぱい。
08/06/01 00:07:10 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:名無しさん@お腹いっぱい。
08/06/01 00:32:29 f367mMfv0
>>640
SleepのタイミングについてはPCスペックや同時に動いてるアプリとの兼合いもあるので
自力で調整値を探すしかない。
だが、ALT+TAB使うより Activeウィンドウ操作系のコマンド使ったほうが成功率は上がると思われ
WinGet, hwnd,ID,A
Run,問題のプログラム.EXE
WinWaitActive,問題のプログラムのタイトル
Sleep,任意の待ち時間
WinActivate,ahk_id %hwnd%
642:名無しさん@お腹いっぱい。
08/06/02 12:52:34 +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:名無しさん@お腹いっぱい。
08/06/02 13:34:40 0QKb9v/r0
探した座標使ってないじゃん
MouseClick使え
644:名無しさん@お腹いっぱい。
08/06/02 13:55:40 Yyr2zU0/0
なにそのLoop
645:名無しさん@お腹いっぱい。
08/06/02 17:51:59 T5SyNYp+0
Loop,fileなどで読んだファイル名にUnicode文字が含まれると、
「A_LoopFileName」などの変数で、ファイル名のUnicode部分が
ハテナに置き換わってしまいます。
結果、ループの中に居るのに対象ファイルが
見つからない事態になってしまいます。
そこで、ループ中にA_LoopFileNameの実体を読んで、エラーなら、
FileMoveで A_LoopFileName → Unicode部分を削除したA_LoopFileName
とリネームを試みたのですが、Renameする時点で元ファイルが
見つからず、できませんでした。よい解決法はないでしょうか。
なお、対象となるファイルは自分で作成したものではないため、
事前にリネームするのは厳しいという状況です。
646:名無しさん@お腹いっぱい。
08/06/02 18:48:58 K9ohG56c0
「IMEが変換中」という状態を取得したいのだけど、できない。。
誰か俺が調べた限りの情報出すから助けて。
1.AHKのSendMessageを使用する
2.使用する(と思われる)API/WM_IME_COMPOSITION
URLリンク(kumei.ne.jp)
URLリンク(www.winapi-database.com)
おまけ.IMEの参考
URLリンク(lukewarm.s101.xrea.com)
つってもこれだけなんだけどね。
もうだめぽ・・・
647:名無しさん@お腹いっぱい。
08/06/02 18:50:10 K9ohG56c0
あ、直リンしちゃった。。ごめんちゃい。
648:名無しさん@お腹いっぱい。
08/06/02 20:33:23 0QKb9v/r0
>>645
TransformのUnicode, String
を使えばどうにかならんかね?
649:名無しさん@お腹いっぱい。
08/06/02 21:06:24 B0W6ZYcf0
>>646
俺もいろいろ調べたんだけど、
AHKからは他プロセスの入力コンテキストハンドラ hIMC を取得できない
(ImmGetContext が NULL しか返さない) ので、うまくいかないみたい。
URLリンク(www.zero.co.jp)
こんな情報があるけど、俺には使いこなせない orz
650:名無しさん@お腹いっぱい。
08/06/02 21:25:10 T5SyNYp+0
>>648
ありがとうございます。
さっそく試してみたところ、transformに渡す対象文字「string」の
内容自体がすでに「?」に変わってしまっているようです。
結果をファイルに書き出して確認したところ、壊れた結果でした。
651:名無しさん@お腹いっぱい。
08/06/02 22:59:30 uDIyl+SM0
>>645
過去ログ>538-550あたりを読むと幸せになれるかも。試してないからわからんけど
652:名無しさん@お腹いっぱい。
08/06/03 00:24:59 8JqjvJlr0
AttachThreadInputしてみたら?
653:646
08/06/03 02:00:34 mB5Ni4140
>>649 のくれたリンクからファイル落としたんだけど、その中に
>各々のアプリケーションのスレッドはスレッドにアタッチされた複数のIME ウィンドウを持つようになった
って書いてあったので、GetWindowThreadProcessIdとSpy++使って調べてみました。
試しにメモ帳では、「メモ帳」と「メモ帳の入力域」は同じプロセスID・スレッドIDなんだけど、
問題はアクティブウィンドウではなく、IMEのプロセスID・スレッドIDが必要ってことなのかな?
うーん、わかりそうでわからん。。もうなんか今日は1日中これやってるよ。。
こんなにはまるつもりなかったのにな・・・
654:名無しさん@お腹いっぱい。
08/06/03 02:36:34 5lSXhWR10
>>653
やっぱり解らないが、
グローバルフックを使うプログラムではDLLを作る必要があるそうな。
URLリンク(hp.vector.co.jp)
655:名無しさん@お腹いっぱい。
08/06/03 04:35:08 gzAwAjm60
タスクトレイに出たアイコンを左シングルクリックしたとき、
特定のルーチンへ飛ばすことは可能ですか?
右クリックの項目はMenuで表示・追加できますが、
そもそも左クリックの設定は、あるのでしょうか。
656:名無しさん@お腹いっぱい。
08/06/03 22:54:44 w/zWe+Un0
AutoHotKeyって標準出力を変数に格納して使う事は出来ないんでしょうか?
コマンドプロンプトに打ち込んだコマンドの標準出力を得るみたいな。
調べてみたところどうにも扱えないっぽいので、仕方なく一時的に作業ファイル・・・
つまり cmd > temp.dat みたいに吐いて、 FileReadLineで一行欲しい部分を読み込んで
対処したのですが、いちいち一時ファイル作るのも大げさかな?と。
その後FileDelete, temp.dat しないといけないし・・・。
657:名無しさん@お腹いっぱい。
08/06/03 23:48:20 Qr7ynoy00
>>656
>>473
658:名無しさん@お腹いっぱい。
08/06/03 23:55:26 DsQzXGtM0
うわ、その時お世話になった467ですが
cmdret.dllもよかったけど、流行らせるページの管理人さんが作ったMy Scriptsにある
「プロセスを起動して標準出力を読み書き」の方が外部dllが要らない分使い易いかも
659:名無しさん@お腹いっぱい。
08/06/05 00:47:46 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オプション
URLリンク(lukewarm.s101.xrea.com)
660:名無しさん@お腹いっぱい。
08/06/05 08:45:15 de6Gu0Xr0
全部同じラベルに飛ばしといて
押されたボタンの名前で分岐すれば
661:名無しさん@お腹いっぱい。
08/06/05 12:26:20 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:名無しさん@お腹いっぱい。
08/06/05 12:27:00 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:名無しさん@お腹いっぱい。
08/06/05 16:58:25 de6Gu0Xr0
#IfWinActiveでやれば?
664:名無しさん@お腹いっぱい。
08/06/05 22:20:16 3BKEexRx0
その座標をクリックしてみれば、余白だったとき選択項目(フォーカスじゃなく)がゼロ個になるのでは
665:661
08/06/05 23:58:37 Vao1bqW80
MButtonの前の } が1個抜けてた・・
>>663
操作対象がClassNNの時に#IfWinActiveをどのように使うのでしょうか?
>>664
なんらかが選択された状態で余白をクリックしたとき、選択数がゼロ個になるのでは?ということでしょうか
ゼロ個になると思いますが・・そういうことではないとか?
666:名無しさん@お腹いっぱい。
08/06/06 00:52:21 lKgCTuVw0
>>665
エクスプローラーの余白ダブルクリックで上階層と理解して最小限でやってみた。
フォルダ選択で1 個のオブジェクトを選択、ファイル選択でファイル情報、余白選択でX個のオブジェクトとステータスバーに表示される。
現状他のホットキー押して左クリックでも発動するけど気になるなら適当に直して下さい。
~LButton::
StatusBarGetText, State,Part1,ahk_class CabinetWClass
If (A_TimeSincePriorHotkey<200 && State<>1 個のオブジェクトを選択)
{
IfInString,State,個のオブジェクト
Send,{BackSpace}
}
Return
667:名無しさん@お腹いっぱい。
08/06/06 01:54:43 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
08/06/06 09:59:38 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:名無しさん@お腹いっぱい。
08/06/06 10:48:46 P8qHdnIt0
>>668
問題はデスクトップかどうかの判定じゃないと思うのだが。
>667が言ってるのは多分あんたがつまづいてるとこと同じ
670:665
08/06/06 19:45:37 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
08/06/07 01:12:12 93cVi9ld0
>>670
すごい!デスクトップの色に関係なく動きました!
(ロジックに色判定がないからあたりまえだけど... )
ControlGetを含め、今回出てきた関数を少しずつ把握していこうと思います。
色やステータスバーではなく、コントロールのIDを参照していくのがキモなんですね。
流れをぶった切った質問になっちゃったと思いましたが、意外な関連があり、新鮮な
驚きです。
>>669もありがとうー。
672:名無しさん@お腹いっぱい。
08/06/08 17:38:22 moLBDXbX0
Autohotkeyは日付の扱いは苦手なようなのですが、
「2008年1月1日の0時から10000秒後の時刻を求めたい」
みたいな感じのものを容易に計算できますでしょうか。
vbsならDateAdd("s", 10000"2008/01/01")で終わりなのですが。
673:名無しさん@お腹いっぱい。
08/06/08 19:25:46 jZi2GVYs0
EnvAdd
674:名無しさん@お腹いっぱい。
08/06/08 20:50:51 moLBDXbX0
>>673
日付計算のオプション合ったんですね。ありがとうございます。
675:名無しさん@お腹いっぱい。
08/06/09 15:53:58 R3Wd7FZq0
ControlGetのSelectedでエディットコントロールの選択内容を取得したいのですが、
複数行のテキストを全て選択してる状態だとOutputVarが空になってしまいます。
なんとか正常に取得する方法はないのでしょうか?
676:名無しさん@お腹いっぱい。
08/06/09 16:42:03 beY3nkeJ0
空でエラーレベルも正常なら
ControlGetTextで再取得するとか
677:名無しさん@お腹いっぱい。
08/06/09 18:09:39 R3Wd7FZq0
ControlGetText忘れてましたorz
ErrorLevelも失敗の1が帰ってきますが、その場合はとりあえず
ControlGetTextで取得してPixelGetColorとかで選択状態を判別する事にします。
ご返答ありがとうございました。
678:名無しさん@お腹いっぱい。
08/06/09 21:10:27 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:名無しさん@お腹いっぱい。
08/06/10 21:53:49 SOxaqh3l0
すみません、文字列の扱いについてお聞きしたいのですが、
どういうときに " "をつけて囲んで文字列と認識させる必要があるのでしょうか?
" " で囲まずにMsgBoxで出しても囲んでMsgBoxで出しても同じ結果が返ってくるかと
思いきや、囲んでないと何も出てこない時もあり、混乱しています。
普通C言語やJavaでは文字列は必ず " " で囲む物ですが、AHKではその辺
どうなってるのでしょうか?例えば
MsgBox, 文字列
だと「文字列」が出力され、
strValue := 文字列
MsgBox, %strValue%
だと空文字・・いやnullなのかな?どっちか分かりませんが「文字列」が出力されずに
何も出てきません・・・。
680:名無しさん@お腹いっぱい。
08/06/10 22:02:45 fQ25LVyb0
>>679
× strValue := 文字列
○ strValue = 文字列
:=は、数値の計算結果を代入するときとかに使う。
よって右が文字の場合は、計算のしようが無いので空白になる
681:名無しさん@お腹いっぱい。
08/06/10 22:35:38 BhGK1USa0
:= 使いたい時こそ " "で囲め
× strValue := 文字列
○ strValue := "文字列"
682:679
08/06/11 00:28:19 fVOKMAhU0
レスありがとうございます。
なるほど、分かりました~。
683:名無しさん@お腹いっぱい。
08/06/11 01:01:13 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:名無しさん@お腹いっぱい。
08/06/11 02:12:24 6MnSS32m0
横から見ているだけでも役に立つスレだ
685:679
08/06/11 07:55:51 fVOKMAhU0
>>683
おお~、ありがとうございます~・・・
なるほど・・・道理で素人の私が混乱するわけですよ・・・
色々な書き方があるんですねぇ・・・。
if(a == "hoge")
みたいな、 =(等しいか?)の変わりに ==(等しいか?)を使っても全く同じですか?
だとしたらどうしてこんな演算子があるんだろうかと・・・。
それと自分で試行錯誤して理解したのですが
Loop, 5
{
でブロック開始しないとLoopは正常に処理されない
Loop, 5 {
で開始するとなんかmissing "{" とかエラーが出て・・・。
でもif文は
if(a == "hoge") {
で開始しても
if(a == "hoge")
686:679
08/06/11 07:58:36 fVOKMAhU0
途中で書き込んでしまいました。
でもif文は
if(a == "hoge") {
で開始しても
if(a == "hoge")
{
で開始してもどちらも問題なく動きます。
それとかif(a == str) { と% % で囲まずに変数名指定するだけで中身を見てくれるのに
IfWinExist, str
{
とかだと うまく動作せずに、 IfWinExist, %str% としないとだめのようです。
そしてこの構文も
IfWinExist, %str% {
ってやるとエラーが出て
IfWinExist, %str%
{
ってやると正常に動作するんですよ・・。正直言語仕様を理解するのが凄く大変です・・・。
どうしてこんなにトリッキーなんだろう・・。普通のJavaやCと同じような感じにしてくれれば・・・
687:TpMOPuLyPJNoLl
08/06/11 08:02:18 5Nax1wDx0
comment2, <a href="URLリンク(www.titaniuexport.kiev.ua)<)"]titanium sheets[/url], URLリンク(www.titaniuexport.kiev.ua) titanium sheets, >:PPP,
688:yOUAjPuxjrUJV
08/06/11 08:13:50 +P08aPt30
comment6, <a href="URLリンク(doorppcpc.com)">coloring pictures of dinosaurs
</a>, URLリンク(doorppcpc.com) coloring pictures of dinosaurs
, atbow, <a href="URLリンク(doorppcpc.com)">when dinosaurs went extingged
</a>, URLリンク(doorppcpc.com) when dinosaurs went extingged
, =[[, <a href="URLリンク(doorppcpc.com)">humphries medicine
</a>, URLリンク(doorppcpc.com) humphries medicine
, lsj,
689:名無しさん@お腹いっぱい。
08/06/11 09:13:53 FV4NCQQL0
>>686
始めは %str% しか使えなかったんだよ
わかりにくいからって後から従来言語互換を追加していった結果カオスになった。
ちなみに
if(a == "hoge") だと厳密な文字列チェック(大文字小文字区別)
if(a = "hoge") はStringCaseSense依存、デフォだと Hoge、HOGE でもOK
690:名無しさん@お腹いっぱい。
08/06/11 09:52:21 1HOSiKnd0
後方互換をちゃんと取ってるのはいいけど、古い仕様はobsoleteで非推奨
ってちゃんとドキュメントに書いてくれたらいいのに
691:名無しさん@お腹いっぱい。
08/06/11 13:47:40 uoudNQeM0
そこら辺たしかになんとかして欲しいな。
時々しかスクリプト書かないので
一度覚えてもすぐ忘れて間違えてしまう。
692:名無しさん@お腹いっぱい。
08/06/11 14:20:51 OcZxtXTQ0
>>691
わかる。最初AHKでと思うんだけど、すぐに面倒になってHotKey以外の部分は
UWSCで書き出す自分…
693:名無しさん@お腹いっぱい。
08/06/11 15:16:17 JuWezgpD0
逆に俺はAHKに慣れすぎてたまにvbsとかjsかくと無意識に変数を%で囲ったりしてる
694:名無しさん@お腹いっぱい。
08/06/11 16:52:35 rC/xuCxH0
俺も変数の使い方の部分で1週間ぐらい悩んだな
今でもたまに間違うし
695:名無しさん@お腹いっぱい。
08/06/11 17:20:20 GfcCYN010
覚えるのもあほらしいから
毎回何パターンか試して動いたらおkってことにしてるお
696:名無しさん@お腹いっぱい。
08/06/11 21:16:10 6MnSS32m0
俺は、%で囲う作業すら面倒になったので、
Win+Vを押すと、クリップボードの内容に%~%をつけて出力するようにした
string=%Clipboard%
string=`%%string%`%
697:名無しさん@お腹いっぱい。
08/06/11 22:11:00 P7T3f9Wt0
お前ら丸暗記しようとするから混乱するんだよ
値で扱うか、式で扱うかだけだよ
値で扱う物は文字列は値となるので、変数を使いたい場合に%%で展開しなければならない。
式で扱う物は文字列は変数になってしまうので、文字列を値で扱う為には""で囲まなければならない。
(値) : (式)
コマンド : 関数
= : :=
if : if()
さらに大まかに分けると、:=と()内は式が使えるとだけ覚えればいい
698:名無しさん@お腹いっぱい。
08/06/12 10:10:17 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
08/06/12 10:29:25 LFiheMSR0
これでいけました!
; for PDF-XChange Viewer
#IfWinActive ahk_class DSUI:PDFXCViewer
+Space::
Send {Left}
return
Space::Right
#IfWinActive
お騒がせしました。ご協力いただきありがとうございました。
700:698
08/06/12 10:30:33 LFiheMSR0
あ、returnは余計でしたね。一行でいけるのか
+Space::Send {Left}
701:名無しさん@お腹いっぱい。
08/06/12 18:08:31 FoxozYwL0
マウスをドラッグ中にカーソルを変更したいのですが、
AHKスクリプト内で、マウスカーソルを変更する方法はありますか?
現在のカーソルの種類を読み出すコマンドはあるようですが、
指定する方法は見つけられない状態でして・・・