AutoHotkey スレッド part27

■ このスレッドは過去ログ倉庫に格納されています
2019/04/20(土) 23:32:53.28ID:cTmLtZyf0
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512
!extend:on:vvvvv:1000:512

■配布元
http://ahkscript.org/download/

■前スレ
AutoHotkey スレッド part26
https://egg.5ch.net/test/read.cgi/software/1524647289/

■日本語解説等
AutoHotkey Wik
http://ahkwiki.net
AutoHotkeyを流行らせるページ(ミラー)
http://ahk.xrea.jp/ (不調時は http://hdd.s300.xrea.com/ahk/ )
AutoHotkeyJp(過去ログdatあり)
http://sites.google.com/site/autohotkeyjp/
Autohotkey日本語ヘルプ(chmファイル)
http://www6.atwiki.jp/eamat/
Autohotkey専用うpろだ
http://ux.getuploader.com/autohotkeyl/
簡易スクリプト掲示板
http://pastebin.com/

■派生版
IronAhk (.NET製、クロスプラットフォーム)
https://github.com/polyethene/IronAHK
AutoHotkey.dll (真のマルチスレッド対応など, AHKLの派生)
http://www.autohotkey.com/board/topic/39588-autohotkeydll/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2)
2020/01/27(月) 13:50:13.61ID:ILzVRi6q0
それは「*.拡張子」と完全一致する時しか真にならないから
2020/01/27(月) 14:35:43.55ID:PCCRfwfV0
instrかstringgetposかregexmatchを使う
いずれにしてもワイルドカードは使えないので
正確にやるならお尻から3文字切り出してから比較などの工夫が必要
2020/01/27(月) 16:02:46.81ID:o+dKNXE50
1
セットタイトルマッチモードの仕様が書いてないからどれで突き合わせてるかわからん

2
IF文中にワイルドカードって使えたっけ?
使えたらごめんよ
でもその条件ならIF contains式でいいんちゃう?

3
そもそもの話としてAutohotkeyのClipboard関係は信用が置けないので一工夫がいるのも気をつける
測ってみたところ300ms後にクリップボードがうまるようなファイルもあった
2020/01/27(月) 18:30:10.90ID:dv4SnxNn0
皆様ご回答ありがとうございます。
ワイルドカード使えなかったの知りませんでした、すみません。
おっしゃるとおり、拡張子の3文字を取り出すstringright関数でできました。
大変助かりました。
2020/01/28(火) 04:02:03.76ID:uvycofvT0
>>770
>>772-774
突っ込みどころ満載なので・・・。

フック使って無いのでSendに反応してホットキー無限ループ
複数選択した場合は意図しないことになる
クリップボードのタイムアウト、保管
拡張子を取り出すのに文字数では確実ではない
2020/01/28(火) 04:22:38.07ID:uvycofvT0
なにか規制に引っかかってたのでこちらで

https://pastebin.com/XHbmr3jb
2020/01/28(火) 09:13:48.16ID:N1Ohwwsr0
RegExでやるならループ使わなくても最初の行の最後のドット以降の文字を切り出せるので
もうちょい圧縮はできそう
2020/01/28(火) 09:18:08.14ID:VrzJrfuI0
4文字取り出せばいいだけ
といってもRegEx使ったほうがいいと思うけど
2020/01/28(火) 09:58:42.42ID:uvycofvT0
>>777
エディタでまとめて開くならループが必要

>>778
MS-DOSやWindows3.xまでの(8.3形式)なら拡張子の長さは3文字
今は自由な長さなので文字数指定は使い物にならん
2020/01/28(火) 10:07:38.51ID:S4ZqAouK0
Forループ版
Exts := "ahk,bat,ps1" ;コンマ区切り
Send ^c
For i, v in StrSplit(Clipboard, "`n") {
 SplitPath, v,,, Ext
 if Ext contains %Exts% ;in不可
  MsgBox, %v%
}
2020/01/28(火) 10:24:34.42ID:uvycofvT0
>>780
部分一致は駄目でしょうが
2020/01/28(火) 11:47:45.97ID:VrzJrfuI0
>>779
そんなこと言われなくても分かってる
少なくとも質問者は3文字の拡張子を想定してるから4文字と言っただけ
"."+拡張子でチェックすればいいって言い直さないと理解出来ない?
2020/01/28(火) 13:50:01.87ID:27uwmOduM
当人しか使わない個人的なスクリプトに関しては無理に完璧を記さなくても限られた状況下でだけ動けばいい場合も多いし
利用者本人が想定してないことまで無理に盛り込まんでもいいとは思うね

