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/24(金) 12:46:00.52ID:NBF8iWUcd
>>752
お前は >>741 だろ?
だとしたら、お前が不快になることは気にしてない
といちいち言っておいてやろう
2020/01/24(金) 12:53:42.11ID:NBF8iWUcd
>>753
>つか複雑なキーバインドは指も頭もついていかん
あっそ
2020/01/24(金) 12:58:26.14ID:tzFXc69a0
>>753
ありがとうございます。とりあえずそうします

>>754
違います。
どう思われても構わないのでコテハンお願いします
2020/01/24(金) 13:11:19.34ID:RQUs/BcE0
データ整理してたら出てきた、昔の拾い物でカーソルを時計/半時計に回ると左右に動くというものなんですが、
現行の環境では動かないのですがなぜでしょう??
win10でverは1.1.31.00です。
また以下の機能を任意のキーでオンオフ出来はしないでしょうか?
常にこの動作が効いていると困ることが割と想定されるので実装できればと
(改行が多いとのことで複数回投稿します、すみません)

#InstallKeybdHook
high=1 ;高速時のスクロールスピード(1-3)可変
low=1 ;低速時のスクロールスピード(1-3)可変
sens=1 ;感度(1-3)可変
timeout=50 ;タイムアウトまでの時間

upstr=12341234
downstr=43214321
base=567890
StringTrimRight,base,base,%sens%
SetTimer,Rotation,10
Return
2020/01/24(金) 13:12:09.95ID:RQUs/BcE0
Rotation:
If (A_TimeIdlePhysical>timeout)
str:=base
x1:=x2
y1:=y2
MouseGetPos,x2,y2
x:=x2-x1
y:=y2-y1
If (x>0 && y>0)
pos=1
If (x>0 && y<0)
pos=2
If (x<0 && y<0)
pos=3
If (x<0 && y>0)
pos=4
If (pos<>lastpos)
{
StringTrimLeft,str,str,1
str=%str%%pos%
lastpos:=pos
}
2020/01/24(金) 13:12:46.28ID:RQUs/BcE0
key=
IfInString,upstr,%str%
key=Left
IfInString,downstr,%str%
key=Right
dis:=((x1-x2)**2+(y1-y2)**2)**0.5
buf+=dis
freq:=dis*high/50+1
if (buf>100/low && key<>"")
{
Send,{%key% %freq%}
buf=0
}
Return

以上です
2020/01/24(金) 14:54:09.52ID:NBF8iWUcd
>>756
お前みたいなつまらない奴の指図なんか
聞くわけが無いのだから無駄な書き込みやめたら?
こういう返答以外に何を予想してたの?
いちいち答えなくていいけど
放っておけば俺はもう興味を無くして
書き込みやめる流れなことぐらい分かるだろうに
ホントに人の話を聞かない奴ばっか
2020/01/24(金) 15:19:45.51ID:NBF8iWUcd
>>757
汚いレスで遮ったから一応レスしとくか

>また以下の機能を任意のキーでオンオフ出来はしないでしょうか?
任意のキーで適当な変数を書き換えて
処理の本体はその変数の値を見て
IFでスキップすればいいと思うよ

あるいはSuspendコマンドについてググって
何かの役に立ちそうか考えてみたら?(糞適当)
要らないと思うけどw

動かない理由は面倒なのでパス
地道に変数の値をMsgBoxで表示させたりして
自分でデバッグすればいいんじゃないかな
元々頼りない前提に頼ったロジックだと
微妙な環境の変化だけで潜在的な問題が表面化する
プログラムというのはよくあるね
2020/01/24(金) 20:58:35.99ID:NZ31hmj/0
>>757-759
丸投げ質問は誰もまともに答えてくれない

とりあえずそのコードは↓から落としたクルクルスクロールんじゃないかと思う
AutoHotokeyを流行らせるアップローダ
http://lukewarm.s101.xrea.com/up/

