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スクリプト内で、マウスカーソルを変更する方法はありますか?
現在のカーソルの種類を読み出すコマンドはあるようですが、
指定する方法は見つけられない状態でして・・・