完全なコードを他人が丸ごと貼ってやっても理解できないことの方が多いだろうし
細かいとこは不完全でも本人が考えて書いたものを問題を感じた時に改修してく感じでいいんでない
多分そういう前提でヒントレスしてる人が多いと思う
2020/01/28(火) 14:58:38.88ID:rsW/ZSX50
USキーボードは変換・無変換無双ができないから
大・大・大・嫌いだわ
2020/01/28(火) 18:46:04.61ID:EA3Cj+61r
動きゃいいだろ
2020/01/28(火) 19:23:28.69ID:Ec0nt9VJ0
>>784
お前の好き嫌いなんて誰も聞いてない
独り言はバカッターで呟いてろ
2020/01/28(火) 20:07:29.82ID:ockOGIFp0
質問です。こういう転記作業ってAHKで出来るのでしょうか?

転記元Excelファイル
転記先IEのシステム

Excelファイルから任意のセルをコピーして、IEの入力欄に貼り付け、
登録ボタンを押下後、またExcelに戻って先程の一行下のセルをコピーして…
の繰り返しの作業です。

なんとなく出来そうな気はするのですが、AHKのスキルってどうやって
勉強したら身に付きますか?
2020/01/28(火) 20:50:59.82ID:n9Nej2Np0
>>787
ひたすらwikiをよく読む
まずはサンプルコード辺り全て理解するまで読む
急がば廻れ
嫌なら諦める
2020/01/28(火) 20:58:15.96ID:hIp7G51I0
そんなのマクロでやりなさいって話だわ
2020/01/28(火) 21:16:05.75ID:N1Ohwwsr0
uwscとかのほうが得意そうな案件ではあるな
2020/01/28(火) 21:34:48.42ID:3FNQgvymM
>>787
その作業は画面見ずにキーボードだけで完結できる?出来るのであれば、その操作通りにsendし、適宜sleepするだけで完成だ。
マウス操作必須だったり、条件で動作が変化するなら、その箇所に処理を加えたり、その箇所の自動化を諦めると良い。
2020/01/28(火) 21:36:17.98ID:uvycofvT0
>>783
当人以外も参考にする可能性が有るので無限ループに陥るようなコードを野放しはあかんだろ
ヒント?出してる方も色々分かってなかったしw
今後の初心者が見てアレが正解だと思われたらまずい
2020/01/29(水) 09:18:20.40ID:QBb2aEnKr
HOOK表記なくてもループにゃならんぞ
やってみ?
2020/01/29(水) 10:54:03.74ID:DzR487gV0
「無限」をはしょるのはすごくもやもやする
2020/01/29(水) 11:15:57.58ID:1KxMz8CE0
OutputVar := GetKeyState(Shift, P)
ToolTip, 【%OutputVar%】, 0, 0

1か0が入ると思ったのに空っぽのように見えるのは
何か根本的に間違えているのでしょうか
2020/01/29(水) 11:19:05.97ID:1KxMz8CE0
OutputVar := GetKeyState("Shift", P)

こうみたいでした。
済みません。
2020/01/29(水) 11:43:53.12ID:pPBTsOGr0
厳密に言うと、"P"もだよ
Pだと変数扱いだから、多分、=0で、記述が無効になってる
2020/01/29(水) 12:01:24.36ID:1KxMz8CE0NIKU
>>797
分かりました
ありがとうございます!
2020/01/30(木) 03:03:10.18ID:hLaC5ZDt0
質問です。
ホットキー指定で~をつけると、イベントを乗っ取らずそのままシステムに通しますが
その後の処理で、システムに通さないよう分岐する方法はありますか?

イメージは以下のような感じです

~RButton Up::
MouseGetPos, mx, my, hwnd, ClassNN
if ( ClassNN <> "ListView321" )
return ; そのままシステムに通してなにもしない