ここに、105.zip、108.zip、113.zipとあるから比較してみれば?
2020/01/24(金) 23:17:45.16ID:RQUs/BcE0
>>762
いや、全く各箇所の記述の動作を逐一なんてつもりはないです。
>>現行の環境では動かない といっているように、全く同じ内容で別環境では動いていており
動作の本筋に関しては本質的に間違っている箇所があるとはおもえません。
ただ環境が異なるため、恐らく何かver改訂やOSによる仕様変更のせいで何かが引っかかってると思い、
何か心当たりがあるならそれと照らし合わせもらうために情報を晒したにすぎません。

言葉が足りなくて申し訳ありません。
2020/01/24(金) 23:45:49.31ID:jm14eODy0
全直し希望じゃなくても
人が作ったスクリプトを自分は一切手を着けてない状態で貼ってたら丸投げ言われるわな

おいそれと弄れないにしても自分なりに調べて方向性だけでも書いてそれでいけそうか事前に聞くとかさ
環境依存部分はともかくホットキー起動に関してはいくつかの方法は考えられるでしょ
2020/01/24(金) 23:58:06.64ID:NZ31hmj/0
>>762
あ、そうですか
2020/01/25(土) 01:01:04.90ID:mylHY5dE0
>>764
761氏のおっしゃるようにmsgboxで探すのは質問前からもうやっていますし
最終的には
Rotation:
If (A_TimeIdlePhysical>timeout)
Msgbox,%A_TimeIdlePhysical%
Return
で正常な値がでることも確認しているんでお手上げなんですよ
だから
無変換キーを vk1Dsc07B → vk1D みたいな変更のように
仕様変更だったり、もしくば既知のバグのように
知らなきゃどうしようもないようなことに心当たりありませんかと聴いているんです
検索はすでにしていますが見つからないのでここで訪ねている次第です

それにホットキーに関しては本丸が出来ていないのでまだ取り掛かりようがないです
2020/01/25(土) 02:51:12.13ID:7N2llbO10
>>766
そもそも謎の前環境でも動くわけが無い

> #InstallKeybdHook
> If (A_TimeIdlePhysical>timeout)
> で正常な値がでることも確認しているんでお手上げなんですよ
正常な値なわけが無い、A_TimeIdlePhysicalは対応するフックで動作するので
「マウスフック」を使わなければマウスの動作は無視される

> カーソルを時計/半時計に回ると左右に動くというものなんですが、
> key=Left
> key=Right
> Send,{%key% %freq%}
クリックに見えますが?
2020/01/25(土) 07:14:29.13ID:7N2llbO10
>>767
寝ぼけてたはクリックじゃなくて方向キーか
まあ動かんけど
2020/01/25(土) 15:37:47.39ID:jE5Psj+a0
>>766
MsgBoxよりもTooltipの方がいいと思うよ

うちの環境だと、とりあえず If (A_TimeIdlePhysical〜の2行をコメントアウトして、strに初期値を入れたら動く様になった
TooltipでA_TimeIdlePhysicalを表示させたら、マウスを動かしても上がり続けたので、いっそのことPhysicalとったらリセットされるようになったよ
ただのTimeOut判定だから無くてもさほど困らないだろうし、A_TimeIdlePhysicalにこだわらなくても、自前のカウンターって手もあるね

あと、キー仕様を疑うなら、Sendの行付近に %key% をtooltipで表示して、表示されたキーを押すだけの別スクリプトで試してみるべきだよ
2020/01/27(月) 12:37:39.85ID:EYLpIN0yM
エクスプローラーで選択中のファイルが、特定の拡張子だったときだけサクラエディタで開きたいのですが、うまく動いてくれません。
どうすればよろしいでしょうか、、、

#ifWinActive ahk_exe explorer.exe

;ctrl+Eでサクラエディタで起動
^e::

Send, ^c
Sleep,100
if ( %Clipboard% = "*.拡張子" ){
Run, C:\Program Files\sakura\sakura.exe %Clipboard%
}
else{
Send, ^{e}
}
return

#ifWinActive
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
イエース!有難う。
■ このスレッドは過去ログ倉庫に格納されています
16歳の水野カイトが封印の刀を見つけ、時間が裂けて黒い風と亡霊の侍が現れ、霊の時雨と契約して呪われた刀の継承者となる場面

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