AutoHotkey スレッド part24 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512と次スレを立てる際は1行目に記入してください
■配布元
http://ahkscript.org/download/
■前スレ
AutoHotkey スレッド part23
http://potato.2ch.net/test/read.cgi/software/1470936221/
■日本語解説等
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: checked:vvvvv:1000:512:----: EXT was configured 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) ■重要事項
オリジナルである、旧 "AutoHotKey" の開発は2009年9月で終了している。
現在は、そこからフォークした "AutoHotkey_L" が主流となり、2014年1月からは後のLが取れ
正式にAutohotkeyとして扱われるようになりました。
よって古いスクリプト(主にDllCall()を利用しているスクリプト)は最新Verで動作しないものがあり、
その場合はスクリプトの修正が必用です。
旧版のAHKとの変更点多数。新しい仕様や互換性についてはドキュメントを良く読むこと。
→http://ahkscript.org/docs/AHKL_Features.htm
→http://ahkwiki.net/Addition_L
※新規利用者には最新版を推奨しますが、旧AHK(2009年9月までのVer)の利用者は新AHKへの移行に際して
少なからず改修が必要となります。特に、旧流行らせるページの配布物(MouseGesture等)の多くは
そのままでは動作しません。安定利用できている環境を崩して移行するかどうかは各人の判断による。
MouseGestureについては有志の方が最新AHK対応版(MouseGestureL.ahk)を配布しているのでそれを
利用するのもありです。
http://hp.vector.co.jp/authors/VA018351/mglahk.html
http://code.google.com/p/mousegesturel/
※ACC.ahk(旧版用)とCOM.ahkはフォーラムのリンク先にファイルが存在しませんので下記から入手してください。
http://ux.getuploader.com/autohotkeyl/download/24/ACC%2BCOM.zip
※Unicode版のACC.ahkは下記(AccInfoViewer.ahk付き)またはフォーラムから入手してください。
http://ux.getuploader.com/autohotkeyl/download/76/ACC_Unicode_and_AccInfoViewer_kai.zip
■質問に際して
OSの種類(XP/Vista/7)や32/64ビット版の違い、利用するAutoHotkeyのバージョンを明記すること。
また、操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。
2chの仕様の関係で、このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
レスをコピペして利用する場合は行頭の全角スペースをタブ等に置換してから利用すること。 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) 以下FAQ等
■実行環境
Q1:スクリプトに書いた日本語が文字化けしちゃうんだけど...
A1:スクリプトファイルを「UTF-8」の「BOM」付きで保存する。(AHK1.1の場合)
Q2:初めて使うけどどれを使えばいいの?
A2:AHK1.1のユニコード版を推奨。
旧流行らせるページの配布物をそのまま使う場合は本家をそのまま利用する事。
64ビットOSでAHK1.1 32ビット版の使用は制約が多いので、64ビット版を強く推奨。
■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)][ひらがな][全角/半角]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報を正しく返してこないのでAHKのみで対処は無理です。
レジストリ変更等で別キーへ再配置を行い、AHKで割り当てを行うという二段構えが必要。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする(例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。( http://www.forest.impress.co.jp/library/software/changekey/ )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード(0x0064はF13)が表示されるので覚えておき「終了」をクリック。
「ひらがな」キーをクリックすると「【ひらがな】キーをどのキーに変更しますか?」という
ウィンドウが表示されるので右上の「Scan code」をクリック。
覚えておいたスキャンコード(0064)を入力し、「OK」ボタンをクリック。
「登録」をクリックし、Windowsを再起動する。 Q2:「^1::Esc」とリマップ定義したけど [Ctrl]+[1] を押したらスタートメニューが出ちゃうけどどうすればいいの?
A2:リマップは修飾キー(Ctrl,Shift,Alt,Win)の押下状態を引き継いでキー発行するので、[Ctrl]+[Esc] がキー送信されるため。
これを避けるには、「Send」コマンドを利用して明示的に修飾キーなしのキーを発行をすればよい。
^1::Send, {Esc}
Q3:[Shift], [Ctrl], [Alt], [Win]以外を修飾キーとしてキー割り当てしたいよ
A3:コンビネーションキーの機能で実現ができる。
例) 無変換 + IKJLキーをそれぞれ「↑↓←→」に割り当てたい場合は以下のように記述する。
sc07B & I::Send, {Blind}{Up}
sc07B & K::Send, {Blind}{Down}
sc07B & J::Send, {Blind}{Left}
sc07B & L::Send, {Blind}{Right}
Q4:「XX hotkeys have been received in the last XXXXms.」って怒られるんだけど、、、(XXは環境による)
A4:多分自分自身のキーを送って無限ループになっている。 例) 「a::Send, a 」
先頭に $ を付ければ回避できる(NT系のみ)。 例) 「$a::Send, a」
#UseHookで全部にキーボードフックを適応する方法でも可。
Q5:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない…
A5:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
Q6:ジョイスティックのリマップがうまくいきません!!助けて
A6:ジョイスティックではリマップできない。「Send」コマンドでキー発行する必要がある。
× Joy1::Esc
○ Joy1::Send, {Esc}
Q7:ジョイスティックの上下左右に割り当てたいけど、JoyLeft,JoyUpってホットキーは無いの?
A7:無い。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。 Q8:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A8:AutoHotkeyではできない。
Q9:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい?
A9:AHKが原因の場合とそうでないときがある
○AHKが原因の場合
AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、
一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。
しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に
物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。
例) ^W::Send, {w 30}
これを回避するためには、以下の方法をとればよい:
・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook)
・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい)
・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、
#HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。
なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、
発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。
○AHK以外が原因の場合:
環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。
・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか)など他多数
・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている ■ IME関連
Q1:IMEのOn/Offの切り替えや、状態を得るにはどうすればいいの?
A1:http://www6.atwiki.jp/eamat/pages/17.html の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)
■ その他
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:テキストエディタでキーワードの色づけなどをしたいんだけど。
A2:wikiに各種エディタの定義ファイル及びキーワード一覧あり。( http://ahkwiki.net/Tools )
Q3:GUI作るのめんどくせ〜〜
A3:海外の有志が作ったツールを使うと楽。
SmartGUI Creator ( http://www.autohotkey.com/board/topic/738-smartgui-creator/ )
GUI Creator ( http://ahkscript.org/boards/viewtopic.php?f=6&t=303 )
Q4:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A4:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END Q5:AHK(A32)、AHKLx86(U32)、AHKLx64(U64)の共存は出来る?
A5:それぞれを違うフォルダにインストールする(最新版は分ける必要無し)
但し、インストーラーを使って最後にインストールしたAutohotkeyに対して
ahkファイルの関連付けが行われるので、レジストリエディタ(Regedit.exe)や
FileTypesMan等のツールを使って関連付を変更してください。
ahkファイルをAHK(A32)、ahlファイルをAHKLx86(U32)、ah6ファイルをAHKLx64(U64)
といったように別々の拡張子に関連付けが可能です。
それぞれに関連付けしたファイルに対してドラッグアンドドロップを有効にするにはレジストリの
[HKEY_CLASSES_ROOT\ファイルタイプの名前\ShellEx\DropHandler]
の (規定) のデータを {86C86720-42A0-1069-A2E8-08002B30309D} にする。
Q6:Windows Vista(以降)で管理者権限のウィンドウ操作やSendPlayが効かないんだけど?
A6:OSのセキュリティ機能であるユーザーアカウント制御(UAC)にブロックされている。
■回避策
1:管理者として実行
Autohotkey.exeを右クリックしてプロパティを開き、「互換性」→「管理者としてこのプログラムを実行する」にチェック。
スクリプトに記載する方法もある( http://www.autohotkey.com/board/topic/94126-ahk-problem-with-uac-and-privileges/ )
2:対策パッチ
実行ファイルのマニフェスト書き換え、自己署名証明書のインストールが行われる。
※AutoHotkey.exeはProgram Files以下に置く必要がある。
http://www.autohotkey.com/board/topic/70449-enable-interaction-with-administrative-programs/
3:UAC停止 ※注意!! 必ずHIPS機能がある他のセキュリティ対策ソフトを導入してください。
「コントロールパネル」→「ユーザーアカウント」
Vista:「ユーザーアカウント制御の有効化または無効化」→ チェックボックスをオフ。
7/8/8.1:「ユーザーアカウント制御設定の変更」→ スライドバーを一番下に。
※Windows 8/8.1では上記に加えレジストリを変更する必要があります。(注意:Windowsストアアプリが実行できなくなる)
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
「EbableLUA」の値を「0」に変更。 ■AutoHotkeyの系譜
┌ AHK64(統合)
│
AutoIt .│ ┌ AHK_U(統合)
│ │ │
AutoHotkey(1.0) ─ Autohotkey_L ┬ Autohotkey(1.1) ←いまここ
│ │ │
└ IronAHK× │ └ Autohotkey v2(α版)
│ │
└ AutoHotkey.dll .├ AutoHotkey_H v2
│ │ │
│ └ AutoHotkey_H
│
└ AutoHotkey_N×
■メインストリーム
AutoHotkey 1.0(開発終了)
http://www.autohotkey.com/
Autohotkey 1.1 (Autohotkey_L)
http://ahkscript.org/
■開発中
Autohotkey v2(下位互換性を排除して操作利便性の向上)
http://ahkscript.org/v2/ 質問です。
ウィンドウのリサイズのホットキーを作成してみました。
;ウィンドウリサイズ
#!Numpadadd::
winsize()
return
winsize(){
WinMove,ahk_class Chrome_WidgetWin_1,,1300, 100,1200,1500
}
これでwinキーaltキーを押しながらテンキーの+を押せばウインドウがでかくなります。
ただ、これはGoogleクロームのウィンドウだけです。
これをその都度のアクティブウインドウすべてを対象にしたいのですが、
ahk_class Chrome_WidgetWin_1 ここを空欄にすると全く動いてくれなくなります。
対象をすべてに広げるのはどうすればよいでしょうか?
よろしくお願いします。 >>12
wikiの「ウィンドウ指定の方法」のページをよく読め WinMove, A,, x,y,w,h
アクティブウインドウすべてって意味が分からないが同じプロセスの複数のウインドウって意味ならahk_groupかWinGetでlist作ってLoopかな >>13
読んでみます
>>14
パットウィンドウを開いたときに小さい場合、簡単に大きくするのが目的なので
現在アクティブなウィンドウのみに作用できればそれでOKなんですが、
今は指定したタイトルのウィンドウ(アクティブでない場合も作用してしまう)にしか作用してくれないです。 >>13
>>14
;ウィンドウリサイズ
#!Numpadadd::
winsize()
return
winsize(){
WinMove,A,,1300, 100,1200,1500
}
簡単にできました。ありがとうございました。
出来てみると、「直前のサイズに戻す」もやりたくなってきました。 パソコン2台モニター4枚使っています
で、パソコンAのマウス、キーボードでパソコンBも操作していて、Mouse wituout Borders(MWB)を使っています
パソコンAでコピーしたテキストはこのMWBを使えばパソコンBでペーストできるのですが、
パソコンAでテキストをコピーすると、パソコンBである処理をさせるというのを自動でしたいのです
パソコンAのAHKスクリプトで、パソコンBのスクリプトを作用させることって出来ますか 例えば、SendMessageを使うと、同じパソコン内の別のスクリプトにメッセージを送ることは出来ますが
他のパソコンのスクリプトにメッセージを送る方法があるとか? LAN間メッセージならWinSock
ググったらAHKsock.ahkてのが出てきたからそれ使えばできんじゃね
UACやファイアウォールは適宜設定で >>21
ありがとうございます。自分は最近大きなモニターを買ったり前から持っていたモニターと併せて3枚にしてみたりしていて
新しく開くウインドウがあまりに小さく遠くに開いてしまうことが多かったので
簡単にメインの大きなモニターの中央にそれなりに大きくするコマンドを作成したかったのですが、
いざやってみると全部同じ位置に集まってしまうのでwトグルでもとに戻したりしたいなと思い、
ifとかいろいろ組み合わせて、一つのウインドウを拡大→元通り→拡大 を同じ操作でトグルさせること自体はできたのですが、
途中で別のウィンドウを触ってしまうとメッチャクチャになってしまうwことが判明しました。
基本的なフローが頭にできていないからダメなんですけど、
隅っこにウィンドウが開いてしまった→操作A大きくして中央に移動→別のウィンドウをクリック(それなりになにか操作)
→さっきの大きくしていたウィンドウをクリック→操作A元の場所に戻す
などできるようにするには多分ウィンドウ特定する固有の値を取得してそれぞれの状態を
触れたウィンドウ全部についてどんどん蓄積していかなくてはならないのかなーなどと考えています。
道のりは長そうです。 お恥ずかしい限りですが、作ったスクリプトはコレです。
マウスの中ボタンプラス左クリックでトグル操作するようにしました。
これだと一つのウィンドウだけいじってる間は問題ありませんが、
途中でほかのところを触ったとたんにぐちゃぐちゃになります。
;ウィンドウリサイズ
MButton & LButton::
if tog = 1
Gosub,Label1
else
Gosub,Label0
return
Label0:
WinGetPos, X, Y, Width, Height,A
WinMove,A,,1300, 100,1200,1500
tog = 1
; MsgBox %tog%
return
Label1:
WinMove,A,,%X%, %Y%,%Width%,%Height%
tog = 0
; MsgBox %tog%
return >>20
出来ました。こんな方法があったんですね。 これでいきます windows,Shift,mのコマンドをShift長押しで出力するものを作りたいのですが、3キー同時押しのコマンドがどうしても出来ません。
そのようなことはできるのでしょうか? >>25
+#m
質問するならまず自分の書いたスクリプトを張った方がいいぞ 26>>
$+::
KeyWait,+, T0.3
if ErrorLevel
send,{Shift}
else
send,+#{m}
keywait, Shift
return
です。
ほかの人が作ったものを自分で改変したものです。もともとは
$m::
KeyWait,m, T0.3
if ErrorLevel
send,#{m}
else
send,{m}
keywait, m
return
です。 そもそも Shift+Win+m の組み合わせはahk関係無く使用できないのでは?
キー入力検出ソフトでも Shift+Win+m を同時押ししても検出できないし
ちなみに Shift+Win+n や Ctrl+Win+m などは使える
OSが認識できないものはahkでも当然無理だし送ることも受けることも出来ない つNキーロールオーバー
>>28
長押ししてタイムアウトしたら、 ErrorLevel は 1。つまり Send コマンドが逆だと思うけど
あと、うちだと + や Shift だとだめで、RShift や LShift でやればいけたよ >>30これでよいのですか?
$LShift::
KeyWait,LShift, T0.3
if ErrorLevel
send,{LShift}#{m}
else
send,{LShift}
keywait, LShift
return
しかし、これだと、win+mと同じ動作をしてしまいます。
私はwin+mで最小化したウィンドウをShift長押しで開きたくて、そのコマンドがwin+Shift+mなのですが、3キー同時出力ができず、
なぜかwin+mの動作と一緒になってしまい、ウィンドウが最小化してしまいます。 >>31
Send の引数の指定は >>26 でいいんじゃないの >>32できました!!ありがとうございます。
$RShift::
KeyWait,Shift, T0.3
if ErrorLevel
send,+#m
else
send,{RShift}
keywait, RShift
return あぁ、これ Windows のショートカットキーか。上でキー入力ソフトで検出出来なかったっていうのは、そのせいかもしれんね OnClipboardChangeについてです
Wikiにある例で、
#Persistent
return
OnClipboardChange:
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip ; Turn off the tip.
return
と書いていたとします
で、このスクリプトを最初から起動するときはいいのですが、
リロードするときは、リロードした瞬間にこのルーチンが起動して
ツールチップが表示されてしまいます。コピーはしていないのに。
リロードした瞬間にOnClipboardChange:に入らないようにするには
どうしたらいいですか
ちなみに今は変数を使ってスクリプト先頭に flag = 1 として
OnClipboardChange:
if flag = 1 return
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip ; Turn off the tip.
return
とかやって誤魔化しています
また、#Persistentはあってもなくても同じです 訂正します。 最初から起動するときもやはりOnClipboardChangeに入っていました
Wikiにも
このラベルは、スクリプトが開始された直後にも実行される。
と書いています
しかし、
flag = 1
Sleep, 1000
flag = 0
return
OnClipboardChange:
if( flag > 0 )
return
ToolTip Clipboard data type: %A_EventInfo%
Sleep 1000
ToolTip ; Turn off the tip.
return
とすると、回避できます。これしか方法はないのかな >>36
https://autohotkey.com/docs/commands/OnClipboardChange.htm
この例は、スクリプトが最初に起動したときに関数が呼び出されないことを除いて
OnClipboardChangeと同じです。クリップボードの内容が変更された場合のみです。
#Persistent
OnClipboardChange("ClipChanged")
return
ClipChanged(Type) {
ToolTip Clipboard data type: %Type%
Sleep 1000
ToolTip ; Turn off the tip.
} ttp://i.imgur.com/EZhndfp.jpg
あるウィンドウだけウィンドウスタイルをこういうクラシックスタイルにしたいんですけども
winsetで指定できるウィンドウスタイルにそれっぽいのが見つかりません。
ahkでそういうのって可能ですか?
DllCall("dwmapi\DwmEnableComposition", "uint", false)
とか試してみたんですけど全てのウィンドウが中途半端にAeroオフになるだけで駄目でした。 >>37
実際にこれを使って作り変えてみました。ばっちりでした。ありがとうございました おい、日産よ!
いつまで無視出来るかなww
日産自動車栃木工場上三川寮
管理人は合鍵を使い従業員の部屋に無断で侵入。
抜き打ちで従業員の私物を全て調べるブラックの中のブラック企業。
残業賃金一部未払いの最低のクズ会社 質問させてください
アクティブウィンドウの位置を取得する際に、
取得する座標をウィンドウタイトルに関連した変数として取得したいです。
まずタイトルを取得して
WinGetActiveTitle, Title01
WinGetPos, X%Title01%, Y%Title01%, W%Title01%, H%Title01%,A
WinMove,A,,1300,100,1200,1500
MsgBox, %X%Title01%%
return すいません途中で書き込んでしまいました。
キーがおかしいw
まずタイトルをTitle01という変数名に取得します
WinGetActiveTitle, Title01
そしてこのTitle01に座標を関連させて4つの変数を決めます。
XTitle01 YTitle01 WTitle01 HTitle01
この変数にウィンドウの位置を取得させたいのですが、
WinGetPos, X%Title01%, Y%Title01%, W%Title01%, H%Title01%,A
これで取得できるでしょうか?
MsgBox, %X%Title01%%
これで書き出しても空欄になってしまいます。
ただ %X%Title01%% これがおかしいのは自分でもわかりますwww
「変数1%変数2%」
という表現や書き出す際にそれを表示させるにはどうすればいいでしょうか? 1.
hoge := X%Title01%
MsgBox, %hoge%
2.
MsgBox, % X%Title01% >>44
ありがとうございます。
前進しました。
2.
MsgBox, % X%Title01%
これはどういうことでしょうか。
やってみたら、普段Msbと表示されるメッセージボックスのタイトルバーにも数字が
現れましたが、、 いや、なんだか混乱してきました。
出直します。ありがとうございました。 '% 'はahkのわかりづらいとこだな ググりにくいし すみません、やっぱりうまくいきませんでした。
^#!Numpad1::
WinGetActiveTitle, Title00
hoge:=X%Title00%
MsgBox, %hoge%
return
これで、コントロール+ ウィンドウズ+alt+1で、
英語タイトルのウィンドウがアクティブの時はメッセージボックスは空白になり、
日本語を含むタイトルのウィンドウのときはイリーガル文字が使われてるというエラーメッセージがでます。
目的としては
ウィンドウ位置を移動させるコマンドを実施した時にアクティブなウィンドウの移動前の座標をタイトル文字を使った変数として覚えておいて、
必要な時に再度コマンドを実施した時にその位置に移動させたい(戻したい)という感じです。
ある一つのウィンドウだけではなく、いろんなウィンドウに対応させたいので四苦八苦している感じです。
変数とか配列とかよくわかっていない素人なので、、 変数名に空白とか漢字とか使えないんじゃね?配列の添字で実現すればいいよ。
Global titles := [] ; 配列
とかしておいて
WinGetActiveStats, title, w, h, x, y
titles[title] := [] ; さらに配列
titles[title].w := w
titles[title].h := h
titles[title].x := x
titles[title].y := y
取り出すときは
x := titles[title].x
y := めんどい。同様に。
ほんで
WinMove, % title,, x, y, w, h マウスを動かす時、大きく動かしたあと細かく動かそうとした際に上手に動かせずに
苦労することとかがあります
ペイントソフトで特定の範囲を選択したいときとか1ピクセル動かすのに苦労するとか
なので、たとえばシフトキーを押しながらマウスを動かすとゆっくりになるとかをAHKを用いて実装できますか >>48
昔自分用に作ったウィンドウコントロールに似てる
俺のは特定のプログラムが散らかすダイアログ群がターゲットだったから
記録:
WinGet, array, List, ahk_pid %pid%,, title
n := 0, d := ""
Loop, %array% {
n++
d .= "diag" n "=" ダイアログ呼び出しキー "`t" ターゲットのid(=array%A_Index%)からタイトルと座標を`t区切りで返す関数 "`n"
}
FileAppend, [CONF]DiagMember=%n%`n[DIALOGS]`n%d%, hoge.ini
return
復元:
iniRead, DiagMember, hoge.ini, CONF, DiagMember
Loop, %DiagMember% {
iniRead, diag%A_Index%, hoge.ini, DIALOGS, diag%A_Index%, 0
StringSplit, array, diag%A_Index%, %A_Tab%
Send, %array1%
WinWait, %array2% ahk_pid %pid%
WinMove,,, %array3%, %array4%, %array5%, %array6%
}
return
のようにしてた。
ウィンドウが閉じられずに存在しているならば呼び出しキー不要だし、ウィンドウハンドルを変数名にしてそこに値を格納してAppend使わずにメモリ上で完結出来るんじゃないかな >>50
その用途なら俺ならグリッド使うがその機能がないならば
昔AutoHotkeyフォーラムで拾った関数なんだがURL失念すまん
GetPointerPrecision() {
static root := "Control Panel\Mouse", sub := "MouseSpeed"
RegRead, s, HKCU, %root%, %sub%
return s
}
SetPointerPrecision(th1, th2, spd) {
static sm := 0x0004 ; SPI_SETMOUSE
VarSetCapacity(MySet, 12, 0)
InsertInteger(th1, MySet, 0) ; MouseThreshold1
InsertInteger(th2, MySet, 4) ; MouseThreshold2
InsertInteger(spd, MySet, 8) ; MouseSpeed( MouseSpeed is Not MouseSensitivity )
DllCall("SystemParametersInfo", "UInt",sm, "UInt",0, "Str",MySet, "UInt",1)
}
InsertInteger(pInteger, ByRef pDest, pOffset = 0, pSize = 4) {
Loop, %pSize%
DllCall("RtlFillMemory", "UInt",&pDest + pOffset + A_Index-1, "UInt",1, "UChar",pInteger >> 8*(A_Index-1) & 0xFF)
}
;使用例
SetPointerPrecision(0, 0, 0) ;タブレットモード
SetPointerPrecision(6, 10, 1) ;トラックボールモード >>50
RegWrite, REG_SZ, HKEY_CURRENT_USER, Control Panel\Mouse, MouseSensitivity, 5
レジストリ直接いじった方が早いそうなので試したけど、うまくいかなかった
再起動しなきゃダメなのかね >>52
コンパネのマウスのポインターオプションの速度の
ポインターの速度を選択する
ってとこを動かすと、レジストリのMouseSensitivityが1〜20まで変化する
MouseSpeedとの違いが謎だな >>54
regeditでレジストリを直接いじってみたが、コンパネのマウスにはまったく反映されずに
マウスのプロパティを閉じたりするとレジストリがもとに戻る
レジストリを変更したのをメッセージとして通知せんとダメなんじゃね?
SystemParametersInfoを使うとそれをしてくれるのか
でもダメだったっていうHPもあったなw >>38
exeのプロパティで互換性→視覚テーマを無効にすれば個別にAero切れる
WinSet, ExStyle, 0x00000080, hoge でさらにクラシックぽくなる
変更する為にはレジストリを変更する必要があるので慎重に
参照: https://w-mashiro.rhcloud.com/pc/windows/252
例: 互換性モードで実行
Path = C:\Users\User\Desktop\TestOS.exe
RegWrite, REG_SZ, HKEY_CURRENT_USER, Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers, %Path%, WINVISTASP2 VISTARTM マウスポインターの速度変更ならヘルプのDllCallのサンプルコードにあるけど >>49
ありがとうございます。
グローバル関数とはなにか、そもそも関数の扱いがわからないのでネットで勉強することにします。
そこでお尋ねしたいのですが、
titles[title] := [] ; さらに配列
この四角いカッコはコマンド的に意味のあるものなのでしょうか。
{ }や( )ではなく [ ] をautohotkeyで使う場面がわからないのですが、
何かの一例ということで例えばtitles a というような意味でしょうか。
それとイコールの右側の四角い記号はカッコの組み合わせを隙間なく書いてあるようですがどういう意味でしょうか?
そのカッコの中に何かを書き込めという意味でしょうか?
よろしくお願いします。 >>59
いやー俺もつい2週間前くらいに始めたところでw
配列を [] (大括弧)で書くのと {} (中括弧)で書くのに違いはないってどっかでみたよ
あと Object() て書いても同じことらしい。
他人が読んだときに、どういう意図か伝えるために書き分けるって考え方があって
普通に数字や文字列を入れるときは大カッコがいいかなあと俺は思った。
クラスのインスタンスとか、いろんなもの入れるとかの場合が中カッコ。俺はそうかなと
思っただけ。
でも別に気にしなくてもいいんじゃねw
あと Global も、別のいろんな言語の経験から反射的につけただけ。なくても動くかも
しれない。動かないかもしれない。ごめんねこんなんでw >>57
すごい! それっぽくできました
ありがとうございます PCゲームのDeadSpace3の上で、ahkがまったく動作しません。
ゲームなのでもうしょうがないのでしょうか?
英語でちょっとぐぐると同様の人がいるみたいですが、解決策を見つけられませんでした。
対戦ゲームが搭載されていますがメインではないので、アンチチート系のブロックではないと
思うのですが。このスレッドではゲームの話題は却下なのでしょうか >>62
ahkスクリプトを管理者権限で実行してもダメ? >>60
ありがとうございます。
わからないなりに真似してやってみたところ残念ながらタイトル固有の位置を取得できていない状態です。
同じコマンドでトグル動作するように設定しているのですが、
結局一番最後にウィンドウを中央に移動した直前の位置を覚えているだけみたいで
配列の部分を全部読み込まなくても同様の動きになりました。。。。
添字?でしょうか、なにか書式が違うんでしょうか。。。
次のレスにコピーしますが、もし、、、なにか間違いがわかったらご意見うかがえると幸いです。 ^#!Numpad1::
WinGetActiveStats, t, wa, ha, xa, ya
Global titles := [] ; 配列
if(xa=1300 and ya=100 and wa=1200 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
WinGetActiveStats, t, w, h, x, y
titles[t] :=[] ; さらに配列
titles[t].w := w
titles[t].h := h
titles[t].x := x
titles[t].y := y
WinMove,A,,1300, 100,1200,1500
MsgBox,%t%,%x%,%y%,%h%,%w%,中央
return
Label2:
w := titles[t].w
h := titles[t].h
x := titles[t].x
y := titles[t].y
WinMove, % t,, x, y, w, h
MsgBox,%t%,%x%,%y%,%h%,%w%,戻り
return >>65
さりげなく画面でかいなおい。
Global titles の行を一番上に、^#!Numpad より上に。
あと Label2 の w とか h とか、:= の前が全角のスペースだったから確認
if (IsObject(titles[t])) {
て書けば、座標を記憶してればどうたら〜って書けるよ。if (titles[t]) { て
書いても動くようだけど。あと
title をキーにして覚えるよりはウィンドウID(HWND)で覚えたほうがいいと思う。
タイトルは変わることがあるからな。
最後俺のミスだけど、titles て変数名はあんまりよくなかったw
windows とかのほうがマシだったわ
そして Global はつけなくても動いた。先頭に title := [] て書いとけばいい。 すみません、
Google chrome (正確にはSRWare Iron)上で再生しているHTML5ビデオプレイヤーにフォーカスを合わせる方法ってないでしょうか?
HTML5ビデオプレイヤーにキーをsendしたいんですが、ブラウザ自体をwinactivateしてもそうはならないようで… >>67
そういうのは俺環で動けば良いって割り切って、
ControlClick でプレーヤー内の影響ない場所を狙い撃ちしてフォーカス合わせてから、
ControlSend でキーを送ってるなぁ >>66
ありがとうございます。4kモニター買ったら真ん中以外がすごく操作しづらくてそれで考案中ですw
全角スペースを半角に直したら「戻り」が正しく動かなくなりました。
w := titles[t].w
h := titles[t].h
x := titles[t].x
y := titles[t].y
これが機能してなかったのが逆に表面上だけはうまく動いたように見えていたようです。
ウィンドウID(HWND)とは何でしょうか。
調べてみたところautohotkeyにはウィンドウを特定する方法のなかに
個別のIDはなさそうなんですが、、、
http://ahkwiki.net/Window
いい方法があると良いのですが。
if (IsObject(titles[t])) {
これは、titles[t]に値が入っていたら っていう意味でしょうか。。
やりたいことはさほどでもないのに実際挑戦すると深みにはまっていきます。 >>70
titles := [] を一番上にした?俺実際に動作確認してから書いたんだぞw
ウィンドウIDじゃなかったっけか。一般には HWND で通るんだけどなんか
変わった名前で呼ばれてた記憶があってウィンドウIDだったかなーと思って書いた。
WinExist() のところみたら「ウィンドウのハンドル」て書いてあるね >>71
はい。一番上にしたんですけど、、、おかしいなあ。
そちらで動いたのならこのまま欠点を調べてみます。
一番上っていうかショートカットコマンドの上に書きました。
他のスクリプトもいくつかある中で、不安ながら初めてキーコマンドの上に書きました。
ウィンドウのハンドル、調べてみます
ただちょっと腰痛がひどくて取り掛かるまでに時間がかかりそうです、、、 >>71
スクリプト丸々貼っていただけると有難いのですが、、、
見比べられると見つけられる気がします
いろいろ要求してすみません あ〜むずかしい
日本語の説明書ないかな
英語とかのはあるっぽいんだが もう捨てちゃったよ。最初から RAMDISK 上でやったからなー
他思いつくことは
文字コードを utf-8 BOM 付きにした。
うちは 4K じゃないので指定どおりのウィンドウサイズにはならなかった
そのため「戻り」が呼ばれることはなかった。サイズを小さくしたら指定どおりになったけど
その時はすでに IsObject() で分岐するように改変してたから、ウィンドウサイズの判定で
正しく分岐するかどうかは確認してない。ただし MsgBox で表示させてサイズの確認はやった。 >>75
そうですか、、、
なんでかなあ
ありがとうございます >>75
とりあえずウィンドウのハンドルの取得方法がわかりました
https://sites.google.com/site/autohotkeyjp/reference/commands/WinGet
WinGetでIDを指定するみたいです。
ウィンドウの特定のところでなんでパッと出てこないのか、、
しかしこれプログラム初心者にどっかで教えてくれる場所ないかなー ウィンドウハンドルとか置いといて
とりあえず自分で書いたプログラムを動かすことを考えたほうがいいなこれは。
動かさないことには気持ち悪いだろう。
ほんで10行程度のプログラムの説明に100行書くのはごめんだw スクリプト貼り付けpen.ioとか使うのはダメなのかな
アップローダーはちとめんどくさいのはあるが
これだと適当なページ名とパスワード入れるだけで使える
アカウント作成とかも不要 >>78
一度相手したなら最後までちゃんと面倒みろよ
オブジェクトの説明とかめんどくさいことになりそうだったから俺はレス思いとどまった ずっとこの調子でやったらやったで
よそでやれとかいうくせにw >>82
これ修正するのにアカウント必要じゃない? AHKって書くの面倒なんだよな
ちょっとボタン入れ替えたいときとか不便だわ
自動記述できるようなツール誰も作ってないのかな 暇つぶしに辞書読むような感覚でリファレンス読んでたら自然に覚えたけどな
初心者だから教えてくれとか言わずにもうちょっと時間かけて努力してみなよ >>86
結構何時間も試行錯誤した末の質問なんですけどね
サイトは教科書ではないから、頭から読んだけどどうもある程度何かを知っていることが前提になっているようで。
それで質問したらヒントくれる人がいたけど、そのヒントがわからないから
コピペして試行錯誤するしかなくて正直何時間もやった挙句のレスなんですわ
自分で動かしてみろって書いてあるけど、それは何度も繰り返してるんですけどねえ、、、、 titles := [] ; 配列
^#!Numpad1::
WinGetActiveStats, t, wa, ha, xa, ya
if(xa=1300 and ya=100 and wa=1200 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
WinGetActiveStats, t, w, h, x, y
titles[t] :=[] ; さらに配列
titles[t].w := w
titles[t].h := h
titles[t].x := x
titles[t].y := y
WinMove,A,,1300, 100,1200,1500
MsgBox,%t%,%x%,%y%,%h%,%w%,中央
return
Label2:
w := titles[t].w
h := titles[t].h
x := titles[t].x
y := titles[t].y
WinMove, % t,, x, y, w, h
MsgBox,%t%,%x%,%y%,%h%,%w%,戻り
return やっぱりこれは動かないです。
皆さまお騒がせしてすみません。
また試行錯誤します。 よく分かってないやつが出したヒントを鵜呑みにしない方が良いんじゃね >>88 コピペで動いたぞ
画面サイズ 1200x1500 のところを 600x400 に変えたけど gdgdすぎじゃろ、答えるならwikiの該当ページにリンク張るかせめて正しい検索ワード教えたれよ
うろ覚えの単語で適当な説明するから質問者もググれなくて困惑してるやん
>ウィンドウID(HWND)
正しくはウィンドウハンドル、AHK上では ahk_id のこと
Title を ahk_id に変えればオブジェクト使わなくても>43の当初の目的は達成できたと思われ
id:=WinActive("A")
WinGetPos, X%id%, Y%id%, W%id%, H%id%, ahk_id %id%
msgbox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% 最初に回答書いたのは自信あったからだ。あとは訊かれたから書いたんだ
2/10 にAHKインストールしたとこなんだ。細かいことは勘弁してくれよな 半年ROMれの典型例
2週間じゃスレの雰囲気もようわからんだろうに
しつこく食い下がってくる質問者のほうが悪いとでもいいたげだがあまり気楽に答えてやるな
白旗上げるなら早いうちのほうが相手の被害も最小限ですむ
自分も始めたばかりならよう分からん回答者に振り回される恐怖は想像できるだろう わかったよう
でもウィンドウID(HWND)は日本語サイトだけみたら間違いと思うかもしれないけど
本家みたらそんなには間違ってないと思うぞ >>91
中央に移動させるのは動くけど引き続き同じキーコマンドで元の場所に戻らないんです。
その配列に元の位置が記憶されていない状態だと思います
配列が分からないのでとりあえず作ったスクリプトで今抱えている問題は、
ウィンドウAにキーコマンド→中央へ拡大移動しつつ前の位置を記憶
ウィンドウBにキーコマンド→中央に拡大移動したつ前の位置を記憶
これで2つのウィンドウが重なります。
そこで手前のウィンドウBを手動でずらす
ウィンドウAにキーコマンド→ウィンドウBの元の位置に移動してしまう
という現象です
記憶が1つならそうなるのは当然なんですけど
それを回避するのは配列しかないかなあと、、、 >>92
ありがとうございます
それでも良く分からないけどまたやってみます。
腰痛が酷くて椅子に座れなくて、、、、 タスクバーの右にあるタスクトレイ?でしたっけ、この部分に表示されているアプリがクラッシュするとアイコンだけが残りますよね?。
この部分をリフレッシュして状態を元に戻したいんですが、Windows10だと海外のどのコードを使用しても反映されません。
グーグルで”autohtokey tasktray refresh”で検索したコードを使用してもWindows7では正常に動作しますが、Windows10では動作しませんでした。
ToolbarWindow321をToolbarWindow324にしても効果なしでした。
何か良い方法等ありませんでしょうか、よろしくお願いします。 >>99
マウスカーソルを残ったアイコンに合わせると消えるだろ?
なのでMouseMoveで瞬時にトレイアイコンをなぞるスクリプト作れば消せる >>99
そのキーワードで検索して出てきた Noesis さんのスクリプトが、
Windows 10 で動作報告いっぱいあるようだけど、これじゃいかんの?
https://autohotkey.com/boards/viewtopic.php?t=19832#p95533 >>100
有難うございます。
その方法は代替案として既に実践済みなのですが、やっている事がダサ過ぎて止めた経緯があります。
すみません、言葉足らずで。
>>101
有難うございます。
このコードも過去に試してはいるのですが、ホットキーを指定しないと反応しないようなので諦めていました。
が、今一度確認しました所、Tray_Refresh()の部分を削除すれば出来るようですね。
解決出来ました、有難うございます!。 念の為、こちらの環境で動作したコードを貼っておきます。
http://pastebin.com/NU5qcyvh >>92
そのまま貼り付けてやってみました。
きちんとID固有の変数に位置情報が読み込めててワクテカです
自分のスクリプトに組み込めるようトライしてみます。 >>92 スゲーあっさりできました。今後、改良改善していこうと思います。ありがとうございました。
if文の組み方でreturnの数が変に多い気がするのですが、無いとエラーが出るのでこうなりました。
もしよりスマートな組み方があったらうかがえると幸いです。
;ウィンドウリサイズ
^#!Numpad1::
WinGetActiveStats, t, wa, ha, xa, ya
if(xa=1300 and ya=100 and wa=1200 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
id:=WinActive("A")
WinGetPos, X%id%, Y%id%, W%id%, H%id%, ahk_id %id%
WinMove,A,,1300, 100,1200,1500
MsgBox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% " 中央へ"
return
Label2:
id:=WinActive("A")
WinMove,A,,X%id%, Y%id%,W%id%,H%id%
MsgBox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% " 元の位置へ"
return というかこのautohotkeyはいろいろな事ができて凄いと思うのだけど
あんまり話題になってないように思うのですがどうなんでしょうかね。
もともと自分はmac歴が長いので細かい省略キーが使えないウィンドウズに不満があったのですが、
これでカスタマイズしまくればある意味最強だと思えます。
書籍とか、馬鹿でもスクリプトがつくれるアプリとかあればいいのになあと思いました。
まあだから「流行らせるページ」なんてものができてたりするんでしょうけども。 文字列操作についてですが、
StringSplitを使うと、文字をカンマ等で分割して、変数名を A とすると、
A1 A2 A3
等に分割して入れてくれます。 逆に、A1 A2 A3等からまとめてもとのカンマ等で結合された文字列に戻す
命令ってないのでしょうか。 あるいは1行で簡単にできる操作ってありますか >>107
関数化してみては?
; 分割
Str := "あ,い,う"
A := StrSplit(Str, "●")
; 復元
Str := StrRestore(A)
MsgBox, % Str
StrRestore(A)
{
Str := ""
Loop, % A.Length()
{
Str .= ((A_Index > 1) ? "●" : "") . A[A_Index]
}
Return Str
} StringSplit て言うてるやん
初心者(と思われる)相手に扱いのややこしいオブジェクト使った返答はやめたげなさいよ
>>107
分割数が固定なら A := A1 "," A2 "," A3 で一行化も可能だが
可変だったらループで回すしかないんじゃない?
やってるこた>109と同じだが
A:=""
Loop, %A0%
A .= A%A_Index% (A_index<A0 ? "," : "") >>111
最初はそう答えようかと思ったけど、>>107は関数的な使い方求めてるのかなと思った
それで関数内をグローバル変数化するのはトラブルの元かと思って変えたわ。すまん お二人ともありがとうございました。非常に参考になりました 107じゃないけど演算子がいみふで>>111を理解するのを諦めた
?:とか.=使ってるのほとんど見たことなかったんだけど割と一般的なの?
それとも1行にまとめられるからレス用にあえてそうしてるだけ? . 演算子 (文字列連結) http://ahkwiki.net/-Concat
?:(条件) (三項演算子) http://ahkwiki.net/-Condition
代入演算子 http://ahkwiki.net/-Assign
三項演算子はぱっと見で意味が通りにくいので避ける人もいるが
覚えると便利なので多用する人は結構いるよ
107は行圧縮が課題なので使用したが式の意味の理解しやすさ的にはあまり親切な回答ではないね
視認性や効率無視で更に詰めると2行までは圧縮できる
Loop, %A0%
A := (A_index=1 ? "" : A) A%A_Index% (A_index<A0 ? "," : "") 俺は>>107が文字列への戻し方を理解した上での質問だと解釈してたわ 三項演算子がAutoHotkeyで使えるという発想がなかった a := (aaa ? aaa
: (bbb ? bbb
: (ccc ? ccc : ddd)) )
みたいにテンプレ入れてるな俺
視認性はif文と大して変わらないかもだけど 教えてください。
無変換キーコンビネーションキーの一つ目で使用しているのですが、
一つ目のキー単独の元の機能は失わないようにしたいです。そこで
vk1Dsc07B::vk1Dsc07B ←これが動作しません
vk1Dsc07B::Send, {vk1Dsc07B} ←これは動作するのに
これはどうしてでしょうか?変換キーは同じこと(リマップ)をしてもそのまま動作するのに。
あとチルダ(~)をつければ大丈夫ってwikiみたのですが動く気がしません。 vk1Dsc07B::vk1Dsc07B
これも普通に動作したけど ありがとう。えー、どうしてだろう。もう一回やったけど僕無理だ。 ヘタに省略せず登録したコンビネーションキーとかも全て書くべきだと思うがな
ちなみに俺が試したのは下記
vk1Dsc07B::vk1Dsc07B
vk1Dsc07B & x:: AltTab
これで無変換キー単独で押した時は普通に無変換キーとして動作してる 原因わかりました。
別の所で特定のウインドウが前面になったときの個別のキー割り当てのなかに
#IfWinActive, ahk_class GomPlayer1.x
vk1Dsc07B::Send, !{F4}
#IfWinActive
というのが入っていたのが原因でした。でもなぜこれが原因なのかわかりません。
どうしてなのでしょうか?
もし真ん中の行がSend, ではなくふつうのリマップの::a であれば無変換単独へのリマップがふつうに動きます
autohotkey.ahkでテストした記述は以下の6行がすべてです。
------ここから-------
#IfWinActive, ahk_class GomPlayer
vk1Dsc07B::Send, !{F4}
#IfWinActive
vk1Dsc07B::vk1Dsc07B
vk1Dsc07B & x:: Send,^{x}
------ここまで-------
ぼくは決定的なことがわかってないんだと思います。教えてください。 MPC-HCにAHKからsendでのキー操作(早送り、次のトラック等)が
届くものと届かないものがあるんですが同じようなことで悩んだ先達さんいないでしょうか
全部効かせるコツがあったら教えて下さい メディアキーが効かないならキーボードショートカット使えば?
ショートカットキーはMPC-HC側でいくらでも編集出来るし >>124
てか試して見たら次のトラックとかメディアキー(Media_Next)でもキーボードショートカット(デフォならPgDn)でも
AHKからSendして普通にMPC-HCで使えたけど
根本的に何か記述間違ってるだけじゃね >>126
ありがとうございます
それで問題が狭まったかも
実は問題はSVP 3.1.5に同梱されているmpc-hcで出ていて
madVRやReClock併用時だけの問題なのかもです
色々試してみたけどやぱり分かりませんね… スクリプトすら貼らないから何が問題なのかすら伝わってこないんだが
質問するやつ言葉足らずが多すぎ 最近妙にご新規さんが増えてるっぽい印象は感じる
どこぞで紹介でもされたんかね ToolTipのフォントが小さいのですが、フォントを変更することは出来ますか :::Send,{'} ; [:] -> '
+:::Send,{"} ; Shift + ' [*] -> "
WildcardをDouble questionにremapしたいのですが何故か動作しません助けて下さい >>130
出来ない。但し、GUIやProgressで代用可能
tooltip_gui("ほげほげ")
sleep, 2000
tooltip_progress("hogehoge")
sleep, 2500
exitapp
tooltip_gui(msg) { ; Gui番号を指定すれば複数表示可
Gui, -Border
Gui, Font, S50
Gui, Add, Text, , %msg%
;Gui, show, X300 Y200 ; 座標指定
Gui, show ; 画面中央
SetTimer, tooltip_gui_off, -2000
return
tooltip_gui_off:
GUI, Destroy
return
}
tooltip_progress(msg) { ; 複数表示不可、各々のオプションは適当
;Progress, h100 W400 X300 Y200 B1 C00 ZH0 ZW0 ZY2 FM60 WM200 CWFFFFBF , , %msg% ; 座標指定
Progress, h100 W400 B1 C00 ZH0 ZW0 ZY2 FM60 WM200 CWFFFFBF , , %msg% ; 画面中央
SetTimer, tooltip_progress_off, -2000
return
tooltip_progress_off:
Progress, off
return
} >>134
作らないといけないということですね。ありがとうございました どなたか>>123の疑問を解決していただけませんか?
どうしてこの最小構成のスクリプトでvk1Dsc07Bの単独の機能が死んでしまうのが
理解できません。なにがだめなんでしょうか? 部分的すぎて質問の意味が伝わって泣きんじゃないか?
動くほうのスクリプトと動かないスクリプトの両方をはっつけて
何は出来るのに何ができないって示さないとわかんないんじゃないかな 環境書かない質問はスルーしていいってじっちゃが言ってた >>136
vk1Dsc07B::
if WinActive("ahk_class GomPlayer"){
Send, !{F4}
} else {
Send,{vk1Dsc07B}
}
で良いんじゃないの? >>136
同じキーへの割当でホットキーとリマップを混在させるとよろしくない
リマップは実行時ホットキーに自動変換されることが関係してるらしい >>136
コンビネーションキーとして使用すると
一つ目のキー自体のもともとの機能は無効化される。
機能残したいなら#ifを使おう
#IfWinActive 電卓
vk1Dsc07B::Tooltip 電卓
#if GetKeyState("vk1Dsc07B")
x::Tooltip x
#If >>139-141
>>136の質問の仕方が下手糞なせいもあるが、質問内容に沿ったを回答をしてるのは>>140だけ レスたくさん頂いてありがとうございます。文章が下手ですいません。
>>140
・#IfWinActiveで別々のケースとして区切っているのに、ホットキーとリマップの混在になってしまうのでしょうか?
・その混在で不都合がでるのはコンビネーションキーを設定したときに、一つ目のキーを離したときに発動する機能に限ったことなのでしょうか?
ぼくのautohotkey.ahkの構成は、#IfWinActiveをつかって
Aのソフトウェアが前面にあるときのホットキー
Zのソフトウェアが前面にあるときのホットキー
それら以外の場合のホットキー
という順で、どのソフトウェアが前面であるかを一つのユニットとして、別々にホットキーを
設定しているので#IfWinActiveの仕切りを越えて影響してきたら若干困ります。
AからZのホットキーの場合は前後で#IfWinActiveで仕切っているのに対して
「それら以外の場合の」ホットキーの場合は前後になんの工夫もなくただ書いているだけなのがまずいのかな。 >>143
何が困るんだよ
自分で最初に書いた通り
vk1Dsc07B::Send, {vk1Dsc07B}
で動くんだからそれでいいじゃん >>143
最初の「なんで」という疑問に「ahkはそう言う仕様で作られてる」というしかない気もするけど
リマップとSendどうしても混在させたいなら開発者に要望出すしかないんじゃないですかね デスクトップの向きって取得出来ませんか?。
wiki見た感じだとsysgetやwingetでは無理そうなんです。 ポートレートかランドスケープかって判断ならhright widthの値比較でわかると思うが
タブレットデバイスの 0/90/180/270 角度判断は無理じゃね どんな用途か知らんけど大抵は縦か横かの判定だけで事足りる気がするけど >>144
vk1Dsc07Bの単独の機能が死ぬんだがw >>150
死なないよ
てかお前が最初に>>119で
vk1Dsc07B::Send, {vk1Dsc07B} ←これは動作するのに
って書いてるじゃん
こっちでもちゃんと検証して動作確認済み (ワッチョイ ef99-8lb6)
なんだこいつ態度急変キモイ >>146
>>147
かなり力技だけど
タスクバーを常に出してるならそれぞれの画面角度のスタートボタンとかの画面キャプチャ(bitmap形式)を保存しといて
ImageSearch使って判別すれば角度もわかると思う >>156
0度と180度(または90度と270度)ってAHKから見たら同じで判別不能じゃね? list=hoge`nhage`nhige
Loop,parse,list,`n
{
ypos:=A_index * 24
Gui, Add, Edit, x5 y%ypos% ReadOnly, %A_LoopField%
Gui, Add, Button, x+50 y%ypos%,これを押すと左のeditboxのテキストをクリップボードにコピーさせたい
}
Gui,Show,Autosize NoActivate
こんな感じで変数listを行区切りでGUIボタンにして
クリックすると行ごとの左のeditboxのテキストをクリップボードにコピーさせたいんですけど
どうやればいいですか?
変数listが100行超える場合もあるので1個1個ラベルを書いていくのはつらいです >>158
Gui, Add, Button, x+50 y%ypos% vb%A_Index% Gcopysub,これを押すと左のeditboxのテキストをクリップボードにコピーさせたい
copysub:
msgbox,%A_GuiControl%
return >>158
ラベル手入力するのが面倒ならラベル作成するスクリプト書けばいんじゃね
loop,100 {
gui, add, button, x y, %a_index%
clipboard .= "button" a_index ":`n" ;みたいに
}
その書き方ならボタンコントロール番号とエディットコントロール番号が一致するだろうから
button1:
button100:
controlgettext, var, % "edit" regexreplace(a_thislabel, "i)button", ""), A
clipboard := var >>160のcopysubラベル内でA_GuiControlを使ってcontrolgettextしたら無事動作しました。
ありがとうございました! 変数名を文字列として格納できないかの質問。
下みたいな指定した変数のリストをメッセージボックスに表示する関数を作った。
a := 5
b := 7
OutputValue(a,b)
return
OutputValue(Variable*){
Strings := ""
Loop,% Variable.MaxIndex() {
Strings .= "変数" . A_Index . ":" Variable[A_Index]
If( A_Index != Variable.MaxIndex() )
Strings .= "`n"
}
Msgbox,% Strings
}
これを実行すると
変数1:5
変数2:7
と書かれたメッセージボックスが表示されるんだけど、これを
変数a:5
変数b:7
といった表示をさせるようにしたい。
関数OutputValueに変数名の情報を引き渡すことはできないだろうか? >>163
;呼び出し
OutputValue({"a":a, "b":b}*)
;関数定義内で
For k, v in Variabe
Strings .= "変数" . k . ":" v * は要らんわ。まぁ、とにかく変数名をキーにした配列を渡す以外に道は無いと思う a := 5
c = a
OutputValue(c)
return
OutputValue(v) {
MsgBox, % v ":" %v%
} >>167
こっちでも出来た。多謝。
a := 5
b := 7
c = a
d = b
OutputValue(c,d)
return
OutputValue(v*) {
Loop,% v.MaxIndex(){
v2 := v[A_Index]
Strings .= v[A_Index] ":" %v2% "`n"
} >>167>>168
それは OutputValue() 内に定義された変数名と同じ変数名が渡されたとき、意図しない動作になるから気を付けて
そのコードで
v2 := 5
c = v2
として
OutputValue(c,d)してみ このスクリプトがUnicode版だと動作しないのは何故でしょうか?。
http://pastebin.com/raw/GbNmzpFX
ansi版では動作します。 sFile = gui.png
にしたら動作しました。
お騒がせしました。 最後らへんで MultiByteToWideChar かましてるから
A_IsUnicode チェックするなりして外してみたら? 追試してほしいならansi版で動作するパーツセットは最低限揃えるべきじゃね
拾い物の動作確認依頼にしても不親切すぎるだろ >>176
失礼しました、よろしくお願いします。
Gdip.ahk
http://www.autohotkey.net/~tic/Gdip.ahk つか、もう>>175で回答出てるでしょ。たぶんそれで動くよ If A_IsUnicode = 1の場合に
DllCall("kernel32\MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sFile, "int", -1, "Uint", &wFile, "int", 512)
この行を無効にするって事ですか?全く理解できていません。 >>177
そっちじゃなくてgui.pngのほう
176投稿前にググって拾ってきたgdip.ahkと
ローカル画像を適当にリネームしたgui.pngじゃ
ansiもunicodeもみえないウィンドウ起動されるだけで挙動変わんなかったぞ
ソース貼るだけじゃどう動いてほしいのかすらわからん >>180
こちらにはansiとunicode共に32ビット版のVersion 1.1.24.1が有ります。
そして172のスクリプトを実行すると、unicode版だけ画像が表示されないんですよ。
画像ファイルは何でも良いと思います。 Ctrl & 無変換 & j の3キー同時押し処理をしたいけれど、
押す順番で動作しないことが有ります。
vk1Dsc07B & j:: Send, {Blind}{Left}
こんな風に書いた場合、
無変換 -> Ctrl -> j の順に押すと Ctrl & Left として処理されるけど
Ctrl -> 無変換 -> j の順だと Ctrl & j として処理されてしまいます。
このページを参考に色々手を加えてもやっぱりダメだった。。
http://did2.blog64.fc2.com/blog-entry-371.html
何か良い方法は無いでしょうか。 >>182
私は同じことを変換キーでやっているんだけど、どっちの順番でも正常に動作するよ >>182
無変換down、ctrlJをsend、無変換up 情報ありがとうございます
英語配列キーボードを使ってるんですけど、
レジストリいじって英語配列使えるようにしたり、無変換・変換を割り当てたりしてるんでそのせいかも・・
レジストリをもとに戻して別の日本語配列キーボードを使ったら、確かに3キーの押す順番を変えても正常に動作してくれました すみません初心者なのですが質問いいでしょうか
Windowsキー単独のみを無効にしたいんです
Windowsキー+Rとかは普通に使いたいです
どのようにすればいいでしょうか >>186
LWin & r::Send, #r
LWin::Return
これでWinキー単独は無効化、Win+Rは使用可能
あとは使いたいWin+○のショートカットを全て登録すれば・・・
と思ったんだけどなぜかこの2行だけでWin+EやWin+Dなど他の組み合わせも使用可能になった
けがの功名だけどこれで良いのかな >>187
ありがとうございます
WindowsキーをRetuるrnして使いたいキーを、それぞれ追加す以外にスマートな方法があるかなと思ったんですが
どうやら、LWin & r::Send, #rのみで他の組み合わせも使えますね...気づきませんでした >>69
亀レスですがそれで解決しました。
ありがとうございます。目からウロコでした。心から感謝 sleep時間をスクリプト起動中に変更したいんだけど
引用数字って可能?
それかクリップボードの数字を引用させるでもいいんだけど >>191
Gui,Add,Slider,vmyslider Range100-1000 ToolTip x6 y10 w300 h30
Sleep, %vmyslider%
これで読み込めないんだけど:=もだめ
そもそもこれで変数としてよみこめてるのかな? >>192
Gui, Submit または GuiControlGet
MsgBoxで変数の中身を見ていれば空だとわかる >Sleep, %vmyslider%
そもそもvが余計 >>192
ini使うのは?
a:
IniRead, aaa, %A_ScriptDir%\aaa.ini, test, bbb
Sleep, %aaa%
MsgBox, %aaa%
Gui, New, hwndhGui AlwaysOnTop Resize MinSize
Gui, Add, Edit, Number Vaaa_, %aaa%
Gui, Add, Button, Gok, OK
Gui, Show
return
ok:
Gui, Submit
IniWrite, %aaa_%, %A_ScriptDir%\aaa.ini, test, bbb
gosub a 質問内容はスクリプト実行中(本来の意図は起動時ではない)の数値反映で
スクリプト終了状態の保持ではないからiniは余計じゃね
質問者が躓いてるとこスルーして他の機能盛り込まれても混乱させてしまうだけでそ >>193
Gui,Add,Slider, VMySlider Range100-1000 ToolTip x6 y10 w300 h30
Gui,Submit,NoHide Myslider
Gui,Add,Radio,x24 y70 w38 h30,10
Gui,Add,Radio,x64 y70 w38 h30,20
Gui,Add,Radio,x103 y70 w38 h30,30
Gui,Add,Radio,x141 y70 w38 h30,40
Gui,Add,Radio,x180 y70 w38 h30,50
Gui,Show,w350 h120,test
enter::
Gui,Submit, MySlider NoHide
MsgBoX,%MySlider%
Return
Gui,submitで取得できましたありがとうございます
enter押してスライド位置取得した後No hideしててもGUI消えてしまうのは
再起動を組んで解決?ずっと表示していてほしい 試してないけどGui,Showの次の行にreturn入れれば良いだけでね $RShift::
KeyWait, RShift, T0.13
if ErrorLevel
send,{RShift}
else
send,#{Tab}
keywait, RShift
return
機能は短く押した時Windows10のタスクビューが動作し、長く押すと右Shiftが押されるというものを作りたいのですがいくら長押ししても右shiftが出力されません。
教えてください。 右shiftが出力されませんてのは何を見てそう言ってるの?
ちゃんと押されてるのを認識してないだけじゃないの >>200
まずサンプルページをよく見て記述を見直そう
あとRShiftの押し下げと上げの記述もちゃんと書こう >>203 メモ帳で大文字を打とうとしたときにわかりました。あとで確認したらShift+Deleteもできないことで出力されていないとしました。
>>204 ごめんなさい。サンプルコード見ても何もわかりませんでした...わたしの理解力不足なのは重々承知の上、教えて頂けないでしょうか? Win7だから、タスクビュー出せないけど、こんなスクリプトなら動作したよ。
~RShift::
KeyWait,RShift,T0.13
if(ErrorLevel){
return
}
MsgBox,短く押されたよ
return 本来はShift+Win+Tabではタスクビュー呼び出せないので、~付けるのはダメな気がするけど
なぜか~付けてsend,#{Tab}でもタスクビューは呼び出せるね
そのやり方で行くなら0.13秒以上押した場合にRShiftを送る必要もない
ただし>>207のスクリプトだと長く押してもMsgBoxが出てしまうのでkeywaitは必要
でも>>200はそれ以前にifの使い方とか基本的なことすら分かってないというね >>206
Send,{shift} が送れているかいないかと
それで大文字が打てるかは話が別 >>208
>なぜか~付けてsend,#{Tab}でもタスクビューは呼び出せるね
Shiftを離した時に発動するから、タスクビューを呼び出せるってことかも KeyWaitのTオプションとErrorLevelはあてにならない感じだし、こんなのかな
~RShift::
KeyWait,RShift
if(A_TimeSinceThisHotkey>130){
return
}
send,#{Tab}
return あ、違った。こう。
~RShift::
KeyWait,RShift
if(A_TimeSinceThisHotkey<130){
send,#{Tab}
}
return >>212
>>207のやり方でも良いんだよ
~RShift::
KeyWait,RShift,T0.13
if(ErrorLevel){
keywait, RShift ;←これが必要
return
}
MsgBox,短く押されたよ
return >>214
なるほど。
ちょっとカウント入れて実験してみたけど、Shiftキーもキーリピートがかかるみたいだね。 キーボード上に円記号とbackslashのキーがあるんですが円記号はBackslashとして識別されるので
2つの同一キーがある事になるんですが片方だけを別のキーにremapしたいんですが上手く行けません
助けて下さい >>217
sc07d::a
sc073::b
うちではこれで「\→A」「バックスラッシュ→B」に出来てる \のスキャンコードはSC07DでバックスラッシュはSC073だった >>218
>>219
正常に作動しました ありがとうございます チルトホイールにキーを割り当てても、動作が反映されないのですがどうすれば良いでしょうか?
テストで以下の様にアサインしました
WheelUp::a
WheelDown::b
WheelLeft::c
WheelRight::d
+WheelLeft::e
+WheelRight::f
ホイールの上・下(a・b)は問題なく入力できますが、チルトの右・左もa・bが入力されてしまいます(押し続けると連打状態になります)。
問題の切り分ける為に、入力コマンドを変えSift + チルトで別文字の入力も試しましたが、
大文字のA・Bが入力されてしまいます。 WheelLeft::C
WheelRight::d
Shift & WheelLeft::e
Shift & WheelRight::f
Windows7
ロジのマウスで普通に問題無い LGSのホイール左右は普通のWindowsAPIとは違って特殊だったはず まず環境書くところからだな
まさかとは思うがXPだったりしないよな? >>222
key history で入力されているボタンを確認 >>224
ドライバ入れてなきゃ普通にWindowsAPI >>227
そりゃOSの汎用ドライバだとOSのAPIに従うしかないので当たり前 >>223-228
環境が抜けてました。申し訳ございません。
OSはWindows 7、マウスはrazer mamba teという有線マウスです。
ドライバーもユーティリティも入れなかったのですが、razerなのでロジに変えないと無理かもしれませんね。 >>229
Razerならドライバの有無問わずどちらでも使えるよ >>229
右下アイコン > open > key history からキーのログを見て
何が押されているのか確認しろと・・・ 認識されないならされてないってわかるからいいじゃん
想像で物言ってもしょうがないし 何も書いて無いから判断できない
キーログなし → 特殊キーはドライバ入れ無ければ動作しない(チルトは問題ない)
キーログあり(キーが正しい) → スクリプトを修正
キーログあり(キーが違う) → ドライバソフトで修正またはスクリプトを修正 sleep中にsleepが今どれだけ経過したか確認するスクリプトってある? >>235
SetTimer内で経過時間をToolTipに表示かな コンパイルした状態からのスクリプト抽出について質問です。
リソースを覗く以外でスクリプトを抽出する方法は、予めFileappend等で出力するようにするしかないですか?。 >>238
用途がさっぱり分からないが
AHKのライセンスならソースもセットなので
.ahkを読めばいいだけでは? 今はもう exe2ahk.exeじゃ逆コンパイルできないんだっけ?
>予めFileappend等で出力
出力方法はそれでいいとして実行中のスクリプトから自身のコード抽出する方法なんてあったっけ?
.ahkの状態ならA_ScriptFullPathで自身をFileReadすればいいけど
(元ソースがあるから別途出力する意味もなくなるが)
とりあえずここのAHK_decompilerで "リソースを覗く"ことはできる模様
http://autohotkey.com/boards/viewtopic.php?t=4230 インストーラーを使わずに、ポータブル版としてAHKを起動すると、Winキーの押しっぱなしや、キーリマップのすり抜けがときおり発生するのは仕様?
これを解決するにはどうしたらよい?reloadすればキーのすり抜けは改善するので、Settimerで30分ごとにreloadするようにしてみたけど、あまり状況は改善せず…
会社のPCで管理者権限がないので、通常インストールができない。 押しっぱなしはインストーラーでも発生するし
リマップのすり抜け?とやらも会社のPCでの環境依存の可能性はないのだろうか
AHKのインストーラーって関連付けとかをレジストリにちょこっと追加して
スタートアップにAutohotkey.ahkのショートカット放り込むくらいだと思う
裏で動かしてるサービスとかないし正直ポータブル関係ない気がするのだが >>242
一番押しっぱなしを起こしていると思われるホットキー定義はどんなの? Ctrl+Pauseをホットキーにすると
Ctrl+ScrollLockも拾ってしまうのは仕様ですか?
^vk03sc146(=Pause)としてもやはり^vk03sc046(=ScrollLock)も拾ってしまいます。
もしかしてLock系キーの根本的な問題なので解決するにはレジストリのキーマップ変更して
PauseとScrollLockをF13とF14にしてAHKでF13とF14を拾うしかないですか???
AHK v1.1.24.01 64bit / Windows10 / 108フルキーボード >>245
Ctrl + Pause = Control-break = vk03
Ctrl + Scroll Lock = Control-break = vk03
同じなのでスキャンコードだけで指定
だめなのは前方一致だから?
^sc146::ToolTip Pause
^sc046::ToolTip ScrollLock >>244
亀レスすまぬ。
Lwin::Lctrl
Lctrl::Lalt
Lalt::Lctrl
↑見ればわかるように、Mac風に親指でコマンドキーを操作することを狙っている。
で、ときおりwinキー押しっぱなしが発動する。
発動したときは右winキーを一度押すと改善する。 >>247
正直、スクリプト不要のキー入れ替えなら、
AutoHotkeyよりもChgkeyとかのレジストリ変更タイプをおすすめします。
自分のパソコン以外を一時的に使う目的なら仕方ないけど。 >>248
会社のPCで管理者権限がないからレジストリをいじれないんだ。なのでahkで無理矢理入れ替えてる状況。タスクマネージャーでautohotkey.exeの優先度を上げてみるものの、効果なし。やはり諦めるしか無いのかなー。
もう一つの問題のキーのすり抜けはリロードすれば治るので、Settimerで一時間おきにリロードさせてるんだけど、これも複数インスタンスが立ち上がったりするので(#Singleinstanceforceが効かない)もうちょい良い方法が無いものかと悩み中。 >>249
Setkeydelay,100,100
にしてみたり、Sendmode を変更してみては? 日本語キーボードなら、無変換キーのコンビネーションにCtrl+のコマンドを割り当てたらマシかも。
まぁ、無変換キーの押しっぱなし現象もたまに起こるけど。 つうか会社の無許可PCでAHKとかやめーや
有害ソフト認定とかされたらウゼえだろが >>246
遅くなってすみません。
おっしゃる通りスキャンコードのみなら上手くいきますね!
ありがとうございました!! Win7です
1280x1024サイズのモニタで、ウインドウをMaximizeして、WinGetPosをすると
x,y,w,h に
−8、 −8、 1296、1000
が入ります
hに関しては下にタスクバーがあるのでちょっとはずして考えたとして
ウインドウのサイズが8ピクセルずつ、大きくなっているようなのですがなぜでしょうか
x, yは当然ゼロだと思ってたら、−8が入っているのでちょっとびっくりしているのですが
ちなみにどんなウインドウでもそうなります。 フォルダー等のウインドウでも これはどんなメーカーのパソコン、モニターでも1280x1024だとそうなるのか、そういう仕様なのですか? それはわかるのですが、ウインドウのタイトルをダブルクリックして最大化するとそうなるのですよ
これは、Windows7の仕様なのかな XPでもそうだし、以前からあるWindowsの仕様 ちなみに枠のサイズは設定やOS毎に違うので
SysGetかAPI叩いて調べる必要がある winactiveで指定のアプリケーションをアクティブにしたいのですが…
googlekeepの場合ってどう指定するものなのですが?
titleはgooglekeepでクラスとexeはcrome
Process,Exist,Google Keep
If ErrorLevel<>0
WinActivate,ahk_pid %ErrorLevel%
else
run,(keepのショートカットから探し出したアドレス)
これだと多分Process,Existが機能して無くてkeep立ち上がってない事になるぽいんですよね。
こういうものの場合どうやって指定するんでしょうか> >>262
機能してないのは Process,Exist じゃなくてIfの方じゃね
If なんてサンプルもたくさんあるんだからちゃんと使い方を調べろ >Process,Exist,Google Keep
Process,Exist,chrome.exe googlekeep入れてないから試してないけど
WinGet, PID, PID, Google Keep ahk_class crome
とかじゃだめ?
PID取得がいらないならWinExist()のほうがすっきりするかも Process,Exist, chrome.exe
If ErrorLevel<>0
WinActivate, Google Keep
else
run, [ショートカット]
これで普通に機能した ああ262にあるのコピペしたらchromeのつづり間違ってたわ
>>266
それだと起動中chromeの中にKeepいなかったら詰まね? そうか
じゃあ起動してなければelseでrunすればいいと思う 複雑に考えすぎ
Ifwinexist,google keep
winactive,google keep
else
run, google keep >>268
あ・・・こんなにシンプルでいいんですね・・
試してみますー お尋ねします。
ok 2が動作しないのは何故でしょうか?。
出来れば複数のファイルを指定したいので、2の方法で動作させたいです。
宜しくお願いします。
;HAGE.ahk
IfExist, %A_WorkingDir%\HAGE.ahk
msgbox, ok 1
If FileExist("%A_WorkingDir%\HAGE.ahk")
msgbox, ok 2 特定のウィンドウにひたすら右クリックを押下し続けるという単純なscriptについて質問させて下さい
AHK Version 1.1.24.04 / 32bit
以下コード
+F12::
DetectHiddenWindows,On
ControlClick,,ahk_class ANY WINDOW,,R,1,D NA
Return
windowは一意のものとして指定すれば確かに押しっぱなしになり動作はします
しかしウィンドウ内から起動した場合、非アクティブになると止まってしまいます
非アクティブから起動すると動作していて、アクティブにしてから非アクティブにするとやはり止まってしまいます
この状態を回避して、ウィンドウのアクティブ状態に関わらずひたすら動作させ続けることは可能ですか? >>271
関数など()の中は式
式で文字列として扱う場合は”で囲う
式では変数が展開される
変数を展開する場合は%で囲う
式で%で囲うと二重展開になる(中身の中身)
× ("%A_WorkingDir%\HAGE.ahk") → %A_WorkingDir%\HAGE.ahk
○ (A_WorkingDir "\HAGE.ahk") → 変数の中身\HAGE.ahk
>>272
> しかしウィンドウ内から起動した場合、非アクティブになると止まってしまいます
> 非アクティブから起動すると動作していて、アクティブにしてから非アクティブにするとやはり止まってしまいます
対象がなんだか分からないが非アクティブでは操作できないと言いたいのかな?
非アクティブでは操作を受け付けないアプリがあるので
キーが送れるほかのコマンドでも駄目なら諦めてください
ControlSend, ahk_parentの有無
PostMessage >>273
そうではなくてアクティブ→非アクティブとフォーカスを移動した際に停止してしまうということです
アクティブで動作→OK
非アクティブで動作→OK
非アクティブからアクティブでの動作→OK
アクティブから非アクティブでの動作→NG
ということです
OKの状態は"右クリックが押下され続けている"です
対象は別になんでも良いです例えばahk_exe chrome.exeとでもして下さい 判定がデリケートなのか知らないけどウィンドウ切り替えやアプリによってはうまく機能しない事はあるよ
ウィンドウ切替時にディレイを挟んでControlを再習得してフォーカス合わせればいいんじゃないかな >>273
有難うございます!出来ました。
If FileExist(A_WorkingDir "\HAGE.ahk")
msgbox, ok 2 IfinString,var,4
これを”4を含む”、ではなく”4に完全一致”にしたいのですがやり方がわかりません。
どうしたら完全一致にできますか? >>278
これではダメなのかい?
var := "4"
If (var = "4") {
msgbox, 変数の中身は 4
} else {
msgbox, 4 じゃない
} >>279
おお、それでいけますた。
ありがとうございます! >>280
もう解決してるし、希望の動作をすればどんな書き方でもいいんだけど
↓一応こんなコマンドもある。列挙できるので完全一致の候補が複数あるときはこれを使うといい
http://ahkwiki.net/Ifin
完全一致
If var in 4
部分一致
If var contains 4 >>281
列挙で使えるのはいいですね。
勉強になります。 v1.1.25.00でhotkeyコマンドが実行中でも変更したり無効にできるようになってたのか object:=object()
object["hoge","髭"]:="hige"
object["hoge","禿"]:="hage"
object.Remove(["hoge","禿"])
こういう配列のキーを削除したいのですが失敗してしまいます
どういう書き方をすればいいんでしょうか? >>284
禿げしく分かりにくい例えだなw
; --- 単純配列 ---
arr := ["a", "b"]
arr.RemoveAt(1)
MsgBox % arr.1 arr.2 ; b
; --- 連想配列 ---
arr := {a: "a", b: "b"}
arr.Remove("a")
MsgBox % arr.a arr.b ; b
return arr := {"A1": {"B2": "hige"
, "C2": "hage"}} ; 試すなら全角スペース消してね
arr["A1"].Remove("C2")
MsgBox % arr["A1"]["C2"] わかりにくくてすいません!
arr["A1"].Remove("C2")
object["hoge"].Remove("禿")
でできました! ありがとうございました! ずーっと何時間もループ作業させてると、そんなに負荷の掛かる処理でもないのに処理落ちしてることがあるな AHKにF5を押した時の様なコマンドはありますか?
今は該当ウィンドウにF5をControlSendしてリフレッシュしていますが、F5と同等のWinコマンドがあれば使ってみたいです。 >>289
うーんエスパーするとブラウザなどにF5をControlSendで更新してるって意味かな?
「F5と同等のWinコマンド」と言っても更新は各ソフトごとで割り当てられてるものだからWinコマンドなんて無い
全然違うこと言ってるならこれ以上はエスパースレにでも行くかもう少し人に伝わる書き方してくれ >>290
ああ、確かにF5が更新に割り当てられているとは限らないですね。
これは馬鹿な質問でした。 お尋ねさせてください。
ahkファイルに以下のように記述してスペースキー+アルファベットにカーソルキーを割り当てているのですが、専用うpろだのClipboardHistory.ahkの履歴メニュー上ではなぜかカーソル移動できません。
SetTitleMatchMode, 2
#include %A_ScriptDir%\IME.ahk
Space & i::send {Blind}{Up}
Space & k::send {Blind}{Down}
Space & j::send {Blind}{Left}
Space & l::send {Blind}{Right}
キーボードのカーソルキーを直接入力するとカーソル移動できるのですが、なぜAutoHotkeyからだとうまくいかないのかが分かりかねます。
どなたかお分かりになる方がおられましたら教えていただけないでしょうか。
以下は環境です。
OS: Windows7 HomePremium 64-bit
AutoHotkey: Ver.1.1.25.01 (Unicode 64-bit)
ClipboardHistory.ahk: Ver.1.3.2 >>292
自分もやり方があるなら知りたいです
Sendplayだと動くけど他で不具合出るから
できればsendで動く方法が知りたいです >>292
最低限のコードと必要なリックぐらい貼ったら? 今メモ帳を開いていて気付いたのですが、スペースキー+アルファベットによるカーソル移動ですとClipboardHistory.ahkの履歴メニューにフォーカスが行かないようです。
ClipboardHistory.ahkの履歴メニューが表示されたまま、その背後の文面上をカーソルが上下左右に移動しています。
また、この状態でキーボードのカーソルキーを押すと、文面上のカーソルとは別にClipboardHistory.ahkの履歴メニュー上を上下にカーソル移動するようになります。
スペースキー+アルファベットによるカーソル移動がうまくいかないのはフォーカスの問題のようです。
どうすればClipboardHistory.ahkの履歴メニューにフォーカスを送ることが可能になるのでしょうか? >>294
失礼しました。
ClipboardHistory.ahkのうpろだのリンクです。
ttp://ux.getuploader.com/autohotkeyl/download/121/ClipboardHistory.ahk 👀
Rock54: Caution(BBR-MD5:669e095291445c5e5f700f06dfd84fd2) そもそも履歴メニューというものがどれのことを言っているのかわからない
タスクトレイの右クリックメニューのことを言っているのか
ClipboardHistoryウィンドウなのか
そのウィンドウ右クリックメニューなのやら >>297
ちょっと見てみたけど、ClipboardHistory.ahk のホットキーを定義してる部分が AHK からの Send に反応してないみたい
なので
#InputLevel 1
Space & i::send {Blind}{Up}
Space & k::send {Blind}{Down}
Space & j::send {Blind}{Left}
Space & l::send {Blind}{Right}
#InputLevel 0
とすればいけたよ >>298
分かりにくくて申し訳ございません。
Ctrlキーのダブルプッシュで表示されるメニューのつもりでした。
>>299
教えていただいた方法でAHKからカーソル移動できるようになりました。
#InputLevelという機能については全く存じ上げておりませんでしたのでとても勉強になりました。
どうもありがとうございました。 なぜBlockInputが聞かないのか原因がわかりません。
blockinput,on
sleep,3000
blockinput,off
たった3行のスクリプトですが何が原因でしょうか? もしやと思い管理者権限で走らせたら動作しました。
http://ahkwiki.net/BlockInput
このページには書いてないけどAHK使いには常識なんでしょうか?
ちなみに環境はWin10です。 AHKに限らず、管理者権限を要求しないけど管理者権限起動しないと不具合のあるアプリは結構あるようですよ。 >>303
あまり深く考えず付き合うことにします。動いたからよしと。 公式のドキュメントにはちゃんと記載があるよ。日本語のドキュメントは全然メンテされてないから、
出来れば公式の方を見た方がいい 英語で探せば解決すること多いですよね。情報量が断然。
今回は安易にここで聞いてしまいました。今後がんばります 英語読めないので
ほぼROMですが
ここでの情報は助かりますし、ヒントになります
ありがとうございます 新規環境にインストールしたときはとりあえず>>8の対策パッチを入れてるな UI Accessはインストーラのオプションから任意で追加するようになったからテンプレの>>8は修正しないといかんね そう言えばRS1までのWindows10だと、レジストリからUACを無効にするとストア系のアプリが起動出来なかったけど、RS2からは起動出来るように修正されたね。 Firefoxのブックマークウィンドウに表示されている項目を編集したいのですが、
Sendでキーを送っても期待通りに受け取って処理してくれずに、
未編集の項目が残ってしまうことがしばしばあります。
具体的には、「名前(N)」のテキストボックスにフォーカスがある状態で
Send +{Tab} ; テキストボックスのすぐ上のグリッドにフォーカス
Send {Down} ; 次の項目へ
Send !l^a^c ; 「URL(L)」のテキストボックスにフォーカスして内容をコピー
といったコードを書いてループで回しているのですが、特にメモリ負荷・CPU負荷が高いと、
Sendした通りの順序で動いてくれないことがよくあります。
たとえば、{Down} を2つ続けて受け取ってしまって1行飛ばしたり、
^a^c でテキストボックスではなくその上のグリッドを全選択・コピーしたり
(で、その状態で ^v を受け取って、グリッドの中身が丸々二重になったり)、
+{Tab} を2つ続けて受け取ってウィンドウ左側のツリー部分にフォーカスが行ったりします。
現在は勘に頼ってSleepを随所に入れているのですが、こういう操作をわざわざ
AHKで書いてループで回すのには当然理由がある(=対象の項目数が多い)わけで、
あまりに時間がかかるのも困りものです。
で、キー操作ではなく、ウィンドウ上のコントロールに対して直接メッセージを送りたいと思って
Window Spyで調べてみても、Windows以外のOSの版と共通のソースで書かれているせいか、
マウスカーソルをウインドウ上のどこに置いても、「Control Under Mouse Position:」の枠に
それらしきものが何も出てくれません。
…何かいいアイデアはないでしょうか?
訳あって、ブックマークをjsonファイルに書き出して外部のツールで編集する方法は使えません。 日本語OSで
capslockキーのリリースの検知(またはUp状態であることの確認)ってやる方法ない? >>312
レジストリでF13〜F24のいずれかを割り当ててそれに対してAHKで検知すれば? >>313
>>312
すいません。ポータブルで実現したいので
レジストリ編集・管理者権限使用はなしでお願いします。 じゃあ諦めるしかないね
日本語環境だとLock系キーの動作は不定
という仕様なので Windows To GoでOSごと持ち歩く
非日本語OSで環境構築しとけばそのままでいけるで traytipでポップアップが出なくなった。
数日前からこの現象発生。
windows10 creators updateは未適用。
考えられる原因は何か有りますか? >>318
windows10 home 64bit
ahk v1.1.24.01 unicode 64bit
ですがこれでヒントになりますか? trayTip,,てすと
sleep,3000
これが動作しないのです。 >>317
数日前に何があったか、思い当たることを羅列してみて >>319
> ですがこれでヒントになりますか?
書かないより百倍マシ、AHK古いぞ
通知領域アイコンの設定で非表示
レジストリがOFF
バルーンメッセージ バルーンヒント 非表示
でググレ >>321 >>322
自分で何か思い当たる事がまったくないのです。
Windowsの設定をいじったとか、AHK関係に手を加えたとか。
通知領域の設定を見ましたがそもそもAHKはwin10の設定項目の中には見当たりませんでした。
当然AHKアイコンは常に表示にしています。
致命的な問題では無いので我慢することにします。
ありがとう。 >>322
現行は1.1.25なので自分のはほぼ最新版だと思いますが・・・・・・
あるいは AHK V2 のことですか?
たぶんスクリプトの書き直し大量に発生しそうで躊躇してます。まだアルファ版だし。 >>322
念のためv1.1.25.01にしましたが変わりませんでした。 win10 Rs2アップデート済みでv1.1.24.01 ansi 32bitだけど、うちも出ないよ あ、ごめん、Winaero Tweakerでバルーンチップ有効にしたら出た すみません今まで出来てたと思っていた単純な計算が出来ない事に気づきました
Setformat, Float, 0.6
a := 36.0450850
b := 36.0450800
c := 0.000005
if((a-b) != c)
MsgBox, % (a-b) " is not equal 0.000005 ?",
ifEqual, c, % (a-b), MsgBox, こっちは合ってる,
if(abs(36.0450850-36.0450800) <> 0.000005)
MsgBox, ng1
if((0.000110-0.000105) != 0.000005)
MsgBox, ng2
if((0.110-0.105) <> 0.005000)
MsgBox, だめ
if((0.000010-0.000005) = 0.000005)
MsgBox, ok
=/==/!=/<>を試したが駄目でした
なんでこうなるんでしょうか
v1.1.25.01 32bit U32版A32版とも同じです 一見同じに見えるけど、浮動小数点の演算には誤差があるからだよ
Setformat, Float, 0.20
こんな風にして、演算の結果実際に格納されてる値を確認すれば分かるはず >>329
レス有り難うございます
setformat, float, 0.0e
MsgBox, % (0.110 - 0.105) > 5e-003
MsgBox, % (1e-001 - 1e-001) = 5e-003 ;え〜(;´д`)
MsgBox, % (0.110-0.105) > 0.005
;だめだ分からない...Setformatは見た目の桁数を揃えるだけで内部的には元の数字で計算してるってことなんでしょうか
MsgBox, % round(36.0450850-36.0450800, 6) = 0.000005
setformat, float, 0.6
MsgBox, % RegExMatch(36.0450850-36.0450800, "^0\.000005")
まだ納得できてませんが取り敢えずRoundするか文字列として比較することで解決しそうです d := (a - b)
MsgBox, % (d != c) ? "true" : "false" >>330
https://autohotkey.com/docs/commands/SetFormat.htm#Float
Float(Fast じゃない)方は、変数へ格納された時点で DecimalPlaces に丸められる
なんで >>331 は真になるけど、
((a - b) != c) これは偽になる あ、>>331 は非等値だから逆か。(d = c)が真になるって意味ね ×((a - b) != c) これは偽になる
〇((a - b) = c) これは偽になる >>331-334 どうもありがとうございます
> floatは変数に格納した時点でDecimalPlaces桁数に
これは知らなかった(小数値が+-*/された時点で、と思ってました)
なるほど...納得できたような出来てないような
Setformat, float, 0.6
a := 36.0450850
b := 36.0450800
c := 0.000005
d := (a-b)
MsgBox, % ((a-b) != c) "`n" (d != c) ;計算結果を変数に代入した方はちゃんとfalseになりますね
Setformat, float, 0.8
a := 36.04508500
b := 1 ;試しに整数でやってみたところ
c := 35.045085
d := (a-b)
MsgBox, % b-1 ;整数は桁揃えされないから「0」
MsgBox, % b-1.0 ; 0.00000000
MsgBox, % (a-b) ;35.04508500 ;aの桁数は変わってないが、どちらか片方が小数値なら桁揃えされる?
MsgBox, % ((a-b) != c) ”`n” (d != c) ;こっちは桁揃ってないのにちゃんとfalseになるんですよ Windows10 pro 64-bit
AutoHotkey Unicode 64-bit ファイルバージョン1.1.25.1
メモ帳を開いたら、タイマーを起動、ツールチップにタイマー作動!と表示し続け、 60秒毎にメモ帳にABCと入力を繰り返す。
メモ帳を閉じたら、タイマーを終了し、ツールチップを消し、 メッセージボックスでタイマー停止!と表示する。
WinWait, ahk_class Notepad
{ SetTimer, InputTimer, 60000
ToolTip, タイマー作動! }
Return
InputTimer:
IfWinExist, ahk_class Notepad
{ ToolTip, タイマー作動!
Send, ABC }
Else
{
WinWaitClose, ahk_class Notepad
{ ToolTip,
MsgBox, タイマー停止!
SetTimer, InputTimer, Off }
}
Return
上記で、目的の動作は概ね実現されるのですが、一つだけ気に入らないところがあります。
メモ帳を閉じた直後に、タイマー停止!のメッセージボックスが表示されないのです。
どうやら、メモ帳を閉じた後も、作動中のタイマーは直ぐには停止せず、 セットした60秒間が経過したタイミングでタイマーが終了し、メッセージボックスが表示されるようです。
メモ帳を閉じるタイミング、タイマーが終了するタイミングにかかわらず、 メモ帳を閉じた直後に、タイマー停止!のメッセージボックスを表示させる方法があればご教示ください。 よろしくお願いいたします。 コピペで動かないので動作検証はしないけど
・60秒ごとの入力監視タイマー と メモ帳終了監視タイマー を分ける
・終了監視はWinWait使うならタイマーは回さないで1タイムのみにする
・それか0.5〜1秒間隔タイマーでifWInNotExistですぐ抜けるを繰り返すものにする >>335
そもそも float や double の比較に、等値や不等値演算子を使うこと自体が NG なんよ
AHK に限った話じゃないから適当に検索してみてくれ >>337
アドバイスありがとうございます。
別に終了監視タイマーを、IfWinNotExistで設定してみましたが、
やはり入力監視タイマーが終了しなければ作動しないようです。
引き続きよろしくお願いいたします。 プログラミング詳しくないのでわからないんですけど
0.5秒や1秒短い間隔のタイマーって負荷すごかったりしないんですか? 処理による? >>340
タイマー自体の負荷は気にしないでいい、問題は処理の中身
1000個のタイマーを1msで同時に回してもCPU使用率は0%
シングルスレッドだから当然といえば当然だが
Loop 1000
SetTimer, TEST%A_index%, 1
Return
TEST1:
TEST2:
〜中略〜
TEST1000:
Return そうなんですね ありがとうございます
なんとなく忌避しちゃってたけど心置きなくタイマー作ってみようと思います >>339
うちでは動いてるのでやり方には問題ないはず
>337でも書いたが>336はSyntaxErrorで動かない
そういうソース貼って質問した後に
やったけどダメでしたって書き換えたソース貼らずに言われても
こちらとしてはソース見直せとしかアドバイスできないよ
あと質問とは直接関係ないので触れなかったけど
60秒毎タイマーというのは誤差が60秒あるという意味なので
1秒タイマー内で60カウント数えてからSendするほうが動作としては望ましい
(まあそうするとタイマーを分ける必要もなくなるんだけどね) >>343レスありがとうございます。336をそのままコピペすると動きませんね!申し訳ありませんでした。
2chの掲示板に投稿するときに、『改行が多すぎます!』と何度も警告されて全く受け付けてくれなかったたため、不要な部分をそぎ落としたのが悪かったみたいですね。IfWinNotExistで書き換えたスクリプトをそのままコピペします。ご添削のほどよろしくお願いいたします。
#InstallKeybdHook
#UseHook
#InstallMouseHook
#Persistent
WinWait, ahk_class Notepad
{
SetTimer, InputTimer, 60000
ToolTip, タイマー作動!
}
Return
InputTimer:
IfWinExist, ahk_class Notepad
{
ToolTip, タイマー作動!
Send, ABC
}
Else
{
SetTimer, ExitTimer, -1
SetTimer, InputTimer, Off
}
Return
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
ToolTip,
MsgBox, タイマー停止!
}
Return
>>1秒タイマー内で60カウント数えてからSendするほうが動作としては望ましい ⇒具体的にはどのように記述するのでしょうか? 344
補足です。
ExitTimerを1秒間隔で設定したところ、
InputTimerのサブルーチンが終了するまでの間、
メッセージボックスを残秒数分吐き続けてしまったため、
負の値にしてワンタイムのみにしてあります。 >>344
・ExitTimer はメモ帳の起動待ち直後 SetTimer,InputTimerの次行あたりで起動させる
(InputTimer内で起動したのではタイマーを分けた意味がない)
・ExitTimerの間隔指定がおかしい、-1(1タイムのみ) で ifWInNotExistだと初回 else終了でそれっきりになる
方法1 間隔は500〜1000msで繰り返し確認、タイマ内では待たずにifWInNotExistですぐ抜ける
方法2 -1で1回のみ起動にするならWinWaitCloseでタイマ内で終了待ちする
どっちでもいいけどどっちかに決める、混ぜたらどちらもまともに動作しない
・WinWaitの後に{ }はいらない、ifや関数で使う括りなので。
・あとInputTimer内で IfWinExistでSendしてるけど、これだとメモ帳がバックグラウンドのときに誤爆する
IfWinActiveの判定入れるか強制的にWinActivateするか(動くなら)ControlSendにした方がいい
> 1秒タイマー内で60カウント数えてからSend
・InputTimerを1秒間隔で起動、count=60
・InputTimer内でcount-- して 0(以下)になった時にSend
・ToolTip, タイマー作動! %count% とかやっとくと残り時間も分かってデバッグにも便利 >>345
ExitTimerは終了後にするべき作業を全て任せるためのものだよ
InputTimer と ExitTimer の停止も当然ExitTimer内でやる
でなきゃ60秒誤差を回避できないでしょ 345 アドバイスをもとに再度スクリプトを書き換えました。メモ帳を初めて起動したときは問題なく目的の動作をしているようですが、
いったんメモ帳を閉じてメッセージボックスのタイマー停止!を表示させた後に、再度メモ帳を起動させると、全く動作しません。
AHKスクリプトをリロードしてからメモ帳を開くと、また初回のみ動作します。まだどこかおかしいのでしょうか?
WinWait, ahk_class Notepad
SetTimer, InputTimer, 1000
Count=60
SetTimer, ExitTimer, 1000
ToolTip, タイマー作動!
Return
InputTimer:
IfWinActive, ahk_class Notepad
{
ToolTip, タイマー作動!%count% 秒後に入力
Count--
If Count=0
{
Send, ABC
Count=60
}
}
Return
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
SetTimer, ExitTimer, Off
SetTimer, InputTimer, Off
ToolTip,
MsgBox, タイマー停止!
}
Return 348
試しにメモ帳再起動監視タイマー(RestartTimer)を増設してみたところ上手くいっているように思いますが、
なぜこれが必要なのでしょうか?
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
SetTimer, ExitTimer, Off
SetTimer, InputTimer, Off
ToolTip,
MsgBox, タイマー停止!
SetTimer, RestartTimer, 1000
}
Return
RestartTimer:
WinWait, ahk_class Notepad
SetTimer, RestartTimer, Off
SetTimer, InputTimer, 1000
Count=60
SetTimer, ExitTimer, 1000
ToolTip, タイマー作動!
Return なぜと言われてもNotePad起動待ちのWinWaitを冒頭1回でしかやってないでしょ
基本的な部分なのでちゃんとwiki読んできたほうがいい
あと何度も言うけどTimer内でWinWaitで待つならワンタイム起動にしなさい >>350 何度もすみません。
メモ帳初回起動時にしか動作しない理由はわかりました。
348+349の記述に書き換えても、正常に動作していないということですか?
ExitTimerの部分を -1(ワンタイム)に訂正すれば問題なしでしょうか?
また、タイマ内ではIfWInExist(Active)やIfWInNotExistは使用してはいけないということですが、
タイマ外に記述しても全く反応しないのですが・・・
>>タイマ内では待たずにIfWInNotExistですぐ抜ける という意味がよくわかりません。
wikiも読み直してみますので、引き続きよろしくお願いします。 >>351
先ずはトライアンドエラーで動くまで納得の行くまで色々試せ
とりあえずこんな感じでも動くことは動くはず
>>348の上半分は同じで、ExitTimer:部分は↓
ExitTimer:
IfWinNotExist, ahk_class Notepad
{
Count=60
ToolTip, タイマー停止!
}
Return >>345
上三行それでいい
下四行全然ちがう
タイマー内で使用してはいけないともタイマ外に書けとも言ってないよ
何か全然通じてないみたいだがもしやwinwaitとifwinexistの違いが分かってない?
winwaitは対象ウィンドウが存在するまで待つ
ifwinexistは今現在対象ウィンドウが存在してるか調べる
1秒ごとにタイマー動かすならタイマールーチン内の処理は1秒未満で終わる内容にしないと
「1秒間隔で繰り返し実行」できないでしょ
→winwaitのような「待ち」の処理はNG
ifwinexistで存在チェックしelseなら即returnする
待たない=ルーチンからすぐ抜ける
ワンタイムタイマーの場合はその逆
一度しか実行されないのでreturnで抜けたらそれきりになってしまう
→ifwinexistで即抜けしたらそれ以降の確認ができない
なのでwinwaitで対象ウィンドウが存在するまで「待ってやる」 タイマーで長時間監視させてるとOSの処理とかcpu負荷によって実際の時間とはズレが生じてくる
【女神】Slot
💰💣👻
🍒🍒🎴
😜🍜🍜
Win!! 7 pts.(LA: 1.71, 1.69, 1.71)
351 これでどうでしょうか?全く問題なく動作しています。ご意見ください。
WinWaitActive, ahk_class Notepad
SetTimer, InputTimer, 1000
Count=60
ToolTip, タイマー作動!
SetTimer, ExitTimer, -1
Return
InputTimer:
ToolTip, タイマー作動!%count% 秒後に入力
Count--
If Count=0
{
Send, ABC
Count=60
}
Return
ExitTimer:
WinWaitClose, ahk_class Notepad
SetTimer, InputTimer, Off
ToolTip,
MsgBox, タイマー停止!
SetTimer, RestartTimer, -1
Return
RestartTimer:
WinWaitActive, ahk_class Notepad
SetTimer, InputTimer, 1000
Count=60
ToolTip, タイマー作動!
SetTimer, ExitTimer, -1
Return 思考停止してるなあ
動くかどうかにしか興味ないならもうそれでいいよ >>358
ご多用にもかかわらず、合い間を縫って掲示板をご確認くださりありがとうございます。
思考が停止していますか・・・
問題なく動いているので満足してしまえばよいのかもしれませんが、
せっかくですからもう少しAHK追求してみたいと思いますので、貴殿の優秀な頭脳をお貸しください。
余裕がおありであれば、もう少し具体的にダメだしをいただけるとうれしいのですが・・・
数日前からAHKを知った新参者が、貴殿のように理解を深めるためには、
wiki以外にどんな書物を読めばよいのかもご教示いただけると助かります。
引き続きよろしくお願いいたします。 すみません。前にも書かせていただいたんですが、
ホットストリングが一回で起動しません。一回目無反応で2回目にスクリプトが発動がされます。
どうやれば一回目から起動してくれるのでしょうか?
ホットストリングの部分のみを抜き出してそれのみのAutohotkey.ahkだと失敗しないように思うんですが、
#IfWinActiveでいっぱい仕切られたいつものAutohotkey.ahkのなかにおいたホットストリングだと
一回目失敗します。どうしてでしょうか?教えてください >>360
>>2
■質問に際して
>操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。 >>359
横からだけどあまり畏まると却って嫌らしくみえるよ。長文だと尚更
Wikiで十分理解できる範囲だし難しく考え過ぎ コードそのものよりシーケンスの考え方を伝えたかったんだけど
>353総スルーで、完璧に動いてるのでこれでいいですか? て言われてしまうとね
まあ結局こっちの説明が下手すぎて伝わらなかったということなんだろう
コードの添削はしません
本人がよくわかってないまま修正するとまたバグが出てぐちゃぐちゃになるし
自分でどこを最適化したらよいか分かるようになってから自力でして下さい 359
>>365
353を総スルーしているつもりも、嫌みのつもりもないのですが・・・
『完璧に動いてるのでこれでいいですか?』というくだりも、
何らかの陰性感情を抱かせてしまったようですね。
手抜きをしているように映ってしまったということでしょうかね?
いずれにしても357の記述が不適切であるということは伝わってきました。
貴殿の気持ちがわかるまで、wikiを熟読して出直してきます。
ここまでお付き合いくださり、ありがとうございました。 そんなことより>>360を解決してください。一回の入力じゃ無視されること多々あります >>369
>>2
■質問に際して
>操作したいソフト・やりたい処理などは具体的に書いた方がレスが付きやすい傾向にある。 とりあえず貼ります。
::kyouda::
FormatTime,imaTimeString,,yyMMdd
FormatTime,imajikan, L0x0409 T1,ddd
FormatTime,imaTime,Time,HH:mm
SendInput '%imaTimeString%%imajikan%%imaTime%
Return
でも記述がこの箇所のみでautohotkey.ahkとして起動しているとたぶん必ず一発で起動してくれるんですが、
普段つかってるこの箇所のほかにもいろんな記述があるautohotkey.ahkで動かすと、
イメージで5回に1回、初回のホットストリング打ち込みで無反応です。
kyouda{スペース} ってふつうに入力されるだけです。そのあとすぐ続けると2回目は必ず成功するイメージです。
2回連続失敗ってのは印象にないです。
なにか考えられるような要因ありますか?
GroupAdd, GameBindGroup, ahk_exe Overwatch.exe
#IfWinActive
#IfWinActive ;個別設定がでいっぱい
#IfWinNotActive, ahk_group GameBindGroup
#IfWinActive
#IfWinActive ;個別設定がでいっぱい
みたいな感じの構成で区分けています。 ならそのごちゃごちゃしてる他が干渉してるんでしょ
その肝心のごちゃごちゃ部分全部見ないとなんとも言えない
ログ見てどんな動作してるか確認してみないとね
とりあえずホットストリングをスクリプトの一番上に記述して同じ動作するか試してみ ですよね。ゴチャゴチャいっぱい書いてるうちのどこかが干渉してるんですかね。
autohotkey.ahkはいまみたら1980行でした。
ホットストリングの位置を前だったり後ろだったりいろいろ変えてみたんですが、やっぱりだめでした。 スクリプトのログにちゃんと実行履歴があるなら
そのスクリプトを使用するアプリケーション側の相性や問題の可能性もある
俺もそこんとこ詳しくないからあまり言えないけど基本はまぁトライアンドエラーだし頑張りな >>375
限界まで「自分で」地道にコードを削って動作確認
話はそれから 複数のスクリプトを常駐させておきたい場合は、*.ahkを引数にしてそれぞれ
起動して使うものなのでしょうか? それとも、AutoHotkey.ahk からそれぞれの
*.ahkを引数にして、子プロセスをフォークして使うものなのでしょうか?
最近使い始めたのですが、一般的にどのように使っているのか分からなかったもので。 実行履歴があるのでそれをみる
使う対象のアプリ側との問題
自分で削って動作確認
一発でダメなのが判明するって性格のもんじゃないし、トライアンドエラーがめんどくさそう。
ホットストリングが発動しない確率が高いっていうかんじのものだから。
実行履歴にたしかに実行したスクリプトが載るけど、これみてどうしいいものやら
ありがとうございました。やってみます。 >>379
>*.ahkを引数
意味が分からないんだけど?何の引数? >>380
コードの長いやつから、独立したahkファイルに移行させて#Includeで管理するとかすればいいんじゃない
自分もそれで知らん間に動かなくなってたスクリプトが復旧できたことがある
いまだに原因が分からんがw 動いたらそれ以上調べる気が起きなかった >>379
SetTimer使うのが普通だと思う。 >>379
autohotkey.ahk以外のスクリプトをどう起動するかって話なら
.ahkをautohotkey.exeに関連付けしてる人が多いんじゃないの
ポータブルに使いたいならbat作るなりautohotkey.ahk内の任意のタイミングで
runするなり好きにしたらいい
自分はエディタで編集中ahk実行マクロ作って試行してる
あと常時複数起動する前提ならプロセスとして分ける必要が本当にあるのか考えてみるべき
そうでないなら#includeでautohotkey.ahkにマージする アクティブなウィンドウを画面の四辺に退かせるようにしようと思ったんですが
右端に移動と下端に移動が反応しません
どう書けばいいんでしょうか?
#Right::
WinGetPos, X, Y, Width, Height
WinMove, A, , A_ScreenWidth-Width
return >>385
WinGetPosをもう一度じっくり見直し すみません教えてください。
Func( path ) {
EnvGet, home, HOME
Run, %path%
}
上記のような関数に対し、
Func( "%home%\aaaa.exe" )
と呼び出した場合、実際に実行ファイルがあったとしても
パスが見つからないと言われてしまいます。
%path% の中の %home% が展開できないのではないかと考えたのですが、
多重の % を展開する方法はありませんでしょうか? AHKでやれよとおもったらAHKだったw
Vector 新着ソフトレビュー 「俺のキーボード」 - 「【BackSpace】+【Delete】で一行消し」などを行える“俺=作者”仕様のキーボード機能拡張ソフト
http://www.vector.co.jp/magazine/softnews/170509/n1705091.html
>【Win】+【A】で、アルファベットで打ってしまった文字を日本語で打ち直し
これはどういう実装なんだろうか oi
misu
ってやつが
「おいミス」になるのかな 単純にアルファベット選択して変換キー押した動作と同じっぽい >>392
これLIB内の自動インクルード考慮しないでexe作っちゃってないか
IME_ON / IME_OFF の実態関数がないから機能しない
配布用exe作ったが本人はahkから実行してるから気づいてないってパターンぽい
まあスクリプトの方実行してもエラーになるけど
初期の頃のIME.ahkにしかない古い関数だから
さすがは俺環境ソフト AutoHotkeyの認知度に貢献してくれれば本望だな とりあえずアドレスを貼るのみで、当スレからは立ち去りますが、
もし興味ある方は読まれて下さい。
(万人にプラスになる知識)
《神・転生の存在の科学的証明》
http://message21.web.fc2.com/index.htm
>>392
>【Win】+【A】で、アルファベットで打ってしまった文字を日本語で打ち直し
↑はクリップボード使うみたいだけど、過去スレにそんな趣旨のスクリプト書かれてたがそれは「input」コマンド使用してるね
AutoHotkey スレッド part16
http://anago.2ch.net/test/read.cgi/software/1367725658/164-165 +^left
^c
IMEオン
Sendでクリップボード出力
で大体似たようなことができる マウスを数秒間放置したらマウスカーソルを非表示にして、マウスを動かしたら
瞬時に表示されるようにするといったことはAHKで出来ますでしょうか?
もし可能ならばどんなコマンドを利用すればいいのかヒントだけでも頂けないでしょうか >>403
ahk マウスカーソル 非表示
でググってみたけど目的のコマンドには辿り着けませんでした
もう少しヒントを頂けないでしょうか
まずはマウスカーソルを非表示にする方法さえ分かれば有難いのですが >>404
コマンドって…一行で書けるようないわゆるコマンドは無いと思ったが
googleで「site:2ch.net ahk マウスカーソル 非表示」と2chに絞り込めば探しやすいだろう DllCallでゴリゴリやる系は日本語で2chログ漁るより本家フォーラムを捜したほうがいいと思うが
hide Cursor ahk でググればそのまんまのモジュール関数出てくるし
ON/OFFはタイマーでA_TimeIdlePhysicalあたり監視すりゃいいんじゃないの if ( %str1% = "mojiretsu")
のように文字列を""で囲んで比較したいのですがうまく行きません
生の文字列を””なしでコード中にそのまま書くのは避けたいんですが無理なんでしょうか? 所詮シェルスクリプト風の文法だし気持ち悪さになれるしか無いんじゃないの
どうしてもと言うなら
v:="mojiretu"
if str1==%v% >>410
比較対象文字列が「"ほげほげ文字列"」という「"」も含む文字列ってこと?
書き方はいろいろあると思うけど、自分なら↓かなー
mojiretu := """ほげほげ文字列"""
if (str1 = mojiretu) str1 := "mojiretsu"
if (str1 = "mojiretsu") %str1%の方は用法わかった上で使ってるん?
aaa := "mojiretsu"
str1 := "aaa"
if ( %str1% = "mojiretsu")
ToolTip,a
return
これで問題なく動くし間違えてないなら上手くいってると思うけど 文字列ならstr使う方法も
if instr(str1, "mojiretsu") 関数内でgoto使うのはあまり好ましくない?
func(){
label1:
...
if
{
goto, label1
}
} 頭に戻って繰り返し〜みたいな場合はループか再帰関数にするわ自分なら
多重ifやループから抜けて一気に終了処理に飛びたい時はgotoも使うけど
func(){
if () {
…
if () {
…
if () {
…
}
else goto exit
}
else goto exit
}
exit: ; 後始末
…
} ifの式が真の間、直前のコードと同じ処理をしたい時にまた同じ処理書くとコード長くなるのが嫌だからさ・・・
そこだけピンポイントで使うからそれだけのためにまた別の関数やライブラリ用意するのも微妙だしと思って他にいいアイデアないかと思った >>419
うーんwhileとかが使える条件だとそうしたいんだけどね Win10のファイルエクスプローラーでホイールを使ってファイルのフォーカス移動したいんだけど
表示方法によって移動がUp、DownとLeft、Rightで変わっちゃうんだよ
なんかいい方法ないかな?「次のファイル」みたいなショートカットが見つからない
ウィンドウの上部と下部でホイール回すとファイルのフォーカスが移動するように設定してて
応急処置として~RButton & WheelUpDwon の時だけ{Up}{Down}にしてる >>423
ごめん>>416が適当すぎた
再帰だと>>419みたいに条件がいくつもある場合に同じことしたいと上手く対応できない >>422
ExplorerItemFocus(Up:=False) {
For Window In ComObjCreate("Shell.Application").Windows
{
If (WinExist("A") != Window.Hwnd)
Continue
Items := []
For Item In Window.Document.Folder.Items()
Items.Push(Item)
FocusedItem := Window.Document.FocusedItem
For Index, Item In Items
{
If (FocusedItem.Path = Item.Path) {
FocusItem := Up ? Items[Index-1] : Items[Index+1]
Window.Document.SelectItem(FocusItem, 0x15)
Break
}
}
}
}
COMオブジェでやってみたけどSystem32だと数秒フリーズするくらい重い >>422
GetExplorerViewMode() {
For Window In ComObjCreate("Shell.Application").Windows
{
If (WinExist("A") = Window.Hwnd)
Return Window.Document.CurrentViewMode
}
}
>>425は実用的じゃないんで、表示モードによって送るキーを変えるのがいいと思う >>424
例外処理にすれば?
func(){
try {
if () {
…
} else
throw
}
} おお ahkLで try-catch もサポートしてたんやね
横だが知らんかったわ RunコマンドでMin起動した場合、RunしたアプリにControlsendが送信されません。
MinでRunしなければControlsendが送信されます。
これはAHKの仕様でしょうか?。 コントロール鮮度は前々から話題に上がってるけど、不安定
環境やアプリケーションの相性に大きく依存する Min化した状態でClassNN(or hWnd)ってちゃんと取れてんの?
control指定してないならFocus外れてるんじゃね >>430
そうなんですか、知りませんでした。
>>431
手動で最小化後にControlsendしても同様の症状でした。
>>432
Controlsend対象が.NETアプリ何ですけども、コントロールを取得しても無しになってしまいます。
仕方なくウィンドウタイトルのみ指定してControlsendしています。
問題は私にあるのかも知れません。 >>433
それならRunは関係ない問題は最小化
*ControlSendの指定が間違っている
*アプリ側が最小化状態でのキー入力に対応していない >>434
最小化しなければ問題ないので、これでいく事にします。
有難うございました。 winuser.h の KBDLLHOOKSTRUCTなど
色々な構造体のサイズを調べたいのですがahkだけでは無理ですか? >>436
構造体のサイズはC言語をちょっとかじれば手計算でできるし、
逆にCが全く分からないとポインタ関係で確実にポカをする。
そもそもwinuser.h自体がC言語で書かれているんだし、
少しC言語を勉強してみては?
今はMinGWもあるし、VisualStudioも安い版は無料だよ。 > 構造体のサイズはC言語をちょっとかじれば手計算でできるし、
若干補足。手計算でやるといっても、複雑な場合にはもちろん
最終的にコンパイラに通して検算するんだけどね。
#include <stdio.h>
#include <windows.h>
#define OFFSETOF(_type, _member) (size_t)&( ((_type *)0)->_member )
int main(void)
{
int n = OFFSETOF(MENUITEMINFOA, wID);
printf("MENUITEMINFOA->iID: offset=%d (0x%02X)\n", n, n);
return 0;
} >>437
Cでstructとメモリ関係は少し書いたことありますがahkで完結できないと
面倒なので…
手計算ってstructのメンバのサイズを合計して念のため1.2かけときゃ大丈夫ですか? とりあえず「構造体 アライメント」とかで検索してちょろっと読めば大丈夫だと思う >>439
winuser.hが手元にあるってことは、手元にC言語の環境あるんでしょ?
とりあえずCでは>>438のようなテストコード「だけ」を書いてテストして、
そのあとはテスト結果の数字をAHK上に書き写して使えばいい。
Win32 APIで使うような構造体の配置は、どこのCコンパイラを使っても、
どのバージョンのWindowsでも同じ。
(Win32とWin64とではポインタとかの関係で当然変わるし、
Windowsのバージョンが上がるごとに後ろに新しいメンバーが
加わっていくということもあるけどね。)
>>438の例でいうと、>>438のコードを32bit環境でコンパイルして走らせると
「16(0x10)」という結果が出るので、あとはAHKで「先頭から16バイト目」と
記述すればよい。
安全倍率1.2というのは何もわかっていない証拠。
たとえばこんな構造体、サイズは何バイトになると思う?
struct sample
{
char c;
float d;
} x;
printf("sizeof(x)=%d\n", (int)sizeof(x));
これは環境とコンパイルオプション次第で5になったり8になったり、
あるいは16になったりする。
答は>>440の「アライメント」というキーワードにあるんだけど、
どうしてもわからなかったら>>438のように愚直にテストコードを書くこと。、 autohotkey ホイール 加速
でぐぐるってヒットするブログのスクリプトを
今ままで利用してたんだけど
win10を最新にしたらホイールを回すとポポポって音を立てて
カクつくようになった
いったいなんなんだ WheelDown::
send, {WheelDown}
return
そもそもこれがまともに動かなくなった ド初心者でごめんなさい。
マウス中央ボタン2回連続クリックでWinCloseさせたいのですが、
どうすればよろしいでしょうか?下記だとエラーが出てしまいます。
~MButton up:: DoubleKey("WinClose", 400)
DoubleKey(RunCommand, timeout){
if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < timeout)
Run, %RunCommand%
}
既出だったらホントごめんなさい・・・ >>444
ド初心者ならまずはwikiのサンプルコード集を参考にした方が良いと思うぞ
そこに1度押し、2度押し、長押しで別の動作を割り当てのサンプルがあるから
そのコードの長押しを除外して1度押しと2度押しだけ設定してやればいい どっから拾ってきたコードか知らんけど大した行数じゃないんだから
具体的に何やってるか使われてるコマンド調べて把握しなさい
そしたらどこが間違ってどう直したらいいのか人に聞くまでもなくすぐわかるから >>444
Runはエクスプローラ上でファイルをダブルクリックするようなもので
AHKのコマンドを実行するためのものではない
それとAHKコマンドを変数に入れて直接実行するのも無理 皆様アドバイスありがとうございます。
サンプル集を参考にさせていただきましたが、なんとか
2回MButtonクリックで閉じることができました。
ただ、2回連続以外のときは通常のMButtonとして扱うには
どうしたらいいのでしょうか。
Send,{MButton}ではダメでした。
;MButton二回で閉じる
MButton::
KeyWait,MButton,T0.3 ;0.3秒対象キーが押されたかどうか
If(ErrorLevel)
{
;ここに任意のコマンド 長押し
KeyWait,MButton
Return
}
KeyWait,MButton,D T0.2 ;0.2秒対象キーが押されるのを待つ
If(ErrorLevel)
{
;ここに任意のコマンド 1度押し
KeyWait,MButton
Return
}
;ここに任意のコマンド 2度押し
MouseGetPos, , , id, control
WinGetTitle, title, ahk_id %id%
WinClose, ahk_id %id%
KeyWait,MButton
Return
Return MButton::
If (A_PriorHotkey = A_ThisHotKey && A_TimeSincePriorHotkey < 300)
MouseGetPos, , , id, control
WinGetTitle, title, ahk_id %id%
WinClose, ahk_id %id%
KeyWait,MButton
return 途中送信スマソです。
一応、こっちのコードでもやってみましたがダメでした。
(Ctrlとかだといけるんですが。。。) >>448
Send,{MButton}で出来たけど? タイムアウト設定してるんだからタイムアウトのエラーレベル使えばいいのに >>449
色々やり方はあるんだろうけど難しく考えすぎてない?
テストしてないけど、特にウィンドウ指定しないのなら、普通にAlt+F4使うとか
If (A_PriorHotkey = A_ThisHotKey && A_TimeSincePriorHotkey < 300)
Send,!{F4}
else
Send,{MButton}
というか身も蓋もない言い方かもしれんが、ホイール2連打は指負担がきつくない?
他に割り当てられないなら、マウスジェスチャー導入した方が良さそうな気がする >>453
それ対象ウィンドウが非アクティブだったら誤爆するぞ
Mbutton乗っ取ってるからボタン押しでアクティブになってないし >>454
いや、アクティブにする方法は分かってるっぽいから、そこは本人が補足できるでしょ
最初と最後だって書いてないんだし、そのままコピペでやってくれと言ってるわけではない
というのは察してほしかった…
まあテストせずに書くのもアレなんで試してみたけど、これを使うことはないかなぁ
自分の場合はマウスは他のどのボタンよりも、ホイールが最初に壊れることが多いんで…
その部分の心配が少ないならいいかもしれないけど Processコマンドで一気に5つくらいのソフトが起動しているか探すにはどう書いたらいいんでしょうか どういう意味?
5つ全部起動してるかどうかならプロセスリストから探したほうがいいと思うけど >>457
5つのうちのどれかが起動していたらファイル生成して鯖PCの休止をオフにするっていうのを書きたいんです... >>458
wikiのProcessページにプロセス取得するサンプルコードあるから
それで一覧取得して一致するプロセスがあればコマンド実行でOK >>455
まだそんな応用が効く段階じゃないと思われる
>449とかifの複数行は{}で囲うってことすらわかってないし >>448です。
>>453
マウスジェスチャーはすでに導入済みなんですが
閉じるをどれに割り当てるか悩んでいまして・・・
右クリ+左右で進む・戻る、上下で最大化・最小化に
しています。
あと、中央ボタン+左クリックドラッグでウィンドウの持ち運びにしています。
下に長めドラッグとかも考えたんですが、結構腕に負担がかかります。
一応、自分のマウスはボタンはたくさんついてるんでいくらでも割り当てられるんですが、
職場のPCでも同じ操作がしたくて・・・
ありがとうございました。 >>461
その書き方だと4方向かな?自分はロッカージェスチャーの右左で戻る、左右で進む
右+上/下はHome/End。最小化は?、最大化・戻すのトグルで?。?でタブ閉じる、?で新規タブ
??でアプリ終了。??で最後に閉じたタブを開く。まあ、ジェスチャーの割り当ては人それぞれでしょう
ただ、ホイールクリックは使わないなぁ。やっぱり指痛くなるから。MButtonはXButton1に置き換えてるくらいだし
だからオートスクロールはXButton1経由。以前はAHKのトラックスクロールなんかも使ってたけどね
ホイール回転は割り当てあるよ。右+上下回転でタブ移動とか
ウィンドウ移動は↓からタイトルバー右端ボタンの制限を外して右クリではなくキーを割り当てて使ってる
ttp://blog.blueblack.net/item_407.html あー、きちんと表示されてないっぽいw 失敗した。スマソ
最小化は/down、最大化・戻すのトグルが/up
\upでタブ閉じる、\downで新規タブ
\down\upでアプリ終了。\up\downで最後に閉じたタブを開く
8方向でこんな感じってことね
でも、8方向が合わんって人もいるし、そこはホント人それぞれ 人それぞれなの分かってんならお前の設定とか誰も聞いてないのも分かれよ >>464
悩んでると書いてるから、一例を示したまでのこと
別にあんたに聞いてもらいたいわけではないんでな
邪魔なら黙ってNGしとけばいいじゃないか。いきなり出てきてケチつけるくらいなら お前こそケチ付けられるのが嫌なら2chなんて来るなよ 俺設定公開よりホイール連打に3回もケチ付けてるのが気になるわ
それこそ人それぞれですやろ >>466
誰がどこで
>ケチ付けられるのが嫌
と書いてるんだ?きっちり答えるようにな
お前に言ってるわけではないのに横から出てきて言い出すお前のやり方をどうかと書いた覚えがあるが、
ケチ付けられるのが嫌と書いた覚えはないんだが?
>>467
だから人それぞれでいいだろ?何が問題だと言いたいんだ?元々書いてた本人でもないんだろ?
ケチつけるのが問題なら、お前のそれもおかしいってことになるしなぁ >>468
まあ落ち着け、ちょっと一人で突っ走りすぎ
>455もそうだが言い訳の前に人に言われたことに少し耳を傾けようよ
コマンドもろくに把握してない奴が質問してる状況の時はさ
半端に適当な回答しても伝わらないし混乱の元になるし
回答側が自己主張なんか始めた日にはそれこそ収拾つかなくなるよ
その辺ちょっと弁えよう >>468
嫌じゃないならケチ付けられたくらいでそんな発狂するなよ
閉じるをどれに割り当てるか悩んでるだけなのに何の参考にもならん
関係ない設定までダラダラ書いてウザいだけ >>469
いや、言い訳云々じゃなくてさ。まず聞かれたことには答えようぜ
>人に言われたことに少し耳を傾けよう
ってならさ。な?
だから人それぞれでいいだろ?何が問題だと言いたいんだ?元々書いてた本人でもないんだろ?
>コマンドもろくに把握してない奴が質問してる状況の時はさ〜
その意見は個人的には分からなくはないが、このスレの総意でも多数意見でもないと思っている
細かく書くことで嫌がる人もいるだろう。現に俺設定を云々と言ってくる奴がいるわけだし
だから、いつからかここはヒントを伝えて解答全部は書かないというような雰囲気になっていると思う
そして、それも間違いではないと思っている
あんたが誰に叩かれても初心者には懇切丁寧に説明できるなら、それは尊重するがね >>470
それは質問への回答ではない。やり直し
聞かれたことをよく理解し、過不足のない回答を心がけること
もしくは、二度と絡まないと言うならそれでも結構
俺も横から出てきてアレコレ言うだけで、何ら建設的でないお前の相手はしたくないんでな >>472
「ケチつけるくらいならNGしろ」とかほざいておいてよく言うわ
それはつまりケチ付けられて顔真っ赤になってる証だろ
お前こそ自分のレスがなぜここまで批判されるのかよく考えよう
答えが見つかるまでもう来なくていいから >>473
お前の言葉使いの方が発狂してるように見えるんだがな〜
沸点低すぎないか?ん?
>答えが見つかるまでもう来なくていいから
聞かれたことに答えないくせに言いたいことだけをいうあんたに
そんなことを言う資格は微塵もないだろう。まず逃げずに答えてごらん >>474
だからケチ付けられるのは嫌じゃないんだろ?
だったら批判を素直に受け止めて自分のレスの何が悪かったのか真摯に考えろよ
沸点?どうみてもお前の方が低すぎるぞ >>475
それは、その前からこっちが聞いてることに答えられたら対応しよう
順番って分かるよな?分からないならそう言ってくれ
あんたがそこで聞いてることは、その前から聞かれてることに真摯に答えたら考えてあげるから
それが常識ってものだろう。違うと言うなら、説得力のある理由を提示すること >>476
お前の質問ってそもそもなんだよ?
「嫌とどこに書いてるのか?」という質問のことじゃないのか?
だからその質問に対して「ケチつけるくらいならNGしろ」という発言はケチ付けられることが
癇癪起こすくらい嫌だったという意味だろと
もうとっくに答えも出てるのにそれすら理解できないほど脳みそ沸騰しまくってのかよ >>477
>「嫌とどこに書いてるのか?」という質問のことじゃないのか?
どこに書いているのかと聞いてるんだから、どのレス番のここだって回答すべきだろ
もしくは、どこにもないかだ。改めて回答してくれ。お前のは答ではない
>ケチ付けられることが癇癪起こすくらい嫌だったという意味だろ
それはお前の勝手な拡大解釈だろ?お前の勝手な解釈を決めつけてモノを言うのはおかしいよな?
俺はそんなことは言っていないし思ってもいない
>もうとっくに答えも出てるのにそれすら理解できないほど脳みそ沸騰しまくってのかよ
だから、これはおバカの妄想ということ >>478
俺には嫌だから発狂してるようにしか見えないからそう解釈したんだが
嫌じゃないなら嫌じゃないで俺は構わないよ
その代わり嫌じゃないならもう少し冷静になって自分のレスの問題点をよく考えようなって言ってるだけ
ここまで説明しないと通じないのかよ 何や泥沼になってんね、取り合えす聞かれたことだけ答えとくわおやすみ
>>471
何が問題か?
ホイール連打に3回「も」ケチ付けてるところ
まあ人それぞれ連呼してるし質問者に対してケチつけてるつもりでは無いんだろうけど
ならなぜ言ったのか?つまりそれはただの俺主張だよね
質問に答える体で君は終始自己主張を繰り返してる
そういう自己顕示欲はよそで満たそう、質問に便乗しての自分語りは程々に >>479
>そう解釈した
つまりお前の拡大解釈と言うことな。それが理解できたのなら一歩前進
ただし、質問にまともに答えると言う姿勢とは言い難いがね…
>自分のレスの問題点をよく考えようなって言ってるだけ
そもそも元々お前に向けたレスではないんだ。そのことはもうすでに書いてると思うんだが
そこは理解できてるよな?回答よろしく
だから、気に入らんならNGでどうぞと言ってるわけだよ
にも関わらず延々と粘着されて迷惑な話なのさ。ハナから黙ってNGの方がよっぽどマシだったろうに
>>480
ケチつけるのが問題なら、あんたのレス自体が問題でしょ?
それとも回数が問題と言いたいなら、何回までならOKなどというルールでもあるのかい
>君は終始自己主張を繰り返してる
俺から見たらあんたもそうだよ。単なるあんたの自己主張ではないというなら、1つ確認しておきたい
あんたは、「コマンドもろくに把握してない奴」には「半端に適当な回答しても伝わらない」と言ってるわけ
だから初心者には丁寧に説明すべきということでいいのかい?仮にそうだというなら
あんたは誰に叩かれてもそれを忠実に実行できるのかい?言行一致であるべきだろうからな >>481
何が一歩前進だよバーカ
お前の理解が遅いせいで何度も話が巻き戻ってただけだろ
お前が>>468で「嫌とどこに書いてるのか」と言ってきた時点でこっちはお前が嫌じゃないと
主張してるってとこまで先に読めてるんだよ
だから嫌じゃないならもう少し冷静に考えろと言ってんだよ
そもそも迷惑ならばNGすれば?
人には偉そうに指図する癖して自分のことは棚に上げるのかよ
>>480
>そういう自己顕示欲はよそで満たそう、質問に便乗しての自分語りは程々に
ほんこれ このスレに限らず、質問に答えているひとに対して無意味な難癖をつけるやつが本当に多い
教えているさまがなんとなく偉そうで気に入らないってだけなんだよな結局
難癖つけてる本人がそのことに気づいてないことも多いけどw >>482
>お前の理解が遅いせいで何度も話が巻き戻ってただけだろ
違うだろ。お前がまともに質問に答えないからだ。それが諸悪の根源
>先に読めてるんだよ
>>473 それはつまりケチ付けられて顔真っ赤になってる証だろ
読めてないよなぁ?自分で書いてることすら覚えてないのかよ…
そして、相変わらず質問に答えない
そもそも元々お前に向けたレスではないんだ。そのことはもうすでに書いてると思うんだが
そこは理解できてるよな?回答よろしく
この質問になぜ答えていないのか?次のレスで答えなかった正当かつ納得できる理由を添えて答えること
ついでに、自分は聞かれたことに答えないのに質問してくる奴なのか? これも回答頼むわ
>そもそも迷惑ならばNGすれば?
こんな風に聞かれたことには答えないくせに言いたいことだけ言うのがお前のやり方か?回答よろしく
>人には偉そうに指図する癖して自分のことは棚に上げるのかよ
「偉そうに指図」などない。それはお前の勝手な拡大解釈。勝手な解釈が正しいと思い込む病気を治せ
そして、自分がどう対応するかは自分で決める
お前のクソ粘着が迷惑だと思っているのは事実。だからお前の病気が治らないなら、どこかのタイミングで
NGにする可能性はある。が、そのタイミングはこっちで決める
そもそも、お前の粘着は明確に俺に向けているから相手をしているのであって、お前みたいに自分へのレスでも
ないのにギャーギャーと言ってるわけではないのだよ。まず最低限それくらいのことは理解しような? >>484
答えなくてもまともな人なら分かることだし
お前の下らない質問に答える義務も無い
ほんと典型的なアスペだなお前は ID:PQTJl3Hp0
ヤベーなこいつキチガイっぷりが半端ないww >>483
自分がいい回答者だなんてことは言わないけど、無意味な難癖つけてくる奴って何なんだろうな…
質問者にレス向けて回答して、その質問者に文句言われるならまだしも
全く関係ない奴がいきなり出てきて、ひたすら粘着ってホントどこかおかしいと思う
>>485
>答えなくてもまともな人なら分かることだし
散々勝手な拡大解釈する奴が、こんなことを言う資格にはどこにもない。勘違いも甚だしい
お前が拡大解釈する癖があるから、「まともな人なら分かる」ことが通じないんだ
拡大解釈されないために質問せざるを得ない。だから、俺のお前への質問はすべて「必要」なものであって
お前の勝手な判断で無回答することは認められない。もしくは、「二度と拡大解釈はしない」とでもいうなら別だがね
質問に答えるか、拡大解釈を一切やめるか、どちらか選んでくれ。二度と関わらないならそれでも結構だ >>487
お前みたいなアスペにとって必要なだけで正常な人なら不要
>>470の時点で俺はとっくにその拡大解釈を辞めてる
お前がしつこく説明を求めたから>>473で説明してやっただけ
ま、本音はお前が「ケチ付けられるの嫌じゃない」というのは詭弁に過ぎないと思ってるけどな
本当に嫌じゃないならなぜそんなムキになってるの?
俺はお前の質問に一つ答えてやったから次はお前がこの質問に答える番な >>486
うむ。日本語も流れも読めない残念な子だね。おやすみ
>>488
>本当に嫌じゃないならなぜそんなムキになってるの?
ムキにはなってないですな。それもお前の拡大解釈。だから、「拡大解釈を辞めてる」とぃうのは当てはまらない
さて、未回答に質問に答えてもらおうか。聞かれたことには過不足なく答えるのが当たり前
1個ずつなんてのはお前の勝手な都合だ。そんなこと学校で習ったのか?これも質問に加えておこうw
そもそも元々お前に向けたレスではないんだ。そのことはもうすでに書いてると思うんだが
そこは理解できてるよな?回答よろしく
この質問になぜ答えていないのか?次のレスで答えなかった正当かつ納得できる理由を添えて答えること
ついでに、自分は聞かれたことに答えないのに質問してくる奴なのか?
聞かれたことには答えないくせに言いたいことだけ言うのがお前のやり方か?
すべてに過不足なく回答すること >>489
いやいや、そんだけ俺に対して必死に長文返してくるのに「ムキになってない」は通用しないよ
だから俺の解釈は拡大でも何でもなく紛れもなく事実
本当にムキになってないならさっさとNGして俺のこと無視すりゃいいだけなのにな
自分から言い出したことだし >>490
はい、質問に回答が一切ないね。やり直し
先に進みたいなら、未回答の質問に答えてからな。拡大解釈大好き君
487の最後の行と489の一連の質問に答えること。できないなら、都合が悪くて答に詰まったいうことな
何かと拡大解釈するお前に対しては、イチイチ確認する「必要」があるんでな
答えないのは逃げていると言うことで確定でいいよなぁ?何も難しいことは聞いてないし
何でこんな簡単なことができないんだろうか?実に不思議だ >>491
質問に答えてないのはお前だよ
「ムキになってない」は答えになってない
やり直し >>492
残念ながら、俺の質問はその前から聞いているものなんだよなぁ
順番って分かるよな?って前にも聞いたよな?そう言えば、これも未回答だったわ
どんだけ怠慢な奴なんだw 順番が分からないならそう言ってくれ、拡大解釈大好き君 >>493
お前の最初の質問にはこっちはすでに答えた
お前は俺の質問に対してはぐらかしてるだけで答えてない
怠慢なのはお前だろ
順番?お前が答える番だと言ってんだろバーカ >>494
>順番?お前が答える番だと言ってんだろバーカ
それは違うと言ってるだろw
前から未回答かつ溜まってる未回答数も多いお前が先に処理するのが道理
それとも何か?お互い交互に1個づつとかそんなことを学校ででも習ったのか?
何で聞いてることに答えられないんだろうね
突っかかってきておいて逃げまくるって、人として恥ずかしくないのか?
まあ、そんな感覚を持ち合わせていたらそもそもクズみたいな粘着なんてしないかw >>495
前とか後とか関係無いし
質問は早い者勝ちとでも学校で習ったのか?
お前が俺の質問無視する限り俺がお前に答えてやる筋合いも無い
早くなぜそんなムキになってNGしようともせずに俺にレスしてくるのか答えろよ >>496
>質問は早い者勝ちとでも学校で習ったのか?
それはつまり「順番」を理解してないと言うことだよな?
お前より前から未回答が残っているし、その数も多いと言っているんだが?
そして、ご丁寧に順番って分かるよな?って聞いたよな?それも繰り返し
順番が分からないならそう言ってくれ、拡大解釈大好き君
と書いたが、お前のそのレスを見るに「順番」を理解してないということでいいよな?
>お前が俺の質問無視する限り俺がお前に答えてやる筋合いも無い
残念ながら、お前が無視した方が先だし、それが未だに未回答なのだよ
そもそも、突っかかってきておいて逃げまくるって、人として恥ずかしくないのか?なぁ? >>497
お前の脳内ルール押し付けるなよ
ムキになってない人間がこんな必死になる訳がないんだよなあ
>突っかかってきておいて逃げまくるって、人として恥ずかしくないのか?なぁ?
そのまんまブーメランだぞ
ホント自分のことだけ棚上げするのが好きなんだな >>498
>そのまんまブーメランだぞ
非常に残念ながら、突っかかってきたのはお前であって、俺はお前の粘着の相手をしてるだけ
俺が突っかけたわけではないなら、ブーメランもクソもない
日本語は正しく使おうな♪粘着&拡大解釈大好き君
しかし、何だかんだ屁理屈捏ねまくって、結局答えないんだよなぁ。何度でも書いてやるよ
突っかかってきておいて逃げまくるって、人として恥ずかしくないのか?なぁ?
ちなみに、俺から突っかかったと言う事実はありませんw >>499
それに対してNGもせずに突っかかり返してきておいて、逃げまくってるじゃねえか
逃げてないなら早く俺の質問に答えろや >>500
>突っかかり返す
などという日本語があるのか?ちょっとソース出してくれよw お前の造語?
いや、レスが増えれば増えるほど、ID:ZNW+Xd000の頭の悪さが浮き彫りになるねぇ
まあ、相手してやってるのはそれが目的の1つだしw
いかにも頭悪そうというのは十分伝わってるから、ボロを出させりゃいいわけでなw
>逃げてないなら早く俺の質問に答えろや
だから、それはその前からこっちが聞いてて未回答のままの質問にお前が答えたらな
できるだろ?
突っかかってきておいて逃げまくるって、人として恥ずかしくないのか?なぁ? 話を逸らすなよ
また逃げるのか?
俺が答えなきゃお前が答えないルールとか押し付けるなよ
逃げてばかりで人として恥ずかしくないのかぁ?なぁ? >>502
何もそらしてませんよー 「突っかかり返す」の粘着&拡大解釈大好き君w
お前の未回答はずっと上からあるんだ。それを先に処理しろというのは、ごく当然の話
なぜなら、俺が答えてもお前は答えないという疑念が消えないから。つまり信用できない
未回答の数々がそれを物語っている。お前が答えてこなかったことは厳然たる事実だ
こっちに答えてほしければ、その前からずっと溜まってる未回答の質問に答えろ
きちんと答えると言う姿勢を見せれば、こっちも応じてやるよ。できるだろ?
突っかかってきておいて逃げまくるって、人として恥ずかしくないのか?なぁ? >>503
だからそれがお前の脳内ルールだと言ってんだよボケ
ホント理解力低すぎるなお前の脳ミソは
早く逃げないで俺の質問に答えろや
人として恥ずかしくないのか?なぁ? ビジーウェイトせずに
変数の変化を待機したい場合
スクリプト2つ、OnMessage, Pauseを使うしかないんでしょうか?
*要件
F1キーが押されるまで
ループをまわさないで待機、
F1が押されたらループ再開
あと3回、合計4回押されたらまたループを休止
という動作を実現したかったのですが
*解決案1
スクリプトを二つ用意して
スクリプト1がF1を検知してOnMessageを送信
スクリプト2がメッセージを受け取ってF1の回数を増加、0→1のときPause,Offでループ再開
カウントが4になったらPause,On
とやったら動きました。
これ以外にビジーウェイトじゃない変数の監視法ってありますか? 補足:F1のプレス回数が4になったらPauseの前に4->0になる動作にしました >>504
>お前の脳内ルール
は?つまり、お前のルールだと
自分は好き勝手言うけど、相手は答えるのが当たり前ってことなのか?
そういうとんでもなく身勝手な奴だと言うなら、そう書いてくれ
お前の言ってることはそういう意味に受け取れるんだが違うのか?
お前が答えてこなかったことは厳然たる事実だぞ?その未回答は溜まったままだ
それで、どうやってお前が答えると信用できると言うんだ?とても無理なんだが? >>507
>自分は好き勝手言うけど、相手は答えるのが当たり前ってことなのか?
はいまたブーメラン
自分はそうじゃないと言うならまず俺の質問に答えような?な?
自分から言い出しておいて逃げまくるって、人として恥ずかしくないのか?なぁ? >>508
何度も言うが、それはその前からこっちが聞いてて未回答のままの質問にお前が答えたらな
というか、さすがに質問が出てきたのに続けるのは失礼だと思うわ
ここで続けることは俺は同意しない。お前が続けたいなら別の場所を用意しろ
俺はこのまま終わらせても構わんぞ。どうせお前答えないだろうしw 自信あるね
用意できたらリンクだけ貼っといてくれや。続きはそっちでやろうや
俺からそんな場所を作るつもりはないけどな。お前が答えないという自信があるからw >>509
何度も言うがそれがお前の脳内ルールだと言ってんだよ
お前の質問に答えてからじゃないとこっちが質問してはいけないなんて決まりはない
だから勝手にお前の脳内ルール押し付けるな
お前は逃げてないなら俺の質問に答えろよ
それが出来ない癖して自分のこと棚に上げまくってるから全てブーメランになる
続けたくないなら最初からNGしてりゃいいだけ >>510
つ509
何度も言わせるな。俺はこれ以上は質問者に迷惑をかけると思っているが
お前はそうは思っていないんだな?それならそう書け
その上で続けたいなら別の場所を用意しろ。お前はホント非常識すぎる >>511
ほらな、やっぱりNG出来ないんだろ?
自分は出来ない癖して人には押し付ける
人として最悪の性格だな
スレなんていちいち建てるわけねえだろバーカ
他者に迷惑なのは言うまでも無く当たり前
だからこっちからNGしてやるよ
最後までバカ丸出しなのはお前一人
最後に教訓
>自己顕示欲はよそで満たそう、質問に便乗しての自分語りは程々に
じゃあな低能アスペ君 >>512
別の場所を用意する勇気もないくせに捨てゼリフ
そもそもNG云々は、元々俺のレスは質問者に向けたものであってお前に向けたものではないから
気に入らんならNGでどうぞと言ってるのであって、お前は俺に明確にクソ粘着を続けてきたいのだから、
その前提条件がまるで違う。これも何度も書いてることだ。お前がアホなのか分かっててごまかしてるかだ
まあ、対抗するために「突っかかり返す」とか変な日本語を生み出すような頭の悪さだから、言動がキチガイなのは
さもありなんだわな。続ける気がないなら、それで結構、 「突っかかり返す」の粘着&拡大解釈大好き君w
キチガイ粘着で気持ち悪かったが、少しは休む時間も確保させてもらえるか
>>505-506
いや、スマンかった。答になってないけど、もう少し具体的なスクリプトを書いてくれた方がいいかも オブジェクトのクラスのプロパティを使えば値が代入されたときに任意の処理ができるんじゃないかな 名前:名無しさん@お腹いっぱい。 (ワッチョイ fbf0-7zaT)[sage] 投稿日:2017/05/29(月) 03:46:34.42 ID:PQTJl3Hp0 [21/21]
なにこの真性基地ww
超ウケるw おお、3時まで続いてたんか
蒸し返してすまんが誤解されたまま曲解されたようなのでそこだけ訂正させてもらう
>>481
初心者には丁寧に説明すべきという主張は一度もしていません
ヒントだけで突き放すのもスレ的には何の問題もないし自分もしています
自分は言ってるのは
取捨選択ができない状態の子に100%引っかかるだろう罠コード投げるとか
質問してる側で立場的にスルー的できない子に対しての俺自慢とか
そういうのは控えましょうって話です
ケチ付けるなという主張もしていません
それが明らかに不合理なら質問者に路線変更を促すのは当然だしケチ付けたってもちろん構わない
というかケチという言い方したのが悪かった
こちらが問題にしたのは『俺ならやらない』って主張を「3回も」繰り返したことだね
君のレス全般に入れることだがとにかく我を強調しすぎ
「オレがオレが」って意識はもう少し目立たないよう抑えよう >>516
>君のレス全般に入れることだがとにかく我を強調しすぎ
>「オレがオレが」って意識はもう少し目立たないよう抑えよう
あなた自身「オレならやらないことをやってるのが気に入らないから」突っ込んでるとしか見えないんですが
当事者じゃないあなたの「オレなら」意識から来るその突っ込み自体を抑えるべきじゃないか?って思う 久々にここまで香ばしいヤツ見たわ〜w
やっぱいきなり自分語りとかするやつって頭イカレてんだなあ >>516
>初心者に〜ヒントだけで突き放すのもスレ的には何の問題もないし自分もしています
そうだよな。だからこそおかしいんだよ。↑と↓とでは矛盾にしか見えないんだが?
>コマンドもろくに把握してない奴が質問してる状況の時は半端に適当な回答しても伝わらない〜
説明が全く足りないからきちんと伝わるように書いてくれ
ついでに、あんたの理想とする、矛盾しないケチもつけられない回答を見せてみてくれないか?
>自分は言ってるのは取捨選択ができない状態の子に100%引っかかるだろう罠コード投げるとか
「100%引っかかるだろう罠コード」という意図はない。それは決めつけであり質問者にも自分にも失礼
初心者対応で矛盾するようなことを書いているくせに、何を根拠にそんなことを言っているのか?
>質問してる側で立場的にスルー的できない子に対しての俺自慢
「質問者がスルーできない」がまずもってあんた決めつけ。現にスルーされているレスもあるし
元々の質問者にスルー云々などと言った覚えもないんだが? 一体全体どこからそんな発想が出たんだ?
ただの言いがかりにしか感じないのだが?これも説明が足りないね
>君のレス全般に入れることだがとにかく我を強調しすぎ
こっちが言ってもないことを決めてかかってくる、思い込みの激しいあんたの姿勢に問題はないのか?
上の質問と併せて答えてもらいたいね。自分から見れば下衆の勘繰りを拗らせてるだけ
大体、3回「以上も」文句をつけてくるのは、あんたの基準で言うならおかしくないか? とりあえず歪曲された解釈の否定をしたかっただけなのでもう議論する気はないです
伝わらない相手なのは分かってるのでこれ以上の説明はしません
他の住民にはスレ汚しすまんでした
木曜のワッチョイ変更まで潜ります >>520
>もう議論する気はないです
随分自分にだけ都合の良い話だねぇ
>伝わらない相手なのは分かってるのでこれ以上の説明はしません
こっちは、あんたの思い込みの激しさを指摘しているのだから、伝わらない云々はおかしい
あんたの言ってることのおかしさを指摘した上で、疑問を呈しているのだが?
いや、しかしワッチョイは便利だよな。これなかったら分からなかったもしれない。>>446 で
>そしたらどこが間違ってどう直したらいいのか人に聞くまでもなくすぐわかるから
とか書いてるが、聞くまでもなくすぐ分かるなら、「罠」もへったくれもないだろう?
んで、>>446と同じIDの>>454から今日の ID:WMKOZcWQ0 に至るまで、ケチをつけ続けてきたわけだ
結局、>>517さんの言う通りなんだよ。気に入らんからケチつけてるだけ
自分が気に入らないから文句を言っているが、そもそも自分のレスとの整合性が全く取れていないから
矛盾だらけになって、そこを指摘されたら、「伝わらないから」と謎の言い訳を残して逃げる
もう1人の奴ほどじゃないが、言ってることが支離滅裂なのにたいした粘着だと思うわ ざっくり見たけど ID:ZNW+Xd000 は ID:PQTJl3Hp0 の質問に真正面から答えないようにしながら
だらだら話を引き延ばして自身の ID:PQTJl3Hp0 へのケチ云々の発言を既成事実化しようとしてる感じだな
荒らしじゃないの
一々相手する ID:PQTJl3Hp0 もどうかと思うが 伸びていると思ったらこの有様か…2chも堕ちたな。 はいはいもうやめ
誰かこの流れはやくぶった切ってくれ >>522
質問とか下らなさすぎて草
論点逸らし大好きな某元宗教団体広報とそっくり evrything上でAHKが動かなくなった
http://www.voidtools.com/
どっちかのアップデートが原因かと思うが、同じ状況の人居る? ~LButton & WheelUp::
send, a
return
左クリックをトリガーにできないソフトがあるんだけど
RButtonやMButtonなら問題無い
メモ帳やPotplayerなどが動かないんだけど
無理やり動かせないものか >>528
LButton & WheelUp::
send, a
return
LButton::LButton
これなら動くのでメモ帳やPotplayerが左ドラッグ中の文字入力を受け付けないアプリケーション側の仕様
ただし上記のだと左ドラッグが出来なくなるので使いものにならない
要するにLButton & WheelUpに割り当てるのはやめた方が良いってことだね Loop parseで最後の行がカウントされ続けるんだけど何でだろう
String =
(
0
1
2
3
4
5
)
num = 0
Loop, 10
{
Loop, Parse, String, `n
count := A_index
MsgBox, line:%count%`n%String%
StringReplace, String, String, %num%, , All
String := RegExReplace(String, "(^|\R)($|\R)")
num ++
}
return そもそものやりたいことがよくわからないけど
Loop, Parse, String, `n
{
count := A_index
}
だからじゃないの 久し振りに来たけど、かなり派生出て進展してるね。おねえさんびっくりだ
Win10でもちゃんと動いてる? 濁点、半濁点を入力したいんですが
どうしたらいいですか?
こういうことがしたいです
F1::Send,{dakuten} 補足:単に濁点を入力するのではなく
その濁点を使って漢字変換もしたいです
し + ゛+ ん
で じん→神
のようにしたいわけです >>537
もともと文字入力でもそんなの出来ないじゃん。だから無理
じ を入力するにはJ I って入力するでしょ 要は「し゛ん」っていう文字列があったら「じん」に置き換えたいって事じゃね?
>>536は
a := "゛"
F1::Send,%a% カーソル位置の文字読み取ってテープルなりRegExなりで濁点ありひらがなに置換
そっからさらにIMEオンにして日本語変換用にローマ字置換した文字列をsend
うん、めんどくさい >>538-540
濁点前置 (F1 s a で ざ )
その他の手法を使うことにしたので
募集はクローズします
ありがとうございました ローマ字入力テーブルで
sxa -> ざ のように設定した後
xを日本語入力における濁点扱いにする(濁点中置)のが
言語的自然さと実装難度の兼ね合い的にいいかも
autohotkey使ってないけど 気になったので
ホットストリングを使って
::sal::za
のようにしたら濁点後置で一応できましたが
直前の文字が消えました。後置もう少し詰める必要があります >>544
何かの理由で、し + ゛+ ん って、 ゛ を使う必要があったんじゃねえの?
でなければ、なんでそんなことにこだわるのかわからんわ。 普通にJ I でいいんじゃね
sxa と入力とか、 最初の し + ゛+ ん と全く話が変わってるので見てる方は意味不明になるぞ あ、sxa がわからんというのは、 さ と入力してからキー入力で ざ に変えるのなら
sax ならまだなんとなーくわかる気がするって程度だが itunesの上で曲選択してCtrl+i を押すとプロパテイが出るんですが、
AutohotkeyでSend, ^i としてもプロパティがでる確率が40%ぐらいです。
一方手動でコントロール+i をすると当然100%プロパティが出ます。
どうしてでしょうか?
スクリプトを最小構成にしても同じです。
Sendのやり方に問題あるっぽいです。いろいろ変えてみたんですがだめです。
ためしにmsgboxを書き込んでみた所、100%うごきます。
wikiでSendの項目で見てるんですが、わかりません。教えてください >>547
機械的に一瞬過ぎてiTunesがうまくキー入力を認識できないのかも
SetKeyDelayでPressDurationを長くしてみれば?
マクロなどでも押してから離すまで10ms以上の遅延入れないと入力受け付けてくれない
ソフトとかよくある
普通に指でキーを一瞬ポンと押すだけでも押してから離すまで大体50ms〜100msくらい
間隔があるものなので >>547
こんなのも実験してみると良いかも
Send,{Ctrl Down}
Sleep,10
Send,i
Sleep,10
Send,{Ctrl Up} >>548 549
ありがとうございました。成功しました。
教えてくれたとおりのようです。一瞬過ぎて無理みたいですね。
itunesもアプデする前の前のバージョンまではずっとその一瞬でも受け付けてくれてたんですが
今のバージョンでダメになりました。
このことってほかの多くのソフトでも同じケースが沢山あるかもしれないですね。
肥やしになりました。助かりました すみません、基本的なことだと思うのですが質問です。
プロパティとかのウィンドウで、何番目のタブがアクティブなのかは
ControlGet, n, Tab, , SysTabControl321, A
MsgBox, n=[%n%]
で取得できたのですが、そのタブのテキストはどうやって取得すればいいのでしょう?
とりあえずこちらで試した方法としては、
(1) 上記でnを取得してから ControlGet, s, Line, %n%, SysTabControl321, A
(2) ControlGet, s, List, Selected, SysTabControl321, A
の2つがありますが、どちらも、MsgBox, s=[%s%] の結果を見る限りでは不発でした。
一方で、Window Spyでウィンドウを見てみると「Visible Text」「All Text」の
両方の先頭行にタブのテキストが表示されているので、方法はあるはずなんですが、
探し方が悪いのか、見つけられませんでした。
できれば、タブよりも上にオーナードローのコントロールが存在する可能性も考えて、
タブコントロールを指定してテキストを取得する方法があれば教えてください。m(_ _)m 訂正。オーナードローのことをよく理解していないんですが、
オーナードローだとそもそもコントロールにはならないのかな?
というわけで上記の下から2行目は、標準のコントロールに加えて
誰かが何かを付け加えた場合、という意味に解釈していただければ幸いです。 プロセス単位でネットワーク送受信を監視したくて色々調べたけど、
IP Helper(iphlpapi.dll)のAllocateAndGetTcpExTableFromStackを使えばよさそうな所までしか分からなかったよ・・・
DllCallやったことないし構造体の扱いも全然理解できてないからキツい・・・
http://web.archive.org/web/20060420235405/www.codeproject.com/csharp/iphlpapi.asp >>549みたいに"controlclick"をゆっくり押す方法ってないですか?
mpcのオプションでラジオボタン押すときに入力が速すぎてうけつけないときがあるみたいなんで、今はこんなふうに5回押してなんとかやってます。
controlclick,Button4,ahk_exe mpc-be.exe
sleep,260
controlclick,Button4,ahk_exe mpc-be.exe
sleep,260
controlclick,Button4,ahk_exe mpc-be.exe
sleep,260
controlclick,Button4,ahk_exe mpc-be.exe
sleep,260
controlclick,Button4,ahk_exe mpc-be.exe ControlClickのOptionsにUとDがあるから>>549と同じようにそれ使えばいいと思うけど >>556
あ、UとDあったんですねありがとうございました ControlClickよりもContorlSendの方が確実性が高い気がするんだけどね。
試しにContorlSendも試してみたら?。
ラジオボタンだとSendするキーはSpaceかな。 昨日から問題が発生しました
#useHook
F8::
soundbeep
send,{Media_Play_Pause}
return
これが機能しなくなった場合どんな原因が考えられますか?
何かヒントがあれば教えてください
キーイベントは送信されてるみたいです
77 042 h d 2.88 F8
77 042 s u 0.08 F8
B3 022 i d 0.16 Media_Play_Pause
B3 022 i u 0.00 Media_Play_Pause
どのメディアプレーヤーも反応しなくなったのでwindows側の問題でしょうか?
環境はwin10 64bit
autohotkey 64bit v.1.1.25.01 です >>559
うちではそのスクリプト問題なく動作するけど
F8押したときビープ音は鳴るの?それすら鳴らないの? >>560
ありがとうございます
ビープ音は鳴ります 本物のマルチメディアキーの付いたキーボードでどうなるか試せると良いね 検証してみました
(A)AHKによるsend,{Media_Play_Pause}
(B)ノートPC本体の再生停止キー(Fn+Home)
(C)USB外付けKBの再生停止キー(Fn+F7)
Foobar2000 いずれも反応しない
PotPlayer Bのみ反応!
MPC-HC いずれも反応しない
Audible いずれも反応しない
PotPlayerのみ反応するがノートPC本体のキーには反応しないという不思議な結果になりました。 うわ間違えた!
(A)AHKによるsend,{Media_Play_Pause}
(B)ノートPC本体の再生停止キー(Fn+Home)
(C)USB外付けKBの再生停止キー(Fn+F7)
Foobar2000 いずれも反応しない
PotPlayer Cのみ反応! ←★★★★
MPC-HC いずれも反応しない
Audible いずれも反応しない
PotPlayerのみ反応するがノートPC本体のキーには反応しないという不思議な結果になりました。 Keymillというフリーソフトで再生停止キーをチェックしてみました。
仮想キーコード スキャンコード 拡張キーフラグ イベント挿入フラグ コンテキストコード 遷移状態フラグ タイムスタンプ 追加情報 仮想キーコード定数 キー
119 66 False False False False 28924734 0 VK_F8 F8キー
119 66 False False False True 28924796 0 VK_F8 F8キー
179 34 False True False False 28924906 -3943347 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー ★AHKで生成
179 34 False True False True 28924906 -3943347 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー ★AHKで生成
179 34 True False False False 28932312 0 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー ★ノートPCのキー(Fn+Home)
179 34 True False False True 28932421 0 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー ★ノートPCのキー(Fn+Home)
179 0 True True False False 28936265 0 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー ★外付けKBのキー(Fn+F7)
179 0 True True False True 28936468 0 VK_MEDIA_PLAY_PAUSE メディア再生/一時停止キー ★外付けKBのキー(Fn+F7)
AHKとは関係ないのかもしれませんがキーコードに詳しい人が多そうなので参考情報もらえると助かります。 >>565
とりあえずキーボードでも反応しないならAHKの問題じゃないので完全にスレチ
ただのおま環バグなので結果報告なども要りません
ちょっとレス貰ったからと言って調子乗らずちゃんと弁えましょう fejwoviveins[573/6678]
この中から573だけをexcelの選択してるセルにコピーするにはどうしたら良いでしょうか?
数字が3245のように4桁になる時もあります
正規表現のヘルプを見て試しているんですがなかなかうまく行きません 正規表現そのものがわかりませんて話はスレチだろう
[の後の連続する数字をグループ化すればいいだけ 中身のあるテキストファイルを空にしたいんですが
削除して再作成すれば出来るんですが
無駄な気がします
echo > a.txt
みたいな操作はできませんか? RunWait,%ComSpec% /C echo > a.txt,,hide UseErrorLevel echo > a.txt だと「ECHO は <ON> です。」とか出力されるよw
echo.> a.txt (echo.> までの6文字にはスペースを入れないこと)だと、
改行1つだけの2バイトのファイルができる。
copy nul a.txt とすると手元の環境では0バイトのファイルができたけど、
MS-DOSの古いバージョンとかだとうまくいかないとか聞いたことがある。
%comspec% /c exit > a.txt なら、古い環境でも確実にうまくいくと思う。 関数から複数の値を受け取りたいんですが無理?
グローバル変数使うしかない? return ["a", "b"] みたいに配列で返すとか >>573
あー、確かにそれ最強やね。
ファイル読み書きの機能がない言語の場合は >>572 の方法、ということで。 >>574 >>575
byref使ったらできました
配列で出来るかは未確認です。 そもそもAHKみたいな言語もどきで無理して処理する必要あるのかっていう Windowsにはまともなスクリプトがないから、MSDOSなんかでスクリプト作るくらいなら
AHKでスクリプト作った方は遥かにいいよ。 なにも常駐としてだけ使う必要はない ブラウザのHTML5動画にマウスオーバーしたらという条件は作れるんでしょうか?
コントロールが取れないのでImageSearchに希望を託したのですが動画だとどう判定すればいいのかわかりません >>580
Win32APIを叩いたり、コントロールを直接いじったりといったことがWSHではできない。
AHKに限らず他社製品でもそうだけど、キー操作代行ツールの類はそういうことができるからね。
WSHはどこでもスクリプトだけ持っていけば確実に使えるというのはいいんだけど、
出自がVBとJavaScriptだから、無用な制約が色々あって困る。 >>582
JavaScriptでやるのが普通だと思うけど >>584
AHKで何かしたいんでしょ
やるとしたらUserScriptでページタイトルを変更してAHKで検知するかな ;タブ閉じる
~RButton & LButton::send,^w
でマウスボタン両押しでブラウザのタブ閉じてるんですが、ノートPCはOK
デスクトップはタブを閉じた後、右クリックメニューが開いてしまいます。
Setpoint入れてるからかな?回避方法あります? >>586
~を付けてるんだからむしろメニュー開くのが正常な動作
イヤなら ~ 消して RButton::RButton を書き加えればいい
ただし右ドラッグが出来なくなるからRButtonを修飾キーとして使うこと自体あまり宜しくない F1キー単体だとキー無効、F1キーを押しながら左クリックすると右クリックにするにはどうしたらいいですか? 質問です。
マウスの中央ボタンを押しながら左クリックをする事で
あるコマンドが動くように作って使っているのですが、
基本的には動作はするものの、ときどき中央ボタンがどうやら押しっぱなしに
なっているようで、左クリックをするだけで同じコマンドが動作してしまって
なかなか戻せなくなることがあります。
その場合は左クリックを押しながら中央ボタンを押してみるとかすると治る時があります。
MButton & LButton::
この書き出しで始めているのですが、これが機能したあと
ボタンをリリースした事を認識させるようにするにはどうすればよいでしょうか。
よろしくお願いします。 >>588
f1 & LButton::Send,{RButton}
でどうだろ >>590>>591
ありがとうございます!
これでいけました!!
f1 & LButton::Send,{RButton} SciTE4AutoHoteyのエディタで、ラベル名をハイライトしてF12を押すと、そのラベルの場所へジャンプしますが
ラベル名に
labelラベル
などと日本語を入れるとこのラベルへはジャンプできず、そもそもF12でリストにも出てきません
なんとか出来ますか?
ちなみにAHKとしての動作は問題なく動きます
また、このF12でのジャンプですが、いつもラベルの近くにジャンプして正確にラベルの場所にはジャンプしません
これもしょうがないのでしょうか 使ってないからしらんけど2バイト文字に対応してないんでしょ
プラグインのあるIDEとかエディタ使ったほうが良いんじゃない AHKを使っている人はみなSciTE4AutoHoteyを使ってるのではないのですか
他では具体的にどんなエディタを使ってますか 俺もNotepad++を使ってる
AutoGUIも意外とエディタとして使えるから簡単なGUIアプリならAutoGUIだけで作ってる k2editor
若干マイナーなんだが手になじんでしまった ahkでだらだらとコード書くことないからなぁ
でもSciTEは普通に便利だと思う 正直驚きました
SciTE4AutoHoteyを使わないと最初のところの
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
; #Warn ; Enable warnings to assist with detecting common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
#UseHook
とかも自分で打たないといけないし、予約語も最初の数文字を打てばすべてがでてくるとか、
その辺の機能はつかわないのですか。
また、命令の予約語を入れると、使い方の文法も出てきますよ >>603
テンプレなんてSciTE4AutoHoteyじゃなくても自由に編集できるしエディタなんて好きなの使えとしか言えない
お前にとってそれがベストなら2バイト文字へのジャンプに非対応でも我慢するしかないだろう >>604
ほかのエディタでもラベルリストとか出せるのですか コマンドの書式忘れたとき用に選択単語のAHKヘルプを開くホットキー入れてる 特にコンパイルとかしなければほかのエディタでもいいのかな
ラベルリストを出してそこへジャンプ
一部の文字列を入れただけであとを全部出してくれる
命令予約語を入力したらその後に続くコマンド使用例を表示してくれる
この辺をとても重宝しています。 コマンドの使い方はヘルプを使うで妥協できれば問題ないかもですね >>607
だからお前が何を使おうとお前の自由だと言ってんだろ
ただ他人様の使ってるものにいちいちケチ付けたいなら他のソフトの機能も熟知してからにしろよ
他のエディタなら日本語のラベルにも簡単にジャンプできるし、何を重視するかは人それぞれ 上がってる名前を見てもわかるけど、普段使ってるエディタをAHKでも使ってるだけだよね http://i.imgur.com/PBRI1rZ.png
sublimeでプラグイン入れてるけどコンパイルも実行もジャンプも補完もできる >>609-610
わざわざありがとう。 結構みな自分のお気に入りのエディタって持ってるんですね
てっきりAHK標準のエディタをみな使ってるものとばかり思ってました。いろいろと試してみようかな >>610
settitlematchmode機能してないよ いちいち喧嘩になるなよw
泥沼化するのでおしまいおしまい SciTEやNotepad++がAHKに対応する前からAHKコード書いてる人間も結構いるからな
苦労して常用エディタ用の環境整えた後に後発の便利エディタ出ました言われてもなかなか乗り換えはできないんよ
自分は昔秀丸で#つきincludeのタグジャンプとか要望対応して貰ってるから浮気はできないわ この質問>>589是非お願いします。
質問の仕方がおかしいでしょうか。
マウスのボタンを離したというコマンドが書ければ治せるきもするのですが、
どなたかお伺いできると幸いです。 >>618
スクリプトが書かれていないからわからんけどループしてんじゃないの >6のQ9じゃないの
原因はともかく対処法は押下解除を待つか調べるかしてから
SendかMouseClickでU投げたらいいだけじゃね
というか自分で結論に至ってるのになぜコマンド一覧を調べないのか >>619
>>620
ありがとうございます。
「SendかMouseClickでU投げたら」この意味がわからないくらい素人なのですみません。
以前ここで相談しながら作ったスクリプトなのですが長いので分割になるかもしれませんが貼ってみます。
;ウィンドウ中央マウス
MButton & LButton::
WinGetActiveStats, t, wa, ha, xa, ya
if(xa=1200 and ya=50 and wa=1345 and ha=1500)
{
Gosub,Label2
return
}
else
{
Gosub,Label1
return
}
Label1:
id:=WinActive("A")
WinGetPos, X%id%, Y%id%, W%id%, H%id%, ahk_id %id%
WinMove,A,,1200, 50,1345,1500
; MsgBox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% " 中央へ"
return
Label2:
id:=WinActive("A")
WinMove,A,,X%id%, Y%id%,W%id%,H%id%
; MsgBox, % "ahk_id " id "`nX" X%id% ",Y" Y%id% ",W" W%id% ",H" H%id% " 元の位置へ"
return それで、冒頭の
MButton & LButton::
これを
^#!Numpad2::
これに置き換えただけのマウスではなくキーボードショートカットに置き換えたほうは
特に問題なく使えています。
修正方法お伺いできると幸いです あ、それとこのスクリプトは4 k モニター用の数値が入っているので
そのまま実行すると枠外に出てしまうかもしれません。
よろしくお願いいたします。 >>621
全く問題なく動作するよ。
MButtonが押したままになってしまう症状は出なかった。 みんなエディタなんて使ってたんだ
メモ帳で作ってるのは俺くらいか 紙のメモ帳にフォント並の字で書いてOCRで取り込んでるのかも知れん Windows標準のメモ帳のソフトですけど
言われてみればメモ帳もエディタですね まったくくわしくないわい、gpadとやらを一週間ほどまえから使い始める
タブがあるだけでも便利やわ
あと半角スペースがあるかどうかも記号でわかりやすくなってていい! >>624
ありがとうございます。!
自分も大丈夫な時は大丈夫なのですが、
症状が出るときと出ないときがあってその違いがなぜ起きるのかがよくわかっていません。
>>620
このかたが紹介してくれてる>>6ですが、
自分はsetpointを使ってロジクールのマウスを使っているのでそれが悪さしているのかもしれません。
あえてリリースの動きなどを追加して安定して動くようにしたいのですが、
ボタンを離すというコマンドはどうやって設定すればいいのか
ご指南いただけますと幸いです。 >>1にある日本語解説等のAutoHotkey Wikiで検索して見よう
調べ方を身に付けないとずっと誰かに助けて貰うことになるぞい >>631
日本語解説。たしか2耳管で全部読めるとか書いてあったところがあったと思うのですが、
そこを何日かかけて読んだり結構いろいろ読んだんですが
プログラミング自体について初心者なので途中でわからなくなってしまうんです。
無念
なにか一から解説してあるような書籍などがあればいいんですが。 コマンド名も書かれていたのにwiki見ずに教えろと言えばそりゃ>>631のような書き方になる
まず書かれていたコマンド名でwikiをもう一度見て今作っているスクリプトと違うもっと簡単なもので
動作を確認してそれでわからなかったら質問
俺もスクリプトなんてこれしかわからないけど習うより慣れろといった感じでやればなんとかなる
DllCallはわからないけどな! Click , Middle, up, , ,
ていうのを追加して様子を見てみます >>634
すみません
「SendかMouseClickでU投げたらいいだけじゃね」
これのMouseClickというのがコマンドだということが今わかりました。
そしてUというのがボタンリリースだというのも今わかりました。
投げるという表現が自分には全く入ってこなかったです。すみません。 >>634
いや、またすみませんwikiは何度も見てるんです。
あほですみません ● 分からない理由 ●
1. 過去ログを読まない。
2. 読んでても肝心な所が見えてない。
3. 検索能力が低い。
4. そもそも検索する気がない。
5. 類推という概念がない。
6. それ以前に普通に頭が悪い。
<わからない11大理由>
1.読まない …現行スレ、テンプレ、取説などを読まない。読む気などさらさらない。
2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。
3.試さない …めんどくさいなどの理由で実行しない。する気もない。
4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。
5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。
6.理解力が足りない …理解力以前の問題で理解しようとしない。
7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。
8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。
9.逆切れする …自分の思うようにならないと逆切れする。
10.開き直る …自分の思うようにならないと開き直る。
11.2ちゃんねるをお客様相談室だと思っている。 こういう風にMouseClick,M,,,,,Uを途中に挿入してしばらく使ってみようと思います。
ありがとうございます。
;ウィンドウ中央マウス
MButton & LButton::
WinGetActiveStats, t, wa, ha, xa, ya
MouseClick,M,,,,,U
if(xa=1200 and ya=50 and wa=1345 and ha=1500)
{ すまん>621見て触っちゃいけない系の人だったの思い出して以後スルーしてたわ
このスレで英字の羅列が出てきたら何はなくとも wikiの検索ボックスにコピペして調べる癖はつけて
コマンドかどうかはともかく高確率でAHK関係のシンタックスだからなんかしらは引っかかる >>639
この位置への挿入では症状の改善がなかったんですが、
分岐後の最後の行付近に一応100ミリ秒あけてからそれぞれ挿入したら調子よくなりました。
ありがとうございました。 すみません、お尋ねします。
Iniwriteした時に、頭の部分にスペースを入れたいのですが、Wikiの何処を参照すればいいでしょうか?。
[HAGE]
JANAI= 1
こんな感じです。
宜しくお願いします。 すみません、スペースの位置が逆でした。
[HAGE]
JANAI =1
こんな感じです。
宜しくお願いします。 IniWrite, %A_Space%1, hoge.ini, HAGE, JANAI IniWrite, 1, %A_ScriptFullPath%, HAGE, %A_Space%JANAI 有難うございます、出来ませんでした!。
INIは以下の様になってしまいます。
[HAGE]
JANAI= 1
JANAI =1
これは出来ませんかね?。 すまんCルートは書き込めないんだっけ
IniWrite, %A_Space%1, %A_ScriptDir%\hoge.ini, HAGE, %A_Space%JANAI ごめん寝ぼけてる、iniファイルのパス指定部分は無視して
ようはスペース入れたいところに A_Spase 入れればいい
wikiは組み込み変数の一覧を参照 検証有難うございます。
やりたい事は以下なのですが、スペースが無効になってしまうんですよね。
IniWrite, 1, %A_ScriptDir%\hoge.ini, HAGE, JANAI%A_Space%
AHKの仕様では無理なのでしょうかね。 WritePrivateProfileSection(lpAppName, lpString, lpFileName) {
DllCall("WritePrivateProfileSection", "Str", lpAppName, "Str", lpString, "Str", lpFileName)
}
WritePrivateProfileSection("Test", "Foo1 = Bar1`nFoo2 = Bar2`nFoo3 = Bar3", A_ScriptDir "\Settings.ini")
自分で好きなように関数作ればいいと思う 質問させてください
実行ファイルがある C:\Program Files\AutoHotkey
のフォルダにAutoHotkey.iniを置いてもAutoHotkey.exeの起動時に読み込んでくれないんですがなぜでしょうか
関連付けができていなかったのでプロパティで手動で設定しましたがダメでした
右クリックでINIファイルを開いて初めてスクリプトを読み込んでくれます
ですが同じフォルダにAutoHotkey.ahkを置いておくとそれはexe起動時に読みこむようです
優先順位としては
1)C:\Program Files\AutoHotkey フォルダのAutoHotkey.ahk
2)C:\Users\(username)\Documents フォルダのAutoHotkey.ahk
この二つのみで、AutoHotkey.ini は完全に無視される状態なのですがインストール時になにか不具合が起きたのでしょうか?
また、一つのスクリプトファイルに沢山書き込むと編集しづらいのでいくつかに分けたいのですが
その場合、複数のスクリプトをひとつのファイルの時と同様に読み込ませて機能させるようにするにはどうすればよいでしょうか
バージョンはv1.1.24.05でwindows10です
よろしくお願いします AutoHotkey.ahkが自動で読み込まれるんだからそれで良くね?
って思うんだが >>652
wikiなどいろいろな解説ファイルにはINIファイルの使用法が書いてあるんですが
その通りにしてもダメなのが不安になりまして、、、
いじっているうちにスクリプトを右クリックしてもautohotkeyのコンテキストメニューも出なくなってしまったり、、、
>>653
#Include
ありがとうございます!やってみます autohotkey.iniはどっかの時点で廃止になって
以降自動読み込みはautohotkey.ahkに統一されたんじゃなかったっけ >>655
ありがとうございます
それなら安心です
どうも自分のだけ動きがおかしいのかと不安になっていました >>650
返信ありがとうございます。
セクションにも、こんな感じ[ HAGE ]でスペースを入れる事は可能でしょうか?。
以下の様にしてもスペースが入りませんでした。
Test=HAGE
Foo1=JANAI 1
Foo2=JANAI 2
WritePrivateProfileSection(lpAppName, lpString, lpFileName) {
DllCall("WritePrivateProfileSection", "Str", lpAppName, "Str", lpString, "Str", lpFileName)
}
WritePrivateProfileSection(" " Test " ", "Foo1 = "Foo1 "`nFoo2 = "Foo2 , A_ScriptDir "\Settings.ini") >>655>>656
正確にはスクリプトを実行するEXEファイルと同名のAHKファイルが読み込まれるようになった
Revision 51(April 11, 2010) 質問です。
現在ノートPCでタッチパッドが5点まで認識するのですがAHKで今何点が押されているか確認し、
ショートカットを設定することはできますか?
もしできるのならば、その方法と具体的なスクリプトを教えてください。 >>660
「何点が押されているか確認」することは出来ません
5点を認識できるユーティリティソフトがあるならそのソフトでWindowsAPIに変換して使いましょう
例えばユーティリティ側で5点押し=F13などに割り当てれば、AHKでF13に機能割り当てて使うことが可能になる
ただしユーティリティ側で何が出来るのかは知ったこっちゃないのでその部分はスレチ >>659
これだとキー一個書き換えるたびに毎回
ini全読み→該当箇所の値書き換え→FileDelete→FileApend を繰り返すことになるな
さすがにこれは効率悪いのでは
ここまでやるならStaticな内部バッファに一時的にセットする関数と
最後にに一括でファイル書き出しする関数を自分で作ったほうがいいかも >>661
ありがとうございます。
できないんですか... >>663
タッチパッド5点押しとかはWindows標準APIではなくてそのハード固有の機能だからな
そこんとこちゃんと理解した方がいい SynapticsのタッチパッドならCOMから情報を取得するのをフォーラムで見かけた気がする
タッチ点数を取得できるかは知らんけど
>>662
https://github.com/aviaryan/autohotkey-scripts/blob/master/Functions/AhkIni.ahk
効率重視なら、こっちを改変して使う方がいいだろうね https://autohotkey.com/board/topic/65849-controlling-synaptics-touchpad-using-com-api/
>Based on the SDK documentation we could for example:
>- retrieve our finger position (absolute/raw X,Y position)
>- detect tap gesture eg. one,two,three finger tap, & more
これのことかなあ >>664
理解していませんでした。教えてくださり、ありがとうございます。勉強になりました。
>>665
ありがとうございます。
ちょうどSynapticsでした。
フォーラムというのはこちらでしょうか?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=77616&KLOG=131 >>659>>662>>665
返信ありがとうございます。
お手数お掛けしましたが、>>665リンクのコードで出来ました。
有難うございました。 どっちかって言うと左中右クリックとマウスセンサーのついたテンキーが欲しいな たとえば、
a:: と b:: でルーチンを組んだとき、a;; の途中で b:: が割り込みで入ることができます
このとき、 a;; の処理の途中で、ここからここの間だけ割り込み禁止ってできますか
たとえば、
WinAcrivate, タイトル
MouseMove, x, y
とかするとき、ときどきこの間に割り込みが入ってることがあるのです。 こういうところを割り込み禁止にjしたいのですが
しかし、a;; 全体を割り込み禁止にする必要はありません ああ、5年もAHKを使用しているのにCriticalの存在を知らなかった私は馬鹿なのだろうか・・・。
とても便利な機能。 Thread、Transformとかコマンド自体の使い道が思い当たらなかったものに
NoTimersやReDefみたいな便利機能がひっそりとあるのがなかなか気付けない 色々調べて解決できなかったんで
お願いします
sc07B & l::Send, {Blind}{Right} 無変換 + L = →
で割り当てているのですが、
ウィンドウを右に持ってこようと
Win + →しようと上記のバインドと
一緒にするとロックであるWin + Lが
反応してしまいます。この場合
どのようにすればよいのでしょうか? >>678
実際に Win + L を押しているんだから仕方ないね。
自分なら、Win + ↑↓←→ に対応するホットキーを設定するかな。 >>678
レジストリ変更式キーリマップで、WinをF13に置き換えて、自前で Win や Win+ の動作を全部書けば
良いんじゃないかと思って調べたら、やってる人がいた。
スキャンコード f13 でググると最初の方に見つかったよ。 あ、自前で全部書かなくても
f13::LWin
でいけるわ。
ただ、Win + L の機能は本物のWinキーがないとダメみたいだね。 >>678
まとめ
チェンジキーアプリで、Winキー を 0x0064 にリマップし、
↓をAutoHotkeyに記載
f13::LWin
#l::
Send,{Win Up}
run,rundll32.exe user32.dll`,LockWorkStation
return すみません初心者なのですが質問します
指定した特定のウィンドウに対してだけマウスオーバーでアクティブにさせることは可能でしょうか?
Windows7の標準機能だと全部のウィンドウが反応してしまうのでAHKで何とかならないものかと...
可能でしたら、どの辺りを参考にしてよいのか誘導お願いします。 あくまで一つの方法。他にいい方法があるかもしらんが
タイマーで0.5秒間隔でそのウインドウの位置とサイズをWinGetPosでゲット
その範囲にマウスがあるかを判断
あれば、WinActivate settimer
mousegetpos
winactivate
あたりかな
マウスオーバーの条件がわからんが常時監視の必要があるので
初心者が組むスクリプトとしては難易度高め たとえばシフトキーを押したときだけ、0.5秒間隔でチェック用のタイマー起動
シフトキーを離せばタイマーオフ
とかすれば、常時年がら年中タイマー起動ってのは避けられるな
OnMessageを使えばもっと高度なことが出来そうだが、めんどくさいので自分で調べてね 特定のウィンドウの条件がわからないけど
タイトルとかプロセスで条件つけるならMouseGetPosで直下のウィンドウのウィンドウハンドルとって
WinGetで条件の値とってIf var in で判定すればいいんでね タイマー周りのデバッグはややこしいけど
^aのようなショートカットで発動するようにして
テストしてけば行けるでしょ AHKでは、OnMouseMoveみたいなイベントドリブンが出来ないのが残念だよねえ
バージョンアップで対応できないかな >>689
この場合の肝は発動条件のほうかと
発動内容はwinactivateするだけだからデバッグの必要はあんまり… >>688 ありがとうございます
ちょっと調べてみたのですが分かりませんでした
具体的に言うと指定しておいたソフトのウィンドウが非アクティブの状態の時
マウスが座標に関係無く、そのウィンドウに乗ったら自動でアクティブにしたいのです >>692
>>686の回答が全てだわ
せめてその3つのコマンドくらいしっかり調べて使い方理解しな
このスレは要望すれば丸々スクリプト書いてくれるスレじゃないから
wiki熟読して試行錯誤して散々遠回りして失敗繰り返しながら自力でスクリプトを書くしかない
それが無理なら素直に諦めな >>694
何故試行錯誤してないと思った?
しかも作ってくれなど一言も言ってない >>695
だったら普通に「ありがとう、がんばります」だけ言ってもう消えて >>692
わからないと言われても何がわからないのかわからないとこちらも説明しようがないので……
俺もそう長く使ってるわけでもないけどとりあえず目標を決めて、始点と終点定めて、間を探って行けばいい
「指定した特定のウィンドウに対してだけマウスオーバーでアクティブ」なら
常に判定する必要があるからタイマーを使うけどとりあえずタイマーは置いておいて
始点はマウスオーバーでGetMousePos
終点のアクティブはWinActivate
判定が必要だからIf
その判断材料得るためにWinGetやそのほかを使う
とりあえず「マウスオーバーでアクティブ」を作って肉付けしていってみてはどうかな 試行錯誤してる人は具体的に何を試してどう上手く行かないのかちゃんと書くしね
ちょっと調べてわからないじゃなくしっかり調べて理解しろって言われてるわけで
ロジックはもう複数の人が教えてるしあとは組み立ててがんばれ >>692
このスレにいる人全てが思ったスクリプトをリファレンス見ずに完璧に書けるなんてことはない(と思う)
だからガンバレ!
マウス下のウインドウ情報は→mousegetpos
その内ウインドウハンドルを元にウインドウタイトル取得は→WinGetTitle
また、ウインドウクラス取得は→WinGetClass
該当ウインドウがアクティブか否かは→WinActive()
該当ウインドウをアクティブにするのは→winactivate
↑
以上を定期間隔で実行するのが→settimer
この中で「if」で処理分岐させる必要あるけど、おそらくこれで希望の動きするんではないだろうか?
検証してないので申し訳ない
まぁとにかくガンバレや >>700
付け足し
マウスが該当ウインドウ上に任意秒以上停止していた時のみ適用させる
↑とかの条件もある場合はまた別の処理が必要となる→mousegetposでマウス位置確認かな? どちらかと言うと、前回調べたマウス位置から動いていなければ何もしないって処理の方が大切かも。
タイマー処理はなるべく何もしないことが理想だし。 >>700 701
ロジックはわかたのだけど
具体的な書き方が一部わからない
IMEとロックキー系の制御はTimerで自動化してるので
SetTimer, Timer01, 1000
Timer01:
で作ったんだけど...
一応、タイマーとトリガーになるキーでアクティブ化だけは出来たけど
MouseGetPos, ここがいまいち書き方がわからない
タイトルは毎回変わるのでWinGetTitleでいいのかどうか...
できればclass名で指定したいのだけどマウス下のclassも指定できるのでしょうか?
とりあえず、あとで作ろうと思ってたのが先にできたやつを...
このタイマーより上のところをなんとかすればいいわけなんだろうけど...
Timer01:
if(A_TimeIdlePhysical>5000)
WinActivate, ahk_class 742DEA58-ED6B-4402-BC11-20DFC6D08040
return
これをどう使ってどう書いたらいいのかわからないです
MouseGetPos, この後は?
OutputVarWin ↓このと一緒に使うのか?
ahk_id %OutputVarWin% どう使う?
WinGetTitle ↑でマウス下のタイトルを格納して、WinGetで拾うということ?
あと、アクティブ後のタイマーをどうするか
アクティブ化が無限ループする。何故か非アクティブでも永久最前面化する
トリガーがキーなら問題なかった
とりあえず、タイマーを止める方法を探し中です
ってかマウス下の情報取れれば勝手に止まんのかな? >>703
対象となるウインドウのidをまず求めておく
で、タイマーが来る毎に、MouseGetPosで得られるマウス下のウインドウのidが、そのidと同じかどうかを比較するだけ とりあえずそこまで全然わかってない状態なら先にチュートリアル熟読したほうがいいと思う
まずはコマンド説明の読み方を理解するところからだね 昨日みんながしたレスは別に何が何でもWinGetやWinGetTitleを使えって意味じゃないよ
質問したときにclassで判定したいと書かなかったからそういうのが使えるのではないかって言っていただけであって 学ぶのは二の次で、とりあえず動けばいいんでしょ?
だったら個人的には盗んだほうが良いと思うから
正解貼っつけてそれを好きにさせればいいと思う
ぐちゃぐちゃと小難しいアドバイスを並べるよりその方が双方にとって良いかもな >>709
そういう奴は図に乗るから軽くあしらってさっさと諦めさせた方が良い
半端に教えてるやつもその辺ちゃんと考えた方が良いぞ それだったら別にAHKにこだわらなくても
似たような事出来るフリーソフト探した方が早いんじゃないか >>692見た瞬間に相手するのやめて終われた話いつまで引っ張るの Pauseで赤くなっているスクリプトにpostmessageで
メッセージを送り続けるとと
色が赤と緑の間を行き来して点滅するのですが
これはメッセージを受け取る処理を実行するためにpause
が一時的にoffになっているのでしょうか? GUIでタイトルバーが邪魔なので消したいんですけど
それ以外にウィンドウつかめるようにする方法を教えてほしいです OnMessage(0x201, "WM_LBUTTONDOWN") でGUI上にMouseDownイベント発生させる
その中でマウスUPが行われるまでループで回してマウス移動分をWinMoveし続ける >>715
HDD漁ったら昔書いたコードが残ってたんで貼ってみる
OnMessage(0x20, "WM_SETCURSOR")
OnMessage(0x201, "WM_LBUTTONDOWN")
Gui, Window:+LastFound -Caption +AlwaysOnTop
Gui, Window:Color, 000000
Gui, Window:Show, W100 H100 X100 Y100 NA
Return
WM_SETCURSOR() {
hCursor := DllCall("LoadCursor", Int, 0, Int, IDC_HAND:=0x7F86)
DllCall("SetCursor", Ptr, hCursor)
Return 1
}
WM_LBUTTONDOWN() {
PostMessage, WM_NCLBUTTONDOWN:=0xA1, HTCAPTION:=0x2
}
Esc::ExitApp >>716
なるほどそんな方法があったとは
>>717
調べてみましたがOnMessageでウィンドウに送られた操作により
関数WM_LBUTTONDOWNを実行していて
0x201が左クリック押し下げで、HTCAPTIONがタイトルバーの事で
0x2は(中止 再試行 無視)?0xA1?
左クリック押し下げをタイトルバー左クリック扱いにしてる的な?
これ以上はアホすぎて分かりませんでしたが
ありがたく使わせてもらいますありがとうございました 皆さんのお知恵を拝借したく存じます
OSはWindows 10 Creators Update(32bit)で、AutoHotkeyは最新の
v1.1.26.0(32bit)を使用中です
やりたいことは「ウインドウズの「天気」アプリを起動する。すでに起動済
みの場合はアクティブにする」です
起動済みのアプリはウインドウのタイトル──「天気」──を指定すれば
アクティブにできるのですが、新規に起動させる方法がわかりません
「天気」アプリのフルパスはC:\Windows\System32\
ApplicationFrameHost.exeで、どうやら「天気」に限らず「カレンダー」
「電卓」「設定」などすべてのアプリはフルパスが同じ、つまり
ApplicationFrameHost.exeという共通の実行ファイルのようです
ふだんはClassicShellのメインメニューにショートカットを置いてあるのでク
リックすればすぐ起動できるのですが、AutoHotkeyで一発で起動でき
ればなお便利です
「天気」アプリだけを新規に起動させる方法をご存じのかたがいらっしゃれ
ば教えていただきたく存じます そのショートカットに書かれてるコマンドそのままRunしてできないの? >>720
さっそくのレスどうもありがとう
ClassicShellに置いてあるショートカットは自分で作成したものではなく、
Windows 10のデフォルトのスタートメニューで選んだ「天気」アプリのアイ
コンが自動的に登録される仕組みです
ご指摘に従ってコマンドを調べようと右クリックしてプロパティを確認したところ
「Microsoft..BingWeather_8wekyb3d8bbwe!App」と書いてありました
そこで、Run, Microsoft..BingWeather_8wekyb3d8bbwe!App を実行
したところ「指定されたファイルが見つかりません」というエラーダイアログが
出てしまいます
どうすればよいのかしら? レス書いてたら割と正解に近づいていたという
Run, shell:AppsFolder\Microsoft..BingWeather_8wekyb3d8bbwe!App
でできると思う run ,explorer.exe shell:AppsFolder\Microsoft.BingWeather_8wekyb3d8bbwe!App
こうじゃないの? >>722
おかげさまでばっちりうまくいきました!
ちなみにコピペさせてもらったままだと「指定されたファイルが見つかりませ
ん」というエラーダイアログ」が出ましたが、「Microsoft」と「Bing」のあいだ
のピリオド2つ「..」をピリオド1つ「.」にしたら大成功でした
どうもありがとう! >>723
レスありがとうございます
explorer.exe をつけてもばっちりうまくいきます
どうもありがとう パッカーでパックする以外にコンパイルしたexeのスクリプト丸見えなのを回避する方法って無いのかね。 >>726
暗号化しても意味無い
AHKのライセンスでソース付けないの禁止 AutoHotkey_Hのコンパイラーで出来ました キーAを押しっぱなしにすると連射状態になりますが
他のキーを押すとAを押しっぱなしでも連射状態は止まりますよね?
このとき連射状態を復活させる手段はないでしょうか?
連射状態が復活できれば
完全に近いレジストリを書き換えないcapslockのモディファイア化が出来ます。
#capslockのモディファイア化挑戦の現状
キーの連射状態を観察してcapslockキーのリリースを一応検知できるところまでは出来ました
しかしcapslockを押している最中に他のキーを押すとループが終了して
リリースが検知できなくなってしまいます。
その一回でa::xは動作します。
押しっぱなしのモディファイアとしてはホットキー一回分しか使えないのが現状です。 a.ahkというスクリプトを管理者で実行していて、その中から、Runコマンドで他のアプリを実行すると
それは管理者として起動します
これを管理者ではないユーザーとして実行することってできますか?
Win7なのですが、管理者として実行した場合とそうでないときとで、アプリの動作が違うのです >>732
Run, Explorer "○○.exe" AutoHotKey - Changes & New Features
1.1.26.01 - July 16, 2017
Fixed RegDelete (with no args) failing when A_LoopRegSubKey is blank, such as when enumerating keys directly under the root key.
Fixed RAlt/LAlt:: sometimes failing to prevent menu activation after the user alt-tabs away from a window and reactivates it.
Fixed SC → VK translation for multimedia keys, CtrlBreak, Pause, LWin and RWin, with the exception that multimedia keys and CtrlBreak are still translated incorrectly on Windows 2000 and XP.
Fixed VK → SC translation for multimedia keys, CtrlBreak and Pause.
Fixed 'Wait commands such as RunWait to log extra lines for ListLines only when necessary to show that it is still waiting; that is, after resuming from an interruption which logged other lines. >>710
,,,,,..ー彡彡ミミ))))ミノ、、、、
彡彡///ミミミ)))))))ノノ)))ヽ
//////ゞゞヾノノノノ//ノヾヽ
////////////゙ヾ、ノノノノ"~///ミミミミミミ
r//////////// ミミミヾ)))))
ノノノ///////// ミヾ)))))))))
ノノノノ//////// ミ)))))))))ノ
((//////////.,,、、,,, )( .,,,,,,、、 ヾノノノノノノ
ノノノ.((((/////ノ. ヾ゙ゝ // ./''" ノノ((((((ノヾ
ノノノ///////ノノ.∠ ●ヽ /●`ヽ、 ((ヾヾヾヾ)
((((((((((///. ` ー~ ` | | `ー ´ |ヾヾミミヽ
((((((((((/ r.| .,,.- l l 、 .|^/))))))))
((((((((((.\_| / ( (._) )\ |/)))))))))
((((ヾヾヾヾ .l .f ,,,-===.v===-、ヽ .iノノノノノノノ
λヾヾヾヾヾヽ l.`、.LlLlLlLlLl 7´.l ./ノノノノノノノ この、ハゲーーーっ!
((ノノノノノノノノ.ヽ ゝ ゝ 二二二ノ ./ ./ノノノノ
λヾヾヾ| ヽ\ /./ノノノノ
\\.| ヽ.ヽ、 ノ/ \
/ ヾヽ \```ー.´´/ \ 何日も経ってから怒り心頭でAA荒らしとか惨めなやつだな マウスカーソルを動かした時に任意のコマンドを実行したい場合
MouseGetPosとSetTimerでカーソル位置の監視を繰り返すしかないですかね?
もし可能ならSetTimerを使わずにマウスの移動を検知する方法があったら
ご教示お願いします TrackWheelがDllCallでマウスフックしてRegisterCallback()でゴニョゴニョやってるな
難易度的にはSetTimerより格段に難しくなるけど効率優先でがんばりたいなら参考にしてみては
尚古いスクリプトなので AHK U64版では動かない模様
https://sites.google.com/site/agkh6mze/trackwheel >>741
レスありがとうございます
私の知識量ではどうやら難しそうですが、それが分かっただけでも感謝 F1::menu,私のメニュー,Show
sc07B & i::send,{Blind}{Up} ;無変換キーとiで↑
sc07B & k::send,{Blind}{Down} ;無変換キーとkで↓
menuコマンドでメニューを出した時その選択にカーソルキーを使いますが
その時ホットキーが使えないのは回避できませんか・・・・? >>740 >>742
透明なウィンドウを最大化で描いてOnMessageでmousemoveを拾う方法なら昔試した事がある。
https://lumi4.blogspot.jp/2017/08/autohotkey-detect-mousemove.html
参考にどうぞ。
・・・・という訳で>>743もよろしくお願いします。 >>743
とりあえずってことなら、menuを出すスクリプトとカーソルキー機能のスクリプトを別AHKにして、
その2つを同時に常駐させるとmenuでカーソルのホットキーが使える。 >>743
単なる好奇心で聞きたいんだけど何のためにわざわざそんな面倒な操作するの?
テンキーレスやノートpcのキーボードでもカーソルキーなんて付いてると思うが…
それをわざわざ無変換+IとKって押しにくい位置だし、まだ無変換+WやSとかの方が
押しやすいだろうに ホームポジションで入力できるからじゃね
それにi,kとw,sはあんま変わらん気がするが
w,sは薬指だからむしろ若干押しづらいような JKLI のカーソル移動は俺も使ってる。(無変換+じゃなくて、変換+だけど)
右手のホームポジションで操作だから使いやすいよ。 で結局この問題は、ポップアップメニュー表示中は割り込みできない仕様なの? >>747-748
それなら無変換じゃなくて変換+JIKLの方が押しやすい
修飾キーのためにわざわざ両手使うの? ホームポジションなら修飾キーは英数と逆の手で押すのが基本だし楽だよ
そうじゃなくてもそんなもん好みでいいじゃん >>751
そんな基本は聞いたことなかった
ShiftやCtrl使うときもいつも片手だわ
まあ両手で押したい人ならそれで納得だけど
無変換+IKとか片手だとすごく押しにくいなーと思って聞いただけなので ブラインドタッチしてるかどうかの違いだろ?
>>5
のテンプレにあるくらい一般的だぞ
むしろここで何でそんなの使うの?
って質問が出た方がびっくしたわ >>753
俺も当然ブラインドタッチしてるよ
でも修飾キーで両手は使わなかったと言うだけ ID:UMIF7cfz0は丁寧に答えて尊敬するわ
俺はイラッとしてきた・・・・ >>745
ありがとう
別AHK化ついでに抜本的に自分のコードを再構築することにした
現在まで拡張を重ねて1200行
複雑で重くなりメンテも機能追加も困難になってきてる
使用頻度の低い機能や高速応答性を求めない機能は外部化してその都度Runで呼び出す形にしよう
しかし、本格的なプログラミング経験もないし、改築・増築を繰り返して膨らんだコードは汚くなるなorz
リファクタリング頑張るぞー
>>749
そうみたいだね 1200行とか長すぎバカス
と思って自分の見たら1800行だった 変換・無変換キーは同じ修飾機能にしてるわ
修飾キーは基本的に逆の手派だけどこれって育った文化で違いそう
右手をマウスに置く時間とかCtrlキーの位置や押し方とか >>745
キーボーでメニューを選ぶ時はカーソルキーで選ぶのも良いけど、
メニュー名1(&a)
メニュー名2(&s)
メニュー名3(&d)
&でショートカットキーを作って選ぶのも便利だと思うよ。 自分の場合、カーソルキーはShiftやCtrlとの組み合わせも良く使うから、
右手で変換+JKLI 、左手でShiftとCtrl を押してる。
これを全部同じ手でやるのは辛い。 うちはshiftもctrlも左小指固定だな、英数が左よりなら片手で右寄りなら両手
右手はマウスやカーソルキーへの持ち替えでホームにいない事も多いからか
修飾キーを右で押そうとは思わんかった
なので変換無変換もIMEのためだけのキーだわ 変換はエディタやIDEのようなキーボード主体のアプリで
アプリ固有のショートカットを割り当てるのに使ってるな
汎用操作を割り当てると混乱するしマウス操作が面倒になるので割り当てない どんどん便利にカスタマイズか、自分以外のパソコンを使う時に困らないように控え目にカスタマイズか。
そういう葛藤がある人は多いんじゃないかな。 前に変換+hjklでカーソルキー移動、かなカナ+hjklでマウスカーソル移動
としようとしたら流石に右手の使いすぎだと思ってやめた 変数 a = 123
とあって、その頭に半角スペースを1つつけたいのです
b = " "%a%
b := " "%a%
b := " " . %a%
b = %A_Space%%a%
b := %A_Space%%a%
b = {A_Space}%a%
b = {Space}%a%
どれもダメです a:=123
b:="` " + a
c:="` " + a + "` "
msgbox,a:[%a%],b:[%b%],c:[%c%]
cの結果に納得がいかない >>769
ヒントありがとうございました。 式は知ってたのですが
b := " " . %a%
とやってダメだったので悩んでたのですが
b := " " . a
でできました。ほんと悩ましいwww
%a%を使っては出来ないのかな >>770
b:="` " + a
ではなく
b:=" " + a
で出来ました
ダブルクオーテーションで囲めばエスケープはしなくてもよさそう >>770
cやってみました
c:=" " + a + " "
でも空になりますね。 これは私も納得いかない >>770
ああすいません。 私の勘違いです
文字列の連結はピリオドです
c:= " " . a . " "
でうまくいきます >>771
「:=」の式だから、%a%が展開されて「変数123」を参照するからです
a=123
aa=a
b := " " . %aa%
これだとちゃんと期待通りの動作になるはず >>775
そういうことですね。ありがとうございました
式をつかわずに代入=で%a%を使ってする方法はないのかな >>777
なるほど、そういうことだったんですね。 これがオンになってたから=代入だとわざわざ自動でカットされてたんですね
これも悩ましいなあw 初心者ですがこの関数作って下さいよろしくお願いします
key := showcontextmenu(
"
ファイル(&F)
編集(&E)
表示(&V)
ツール(&T)
ヘルプ(&H)
")
if key=f
if key=e
... 釣りならよそでやって
本気で言ってるならまず自分でやれ おれもこの機会に無変換+IKJLで上下左右設定して
UとOにもPgUpとPgDnを設定したんだけど
HomeとEndも同様に設定してる人いたら割り当て聞いてみたい
イメージとしては上の7,9が順当な気がするけど
下のM,[.]の方が押しやすいかなとかY,Hもアリかなとか迷ってる >>781
単体のHome,End,PgUp,PgDnやNumLockオフ時のテンキーと合わせたくなるから
umo.=Home,End,PgUp,PgDn
にしたくなるumo. >>782,783
なるほどありがとうー
すまんIME的にAとEっていうのの意味がわからなかった
umo.いいかもしれんね みんなにオススメしたいんだけど無変換+SpaceにBackSpace割り当てると最高に捗る 無根拠な独自ショートカット考えだすと
後で忘れたりソフト固有のものや慣例的なショートカットと混同したりで困るぞ
でもそこでBSの代わりならとH持ち出すとjkhlと被るんだよなぁ……
仕方なくDにDelあててるけど 無変換と組み合わせる分には他のソフトとバッティングはしないし
自分の指の動かしやすさ優先だなあ みんなにオススメしたいんだけどサイド12ボタンマウスにAHKで機能割り当てすると最高に捗る プログラマブルなゲーミングマウスもいくつも使ったがどのボタンになに割り当てたか忘れるし
ショートカットキーはキーボード上で完結しないと使いづらいんだよな
まあトラボ使いだからマウス鬱陶しいてのが一番の理由だが 体で覚えればいい
キーボードのブラインドタッチと同じ 割り当てたキーは無変換+F1で即確認できるようにすれば良い
自分はTiddlyWikiの"メモ帳/ショートカット"のようなページをセカンダリモニタに表示して
いつでも確認、編集できるようにしてある
あとはifwinactiveごとにこんなのを仕込んですぐエディタで開けるようにしておくとか
#IfWinActive,ahk_exe myapp.exe
+!Q::EditMe(A_LineFile, A_LineNumber) 確認する時間すら惜しいのがキーボードでのショートカットなんだがなぁ…… いちいち確認なんてしねえわw
50くらい自分で機能割り当てしてるが余裕で覚えてる 常用してる内はいいけど
何かの拍子で1〜2ヶ月くらい操作しないでいると確実に忘れてるから困る 50個ものショートカットを満遍なく常時使い続けるほうがレアケースだがなあ
特定アプリ向けにホットキー設定したはいいがそのアプリの使用頻度自体が下がる時期とか普通にあるし >>798
おれはもうほとんど忘れた
おかげでShift+Del相当のコマンド入力してしまった 忘れてしまったショートカットは、あんまり使わないショートカット。
そういうのをどんどんリストラすればスッキリするよ。 すみません、お尋ねします。
IniReadだと変数が改行されません。
HENSUU.ini, INIの中身
[INI]
HENSUU=1111`n2222
IniRead, HENSUU, HENSUU.ini, INI, HENSUU
msgbox, %HENSUU%
IniReadせず、同一スクリプト内で変数を指定すると改行されます。
HENSUU=1111`n2222
msgbox, %HENSUU%
IniReadでも変数を改行するにはどうしたら良いでしょうか?。
よろしくお願いします。 Transform,HENSUU,Deref, %HENSUU% >>804
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
変数が変形しました!有難うございました!。 宣伝なんですがToMoClipていうソフトにキーの同時押しってのがあって
HJ,UJ,JK,NMそれぞれ同時に押す(押しながらでなく)ことで方向キーを押したように設定できます
お試しあれ AutoHotkey以外の常駐ソフトをなるべく入れたくない人達のスレでそんなことを言われてもなぁ… わかる俺も入れたくなくて簡単なことは自ソフトで完結させようとしてる
スレチは重々承知申し訳ない TomoClip懐かしいなまだ現役なんか
そういやTomoClip起動用ホットキーって設定したまま忘れてたわ
クリップボード履歴は特定の作業中しかいらないから常駐させずAHKから起動かけてたんだった
でもたぶん10年単位でもう使ってないわ
さすがに外すか Autohotkey単体に機能付け足していったほうが軽かったりするからなぁ >>811
趣味ですから
今マウスジェスチャー作ってるんだが20日かかる
でもこれでトリガー側はキーもマウスもAHK越えたな使ったことないけど 過疎ってても見てる人はいるんだな2分ちょい返信すごい
>>813 どうでしょね
スレチついでに次バージョンで同時キーでもキーリピートこれに気づけたのはここのお陰です スレチと言われているのにもかかわらずここでスレチついでにと言っているあたり頭おかしい
普通の感性なら自粛すると思うんだ ふぅ・・・
またしても神スクリプトを編み出してしまった
WheelDown::
MouseGetPos,x,y
if x<32
Send,^{Tab}
else
Send,{WheelDown}
return
WheelUp::
MouseGetPos,x,y
if x<32
Send,+^{Tab}
else
Send,{WheelUp}
return >>819
すげーなお前1000年に一人の大天才だな世界一の発明家になれるよ >>819
すみませんが神造言語は一介の人間には読めません。なんと書いてあるんですか? >>819
これってFirefoxとかで使うってことか
普通には画面のスクロールダウンアップだが、左端にマウスを持って行ったときは
タブを変更していくってこと? #If IsCursorInsideRect(0, 0, 32, A_ScreenHeight)
WheelDown::Send, ^{Tab}
WheelUp::Send, +^{Tab}
#If
IsCursorInsideRect(Top, Left, Right, Bottom) {
MouseGetPos, X, Y
Return (Top < Y && Left < X && Right > X && Bottom > Y)
}
#If を使うと少し簡素化できる v1.1.26.01 を使っています。
流行らせるページ管理人様のFileLaunchを以下のコマンドで実行したところ
エラーで起動しませんでした。
AutoHotkeyU64.exe Lib\FileLaunch\FileLaunch.ahk
----
Error: Invalid Option.
Specifically: Delimiter
:
---> 089: Gui,add,ListBox,Multi -E0x00000200 w400 h300 vLst Delimiter
:
----
Guiコマンドのオプションはバージョンに寄って違いがあるのでしょうか?
すみませんが、教えてください。 違いはある、というか新しいバージョンでオプションが追加されることは結構ある
古いオプションが使えなくなるのは、Guiコマンドについてはなかったような気がする
(古いコマンドが使えなくなることも、AutoItの残り香的なやつを除けば、基本的になかったはず)
流行らせるページのは昔のAutoHotkey無印用に作られたやつだから
AutoHotkeyA32.exeで動かすか、AHKファイルの文字コードを変更してやるとちゃんと動くかも
ただ>>824のはDelimiterオプションで何も指定してないのがエラー元じゃないのかな エラーチェックが厳しくなってこれまでスルーされてたエラーが引っかかることはある
上の例だとL氏が引き継ぐ前の旧バージョン(1.0.48.5)では引っかからなかった
とりあえずエラーメッセージにあるDelimiter以降削ったら最近のAHKでも起動はしたが
流行らせるの頃はANSI版前提で作られてるのでA32.exeで実行したほうが無難かもしれない
あと試す前にタスクマネージャで余分なAHK起動してないか確認したほうがいいかも
うちではエラー出た後にプロセス状態で居座ってた >>825
メッセージ省略されてるけど 元ソースだと指定はされてる
> Gui,+Delimiter`n
> Gui,add,ListBox,Multi -E0x00000200 w400 h300 vLst Delimiter`n,
ヘルプ見るとGui,addでDelimiterオプションは存在しない
Delimiterの指定は上行のGui,+で行われてるので消しミスかも 申し訳ありません。
エラーメッセージを手打ちでしたので、不要と思い一行上の
> Gui,+Delimiter
を省いてしましました。
AutoHotkeyA32.exe で起動しましたが、状況変わらず。
*.ahk をUTF-8に変換したところ、今度は以下のエラーとなりました。
---
Error: Call to nonexistent function.
Specification: Scan(GetRealPath(dir),ptn,ld,ep,dep))
:
---> 641: UpdateIndex(dir,Scan(GetRealPath(dir),ptn,ld,ep,dep))
:
---
これら関数はFileLaunch.ahk内に定義されていると思うのですが....
>>827氏の
>Delimiterの指定は上行のGui,+で行われてるので消しミスかも
とは、どの部分のことか教えてください。 エラーの原因については>826に書いたけど>824のエラーメッセージにある通り
89行目のGUI,add のDelimiterオプションが不正なのでそこを削ればいい >>825,826
お陰様で無事起動できました。
ご親切な対応に感謝いたします。ありがとうございました。 ホイール神のやつ応用がいろいろできそうだ ありがたいヒント キーを押している間
一度のみ実行して
次押されるまで待機させたいのですが
Returnする前にSleep長めにして押してる認識を解除するしかないでしょうか >>832
具体的に何をしたいのか良く分からないんだが
「キーを押している間」って話ならKeyWait使えば何とかなるんじゃね キーリピート防ぎたいって話ならKeyWaitでいけるっぽい 分かりにくい文面ですみません
>>834さんのkeywaitでできました >>835
先に教えてくれた>>833に失礼じゃないか ホットストリングスのキーの入力間隔指定がうまくいきません
いろいろ試してみたんですがどれもダメです
#Hotstring K1000
#Hotstring K 1000
#Hotstring K,1000
#Hotstring Kn1000
#Hotstring Kn 1000
#Hotstring Kn,1000 200%や125%といった画面の拡大率(スケーリングレベル?)の取得は可能でしょうか? >>838
これで実験してみて
RegRead,p,HKEY_LOCAL_MACHINE,SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Fonts,LogPixels
MsgBox,%p%
なんか、96が100%で、120が125%で、144が150%らしい。 >>839
192と出ました。
2560x1440 125%なのですが。 >>840
RegRead,p,HKEY_CURRENT_USER,Control Panel\Desktop,LogPixels
MsgBox,%p%
これも同じかな? >>841
今度は何も出なくなりました。
ダイアログは出るのですが、何も文字がない状態です。
p に何も代入されていないか空文字が入ってるようです。 >>838-844
ふーむ、A_ScreenDPIなんてものがあったのか。
100%のときに96、125%のときに120という値が返るのはWindowsの仕様。
そもそもWindowsで扱っているのはDPI値で、たとえば文字のポイント数と
ピクセル数との相互換算にはこの数字を使う。
100%とか125%とかいうのは、コントロールパネルが便宜的にそう称しているだけの値。
というか今のご時世、「50インチで1920×1080のテレビチューナーつきディスプレイ」と
「9インチで2560×2048のタブレット端末」とが両方とも珍しくないんだから、
倍率だけ取得してもあんまり意味ないよ。 あれな
ユーザーが見えるところにdpiで表示してくれないのほんとわかりにくい >>844,843
希望する値が取得できました。
お騒がせして申し訳ありません、ありがとうございました。 AHKを使って、あるウインドウを指定してそれの指定した場所に色を塗る、とかは出来ませんか
既存のソフトがあって、そのある領域に色を付けたらとてもみやすくなるのにと思ったりすることがあるので
ウインドウを指定して指定した領域に色を塗ったり線を引いたりが出来ればいいのにと思うことがあるのですが
あるいはそれが出来るソフトはないでしょうか >>848
Gui, Add, Pictureでタイトルバーなしクライアント領域透過で背景透過のpng画像をその位置に置くか
特定の領域だけ隠したいだけなら
WinSet, Region
でもやれると思う
例
WinSet, Region, 0-0 300-0 300-300 0-300 0-0 100-100 200-100 200-200 100-200 100-100, A
Sleep, 5000
WinSet, Region,, A ; Restore
return Firefoxをバージョンアップしたらrunで複数のURLを開こうとすると一つしか反応してくれなくなりました
sleepで時間をおいて開くようにしていますが何か良い方法は無いでしょうか >>850
環境と状況と問題のスクリプトが書かれていないのだけど? >>849
なるほど、そういう方法ですね
ウインドウのIDから直接そのウインドウにお絵かきすることはさすがに出来ませんか
Dllとか使ってもいいのですが Win10のupdateを高速化・安定化するスクリプトください >>852
MouseGestureL(.ahk)でジェスチャーの軌跡を描画できてるから、
いわゆる"お絵描き"は可能と思われるのでスクリプト解析してみては? PixelSearchは指定した色が存在するときにヒットしますが
逆に指定した色が存在しないときに、座標を取得することはできますか?
PixelGetColorをLoopしてやってみましたがかなり遅かったので・・ 失礼しました具体的に書きますね
ブラウザ上でyoutubeの動画が再生されている座標(とりあえずX座標)を取得したいです
背景が0xF1F1F1ですので
左から色を検索して、0xF1F1F1ではなくなるX座標を取得すればいいと思いますが
それができないです >>857
flash playerの現在位置を知りたいってことだよね?
だったら、ControlGetPos でflash playerのControl class名(aPluginWinClass1)を元に左上角の位置が取得できる
あとはSetTimerで回しとけばスクロールして場所が変わっても常に最新の位置が取得できる >>858のレス取り消し
あーとんだ間違いを犯してしまった
今はhtml5なんだっけか >>858
そうですplayerの現在位置です
情報有難うございます Array := Object()
Array[0] := [1,2,3]
Array[1] := [10,20,30]
Array[2] := [100,200,300]
こんな感じの配列のそれぞれのキーの値を1つずつ取り出して
1,10,100、1,10200、1,10,300、1,20,100……
という全ての組み合わせが欲しい場合、どういう処理をすればいいですか?
上の例ではキー3つ、値3つずつしかありませんが、実際に処理したい内容は
配列のキーの数は1〜13、1つのキーに含まれる値は1〜25程度あります。 >>861
msgbox, % Array[0,1]
msgbox, % Array[1,2]
msgbox, % Array[2,3]
他にもっと良い方法があるのか分からないが、後は自分でガンバってね >>862
すまん、なんか質問の答えじゃなかったな
単に数値を引っ張り出しただけだったorz 書き込めるようなのでお聞きしたいのですが。
ローカルにあるファイルを書き換えたり、開いたりしたくて
・・・・(動作記述) C:(以下フルパス).test.txt
・
・
・・・・(動作記述) C:(以下フルパス).test.txt
・
・
・・・・(動作記述) C:(以下フルパス).test.txt
のように同じファイルを扱う記述を何回かくりかえすのですが
場所を変えるたびに何か所も書き換えるのが面倒なんで
一か所変数にフルパスを入力して以下そこを参照してって構造にしたりできませんか? なんのコマンドか知らんけどファイルパスはたいてい変数使えるでしょ ありがとうございます
今は記述見られる環境にないのですが、fileappendとRunだったと思います
具体的にどのように記述したらよろしいのでしょうか?
fileappend,Text,C:・・・.test.txt
Run,C:・・・.test.txt WikiのFileAppendのページの例の通り普通に変数に入れて使うだけだが…… >>867
答えもらったら再質問は最低限調べてからにしなよ
何度も書いてるけどここはドンピシャのコードもらうためのスレじゃないから 調べてはいますけど、今調べても試す環境がなく
試せる環境に戻るとここで質問ができない環境になるんでより精度の高い回答が欲しかったんです Win10になってからAHKいじる気起きなくなってきた(そもWin10自体いじりたくない) classNNやウィンドウハンドルで区別できないボタンを押すのに、座標を指定してクリック以外の方法で押す方法ないですか? 近くのボタンからtabや矢印キーで移動もできません >>861
k:=Array.MaxIndex()
a:=[]
f(0)
f(i){
global Array,a,k
Loop,% Array[i].MaxIndex()
{
a.Push(Array[i][A_Index])
if (i < k)
f(i+1)
else
ここに来るごとに各組み合わせが取れる(配列a)
a.Pop()
}
}
適当に書いたが上手くいってるように見える
ほめられたやり方なのかどうかは知らない >>870
そのものずばり 変数 って回答もらってるんだからそれ以上の精度の回答なんてない思うが…
あなた過去にも咀嚼しないで再質問繰り返してる人だよね?
言っちゃ悪いけどこんなの 僕は自分で調べる気一切ありません て宣言してるのも同じだよ?
1. 質問する前にwikiの スクリプト仕様 を読み返す
2. 回答もらったらwikiの検索BOXにキーワード入れて検索
これが実行できないのならAHK使うの諦めたほうがいいよマジで
悪いけど質問していいレベルの事柄ですらない >>875
こういうのさらっと書けちゃう人すごい……ありがとうございます! スルーすりゃいいのにわざわざ嫌味だけ置き土産してくやつもどうかと思うわ 嫌みを言ってストレス解消のために
ここにいる人だから
その人の存在意義を否定しないでw >>873-874
他にはボタンのスクショを予め撮って置き、それをImageSearchで捜す
あとは、例えばボタン文字列が「開く(O)」みたいになってたら、send,!oでも行けそう
もっと有るかもしれないけど↑以外自分は分からない
そもそも何で座標を指定するやり方が嫌なのか分からないが、
もし、該当のボタン含むウインドウが表示する度に場所が変わるってことなら、
CoordMode, Mouse, Window で基準をウインドウ左上の角にすれば良いだけだと思うが・・・
でも、ボタンの位置がコロコロ変わるってんなら話は別で、やっぱ上記のやり方かなー 英語キーボードなんですが左altに無変換を同時に割り当てることってできます?
左altを無変換に割り当てたところalt+f4で閉じるが使えなくなったので
できれば慣れてるやり方で使えればと思いまして >英語キーボード
無変換の付いていない欠陥キーボードを窓から投げ捨てるのが一番手っ取り早い >>885
まず、レジストリ系のキー変更アプリで、左alt を f13 キーにしておく。
そして、↓のように書けば良いんじゃないかな。
f13 & f4::Send,!{f4}
f13::Send,{sc07B}
装飾キーはそのまま使うとたまに誤動作するから。 alt+F4の他にもaltキーなんて多用するんだからそもそも左altを無変換にすること自体が無謀だがな >>886
ノートなんで
>>887
やってみます。ありがとうございます わざわざPCを不便にするためにAHK使う人もいるんだな QorEを押したらもう一度押すまでおしっぱにされているスクリプトを見つけたんですが
シフトを押した場合おしっぱを解除したいんですが下記にどのようなコードを追加すればいいでしょうか?
https://autohotkey.com/boards/viewtopic.php?f=19&t=32339 keywaitの代わりにloop+getkeystate
追加というより書き直しになるんじゃね ahk 64bit unicode版 / windows10
UTF-8で保存すると文字列の閉じquoteの手前が「し」で終わるとエラーになります。
aaa := "かかし"
UTF-16だと無問題
これはバグですよね?? 指定時間に実行するタイマーを作りたいのですが、
ミリ秒を取得することはできますか? 多分簡単な内容かも知れませんが宜しくお願いします。
SPLASHとかてにWINSET等の方法又は 最前面に固定したアプリ又は画像ウィンドウの領域を反応させないで
表示させたまま下のウィンドウの操作をしたいのですが組み方としてはどうすれば良いんでしょう?
WinSet, AlwaysOnTop 等では画像分のアクティブになってしまうようでして。 >>901
透過ウィンドウのことだね
Gui, Add, Edit, h500 w500
Gui, Show, NA, TEST
WinSet, Transparent, 50, TEST
Gui, +AlwaysOnTop +E0x00000020
; WinSet, AlwaysOnTop, On, TEST ; 最前面
; WinSet, ExStyle, +0x00000020, TEST ; WS_EX_TRANSPARENT(透過ウィンドウ)
return >>902
あーーー!!!
コレです!
これだけわかればもうOKです。
有難うございます。こう指定すればよかったのですか…勉強になりました。 すみません質問いいでしょうか
やりたいのは アクティブなら最少化、非アクティブならアクティブに、起動してないなら起動です
他のプログラムではうまくいくのですがExplorer(ブラウザじゃない方)が起動しないです
" Run,C:\Windows\explorer.exe"以外の書き方ってありますか?
windows7です。よろしくお願いします
#E::
Process, Exist, explorer.exe
If (ErrorLevel <> 0)
{
IfWinActive, ahk_class CabinetWClass
{
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
}
Else
{
WinActivate, ahk_class CabinetWClass
}
}
Else
{
Run,C:\Windows\explorer.exe
}
Return エクスプローラのクラスはCabinetWClassの他に
ExploreWClass というのも(XPの頃は)あった
win10とか最近のOSはわからんけど
上手く行かないエクスプローラのクラスを調べなおしてみては ウインドウを1つも開いてなくてもexplorer.exeは常に起動しているものだけどそこを勘違いしてる? >>905
>Process, Exist, explorer.exe
>If (ErrorLevel <> 0)
だとどうやっても"Run,C:\Windows\explorer.exe"の行にはいかなかったので
IfWinExist , ahk_class CabinetWClass
にしたら動いたよ ところで話は逸れますがElseって書く必要あるんですか?
if{}で囲ったらElseって書いても省略しても挙動は変わらないですよね?
それとも何か違いがあるんでしょうか? >>910
やっぱりそうなんですね
ありがとうございます elseはifじゃないときの処理を書く
ifの時にはしたくない処理をelseに入れる
例)
Aが1の時は"OK"と表示する (if)
そうじゃない時は"NG"と表示する(else) >>912
はい
でも{}で囲ったらElse無くても同じ意味ですよね
{}の外は"そうじゃない時"になるので 俺なんかelse ifで12分岐してるで
自慢にもなりゃしないけど { }の外はもうifに支配されないので
そうでもそうじゃなくても実行される
{ }の中にreturnやgoto突っ込んで強制的に行き先変えてる場合は別だが >>907
失念してました
>>908
ありがとうございます解決できました
プロセスが常に起動してることを失念してたのが原因ですかね
プロセスじゃなくウィンドウが存在するかどうかで処理すればよかったのですね
>>909
ご指摘どうもです
上のElse 1つ余計で要らなかったですかね?
#E::
IfWinExist, ahk_class CabinetWClass
{
IfWinActive, ahk_class CabinetWClass
{
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
}
{
WinActivate, ahk_class CabinetWClass
}
}
Else
{
Run,C:\Windows\explorer.exe
}
Return >>914-916
ああ、なるほど
Returnを書いてない場合はElseが必要になるんですね
自分はいつもReturn付けてたので複数分岐してもElseは全く使っていませんでした >>917
Elseを使わない場合はこうですね
#E::
IfWinExist, ahk_class CabinetWClass
{
IfWinActive, ahk_class CabinetWClass
{
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
Return
}
WinActivate, ahk_class CabinetWClass
Return
}
Run,C:\Windows\explorer.exe
Return
書き方の違いだけでElse使っても同じ動作させられるので好みだと思いますが >>919
なるほど Returnを使うのですね
でもやっぱりElseがある方が条件分岐してるというのが分かりやすいかな
Elseを"そうでない場合は..."という感じで使ってるので。 >>919
うーん…
それ己が好きで使う分にはいいかも知れんけど人に薦めないほうがいいような
出口をむやみに増やす書き方は好みと呼ぶには変態すぎる
多重loopの深い階層から一気にアボートしたい場合時は自分も中途return使うけど基本的に変則処理だから
>>917
そこのelseは必要
行数減らしたいなら1行しか処理内容がない場合の{ }は省略可能
#E::
IfWinExist, ahk_class CabinetWClass
{
IfWinActive, ahk_class CabinetWClass
PostMessage, 0x112, 0xF020, , , ahk_class CabinetWClass
(else)
WinActivate, ahk_class CabinetWClass
}
Else
Run,C:\Windows\explorer.exe
Return >>921
別に人に薦めてるわけじゃないですよ
ただ初心者向けのwikiのサンプルコード集とかも{}の中にReturnを付けてElseを使わない書き方が
多かったので、たまたま自分はそれに慣れてしまったというだけですので
完全に独学なので何が変則とか分からないですしね >>919のコードも変則でも変態でもない
好きなように書けば良いんやで マウスのサイドボタン+ホイール上下で
firefoxのyoutubeの音量を調整するために下記のように設定したのですが
;Firefox音量調整
#IfWinActive ahk_class MozillaWindowClass
xbutton1::Send,^w
xbutton1 & WheelUp::send,{Up}
xbutton1 & WheelDown::send,{Down}
#IfWinActive
初めのうちは問題なく動作するのですがしばらくすると音量の上げ下げを受け付けなくなります
その際も xbutton1::Send,^w の方は受け付けています
その後、Reload This Script すると再び動作しますがしばらくするとまた
マウスの2ボタンを使ったスクリプトは受け付けなくなります
firefoxの問題かとも思ったのですがIEでも同じ挙動になります
どうすれば安定して動作するでしょうか? >>924
参考になるか分からんけど、自分もwheel操作にキーを送るスクリプト(>>819と同等の)使ってるが、
以前、「マウス関数群 (MUS.ahk)」ていう関数を使う別のホットキーのコードも併記していたら同じようになった
でも、MUS.ahk使うコードが不要になり、この関数を使わなくなったら以降同現象は発生しなくなった
※MUS.ahkが悪さしてたというより自分の書き方が悪かったのかもしれないので念のため 質問とは関係ないけど、うっかり閉じそうなキー設定だな >>925
ありがとう
自分は他のスクリプトは併用していないし念のため32ビットと64ビット両バージョンで試したけど
だめだった
仕様だと思って諦めます
>>926
そうなのよ、急に ^w だけ認識するようになって音量調整しようとしたらてタブが閉じるようになった 今頃気づいた
自分使ってないので分からないが、firefoxってホイールクリックでタブ閉じないのかな?
ホイールクリックでタブ閉じする方が誤爆率低そうなんだが…
そうすればxbutton1は別用途で使えるようになるから良いと思うがな
スレ違いand大きなお世話ですまん うちのfirefoxはタブ閉じるよ
マウス、タブ操作関係のアドオンは入れてない
Debian sid 64bit / Firefox 55.0.2
あとMozzilaのホームページでもそう説明されてる >>928
ホイールクリックでも閉じるけどタブのとこまでカーソル持って行かずにボタン一つで
連打してがしがしタブを閉じたいので ctrl+w をサイドボタンに当ててます モディファイアキー単独押しに、誤発動したら困る機能を割り当てるのは、自分ならやらないなぁ。 マウス動かさずガシガシ閉じたいときは左手でctrl+w連打してるな
寝PCなんかでキーボード触りたくない時はマウスだが マウスに削除機能や閉じる機能を割り当てると
誤爆した時めっちゃ面倒だから割り当てない。 wikiのサンプルコード集 - 1つのキーに3種類以上の動作割り当て
どうしてもxbutton1に拘りたいなら、これでxbutton1のダブルクリックに^w割り当てれば誤爆減るかもね。
あとは、ホイールクリックに^w割り当てる手もある。(パンて言うのかオートスクロールって言うのかの機能殺すだろうけど)
firefoxの機能に「このタブより右(左)を全て閉じる」みたいな機能(拡張)あるならそれ使えば良いのに、、、とも思う。 >>935
「このタブより右(左)を全て閉じる」も使ってるけどだいたい10から20くらいのタブの間を
行ったり来たりするから細かく素早くタブを消したいのよ
誤爆してタブ消すことあるけど拡張のマウスジェスチャーで 右ボタン→← を
ctrl+shift+T に割り当ててるから一瞬でタブ復活できて読んでたページのスクロール位置も記憶してて
そこまで戻ってくれるから自分にはサイドボタンを ctrl+w に割り振るのが1番使いやすいです マウスが壊れると一気に不便になるから
サイドボタンには頼らなくなった >>937
自分の使ってるのはエレコムの安い2000円くらいの5ボタンマウスだけど
壊れて他の使うと手になじむまで結構かかるからまとめて同じの10個くらい買ってる
1個の寿命がだいたい3年くらいもつのでたぶん自分が呆けるか死ぬかUSBの規格が
終わるくらいまではもつかなw
ゲームとかで激しく使うわけじゃないから壊れたと思っても分解清掃したら復活して全然壊れないw WinActivateでwindowを指定したいんですけど、
同じアプリで2つwindowを開いてるからタイトルもクラスも同じだから、
先に起動したほうのwindowがアクティブになるんです。
後に起動したwindowをアクティブにしておいてからやっても、先に起動したほうの
windowがアクティブになってしまう……。
何か解決方法ありますでしょうか? >>939
絶対にAutoHotkeyを使って起動させると決めておけば、runの時に指定したプロセス名で自由自在じゃないかな >>940
再起動したら、2つあるうちのactiveな方のwindowを操作できるようになってました……。
よく動作が分からない……。 >>939
ウィンドウハンドル(ahk_id)で指定 >>939
ウィンドウハンドルで指定
https://msdn.microsoft.com/ja-jp/library/cc344590.aspx
> Windows では、作成されたウィンドウにハンドルを割り当て、ウィンドウが削除されると、割り当てているハンドルを解放します。
> ウィンドウが存在する限りそのハンドルは保持されますが、ウィンドウを一度削除して再作成したときに同じハンドルが割り当てられるとは限りません。
> ハンドルを変数に保持する場合は、ウィンドウが削除されるとそのハンドルは無効になることに注意してください。 >>942
>>943
ありがとうございます。またコードを改良してみます。 Win7です。 WindowsUpdateを起動するとき、
Run, wuapp
とすると、WindowsUpdateのウインドウが出てきますが、一発で更新プログラムの確認をしたいのです
今は、このウインドウを起動して、あとは手作業でマウスを動かしてやっていますが、
一発で更新プログラムの確認が出来る方法、コマンドってありますか コマンドライン調べて無理そうなら
send でtabenterするなりcontrolclickするなりしてみたら Tabキー連打からのEnterキーを送れば良いんではないでしょうか なるほど。やっぱりTABで回してからEnterしかないのかな
ありがとう Hotkey Explorerなんてツールがあるんだな
大昔に割り当てたまま忘れ去ってたホットキー発見できた MButton::
if(clickEnable = true)
clickEnable := false
if(clickEnable = false)
clickEnable := true
loop{
click
sleep 250
if(clickEnable = false){
break
}
}
return
ミドルキーを押すと連打、もう一度押すと連打解除のスクリプトを作りたくて組んだのですが、
連打解除が出来ない状態です。
どなたかアドバイスをお願いします。 ループ内sleepでMbuttonイベント内部に留まり続けてるせいで
次の押下があっても割り込み発生しないのでは
timer発生させてMbuttonはreturnですぐ抜ける
連打処理はtimerのなかでやる 他にも、
書いてないだけかもしれないが
フラグ変数の初期値がないからどのifも偽にしかならない
さらに、ちゃんと値入れたとしてもそれ何度押しても絶対trueになる 本当だ
elseifじゃないから2回if通ってるわ ちょっと確認してみます。
アドバイスありがとうございました。 clickEnable := false
MButton::
if(clickEnable = true)
clickEnable := false
else if(clickEnable = false)
clickEnable := true
loop{
SetTimer, click , 250
if(clickEnable = false){
break
}
}
return
すいません。
やはり動きませんでした。
更に助言を頂ければ幸いです・・・。 放っとけ と音の近いホットキーを並べて発音し、面白さ表現を狙っています SetTimerのヘルプちゃんと読んで
sleep置換じゃなくてloop内全部を別スレッドで起動させる
まずいのは永久loop状態でMButtonから出られないことだから 最近やり始めた。
ファイルがあればおkとか初めの?にも書いてあるし
ネットの入門ページにもEXEダブルクリックでおkとか書いてあるのに
結局ファイル取らせないと起動しない上
?ページの英語頑張ってよみつつ検索してもencordでマッチしないし
webページはバージョン違いで参考にならないから
コンテキストメニューからの生成で8Bってわかって変えてやりかたかった
win+Tへのリマップいきなりできたからイイけど
そもそも同じ場所に3つもEXEあるしソレゾレの説明が無い。
まぁこのスレの説明から恐らくU32がオススメなんだとは思うが
沢山あるネット入門ページが変なのは今までの歴史の重積のセイだと思うんだけど、
コレじゃ新規ゆとりんには流行らんわコレ
あまりに案内がメチャクチャ過ぎる >>960
ほんとそれ
> ファイルがあればおkとか初めの?にも書いてあるし
> ネットの入門ページにもEXEダブルクリックでおkとか書いてあるのに
> 結局ファイル取らせないと起動しない上
EXEファイルと同じ名前のAHKファイルを起動するだけならEXEダブクリでおk
> そもそも同じ場所に3つもEXEあるしソレゾレの説明が無い。
> まぁこのスレの説明から恐らくU32がオススメなんだとは思うが
A32→Ansi/32bit版、U32→Unicode/32bit版、U64→Unicode/64bit版
PCが32bitなら32bit版、64bitなら64bit版
基本はUnicode版推奨だけど、一部の古いスクリプトを動かしたいだけならAnsi版が都合のいい時があったりなかったり
> 沢山あるネット入門ページが変なのは今までの歴史の重積のセイだと思うんだけど、
> コレじゃ新規ゆとりんには流行らんわコレ
Unicode版の登場と、最近A32・U32・U64が同じパックで配布されるようになって入門のあたりはだいぶ信用できなくなってるけど
それ以外は昔の記事でも役に立つから…(震え声) むかし流行らせた本人はもう流行らせたくないつってサイト閉めちゃったからねぇ
正直>960が何言ってるのかよくわからんが AHK分かりにくいよ何参考にしたらいいんだよ ってこと?
アプデ追従常時最新じゃないにしろ AutoHotkey Wikiなら情報古すぎて役に立たないってことはない
AHK v2についてはα版だし解説も少ないので初心者がいきなり手を出さないほうがいい >>952>>957
勘違いだったら悪いけど、スクリプトがどういう順番で動いているかの理解がいろいろ間違ってる
@最初にミドルを押すとMButton::ラベルが実行されるけど、もう一度ミドルを押したときは実行されない(正確にはスレッドの割り込みが行われない。詳しくはThreadとか)
Aループ中にclickEnableをfalseにする処理がないから、一度目のループが永遠にbreakしない(動かないように見えるだけで、実際はずっと必死にループしてる)
BSetTimerは別にラベルが必要
やり方としては、一度のMButton::ラベルの中だけで全部終わらせるようにする
具体的にはloopの中に、2回目のミドルクリックをkeywaitかinputとかgetkeystateとかで感知してbreakする処理を入れてやる
keywaitおすすめ >>963
ありがとうございます。
まだ動かないのですが、今はこんな感じで調整してみました。
MButton::
loop{
click
sleep 250
keywait , MButton , D
break
}
return >>964
横槍だけどLoop使わないでSetTimerでクリックを繰り返せばって話じゃないの?
あとはMButton押すたびにSetTimerをオンオフ切り替えれば良いだけかと キーボードだったらキーリピート発生するから>893みたいな例でKeyWaitやGetKeyState使えるけど
マウスの場合 Send, {Lbuton Down}してもクリック連打にはならないので
MButton::スレッド内で完結させるのは難しい
KeyWait中はクリック連打させられないしGetKeyStateでBreakしちゃったら
その後の再押下までやっぱりクリック連打されない
Loopは諦めて素直にSetTimerにしたほうがいい mbutton::
keywait,mbutton
loop{
click
keywait,mbutton,d t0.25
if !errorlevel
break
}
return >>954
俺の書き方が悪かった、その調整で大体あってるけどそれだと
ループに入った後に次のミドルクリックをひたすら待って2回目のミドルクリックでbreakしてるか
あるいは1回目のミドルクリックが離される前にkeywaitの判定に入っちゃって即座にbreakしてる
どちらにしろループの1回目でbreakしてるから連打できてない
>>967の人ので動いてくれると思う
クリック
↓
ミドルクリックが押されるのを待つ、ただし250ミリ秒たったらタイムアウト(sleepの行の節約にもなる)
↓
タイムアウトしなかったら(errorlevelが0なら)、つまり2回目のミドルクリックされたらbreak
タイムアウトしたら(errorlevelが1なら)次のループへ
ループの前のkeywaitは、1回目のミドルクリックが離されるのが遅くて即座にbreakしてしまうのを防ぐ保険だと思う
あと最初に言えばよかったんだけどlistlinesかタスクトレイメニューのOpenでスクリプトの流れが見えるから
今回くらいの短さのやつならそっちを確認しながらやるといろいろ捗る せっかくだからタイマー使うやり方も
スレッドが2つになるのがあんまり好みじゃないけど、こっちの方が最初に希望してた動作に近いかな?
MButton::
clickEnable := clickEnable ? false : true
if(clickEnable = true)
settimer, clicktimer, 250
else if(clickEnable = false)
settimer, clicktimer, Off
return
clicktimer:
click
return 皆さんありがとうございました。
settimerはユーザー定義関数だったんですね・・・。
色々と勉強になりました。
ありがとうございました。 >>961
今から始めるなら基本はU32版。
これなら普通に使っている限り、Windowsが32bitでも64bitでもきちんと動いてくれる。
U64版は64bit版のWindowsにしかない機能を使うときのためのもの。
A32版はWindows95/98/Me/NT4をまだ使っている人と、
その時代のスクリプトを手直しせずに使いたい人のためのもの。
ちなみに俺の場合、64bitマシンのProgram Filesには素直に64bit版を入れているけど、
Ahk2ExeでコンパイルするときはA32・U32・U64 を3つとも作るようにしている。
…で、ほとんどの場合は持込先が64bit OSでもU32のEXEファイルだけで事足りている。
今のところ、Win64のDLLを使うとか、よほど巨大なデータを扱うとかしない限り、
「迷ったらU32版」で何も問題ないと思うよ。 AHKの書籍あったらいいのになあ
寝る前とかにパラパラ読めたらさぞよかろうに >>972
普通にインストーラーからインストールした場合64bitOSだとU64版が「AutoHotkey.exe」になって
ahkファイルもそこに関連付けされるけどU64版で何も困ったことは無いな >>971
settimerはコマンドで、settimerのパラメータにユーザー定義ラベルを指定する必要があって
ユーザー定義ラベルの代わりにユーザー定義関数が最近使えるようになった、てのが正確なところだけど…
まあ当初の目的が達成できたならよかったよ >>975
達成も何も、ゆとりの教えたがりがスクリプト丸々張っただけだがな 何回教えてもダメな子にはもう面倒だから丸ごとスプリクト与えちまえみたいな
前例作っちゃったのは良くないがな ここはそんなに教育的な場なの?
質問者のネタ提供に対して、回答者達があれこれ楽しくスクリプト例を出し合うのも良いんじゃないかな。 時間をかけてAutoHotkeyマスターになったところで一銭にもならないしな・・・ ここんとこ解答者の言わんとしてることをあまり理解しようとしないで
こうですか?わかりません!
をくり返す質問が増えたなあ、としみじみ思う
同一人物なのかも知れんけど ループの最後にbreakされたらさすがに教えるほうの心は折れるわ すみません質問いいでしょうか?
何枚か重なったウィンドウで1番裏にあるウィンドウをアクティブにするコードなんですが
グループを指定しなくても出来ますか?
特に指定や除外条件が無いので簡単に最裏を指定したいです。
;Auto-execute Section
;〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
GroupAdd, UraWindow, ahk_exe firefox.exe
GroupAdd, UraWindow, ahk_class WindowsForms10.Window.8.app.0.141b42a_r14_ad1
GroupAdd, UraWindow, ahk_class MontBlancApp_mtvGuide
Return
;〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
#x::
WinActivateBottom, ahk_group UraWindow
Return groupadd, ALL, ^(?!Program Manager$) Windows7だと
Send,+!{Tab 2} wikiやヘルプだと
>WinActivateBottom [, WinTitle, WinText, ExcludeTitle, ExcludeText]
てなってるけど
タイトル省略して WinActivateBottom だけにするとエラーになるな
v1.1.24.00 条件分岐ifだけか
switchっぽいの便利だと思うんだが何がダメなんだろ
吉里吉里とかでもif組み合わせるのメンド臭かったわ "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --app=https://translate.google.com/?hl=ja
起動してクリップボードに変更があったら^a^vするマクロ組んだら
リアルタイム翻訳ツールになってめっちゃ便利だ 無理みたいですね
+!{tab}は使えませんでした
私の環境だとAlt+Tabはモニタ毎にそれぞれで起動してるタスクを表示させてるので
全体のタスクから拾えないんです
どのみち最少化してるのまで含んでしまうし駄目ですけどね
試行錯誤しながらクラス名書き出してたらとりあえずいっぱいになったので
このまま突き進みます
ありがとうございました。 >>990
AHK使ってないので見当違いかもしれませんが除外にありえない文字列
WinActivateBottom,,,aaaaaaaaaaaaaaaaaa
とかわ >>990
DllCallでGetWindow関数を使えば、
最裏(つまりデスクトップの一つ上)のウィンドウを取得することができるかもしれない
申し訳ないがDllCallに詳しくない自分のテストではデスクトップを取得するだけに至り、その上のウィンドウ取得ができなかった
しかしGetWindowはアプローチとしては良いと思ったので提案 ただの発想なので欠陥だらけかも…
それに、うまく行ったとしてもタイムラグ激しそう
-------------------------
WinGet, OutputVar, list
で存在する全てのウィンドウを列挙し、(loopで回すのが賢い)
GroupAdd, UraWindow, ahk_id OutputVar1
GroupAdd, UraWindow, ahk_id OutputVar2
・
・
で取得した全ウインドウハンドルを次々にグループに登録し、
WinActivateBottom, ahk_group UraWindow
で実行
-------------------------
例えばこのスクリプト↑を「a.ahk」とし、
-------------------------
#x::
run, a.ahk
Return
-------------------------
という「b.ahk」スクリプト↑を常駐させる >>993は>>990へのレス
そして訂正
>で存在する全てのウィンドウを列挙し、(loopで回すのが賢い)
の(loopで回すのが賢い)は、間違い
正しくは↓
で取得した全ウインドウハンドルを次々にグループに登録し(loopで回すのが賢い)、
ですた、スマンOTZ そんなことしなくてもその擬似配列の一番最後が最後面だよ 次スレです。
AutoHotkey スレッド part25
http://egg.2ch.net/test/read.cgi/software/1505357560/
連投規制でテンプレを最後まで貼れなかったので、誰かヨロ。 あ、しまった、いま気付いたけど、
「!extend:checked:vvvvv:1000:512と次スレを立てる際は1行目に記入してください」
は>>1の頭に2回書かないといけないのか。
最近の2chは色々と難しいなあ…。 二回連続でええの?
なんか回避文字があるのかと !! みたいな このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
SLOT Results
🎰🎰🎰 Excellent!! 0
🎴🎴🎴 Gratz!! 0
🌸🌸🌸 OPPAI Ban!! 0
💣💣💣 Backingum!! 0
Win!! 1
Points 7 pts.
life time: 210日 18時間 27分 44秒 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。