; 以下コンテキストメニューを表示してシステムに通さない
2020/01/30(木) 03:06:06.96ID:yfl1OPJr0
ない
2020/01/30(木) 03:25:52.11ID:yIeYXuFa0
>>799
逆にチルダ外して一旦乗っ取って、条件分岐した後に
乗っ取りたくない方は Send, {RButton Up} にしときゃいいんじゃね
2020/01/30(木) 06:48:31.85ID:2Pg1PDf70
>>799
ホットキーの割り当て変更 か 自前でSend
Upを設定すると自動でDownも乗っ取られるから
~つけない場合ちょっと工夫が必要になる


~RButton Up::
if (Flag := !Flag) {
Hotkey, RButton Up, ~RButton Up
ToolTip そのままシステムに通してなにもしない
} else {
Hotkey, ~RButton Up
ToolTip 横取り
}
return

; ------

RButton::
if (!Flag)
Send, {RButton Down}
return

RButton Up::
if (Flag := !Flag) {
Send, {RButton Up}
ToolTip そのままシステムに通してなにもしない
} else
ToolTip 横取り
return
2020/01/30(木) 11:44:29.07ID:lhlDpunT0
>>799
#If 使って事前にはじくとか

#If (CNN()="ListView321")

RButton Up::
Tooltip, Listview
return

CNN()
{
MouseGetPos, mx, my, hwnd, ClassNN
return ClassNN
}
2020/01/30(木) 13:00:18.71ID:hLaC5ZDt0
>>800-803
ありがとうございます

>>803
このような指定方法があるとは知りませんでした
こちらの方法でやってみます
2020/01/31(金) 15:15:41.79ID:Qxhc6BbA0
質問です
MouseGestureL が常に管理者権限で動いている状況下で
後から任意のタイミングで実行するスクリプトから
マウスのボタンの押し下げを知りたい場合に
MouseGestureL の中に "適当な関数名" でGetKeyStateする箇所を
あらかじめ準備しておき、自前スクリプト側で

SendMessage, DllCall("RegisterWindowMessage", "Str", "適当な関数名", "UInt"),,,,
  C:\AutoHotkey.ahk ahk_class AutoHotkey

こんな感じに呼び出していました
最近OSを変えるまではUACを全部切ってたのでこれで問題ありませんでしたが
切らずに運用してみたところ自前スクリプトも管理者権限にしないと
アプリ間通信自体ができないみたいで困ってます
2020/01/31(金) 15:16:15.19ID:Qxhc6BbA0
情報後出しにならないように使用環境も書きます
右ボタン、中ボタン、左ボタンはそのまま、それ以外の残りの5ボタンを
F16,F17,F18,F19,F20キーにマウスドライバ側で割り当ててあり
MouseGestureL側ではこの5ボタンでジェスチャー認識させてます
便宜上子スクリプトと呼びましたが、任意のタイミングで
個別に実行されるスクリプトでMouseGestureLから実行するわけではないです
コンパイルして特定の拡張子と関連付けしてあり
ファイル実行時にこのマウスボタンが同時に押されていたらこのアプリを
こっちのボタンならこのアプリをといった感じでラッパーとして機能させてます

特にアプリ間通信にこだわらず
一般ユーザ権限の子スクリプトがマウスのボタンの押し下げを知る方法ならなんでもいいです
よろしくお願いします
2020/01/31(金) 17:22:07.16ID:s1HRUi470
OSとahkのバージョンは?

win10からはadmin←→非admin間制御系が分断されてるので
UAC切ってても管理者権限で動いてるahkからは一般的権限のアプリの制御ができなくなってるはずだけど
そもそもMouseGestureL はまともに機能しているん?
2020/01/31(金) 17:44:49.94ID:SUSq+Cgw0
>UAC切ってても管理者権限で動いてるahkからは一般的権限のアプリの制御ができなくなってるはずだけど

質問者じゃないけどこれ何言ってんだ?
Win10で管理者権限で動いてるahkから一般権限のアプリは制御できるぞ
一般権限で動いてるahkから管理者権限で動いてるアプリの制御は当然出来ないけど
2020/01/31(金) 18:15:40.06ID:Qxhc6BbA0
レスありがとうございます

OS:Windows10 Home
AHK:v1.1.32.00 - November 24, 2019
MouseGestureL.ahk:Version 1.32 (2020/01/28)

UACは切らずに運用してます
MouseGestureL は管理者権限で起動してます
他のアプリで意図的に管理者権限で起動しているものは
システム監視系のアプリぐらいですが、そのアプリに対しても
一般ユーザ権限のアプリでも問題なくMouseGestureLで制御できています
MouseGestureL から何かを起動する場合はRunは使用せずに
ComObjCreateを利用して一般権限で起動するようにしています
2020/01/31(金) 21:36:49.69ID:v8RZrb+0a
ファイルかクリップボードを経由してやりとりするというのはどう
たとえば
クリップボードを監視して値を要求する特定の文字列が入っていたら
クリップボードに要求された値を返すとか
値を得るタイミングはもっさりするだろうけど
2020/01/31(金) 23:57:38.75ID:Qxhc6BbA0
やっぱりその辺りを経由するしか方法ないですかね
MouseGestureLはとてもいいスクリプトなので
監視ルーチンを寄生させるとかは避けたかったですが

ファイルやクリップボード経由しか手段がないならば
マウスボタンの押し始めタイミング自体は
改変しなくともMouseGestureL側で検知できると思うので
ボタンの押し始めに所定の位置にあるファイル名xxxをyyyにリネーム
ボタンが離されたらファイル名をxxxに戻す
子スクリプトは起動時にそのファイル名をチェック
とかの方法でやってみようかと思いました
アドバイスありがとうございました!
2020/02/01(土) 00:43:32.08ID:ka52WFEb0
マウス操作を記録する機能は持ってないからなあ
AHKスクリプトにするツールもない
2020/02/01(土) 01:59:53.61ID:2stcDCgC0
>>811
方法の前にそもそも何がしたいの?
MouseGestureLでキーに連動して何かスクリプト実行したいならのアクションスクリプトに書けばいい
駄目な理由って何?
2020/02/01(土) 06:49:34.23ID:RcLxcGeu0
やりたいことは>>806に書いた通りです
>個別に実行されるスクリプトでMouseGestureLから実行するわけではないです
>コンパイルして特定の拡張子と関連付けしてあり
>ファイル実行時にこのマウスボタンが同時に押されていたらこのアプリを
>こっちのボタンならこのアプリをといった感じでラッパーとして機能させてます

MouseGestureLとは一切関係なく、ある拡張子のファイルを実行したときに
たとえば拡張子.txtならば本来のメモ帳の前にシステム側から関連付け設定で呼び出され
8ボタンマウスの5つの拡張ボタンのどれかを押す押さないで
実際に実行するアプリをメモ帳から他の物へ変更するラッパーを作ってて
管理者権限でMouseGestureLがつかんでるマウスボタン押下の情報を
一般権限しかもたないこのラッパーに伝達したい、というものです
2020/02/01(土) 08:24:10.05ID:+/Lmpd8T0
未だに何やりたいのかがハッキリと分からないけど、
ファイルをダブルクリック(またはエンターキー押下)した"後"に開くアプリをいくつかの選択肢から選びたい、ってこと?
ならMGL側じゃなく実行するスクリプト側でGetKeyStateして何ボタンが押されてるか取得すればいいのでは?

管理者権限とか一般権限とかの話はよく分からんので適当
2020/02/01(土) 10:26:51.57ID:bRlwZEbJ0
>>815でいい気がするね
>>805は自前スクリプト側でもホットキーを使ってキーの状態を調べようとしたけど、フック順がMGL⇒自前スクリプトだから拾えなかった
みたいな感じなのでは?
2020/02/01(土) 10:34:43.14ID:bRlwZEbJ0
逆だった
自前⇒MGLね
2020/02/01(土) 14:06:32.32ID:3oSMwgZs0
ラッパーって何だYO!
2020/02/01(土) 16:04:24.14ID:ONoXH+kb0
なんか独自関連付けしたいって話に見える
そんならうぷろだに前俺が作った独自関連付けプラグインがあるからそれ見てみりゃいい
2020/02/01(土) 20:38:42.73ID:RcLxcGeu0
説明が拙くて申し訳ありません
目的は関連付けされたコンパイル済みスクリプトの動作ではありますが
そこ自体はちゃんと動いてるので、質問したいのはこのスクリプトが実行される瞬間に
「どのマウスボタンが同時に押されていたか知りたい」ということです

x1 := GetKeyState("XButton1", "P")
x2 := GetKeyState("XButton2", "P")
Msgbox, %x1% %x2%
Return

このスクリプトをマウスの拡張ボタンを押しながらダブルクリックしても
MouseGestureL が動いていると、GetKeyStateではボタンの状態を見れませんでした
MouseGestureL を終了させると拡張1・2のボタンがそれぞれ 1 となります
2020/02/01(土) 20:39:30.24ID:RcLxcGeu0
そこでスクリプトをこうして
DetectHiddenWindows, On
SendMessage, DllCall("RegisterWindowMessage", "Str", "何か適当な関数名", "UInt"),,,, "ここはMouseGestureLのスクリプトまでのパス" ahk_class AutoHotkey
x1 := (ErrorLevel & 2)
x2 := (ErrorLevel & 1)
Msgbox, %x1% %x2%
Return

更にMouseGestureL側のAuto-executeセクションに

"何か適当な関数名" := DllCall( "RegisterWindowMessage", "Str", "WM_USER_XBUTTONREQ", "UInt" )
OnMessage( WM_USER_XBUTTONREQ, "RsvMessage" )

こう書いて、あとはMouseGestureLのどこかに下の関数を定義しておけば

RsvMessage( wp, lp, msg, hWnd ) {
 global WM_USER_XBUTTONREQ
 r := 0
 If( msg == WM_USER_XBUTTONREQ )
 {
  If GetKeyState("XButton1", "P")
   r += 2
  If GetKeyState("XButton1", "P")
   r += 1
 }
 Return r
}

先ほどの子スクリプトはアプリ間でうまく通信してちゃんと
マウスボタンの押し下げを検知します
2020/02/01(土) 20:40:45.88ID:RcLxcGeu0
ただ、OSを入れ替えたのを機にもうさすがにUACを全オフするのはないかなと思い
MouseGestureLを除いて全部一般の権限で使ったらアプリ間で通信できなくなり
代替え案はありませんか?と質問した次第です

現在もMouseGestureLを一般権限で動かせばちゃんと動作しますが
それだと管理者権限でしか動かないアプリを制御できないので案としては除外してます
2020/02/01(土) 20:52:59.53ID:4DvAyfEb0
>>822
じゃあそのスクリプトも管理者権限で動かせばいいじゃん?
2020/02/01(土) 21:25:17.41ID:RcLxcGeu0
>>806,814,820に書いてある通りこれはファイルに関連付けされて動作するスクリプトなので
プロパティから「管理者としてこのプログラムを実行する」にレ点を入れてしまうと
ファイルを開くたびに管理者権限での動作を許可するか確認するダイアログが出るので
とてもとてもやりたくないのです(txt,zip,jpgなど殆どをスクリプト経由にしてます)

タスクスケジューラでタスクを事前に定義しておき
そのタスクの「全般」タグにある「最高位の特権で実行する」にレ点を入れて
Run, C:\Windows\System32\schtasks.exe /run /tn "事前に定義したタスクの名前"
と実行させてUACのメッセージを回避する方法もすでに試してはいたのですが
そうすると実行する度に変化する引数をスクリプトまで渡す方法が見つからずに断念してました
2020/02/01(土) 21:37:19.74ID:4DvAyfEb0
>>824
管理者権限での動作を許可するか確認するダイアログはUACレベル下げれば出ないように出来る
俺もいくつか必要に応じて管理者権限で実行してるからUACの設定下げて確認ダイアログは出ないようにしてる
所詮UACなんて初心者に対する注意喚起でしかないんだから通知オフで何も問題はない
どのプログラムが管理者権限で動いているかをしっかり把握できてりゃいいだけ
2020/02/01(土) 21:51:39.45ID:4DvAyfEb0
ちなみに管理者権限で動いてるスクリプトから一般権限でアプリケーションを起動したい場合は
Run, Explorer "(一般権限で起動したいプログラムのフルパス).exe"
で一般権限で起動出来る
2020/02/01(土) 22:01:30.61ID:RcLxcGeu0
回答ありがとうございます
あと勘違いさせていたらごめんなさい

この問題自体は>>810さんのアドバイスを元に>>811で書いた通り
MouseGestureL側でマウスのボタンが押される度にあるファイルをリネームして
ボタンが離されたら元に戻すというめちゃくちゃなゴリ押しで解決しており
今は望んだ状態で快適に使ってます

なのでもしもアドバイスいただけるとしたら
「自分の希望する前提条件をひっくり返せ」ではなく前提条件の元でなにか他の手段があるよ
だととても助かります、まぁすでに解決済みなので
「そんな手段ないよ」とかでも「ですよねー」といった感じです

>ちなみに管理者権限で動いてるスクリプトから一般権限でアプリケーションを起動したい場合は

の件は>>809に書いてますが
>MouseGestureL から何かを起動する場合はRunは使用せずに
>ComObjCreateを利用して一般権限で起動するようにしています

本家フォーラムにLexikosさんが投稿していらっしゃったのを参考に
ComObjCreate("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}")系でわたしはやってました

教えていただいてありがとうございます
2020/02/01(土) 22:06:21.69ID:1OVWO3Ck0
無駄な長文が多すぎて前提とか知らねえから
UACレベル下げてやりたいことが出来ればそれでいいだろ
2020/02/01(土) 22:18:23.85ID:Iz5L6+2y0
UACの回避法についての質問であってAutoHotkey関係ない件
2020/02/02(日) 04:24:20.95ID:fsCu82Qy00202
Runasで解決しそうじゃん
2020/02/02(日) 05:00:56.00ID:mNfoQi9a00202
>>829
長文レスの連続だったが結局はahk関係ないよな、マジで同意する
2020/02/02(日) 06:07:36.95ID:xJqdmfyP00202
UACの設定下げる事を拒む理由も分からん
2020/02/02(日) 16:06:20.48ID:ua+O16JY00202
Gui,Add,UpDownって0.1〜10.0みたいな小数点対応はしていないのですか?。
2020/02/02(日) 20:35:45.97ID:BBAscVbG00202
>>788-791
レスありがとうございます

休みの間色々検討した結果、意図することは、マクロで出来そうな気がしてきました
マクロでIEとの連携ですね

uwscというのも良さげですが、既存のもの使って、となるとやはりマクロかなと

AHKは、マウスジェスチャーで使ってるのですが、連携となるとマクロに分がありそうですね
2020/02/02(日) 20:38:57.45ID:4FWtWLmZM0202
uwscはマクロの一種です
スクリプトも書けますが手順の保存再生できるので
2020/02/03(月) 02:26:25.69ID:YrlH3/AV0
>>833
アップダウンコントロールの増減量を変更

UpDown - Non-unitary increments.ahk
http://numeric.nerim.net/AutoHotkey/Scripts/UpDown%20-%20Non-unitary%20increments.ahk
https://www.autohotkey.com/boards/viewtopic.php?p=75010#p75010

修正版: x64対応、指定ミス
https://pastebin.com/5h8rySan
https://pastebin.com/KAggw1PP
2020/02/03(月) 09:03:46.86ID:JFIzm4Vd0
>>835
834の言ってるはExcelVBAマクロの事だと思うよ
UWSCもAHKもExcelVBAもマクロ
ただ、当のExcelVBAについては、操作手順を記述してるわけじゃないから、マクロからかなり逸脱してる感あって、
一番マクロじゃないのだけをマクロと呼んでる事に、もやっとする
2020/02/03(月) 10:56:49.47ID:llPhOCHJ0
VBAには自動記録機能あるよ
そういう意味ではVBAもUWSCもAHKもマクロ機能のあるスクリプトだ

旧ahkには一応マクロ化ツールのAutoScriptWriterが同梱されてたが
なんか不完全でうまく記録されなかった記憶
ほとんどの人は使っておらず話題にもならなかった
2020/02/03(月) 20:49:50.35ID:ZP73R6UN0
>>834です
当方の意図してたのはExcelVBAマクロです
マクロって、調べたらプログラミング全般の概念なんですね。言葉足らずでした

で、そのVBAで今日出社してやってみたんですが、オートメーションエラー連発!
なかなか難しいですね
2020/02/07(金) 02:45:59.20ID:3oIzKiS00
・DOSコマンドをDOS窓表示せずにahkから実行したい

現在はDOSコマンドを拡張子.cmd のファイルに書き込んで保存し、
DOS窓を非表示にするためVBSファイルを作成してVBScriptから上記cmdファイルを vbHide 付けて実行
さらにahkからそのVBSファイルを実行する

という三度手間?な方法をやってるんだけど、もう少しスマートな方法ありませんか?
2020/02/07(金) 03:11:52.27ID:y2s/VZ9K0
>>840
Run, Target,, Hide
2020/02/07(金) 03:38:26.96ID:3oIzKiS00
>>841
ありがとうございます
ahkでもDOS窓非表示で実行できたんですね
勉強不足でした
おかげ様でVBSファイルを挟む必要なくなりました
2020/02/07(金) 05:15:25.66ID:gVGECi9Gr
てか確かrunからDOSコマンド使えたような気がする
2020/02/07(金) 05:52:57.08ID:3oIzKiS00
>>843
run, %comspec% /c でAHKからDOSコマンド実行できるみたいですが
一つのDOS窓で複数行のコマンド実行する方法が分からず
cmdファイルに書き込んでから実行してます
後出しになってしまい申し訳ありません
2020/02/07(金) 06:28:10.70ID:3oIzKiS00
>>843
あ、すみません普通にできました
これでcmdファイルも不要になりahkのみで全て出来るようになりました
ありがとうございました
2020/02/09(日) 00:12:08.21ID:x40WBKc10
WinHide, ahk_class Button
たまにWinShowしてもウィンドウズボタンが表示されなくなるんだけど、解決策ないかな?。
今は仕方なく再ログインしてる。
2020/02/09(日) 00:17:35.36ID:x40WBKc10
あごめん、WinHide, ahk_class Shell_TrayWndだった。
2020/02/09(日) 00:54:57.92ID:bRFqNBrR0
>>847
Shell_TrayWndってタスクバーのことだろ?

F1::
WinHide, ahk_class Shell_TrayWnd
Return

F2::
WinShow, ahk_class Shell_TrayWnd
Return

だけのスクリプトで試したけど何も問題無いぞ
そもそもこんなことしなくてもOS側設定の自動的に隠すオンと、WinActivateだけで事足りると思うんだが
2020/02/09(日) 03:21:09.07ID:zu3MaBNR0
>>846-848
タスクバーとスタートボタンは別なので両方操作する必要がある
OnExitでスクリプト終了時にはWinShowさせると安全

ahk_exe Explorer.EXE ahk_class Shell_TrayWnd ; Taskbar
ahk_exe Explorer.EXE ahk_class Button ; Start Button
2020/02/09(日) 03:25:44.77ID:xdymvCRc0
>>849
>>848ので普通に表示・非表示機能するが?
2020/02/09(日) 04:19:29.40ID:zu3MaBNR0
>>850
win7以前  タスクバーとスタートボタンが別
win8     スタートボタンがない
win8.1以降 タスクバーとスタートボタンが一体型

スタートボタンだけ消えるならwin7以前だと思われるのでボタンも指定しないと
2020/02/09(日) 04:59:21.08ID:xdymvCRc0
まだ7なんて使ってる奴居んのか・・・
もう完全にサポート終わってんのに
853名無しさん@お腹いっぱい。 (ワッチョイ ff44-8Apu)
垢版 |
2020/02/09(日) 15:43:04.49ID:Ocp+8UND0
>>836
イエース!有難う。
2020/02/11(火) 23:56:48.73ID:x/+BH3gC0
みんなタスクバーの件すまない。
Classic Shell絡みの問題で、完全に環境依存だった・・・。
2020/02/13(木) 09:14:54.16ID:esDus5ra0
式展開、変数展開を一切しないただのヒアドキュメントってどうやって書くんですか?
urls=
(
http://www.foo.net/search?q=aaa%20bbb
)
とかくと変数20bbbを展開しようとしたけどできなかった的なエラーが出てしまいます
ヒアドキュメントの中身をエスケープせずにエラーを取り除きたいです
2020/02/13(木) 09:29:49.82ID:cbImo1Ju0
>>855
http://ahkwiki.net/
2020/02/13(木) 09:29:59.61ID:UHeFoqSi0
(%
hoge
)
2020/02/13(木) 21:49:14.43ID:dCULbdKN0
「%」が一個だけなら「`%」でも良いのかな?よく分からんけど
数十個とか数多い時は>>857だよね当然
2020/02/14(金) 03:33:04.21ID:pw6jil4Z0
Windows10 x64日本語、AutoHotkey U64の環境で
WinTitle系の引数に日本語を書いたスクリプトをUTF-8で保存するとタイトルがマッチしないのはなんで?
ASCII文字だけにするとマッチするのは確認してます
あと何故かShift JISで保存するとマッチする
Unicode版とは一体
2020/02/14(金) 08:26:21.34ID:hIxdQ+FM0St.V
ちゃんとBOM付けて保存してるか?
2020/02/14(金) 19:10:29.35ID:pw6jil4Z0St.V
>>860
完全にそれが原因でしたありがとう
862名無しさん@お腹いっぱい。 (ワッチョイ 0358-D5WE)
垢版 |
2020/02/19(水) 21:51:29.80ID:PeAf8/1k0
古い自社製アプリの画面に、CB FF 00..などのデータが
EXCELのセル状に縦横に並んでいます。
Windows spyで調べると、ClassNN:MSFlexGridWndClass##と表示されました。
この中から或る位置のセルの値を取り出したいのですが、方法が分からないです。
どうすればよいか、何か情報頂きたいです。
2020/02/20(木) 01:34:34.25ID:55zU6WW20
>>862
VB6 フレキシブルグリッド(MSFlexGrid)コントロール
ListViewならSendMessageでメッセージ送れば操作や取得できるが
MSFlexGridにはメッセージが用意されて無いらしい(ざっと検索した限りでは)
アプリ側で何かしら用意されて無いなら外部から取得できないと思う

代案としては
アプリですべて出力できるならそこから抜き出す
座標やキー入力で移動してCtrl+C
2020/02/20(木) 17:21:06.89ID:luePz1Sb0
タブレットペンの「消しゴム」に該当するキーってあります?
SAI Ver2などのペイントソフトで、タブレットのボリュームボタンなどを押している間だけ一時的に消しゴムツールに切り替えたいのですが
単純にeキーを割り当てると、ボタンを離した後もツール自体が切り替わってしまい困ってます
2020/02/20(木) 18:10:35.06ID:/B+c6ePE0
>>864
SAIは使ったことないが過去にPhotoshopで似たようなことしてた人がいたよ
https://hibari.5ch.net/test/read.cgi/software/1317156599/195-204

ググってで出てきたショートカット集によるとSAIもキー押しっ放しで一時切り替えモードになるみたいだし
押してる間中キーリピート発生させ続ければいけるのでは
http://blackstraycat.nobody.jp/digitalillustration/painttool-sai/painttool-sai-shortcut.html
2020/02/21(金) 22:05:20.72ID:Oardne8I0
>>864
AHKでやるとしたらボタンを押したときにE、ボタンを離したときにNやVを送って鉛筆や筆ツールにするとかその程度
「押してる間だけ」とか「一つ前のツールに戻る」みたいな機能がSAIというソフト側にあるかどうかはSAIの問題であって
AHKと関係ないのでスレチ
一行目の聞き方からしてAHKが何をするソフトか根本的に分かって無さそう
2020/02/22(土) 01:57:19.30ID:F7J0Py2h0
KeyHistory (AHKウィンドウの Key History and script info)で操作履歴は追えるから
ペンタブで消しゴム使った直後に見ればどういうキーコード吐いてるかはわかるよ
多分 eキーリピートしてるだけな気がするけど
2020/02/22(土) 12:56:15.49ID:0s4DtZjs0
クライアント領域の幅と高さを取得できる方法ってある?
WinGetPosだとウインドウ領域の幅と高さしか取得できなくて困ってる

現状やってる取得方法

WindowSpyのActiveWindowPostionのwの差とhの差を自力で計算→それぞれwidthDifference, heightDifferenceと定義する
A
WinGetPosでwWidth, wHeightを取得
B
cWidth := wWidth - widthDifference
cHeight := wHeight - heightDifference

こんなめんどいことしなくてもWinGetPosでクライアント領域の幅高を一発で取得したい
それが無理ならせめて➀の自力計算の部分だけでもなんとかならないかと思う
ActiveWindowPostionのClientのw,hだけでも取得できれば…

誰かヒントでもいいからお願いします
2020/02/22(土) 13:21:41.85ID:7FrnOqnoM
GetClientRect
2020/02/22(土) 14:00:48.91ID:0s4DtZjs0
AHKにクライアント領域の幅高の組み込み変数って実装されてないのかな?
WindowSpyにあるからありそうではあるんだけど…まあとりあえず解決

>>869
ありがとう助かった
DllCall使うのは頭になかった
2020/02/22(土) 14:15:22.16ID:sYYV+jbj0
exeの指定アドレスに数値を書き込みたいんですけど、参考になるサイト等はありますか?。
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

ニューススポーツなんでも実況