■ リマップ・ホットキー割り当て
Q1:[CapsLock(英数)]や[ひらがな]キーの割り当てがうまくいかないよ
A1:OSのローカライズ段階で発生してる問題なので日本語環境だとLock系キーの動作は不定。
OS側がキーUp/Down情報が正しく返してこないのでAHKのみで対処は無理なので、
ドライバレベルでのリマップソフト(窓使いの憂鬱など)や、レジストリ変更でリマップを行う(ChangeKeyなど)を利用して
[CapsLock]を別の普段使わないキー([F13]〜[F24]など)に割り当ててからAHKで利用すると良い。
例) ChangeKeyを使って[ひらがな]を[F13]にする
AutoHotkeyで任意のキーをF13にリマップする例えばF12をF13にリマップし、スクリプトを実行)。
F12::F13
Changekeyを起動する。(
ttp://www.forest.impress.co.jp/lib/sys/hardcust/keyboard/changekey.html )
「調査」→「どのキーなのか?またはスキャンコードでキーを変更します」を選択。
F12を押すとスキャンコード「0x0064」,該当するキーは「該当なし」と表示される。(0x0064はF13のスキャンコード)
「上のスキャンコードでキー変更する」をクリックすると「変更前 (中略) 0x0064 をどのキーに変更しますか?」
というウィンドウが表示されるので「ひらがな」キーを選択。「登録」をクリックし、Windowsを再起動する。
リマップ( F12::F13 )を解除する。
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で全部にキーボードフックを適応する方法でも可。 ■ マウス関連 Q1:「RButton & WheelDown::〜」とやったら右ボタンが使えないし、 「~RButton & WHeelDown::〜」とやったらメニューがでてうざい。 A1:決定的な解決策はないけど、メニューが出たら消すって方法なら↓。 ~RButton & WheelUp:: Send, +^{Tab} SetTimer, CancelRMenu, -1 Return ~RButton & WheelDown:: Send, ^{Tab} SetTimer, CancelRMenu, -1 Return CancelRMenu: KeyWait, RButton SetTitleMatchMode, RegEx WinWait, ahk_class #32768|MozillaDropShadowWindowClass,,0.5 If (!ErrorLevel) Send, {ALt} Return Q2:キーリマップを使うとキー押下中に連打するけど、マウスボタンの場合は連打しない・・・ A2:マウスはキーリピートしないので、Loopなどを使って自前でリピートさせてください。
■ IME関連
Q1:IMEのOn/Offの切り替えや、On/Offの状態を得るにはどうすればいいの?
A1:
http://www6.atwiki.jp/eamat/pub/MyScript/ の「IME.ahk」を使いましょう。
Q2:IMEが現在文字を入力している、または変換中であるかどうかを得ることはできる?
A2:↑のIME.ahkで一部可能(IEやFirefox,MS-Wordのようにインライン化しているアプリでは無理)
■ ジョイスティック関連等
Q1:ジョイスティックのリマップがうまくいきません!!助けて
A4:ジョイスティックではリマップできないので、「Send」コマンドでキー発行してちょ
× Joy1::Esc
○ Joy1::Send, {Esc}
Q2:ジョイスティックの上下左右にキーを割り当てたいけど、JoyLeft とか JoyUp って仮想キーは無いの?
A2:無いです。AHKのジョイスティックサポートはかなり貧弱なのでプログラマブルにやる必要がある。
Q3:ジョイスティックのボタン1とボタン2の入れ替えなどはどうやってやるの?
A3:AutoHotkeyではできません。
Q4:Bluetoothリモコン等を使えたらいいなぁ・・・
Q5:過去ログを漁るといいかも。
■ 日本語の取り扱い
AuthoHotkeyは英語圏でつくられたソフトでマルチバイト文字列のことを全く考慮していないので以下の問題が起き得る。
なお、ユニコード対応されたAutoHotkey_Lでは以下の問題は発生しない。
Q1:「〜AチЯ`荏柿義形港餐汁秦疏蛋伝覗描冒輿倭兪啻嫣彖拜杼歔」を含む文字列がうまく扱えないよ
A2:これらの文字の2バイト目が、AHKのエスケープ文字である0x60[`]であるために起きる。
回避方法は以下の通り
(1) これらの文字の"直後"に「`」を記述する(例:「線形`代数」)
(2) 外部ファイルに文字列を定義して後から読み込む方式にする(IniRead、FileRead 等)
(3) #EscapeCharでエスケープ文字を別のものに変える(玄人向け)
Q2:IfInString や InStr()、StringReplaceで意図しない結果が出ることがあるんだけど、、、
A2:文字単位ではなくバイト毎に比較するだけなので、以下のような場合は意図せずにマッチしたりする。
回避したい場合は、流行らせるページの「マルチバイト文字列操作関数群」などを使う。
例) 意図しない置換
str = モノ ; 0x83 0x82, 0x83 0x6d,
StringReplace, str, str, c, c, All ; c:0x82 0x83
MsgBox, %str%
Q2:A_ScriptDir、A_LoopFileName や SplitPath の結果がおかしいことがあるんだけど?
A2:「\」記号を無条件でディレクトリ区切り文字としてファイル/ディレクトリ/拡張子を分割してしまうことによる。
対象となりうる文字:
―ソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭xx\\
これは、
>>1 にある「駄目文字微対策版」を使うことで回避できる。
■ スクリプト仕様
Q1:「a=abc」と「a:="abc"」って違いがある? / 「If a=1」と「If (a=1)」って違いがある?
A1:意味としては違いは無い。単体では、コマンド形式(共に前者)の方が「式」形式(同後者)より*少し*速い。
複数条件の場合、IfのネストよりはAND(&&)条件で「式」を並べた方が速い。
が、バッチでかなりの回数(数万↑〜)回したりする場合以外は、体感出来るほどの差はない。
Q2:配列変数やハッシュ(仮想配列)は使ええないの?
A2:「式」を使うと配列やハッシュのように変数を参照できる。
Loop, 10
value_%A_Index% := A_Index**2
Q3:テキストエディタでキーワードの色づけなどをしたいんだけど。
A3:「{AutoHotkeyのフォルダ}\Extras\Editor」に各種エディタの定義ファイル及びキーワード一覧あり
Q4:GUI作るのめんどくせ〜〜
A4:公式(
ttp://www.autohotkey.com/download/ )から SmartGUI Creator をDLして使うと楽。
Q5:AHKってマルチスレッドじゃないの?
タイマーやMsgBox, WinWait, KeyWaitを使ってるけど思った通りに動かない。
A5:「擬似マルチスレッド」です。最後に割り込んだスレッドが終わるまで元スレッドは動きません。
MsgBox、WinWait、KeyWait、Process,WaitClose などをタイマーで複数動かす時は注意。
> 要は処理系統が複数同時に走らないってこと。図にするとこんな感じ。
> → 実行中、 …:割り込み終了待ち
> 元スレッド →→→→→→……………………………………→→→→
> ★割込 ↑再開
> 割り込みスレ →→→→…………→→→→→→END
> ◆割込 ↑再開
> 更に割り込み →→→END
Q6:このスレからコピペしたんだけど、うまく動かないよ。どうして?
A6:このスレではインデントに全角スペースを使ってコードを貼り付ける事があるので、
全角スペースをタブや半角スペースに変換してみよう。
■ AutoHoekey_Lって具体的にどう違うの?
本家との違いは以下の通り
(1) ユニコード対応されているので、駄目文字(
>>6 )が無いなど日本語の取り扱いが楽。
(2) #If 任意の「式」を用いてキーマップ定義ができる
(3) メニューにアイコン表示ができる
(4) Exeやトレイアイコン描画の向上
(5) GUIのテキスト表示のレンダリング方法を変更できる(アンチエイリアスOFF等)
(6) 正規表現にマッチした文字列を引数にして関数を呼べる
(7) Send, {Asc XXXX}のUnicode版が使える
(8) 配列変数や連想配列として使えるオブジェクトの導入。
目玉は(1)および(2)。 ユーザ定義関数作って #If で使うととても便利。
例1) [Ctrl]+[Alt]+[Space]で On/Off 切り替え。変数がOnの時のみIKJLでカーソル移動可。
^!Space::KeyMap:=!KeyMap
#If (KeyMap=1)
I::Up
K::Down
J::Left
L::Right
#If
例2) トレイの時計部分でホイールを回すと音量変更
#If MouseOver("ShellTray_Wnd", "TrayClockWClass")
WheelUp::SoundSet,+5, Master
WheelDown::SoundSet, -5, Master
#if
MouseOver(win, ctrl="") {
MouseGetPos,x,y,hwnd,class2,1
WinGetClass, class1, ahk_id %hwnd%
Return InStr(class1, win) && InStr(class2, ctrl)
}
Q:[Ctrl]や[Shift], [Alt]が押されっぱなしになることがあるけど、これってAHKのせい?
もしそうじゃないとしたら、AHKで何か対処できる?
A:報告が多くありますが、よく分かっていません。以下のような報告があります。
・クリップボードユーティリティ(CLCLなど)で[Ctrl]+[V]で貼り付けを行った後に起きるという報告があります。
・Logicool(Logitec) の "SetPoint" は「クロ」との報告があります。
・窓使いの憂鬱をデュアルコア以上のプロセッサで使っている場合に起きるという報告もあります。
・VMWareが悪さしているという報告もあります。
上記のソフトはAHKより下位(物理層寄り)なので、AHKでは物理的にキーが押されているとしか分かりません。
タイマーでキー押下を監視して一定時間以上押下されていたら警告を出したり、
SetPoint を再起動などで対処していたりするようです。
ttp://pc11.2ch.net/test/read.cgi/software/1219130051/782 782 名前:名無しさん@お腹いっぱい。[sage ] 投稿日:2008/11/27(木) 01:43:58 ID:pOwnMABe0
よく分からんけど、 Ctrl とかが押しっぱなしになる。解決はよく分からんが対処法としてアラートだすようにした。
if書きたくないから、三項演算子だいすき
#SingleInstance
#Persistent
keys = Ctrl|Shift|Alt|LWin|RWin
alertDur = 3000 ;(ms)
SetTimer, Alerter,200
return
Alerter:
alert =
Loop, PARSE, keys, |
{
%
http://www1.axfc.net/uploader/A/so/ alert .= (%
http://www1.axfc.net/uploader/A/so/ }
Tooltip, %alert%
return
11 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 17:32:06 ID:3wCYCZ7UP
■自分の環境で、どのキーを押したかを調べる方法
キーボードのキーアサインや、Up/Downの状態を知りたければ、
AHKを常駐させて、トレイアイコンで右クリしてKeyHistoryを開けば、出てくる。
F5でリフレッシュされるので、調べたいキーを押した後、F5を連打する。
KeyHistoryは、キーを押した後にF5を押してリフレッシュしないと
内容が表示されない。また、F5でリフレッシュすると、F5を押した、という内容も
合わせて出てくるため、少々見にくい。
そんなときは
>>10 の
「HIDを直に読んで、キーボードやマウスの拡張ボタンの状態を得たい」
のリンク先にあるスクリプトを実行する。コンソール(DOSプロンプトウインドウ)が
でてきて、そのウインドウへ、リアルタイムにキーの上げ下げ状況が表示される。
PrintScreenや、日本語入力などの特殊キーにHotkeyを定義しようとして、
うまく動かない場合は、これで調査すると、原因を掴みやすい。
ネタ: テキスト音声合成ミドルウェア AquesTalk を使って時報
準備:
http://www.a-quest.com/products/aquestalk.html からWin版を落として、
書庫にあるAquesTalk2Da.dll を Autohotkey.exe のフォルダに置く。
以下のスクリプトを実行する。[Win]+[1]で現時刻を喋る。
#1::Talk("<NUMK VAL=
http://www1.axfc.net/uploader/A/so/ ; phrase: 喋る内容(音声記号列という名の文字列)
; speed:速さ(遅50〜300速)
; sync:喋り終わるまで待つかどうか(真偽値)
Talk(phrase, speed=100, sync=true) {
static hModule, hMe
If (!hModule) {
hModule := DllCall("LoadLibrary", "Str", "AquesTalk2Da.dll", "Ptr")
hMe := DllCall("AquesTalk2Da\AquesTalk2Da_Create", "Ptr") ; 合成エンジン作成
}
If (sync) {
Return DllCall("AquesTalk2Da\AquesTalk2Da_PlaySync", "AStr", phrase, "Int", speed, "UInt", 0, "Int")
} Else {
If DllCall("AquesTalk2Da\AquesTalk2Da_IsPlay", "Ptr", hMe, "Int") ; 喋り中なら
DllCall("AquesTalk2Da\AquesTalk2Da_Stop", "Ptr", hMe) ; 止める
Return DllCall("AquesTalk2Da\AquesTalk2Da_Play", "Ptr", hMe, "AStr", phrase, "Int", speed, "UInt", 0, "UInt", 0, "UInt", 0, "UInt", 0, "Int")
}
}
※ 上はAHKL(Unicode)用なので、本家で使う場合は "Ptr"→"UInt", "AStr"→"Str" に置換する
テンプレ以上。
>>11 >>12 の
>11 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2010/02/07(日) 17:32:06 ID:3wCYCZ7UP
とかの部分が余計なので次スレから削除よろしく。手違いスマン。
いちおつ
>>1 おつ
過去ログが多いスレだと
過去URL1 過去URL2
過去URL3 過去URL4
っていう風になってるスレもあるね
●持ちでも数スレ〜10スレだけ遡って書いてあれば、part1まで辿っていけるわけだし
いちおつ しっかしテンプレなげーなw
ankでファンクションキー割り当てたいんだけど Alt+F4の場合Send,!F4では無理みたいなんだけど ファンクションキーってどうやったら割り当て出来るの?
!{F4} ってか、もうちょっとマニュアル読もうぜ。試行錯誤も足りん。
あれ?それで行けた? まず最初に試したのがソレだったんだが無理だったんだ !{f4}だったのが駄目だったのか
右↑とか↓とかだと閉じれるが右↓↑だと設定が機能しないのはなぜ?
ank解凍してもう一度設定したら出来た
>>21 バカでごめん
ありがとう
リマップを使ってキーを入れ替えるスクリプトを書いたのですが、 困ったことにキーボードからの入力だけでなくマウスやアプリケーションが はき出したキーまでもリマップされるようになりました。 例えばa::b b::c c::aとした時、キーボードでaを押したときにbが入力され、これは希望動作なのですが アプリケーションでaをはかせたときにbが入力されてしまい、これは避けたいです。 aをはかせたい時にリマップを考慮してcをはかせるのも避けたいです。 リマップされるのはキーボードによる入力の場合だけで良く、 アプリケーションによる入力の場合(ahkのkeyhistoryでtype:aフラグが立っていた) はリマップさせたくないのですが可能でしょうか?
DllCall を使ったスクリプトを AHK64 に移植する際、どういうことに気をつければ良い? さっぱり動かないんだけどw これを機会に勉強したいので、参考になるサイトなど教えてもらえたら嬉しいです。
前スレかそのまた前スレ辺りに一通り出てたな>64に移植
流行らせるページにあった ThumbRemap スクリプトを適当に書き換えて使っています。
こいつを AHK64 で動かしたのですが、どうにも動きません。
前スレ該当レス (
>>749 ,752,755,757,762-765) を見たところ
Put/Get のところがマズそうなんですがよく分かりせん。
(参考のスクリプトはファイルの期限切れで閲覧できませんでした)
どなたか、アドバイスをいただけないでしょうか。
下記に該当のスクリプトを記載します。
オリジナルからの更新は、パッドが対応していれば 2 本指 + キーも定義できます。
(#If, TouchPad =2 以下に定義する)
; AHK_L 版 ThumbRemap モドキ / Synaptics 製タッチパッド専用 TouchInit: IBuf := DllCall("GlobalAlloc", "Ptr", 0x40, "Ptr", A_PtrSize * 4, "Ptr") OBuf := DllCall("GlobalAlloc", "Ptr", 0x40, "Ptr", A_PtrSize * 2, "Ptr") NumPut(0x01000000 | 10, IBuf + A_PtrSize * 0, 0, "Ptr") NumPut(0x01000000 | 729, IBuf + A_PtrSize * 1, 0, "Ptr") NumPut(~0 - 1, IBuf + A_PtrSize * 3, 0, "Ptr") SetTimer, TouchCheck, 10 TouchCheck: If GetKeyState("LButton") Return hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "Ptr", 0xC0000000, "Ptr", 3, "Ptr", 0, "Ptr", 3, "Ptr", 80, "Ptr", 0, "Ptr") DllCall("DeviceIoControl", "Ptr", hSynTP, "Ptr", 0x80006004, "Ptr", IBuf, "Ptr", A_PtrSize * 4, "Ptr", OBuf, "Ptr", A_PtrSize * 2, "Ptr", 0, "Ptr", 0, "Ptr") DllCall("CloseHandle", "Ptr", hSynTP, "Ptr") TouchPad := NumGet(OBuf + A_PtrSize) & 0xFF Return
; 続き、キーバインド定義 #If, TouchPad = 1 I:: Click, WheelUp K:: Click, WheelDown *J::Click("Left") *L::Click("Right") *O::Click("Middle") Click(value) { StringReplace, key, A_ThisHotKey, * Click, % "Down " value KeyWait, % key Click, % "Up " value } #If, TouchPad =2 #If
32bit符号なしが UINT だけど、全部がポインタじゃないよ。 フラグとかで使う DWORD 型はそのまま UINT のままでいい。 あそこのは相当古いし上に、コメントも少ないからかなり苦労するな。 GlobalAlloc は大抵は VarSetCapacity でいいし、 NumPut/Get, StrPut/Get を使う方がいいところも多い。
33 :
25 :2010/08/04(水) 17:34:52 ID:KpoLKvEb0
>>32 レスありがとうございます。
$a::bとしてみましたが、以前と変わらずアプリケーションからの入力もリマップされてしまいます。
スクリプト実行前
41 01E a d 0.56 A
41 01E a u 0.11 A
スクリプト実行後
41 01E h d 0.78 A
42 030 i d 0.00 B
41 01E h u 0.14 A
42 030 i u 0.00 B
Windows7のエクスプローラのリストビューにアクセスする方法ってありますか? デスクトップ以外だとうまくいかないのですが
>>25 前スレの795にデバイスID(キーボードのデバイスID)で分岐させる方法が希望通りの動作に近いと思う。
代案としてはカスタマイズや設定の全てをAutohotkeyに任せること。
36 :
28 :2010/08/05(木) 03:39:36 ID:hd9YaTXp0
>>31 そうなんですね。一部をオリジナルの UInt 型に戻しました。
ポインタ型についてもう少し勉強してみます。
不躾なお願いなのですが、どなたかに本スクリプト (
>>29-30 ) の流れを解説して
いただけないでしょうか。DllCall 内の関数は型通りに使われているようなので、
問題点はバッファー確保 (IBuf & OBuf) と NumPut/Get の使い型だと思っています。
ここから先を理解するのに難儀しており、アドバイスいただければ幸いです。
デバイス開いて(CreateFile)制御命令送って(DeviceIoControl)データ読みだし(NumGet)。 開いたものは閉じる。 命令用(in)と結果用(out)のバッファはあらかじめ確保(Alloc)しておく。 というか、書いてあるとおりだぜ。 DllCall いじるなら、 MSDN で関数を調べようぜ。
あと、Vista/7 持ってないからわかんないけど、 デバイス開くあたりが、UACにひっかかるんじゃないかねぇ。
今見たら左メニューに組み込み変数追加されてました。 ありがとうございました!
AutoHotkey64がAVGでwin32/Heurとか検出されてるんだがもちろん誤検出だよな?
オンラインで検体を送れるところがあるから送ってみれば?
43 :
25 :2010/08/06(金) 22:28:27 ID:TY2IF4pN0
>>35 うーん、一行でポンと出来るようなものではないんですね。
前スレ795は何をやっているか分からない行が多かったですが全体としては入力時にdeviceIDを取得して
比較しているだけのようなのでリファレンス見ながらやっていこうと思います。
レスありがとうございました。
>>25 >>43 こういうことかと思ったけど違うのかな
$a::
If GetKeyState("a","P")
Send, b
Else
Send, a
Return
45 :
25 :2010/08/07(土) 01:55:44 ID:tQubyQTW0
>>44 おお、GetKeyStateにPを添えるとバッチりの挙動をするんですね。
*と{Blind}を付け加えたら理想の動きをするようになりました。
レスありがとうございます。検索が足りませんでした。
a::b
41 01E h d 1.05 A
42 030 i d 0.00 B
GetKeyState
41 01E h d 0.70 A
41 01E i d 0.00 A
46 :
名無しさん@お腹いっぱい。 :2010/08/08(日) 01:11:57 ID:3q3w8jHr0
AutoHotkeyでボス(嫁)が来たスクリプトを作ろうとしているのですが Ctrlキーの二度打ちを設定するのは不可能でしょうか ^1::Send, #dでは危うかったので、御存知の方宜しく御願いします。
Lにいろいろと統合されたな。 スレが建った頃に大きく変わるのがデフォだなぁw Significant functionality developed by other community members: * Native 64-bit support by fincs. * Native COM support by Sean. * Native Unicode support by jackieku. * Support for various text encodings. * New DllCall arg types for portability. * Object-oriented file I/O.
どうせならこのぐちゃぐちゃな文法も直してくれればいいのに
なんだかなあ・・AutoHotkey64からAutoHotkey_Lw64にしたらどうもうまく動かない 何が違うんだ
#Persistent OnExit,_Exit hHookMinimize:=DllCall("SetWinEventHook","UInt",0x16,"UInt",0x16,"UInt",0,"Ptr",RegisterCallback("WinMinimizeHandler"),"UInt",0,"UInt",0,"UInt",0,"Ptr") return WinMinimizeHandler(){ MsgBox } _Exit: DllCall("UnhookWinEvent","Ptr",hHookMinimize) ExitApp いろいろ試したみたけど_Lw64だとイベントフックが腐ってる気がする コールバック呼ばれない
> Quote: > EDIT: RegisterCallback() broken: > > Thanks. I should've known there was a reason for that 'add'. Quote: New code: フォーラムで報告あがってるし、Lexikosも認識してるからすぐ治るっしょ
BREGEXP.ahkのLoadLibraryとFreeLibraryの繰り返しを無くそうと思って試してみたら メモリ使用量がどんどん上がっていってうわーと思ったのですが、 DllCall("BREGEXP.DLL\BRegFree",Int,pRExp) ↓ DllCall("BREGEXP.DLL\BRegfree",Int,pRExp) とFreeでは無くfreeとFを小文字ににしたらうまくいくようになりました。
if(flag) func1() ←ダメ else func2() ←OK なんなのこれぇ
ahkで複数行のDOSコマンドを実行することは可能でしょうか?
>>55 バッチファイルを起動するのが簡単・確実かと。
ただ、多くのケースでahkのコマンド群で置き換えが可能なはず。
リダイレクト、パイプを使うならバッチのままがいいけど。
AHK で "文字列タイピング中" という状態をフックし、その時にだけ一部のキー定義を変更したいと考えています。 1. Windows にタイピング状態を同定する機能はありますか? その場合はどのような Dll を用いればよいのでしょうか? 2. 自分で定義するとしたら、どのような方法があるでしょうか? どなたかアドバイスをいただければ幸いです。
お、やっと規制解除されたか。
>>57 (1) "文字列タイピング中"ってのをどう定義すんの?って話だとおもうけど。
■ 文字キーを押してから指定時間以内
~a::
~b::
:
~z::
~0::
~1::
:
~9::
typing := True
SetTimer, TypingOff, 1000
Return
TypingOff:
typing := False
Return
■ キャレット(文字入力カーソル)が表示されているかどうかで判断するなら
http://pc12.2ch.net/test/read.cgi/software/1265518996/53 (2) (1)で判断したのを使って AHKL の #If 使えば楽。
以下だと、グローバル変数 typing の真偽値でホットキーが有効かどうかを判断。
#If (typing)
F1::Send, Hoge
F2::SomeFunction()
#If
>>58 ありがとうございます。
最初の例がヒントになりました。
これをベースにやってみようと思います。
str = hoge if(str == hoge){ Msgbox, true`n %str% == hoge }else{ Msgbox, false`n %str% != hoge } これが何故かfalse hoge != hogeになってしまって困った。 str = hogeの場合は"を付けなくていいが==で比較する場合は付けないとダメなんだな。 Perlを嫌っている奴の気持ちが分かった気がした。
>>60 var = literal
var := expr
if (expr)
Perl関係なくね?
リテラルを引用符無しで記述できるバッチの仕様を引き摺りすぎてるからなぁ
まぁ、Lexikos曰く、リテラルの方が処理的に速いらしいけど
>>60 だと、If (〜) とした段階で式を使ってるものとして処理が動いてる。
たとえば、
str = hoge piyo ; str := "hoge piyo"
If (str == hoge piyo)
としたら、
If (str == hoge . piyo)
という様に二つの変数を結合したものとの比較を行ってることになって
hoge と piyo 二つの未定義のグローバル変数が変数一覧に出てくる。
TrackWheelってwindows7(32bit)で動かないのかな。 起動させてもプログラムが停止しましたってなっちゃうな。
自分で答え書いてるじゃん
>>63 中の人っす。実機がないんでよく分からないっす。
秋頃にPCを新調する予定なんでそれくらいになら対応できるかも。
runコマンドで、hideオプションをつけて起動したコマンドラインツールのコンソールを、 あとから表示させる方法って、ないでしょうか。 コンソールコマンドの中で、通常の処理であれば正常に終わるように作っていますが、 まれにイレギュラーな対話メッセージが出た際、hideをつけていると操作を続行できず、 ウインドウがないので何が原因で止まっているかも判断できず、行き詰ってしまいます。 イレギュラーな場面のためにminオプションで起動させると、タスクバーの余白で コマンドプロンプトのタスクがチラチラ出てしまい、これもまた目障りです。 いまは、settimerで、コマンドの実行時間を監視し、一定時間を経過しても終了しない場合は 対話でひっかかっていると判断させるようにしました。 が、問題が起きたまではわかるものの、コマンドコンソールを表示させる方法が思い浮かびません。 hideで起動させたウインドウを表示させる、うまい方法は、ないでしょうか。
show
Run, cmd.exe,, Hide, pid MsgBox WinShow, ahk_pid %pid%
更新きた Revision 54 - August 15, 2010 Fixed: RunAs in Unicode build. [jackieku] Fixed: RegisterCallback in x64 build. [fincs] Fixed: Executables failing to run on Win2k and WinXP prior to SP2. Win2k requires SP4 and updates (probably KB 816542). XP not tested. Fixed: Dialogs such as MsgBox became unresponsive when interrupted by another script thread. Message filter/workaround added in L45 had to be removed. [Bug report] Fixed: Multi-byte characters in default ANSI codepage; this was also causing a memory leak. [Bug report] Fixed: ComObject now allows purely numeric property/method names. [Bug report] Enhanced usability and capabilities of FileOpen/File object. * FileOpen's Flags parameter accepts a human-readable string of flags. * FileOpen's "update" mode has been renamed "read/write" and now creates the file if it didn't already exist. * FileOpen sets A_LastError as appropriate. * File := FileOpen(handle,"h") wraps an existing file handle in an object. * File.Seek(n) defaults to SEEK_END when n is negative. * File.Pos (or File.Position) can be used in place of Tell and Seek. * File.Pos, File.Length, File.AtEOF and File.__Handle can be used without empty parentheses(). * File.Length can be set, as in File.Length:=n. * File.ReadNum() and File.WriteNum(n) read or write a number, where Num is a NumGet-compatible type name. * File.WriteLine(s) is equivalent to File.Write(s "`n"), for symmetry with File.ReadLine(). * File.Read() reads and returns the remainder of the file when used without parameters. * File object now returns "" for unrecognized methods and invalid syntax rather than the numeric address of "". (続く)
(続き)
Changed: GroupAdd's Label parameter now applies to the whole group. [Discussion]
Changed: GroupActivate sets ErrorLevel on success/failure. (Same thread as above.)
Changed: */ at the beginning of a line is ignored if there was no /*. [Discussion]
Removed ToCodePage and FromCodePage subcommands of Transform.
>>51 は治ったかな。
個人的には From/ToCodePage 廃止で色々書き直しだw
インストーラにUnicode版とANSI版を同梱するなら、x64版も同梱すればいいのに 大して容量変わらないじゃん…
RegisterCallbackは直ったけどなんかGUI怪しくない? 付箋のスクリプト動かしたらフリーズする
74 :
28 :2010/08/16(月) 06:53:54 ID:I066VLbw0
懲りずに
>>28-30 の AHKL_x64 ポート化を試みています (まだ動いていません)。
>>31 さんのコメントを参考にバッファの取り扱い方法を書きかえてみました。
また原作者のコメントとメーカーのサンプルコードも参照しました。
http://lukewarm.s101.xrea.com/test/read.cgi/bbs/1146398137/63-67 ; Synaptics 製タッチパッド情報取得
VarSetCapacity(IBuf, A_PtrSize * 4)
VarSetCapacity(OBuf, A_PtrSize * 2)
NumPut(0x01000000 | 10 , &IBuf) ; TP_DeviceHandle
NumPut(0x01000000 | 729, &IBuf + A_PtrSize) ; TP_PacketFingerInfo
NumPut(0x00000000, &IBuf + A_PtrSize * 2) ; TP_StartData
NumPut(0xFFFFFFFE, &IBuf + A_PtrSize * 3)
hSynTP := DllCall("CreateFile", "Str", "\\.\SYNTP", "UInt", 0xC0000000, "UInt", 3, "UInt", 0, "UInt", 3, "UInt", 80, "UInt", 0, "Ptr")
DllCall("DeviceIoControl", "Ptr", hSynTP, "UInt", 0x80006004, "Ptr", &IBuf, "UInt", A_PtrSize * 4, "Ptr", &OBuf, "UInt", A_PtrSize * 2, "UInt", 0, "UInt", 0, "Ptr")
DllCall("CloseHandle", "Ptr", hSynTP, "Ptr")
MsgBox % hSynTP "`n" A_PtrSize "`n" NumGet(&OBuf) "`n" NumGet(&OBuf + A_PtrSize)
x64 でもハンドルは取れているので、次の DeviceIoControl が動作していないようです。
バッファサイズ変更は効果ありませんでした。
これを x64 で動かすには、どのような情報が必要で何を試みたら良いでしょうか。
AHKL_x86 では NumGet(&OBuf + A_PtrSize) がタッチパッド状態を反映します。
本家のフォーラムでも質問してみようと思います。 ひきつづき、何かヒントらしきものがありましたら教えて下さい。
ドキュメント日本語化追いつかねぇ
英語読めないから助かる
俺が読めるくらいだから、英語自体は平易なんだけどさ、 プログラミングの素人なんで、COMの辺りの知識がないからどう訳していいものやら・・・
Revision 55 - August 19, 2010 Fixed: GroupActivate not setting ErrorLevel=1 if no Label was specified. Fixed: Tab controls in x64 build. Fixed: String-copy mode of StrPut when length is omitted; broken by L53. Fixed: Data-alignment issues in x64 builds. Changed: Set A_LastError for more File* commands to assist debugging. Includes FileAppend, FileRead, FileReadLine, FileDelete, FileCopy, FileMove, FileGetAttrib/Time/Size/Version and FileSetAttrib/Time. Excludes FileCopyDir, FileRecycle, FileMoveDir, FileRemoveDir, FileRecycleEmpty, FileCreateDir and FileInstall as the APIs used do not consistently set or return a Win32 error code.
関数で、渡したいパラメータは1つで、そこで処理させて、返却したいデータが複数(5個くらい)で、 もらったデータのうち、次の処理で必要なものが、その時々で異なる関数があります。 場合によっては、関数を呼び出すだけで、もらうデータが全く不要なときもあります。 このような場合、関数を呼び出すときにbyrefで全パラメータを毎回指定する以外に、 なにか別の受け渡し方法は、ないでしょうか。 いまは、関数内で、出すべきデータをグローバル変数に書き出しておいて、 関数を抜けた後に、その変数を読むという、裏ルートの送受信をさせていますが、 他所からの不意な書き換え事故を考えると、もっとよい方法が無いかなと。
その文章だと関数設計がおかしく感じるけど… 戻り値で不特定数を返す時はオブジェクトを利用すると楽。 ret := HogeFunc("あああ") MsgBox, % ret.value1 HogeFunc(param1) { ; 〜何か〜 retValue := Object() retValue.value1 := "あいうえお" retValue.value2 := 100 Return retValue }
>>82 ありがとうございます。まさにそれが必要としていたものでした。
AutoHotkey_Lでのみ使える機能のようですね。
AHKを_Lに乗り変えて、ちぐはぐな設計で進めてしまった関数を見直すことにします。
なんか派生バージョンがいろいろあるけど どれ入れたらいい? windows7 64bit なんで autohotkey_L の 64bit版いれようとしたけど、 インストーラーがないよ。
ないからどうしたの?
インストーラーなしのでいいじゃん
インストーラーなんていらね。 色々厄介な事になりやすい
TheGood > Are you also going to make an installer for the 64-bit build? Lexikos > I'm a bit reluctant to do that since compiling x64-based scripts isn't possible yet. We need to replace the library which is used to embed the script into the exe file. 64bit版のインストーラを作るのに色々問題があるんだとさ。 利用する上でインストーラ無くても利用には全然問題はない。 「AutoHotkey.ahk」ってテキストファイルをAutoHotkey.exeと同じフォルダに作って、 AutoHotkey.exeをダブルクリックすりゃおk。 関連付けはフォルダオプションで簡単にできる(アイコンはexeの中に入っている)。
http://www.autohotkey.net/~Lexikos/AutoHotkey_L/ 更新。
Revision 56 - August 29, 2010
Added support for x64 compiled scripts. Requires Ahk2Exe_L and x64 AutoHotkeySC.bin.
Fixed: Deref operator (*addr) rejected addresses outside 32-bit range.
Fixed: #If expression memory allocation error on x64.
Fixed: Custom hotstring end chars with code points greater than U+00FF.
Fixed: Special characters being sent out of sequence by SendInput/Play.
Fixed: */ being discarded in continuation sections (see L54).
Lexikos > I've added a 64-bit option to the installer, enabled only if you're on a 64-bit system. とのことなので x64 もインストーラでイケるようになったみたい。
MouseGenture.ahk の相談はここでいいの?
おk
何かキテルー Revision 57 - September 4, 2010 Fixed Str*, WStr* and AStr* DllCall return types on x64. Added functionality to InStr to bring it in line with StringGetPos: * If StartingPos is negative, the search is conducted right-to-left beginning at that offset from the end. * An additional parameter is available to specify which occurrence of the string to find. Added #include <LibName> for explicitly including a script from a function library folder. Added functionality to IniRead and IniWrite allowing an entire section to be read or written. Added functionality to IniRead allowing a list of section names to be retrieved. Added support for custom verbs to Run/RunWait: Run *verb file. Made improvements to the way Run/RunWait extracts the action and its parameters from the Target parameter. Changed NumGet/NumPut to allow Offset to be omitted entirely since Type is always non-numeric. Removed the restriction that a label can't point to the end of a block.
最小化状態のFirefoxをWinActivateでアクティブ化すると、 ウィンドウは元に戻るんですがFirefoxがキー入力を受け付けない変な状態になります どうにか対策方法とかないでしょうか? Firefox側の問題じゃないかとは思うんですが
タスクトレイアイコンをマウスオーバーしたときにツールチップ?として出てくるテキストを 取得することってこのソフトでできますか?
出来るけど、コマンド1つでは出来ない。
>>95 http://www.autohotkey.com/forum/topic24234.html ※上記ページからacc.ahkとcom.ahkをDLしてAutohotkeyのLibフォルダに入れ、下記スクリプトを実行する。
※これはAutohotkey本家用
F1::ChildUnderCursor()
ChildUnderCursor() {
ACC_Init()
CoordMode, Mouse, Screen
MouseGetPos, x, y
pacc := Acc_AccessibleObjectFromPoint(x, y, _idChild_)
If paccChild:=acc_Child(pacc, _idChild_)
sResult := "Name:`t`t" . acc_Name(paccChild) . "`n"
. "(l,t,w,h):`t`t" . acc_Location(paccChild) . "`n"
, COM_Release(paccChild)
Else sResult := "Name:`t`t" . acc_Name(pacc, _idChild_) . "`n"
. "(l,t,w,h):`t`t" . acc_Location(pacc, _idChild_) . "`n"
COM_Release(pacc)
MsgBox, % sResult
ACC_Term()
}
Revision 58 - September 5, 2010 Added: static var := expression ふむ。これは地味だが便利だ。
やっと静的変数に式代入できるようになったか 何度エラーで弾かれたことか
Win7で、全体のボリュームコントロールをいじりたいのですが、 うまくできません。 XPでSoundSetコマンドでMasterを指定すると上げ下げできていましたが、 Win7以降だと、AHKの実行しているプロセスの音量だけが変わってしまいます。 Win7で、全体の音量を制御する方法って、ないでしょうか。
>>101 どうにも上手くいかないから
Volume_Up、Volume_Downキー送ってる
>>102 おお、それは盲点でした。おかげさまで音量の操作ができました。
音量変更後に現在の音量値の取得を画面に表示していたのですが、
現在値の取得ができず、完全な移植にはまだまだ遠いようです。
MouseGenture ATOKの入力モードに反応させないようにできませんか
MouseGesture.ahk で、 中ボタンを WinMinimize に設定しているのですが、 中+右ボタンや、中+各方向ドラッグ の後で中ボタンを 押した時にも発動してしまいます。 他の動作をした場合には中ボタン単体を無効にする方法はありませんか?
説明書読め
AHK64のコンパイラが欲しかったのですがzip版には同梱されていなかったので インストーラ版を入れたところ.ahkの関連付けがAHKLに変更されました。今まで 使っていたスクリプトが一部動かなくなったので関連付けを戻そうと.ahkファイル 右クリ→プログラムから開く→ahkを選択してみても、ahklと実行ファイル名が同 じからなのか、うまく設定できませんでした。ahklのコンパイラフォルダだけコピー してアンインスコし、再度ahkに関連付けました。うまく関連付けられましたが、今 度はアイコンがおかしくなりました。.ahkファイルのアイコンが紙の中にahk.exeの アイコンが描かれているアイコンになりました。なのでahkをインスコし直しました。 すると元の環境に戻せました。おしまい。
日記かよw インストーラは Uninstall Information とか使うと解凍できるぞ。
隣のフォルダ名コピってたw Universal Extractor な
誰かAHKL最新版で使えるmigemo検索のサンプルスクリプトをおくれ。 流行らせるページのやつ全然動かなかった。
MouseGesture.ahk で、 中ボタンを WinMinimize に設定しているのですが、 中+右ボタンや、中+各方向ドラッグ の後で中ボタンを 押した時にも発動してしまいます。 他の動作をした場合には中ボタン単体を無効にする方法はありませんか? 流行らせるページやmouseGesture.ahkのマニュアルや解説サイトを見たが見つかりませんでした。
アルファベットのA〜Zをループで処理したいのですが何かいい方法ってないでしょうか? 取りあえずは alphabet1=A ... alphabet26=Z Loop, 26 { MsgBox, % alphabet%A_Index% } という感じで間に合わせているのですが他に何か方法ってないでしょうか?
alphabet = A|B|…|Z Loop, Parse, alphabet, `| { MsgBox, %A_LoopField% }
>>115 CharStart = A
CharEnd = Z
Loop, % Asc(CharEnd) -Asc(CharStart) + 1
MsgBox, % Chr(Asc(CharStart) + A_Index - 1)
>>113 以下の"migemo.ahk" をライブラリフォルダに保存。ちなみに c/migemo 1.2 用(つまり32bit用)。
これは文字から正規表現パターンを作るだけなので、あとは普通に正規表現で検索する。
migemo インスタンスは最初に作ってグローバル変数か何かに入れておく。
migemo:=Migemo_Open("C:\Program Files\cmigemo-1.2-dll\dict\migemo-dict")
str = 米日露西伯中韓仏蘭独
If RegExMatch(str, migemo.Query("amerika"), $)
msgbox, % $
; ---- migemo.ahk ----
Migemo_Open(dict) {
static base := Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery", "hModule", DllCall("LoadLibrary", "Str", "migemo.dll", "Ptr"))
Return Object("base", base, "hMigemo", DllCall("migemo.dll\migemo_open", "AStr", dict, "Ptr"))
}
Migemo_ObjDelete(self) {
If DllCall("migemo.dll\migemo_close", "Ptr", self.hMigemo)
self.Remove("hMigemo")
}
Migemo_ObjQuery(self, word) {
Return DllCall("migemo.dll\migemo_query", "Ptr", self.hMigemo, "AStr", word, "AStr")
}
>>116 ,117
ありがとうございました!
二つともとても参考になりました
強制的にフォーカス変えてやればなんとかなるね #SingleInstance, force #UseHook ^Space:: SetTitleMatchMode, 2 IfWinExist, - Mozilla Firefox ahk_class MozillaUIWindowClass { WinGet, MinMax, MinMax WinActivate If (MinMax=-1) ControlFocus, MozillaWindowClass1 } Return
zzz()が何千回と繰り返し利用される関数な場合 ptrn000〜ptrn111への変数の代入は、どこにどうやって書くのが パフォーマンス的に優れてるとか分かる人いますか? zzz(){ ptrn000=a ptrn001=b ptrn010=c ptrn011=d ptrn100=e ptrn101=f ptrn110=g ptrn111=h abc:=CheckA() CheckB() CheckC() Return ptrn%abc% }
ptrn000=a ptrn001=b ptrn010=c ptrn011=d ptrn100=e ptrn101=f ptrn110=g ptrn111=h zzz(){ abc:=CheckA() CheckB() CheckC() Return ptrn%abc% }
それとも、単純にIFで場合分けした方が良いのでしょうか こっちは使いにくすぎてやりたくないけどw zzz(){ If(CheckA){ If(CheckB){ If(CheckC){ Return h }Else Return g }Else If(CheckC){ Return f }Else Return e }Else If(CheckB){ If(CheckC){ Return d }Else Return c }Else If(CheckC){ Return b }Else Return a }
意味がよく分からんけど、比較式の回数が少なくなるようにIfを組んだ方が速いのは確か。
>>8 のQA1 にもあるけど、Ifのネストよりは論理和・論理積を使った方が速い。
AHKに限らず一般的なことだけど、式を論理演算子で並べる順序でも差が出る。
論理和では真、論理積では偽を、左側に置いた方が1個目の評価で式を抜ける可能性が高くなる。
多分、三項演算子と論理演算子を使うのが一番速いとは思う。
質問です コマンドプロンプトでCtrl+Vを押したら、クリップボードでコピペできるようにしたいのですが、 Spyで見て ahk_class が ConsoleWindowClass とわかったため、 #IfWinActive ahk_class ConsoleWindowClass ^v::Send,!{Space}ep ^c::Send,unko ; test #IfWinActive というように書いてみたのですが、Ctrl+Vで^Vがそのままコマンドプロンプトに送られてしまいます。 (Ctrl+Cもテストで書きましたがこちらも送られませんでした) 試しに^c::Send,unko とだけ書いてCtrl+Cすると、 ちゃんと他のアプリでunkoに贈られるのでAutoHotKey自体は動作しているようです。 Key history and info で表示してみたところ、確かに設定したキーが送られていないようでした。 以前は動いていたような気がするのですが、今になって何故か動かない状況です
オプションで「簡易編集」にチェックが入っているかどうかを確認。 あと、Send, {RButton} でもおk。
^v::SendInput, {Raw}%clipboard%
>>127 その記述自体はそれで合ってるから、別の場所がおかしいんじゃないの。
たとえば、その記述の前で不適切なコメントアウトしてるとか。
違うかもしれないけど失敗しやすい問題から一応書いておくと、
/*と*/はそれぞれ行頭に書かないとコメントアウトにならない。
以下のようなのはコメントが閉じられてないと解釈される。
/*〜*/
/***
hoge
***/
あと何か書いてある行での;は、中身とくっついてるとコメントにならない。
#IfWinActive ahk_class ConsoleWindowClass;プロンプト
こんなのは動作しない。
>>127 俺Vista使ってるけど、管理者権限でAHKを起動しないと、
コマンドプロンプトでホットキーが動作しなくなったことがある。
コマンドプロンプトは一般権限で起動しているのに。
再起動したら直ったので原因不明。
なんかよくわからないけどAHKきかなくなることはある Win7でInternetExplorerとかMouseGesture.ahkのジェスチャまったくきかない
↑ユーザーアカウント制御どうたらこうたらってでたアプリからの起動でってぬけてた
管理者権限で動いてるアプリには効かない。 AHKも管理者権限で動かせば聞くようになる。
>>122 ありがとうございます。遅くなってすみません
その方法でもうまく行きませんでした
というかAHKに限らず、Alt+Tab、タスクバーのクリックなど以外の殆んどの方法でうまくアクティブ化できないみたいです
もうFirefoxやめてChromeにでもしようかと
Revision 59 - September 12, 2010 Fixed: #If expression should now evaluate each expression at most once per keypress in all cases. Changed: SplashImage uses common image-loading routines; now supports PNG and similar, but results may differ from before for icon files. Added: For x,y in z. Added: Loop .. Until expression, usable with any Loop or For-loop. Added: Named loops; continue outer_loop, break 2, etc. Debugger: Encode stdout and stderr packets as UTF-8. Debugger: Allow user to Abort, Retry or Ignore when the initial connection fails. Debugger: Allow attaching a debugger client by sending the script a registered window message. Debugger: Allow detaching debugger client by sending the "detach" DBGp command. ふむ。ループ関連で色々追加か。 こういうのは地味に便利だな For key,value in Object(1, "あああ", 2, "いいい", 3, "ううう") MsgBox, % key " = " value
enumオブジェクト涙目
そろそろ仕様を固めてほしいわ
139 :
名無しさん@お腹いっぱい。 :2010/09/13(月) 05:50:39 ID:UQiZZW3K0
質問なのですが、AutoHotkeyでSandSを実現するコードってのが、あるじゃないですか。 こういうの。 Space Up:: Send, % "{Shift Up}" (A_TimeSincePriorHotkey < 130 ? " " : "") +Space:: Send, +{Space} >+Space:: Return Space:: RShift このコードの一行目の%って、どういう意味なんですか?
AHK本家バージョンをWin7で使ってるものだけど、 スタンバイから回復した瞬間に、たまにアプリエラーで死んでしまう。 はやらせるページのCPU使用率とメモリ使用量を知るためのdllを入れてるが、 ほかにとくに目立った処理はしていない。 こんな変な症状で困ってるのは俺だけかな。 どうやって診断すればいいんだろうか?
ヘルプより Force an expression: An expression can be used in a parameter that does not directly support it by preceding the expression with a percent sign and a space or tab.
これ凄く難しいね C言語ちょろっとかじっただけだけど、全然わかんね USBテンキーを識別して、個別にリマップするのは可能ですか?
>>142 USB接続のテンキーが押されたかどうかは、このソフトだけでは識別できない。
HIDのデバイスごとに識別できる外部ツールを使えば出来たはずだが、
やり方は忘れた。過去ログにあるはず。
あるいは、テンキーそのもの(フルキーの右側のキー)と共通して反応してもよければ、
NumpadAdd::
msgbox,テンキーのプラスが押された
return
みたいに記述することは可能
>>143 ありがとうございます。
その辺が良くわからなかったので勉強になりました。
右側テンキーは数字入力の為に出来れば残したいと思っていましたが、
アプリ毎に切り替える形で対応しようと思っています。
他の言語を使ったことがないのでよくわからないのですが
IfEqual, A, foo, SetEnv, B, bar
と
SetEnv, B, % A = foo ? bar : ""
ならどちらの方が処理が速いのでしょうか
>>8 からすると前者のほうが速いのでしょうか?
書き込んだあとに自分で確かれれば良いことに気づいた 10万回ループさせても気になるほどの速度の差はないのですね 式を書き間違えた上に板を汚して申し訳ないです
>>118 これでmigemo.dllのパスもdictと同じように指定するにはどうしたらいいんでしょうか。
Migemo_Open(dll,dict) {
みたいにしようと思ったんですが、"migemo.dll"をdllで置き換えたら
空文字が返ってくるようになるだけでした。
>>147 こんなんでどうじゃろ?
; ---- migemo.ahk ----
Migemo_Open(dict, dll="migemo.dll") {
static base := Object("__Delete", "Migemo_ObjDelete", "Query", "Migemo_ObjQuery", "hModule", 0)
If (!base.hModule) {
If (hModule := DllCall("LoadLibrary", "Str", dll, "Ptr")) {
base.hModule := hModule
base.func_close := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "migemo_close", "Ptr")
base.func_query := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "migemo_query", "Ptr")
} else {
MsgBox, 65, Warning, Failed to initialize Migemo.dll`nContinue?
IfMsgBox, Cancel
Exit
}
}
Return Object("base", base, "hMigemo", DllCall("migemo.dll\migemo_open", "AStr", dict, "Ptr"))
}
Migemo_ObjDelete(self) {
If DllCall(self.base.func_close, "Ptr", self.hMigemo)
self.Remove("hMigemo") := 0
}
Migemo_ObjQuery(self, word) {
Return DllCall(self.base.func_query, "Ptr", self.hMigemo, "AStr", word, "AStr")
}
>>142 ぶっちゃけAutoHotKeyの言語仕様が普及している高級言語と比べて(C言語は今や中級かも知れないけど)
かなり異質なので既存の言語経験者にも慣れにくいと思う
どうしてこうなった?みたいな言語仕様だからなw
似たような用途のAutoItは互換性捨ててバージョン3からふつーの言語っぽくなってC言語経験者なら書きやすいと思うよ
日本語情報は少ないけどね
AutoIt はホットキーをがしがし使いたいと思うならちょっと不利かも。 たしか以前はホットキー定義に数の制限があったような。
>>149 AutoHotKeyはAutoIt ver2を元にした言語仕様だから
A_LineFileに対してA_LineDirって無いよね? 今まではSplitPathでフォルダパス取得してたんだけど、 なんかA_LineFile . "\..\hoge.xyz"で同階層のファイルパス取得できた。 「ファイル名\..\ファイル名」って相対パスとして問題あるかな?
>>10 このテンプレおかしいな
ReplaceStr.txtとかで置換されちゃってるっぽい感じだけど
> %
http://www1.axfc.net/uploader/A/so/ > alert .= (%
http://www1.axfc.net/uploader/A/so/ の部分正しくは↓
%A_LoopField% := !GetKeyState(A_LoopField) ? 0 : !%A_LoopField% ? A_TickCount : %A_LoopField%
alert .= (%A_LoopField% && (A_TickCount - %A_LoopField%) > alertDur) ? "[" A_LoopField ": " (A_TickCount - %A_LoopField%) "ms]" : ""
A_ とかを片っ端から斧のアドレスに置換してるんだろうか・・・
ホントだw いつも同じだろうという感じでよく読んで無かったわ
156 :
127 :2010/09/16(木) 00:09:51 ID:rgwZW5mqP
>>128-129 ありがとうございます。
なんということでしょう、マシンを再起動したら問題なく動きました orz
しかし、他にもそんな手があるんですね、すごい・・・
autohotkeyでcapslockを入れ替えられないのは autohotkeyのバグなのでしょうか?
入れ替えって、具体的にどういうこと?
ホイール上下で常にマウスカーソルのあるコントロールを操作できるようにすべく 下記のように入力したのですが上だけが効果がありません。 間違いを修正していただけないでしょうか。 [ホイール↑] CoordMode,Mouse,Screen MouseGetPos,x,y,hwnd,ctrl,3 wp:=0x00780000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6 lp:=y<<16|x IfWinExist,ahk_id %hwnd% { SendMessage,0x84,0,%lp%,,ahk_id %ctrl% If ErrorLevel=4294967295 MouseGetPos,,,,ctrl,2 ctrl := !ctrl ? hwnd : ctrl Loop,%A_EventInfo% PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl% } [ホイール↓] CoordMode,Mouse,Screen MouseGetPos,x,y,hwnd,ctrl,3 wp:=0xFF880000|GetKeyState("LButton")|GetKeyState("RButton")<<1|GetKeyState("Shift")<<2|GetKeyState("Ctrl")<<3|GetKeyState("MButton")<<4|GetKeyState("XButton1")<<5|GetKeyState("XButton2")<<6 lp:=y<<16|x IfWinExist,ahk_id %hwnd% { SendMessage,0x84,0,%lp%,,ahk_id %ctrl% If ErrorLevel=4294967295 MouseGetPos,,,,ctrl,2 ctrl := !ctrl ? hwnd : ctrl Loop,%A_EventInfo% PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl% }
明らかにおかしいのは IfWinExist,ahk_id %hwnd% { コピペなんだろうけど無理に変えようとしなきゃいいのに
冗長だけど、処理としてはいいんじゃないの? 単にRetrun が抜けてるのかも知れんけど。 俺ならこうするけど。 WheelUp:: WheelDown:: CoordMode,Mouse,Screen MouseGetPos, x, y PostMessage, WM_MOUSEWHEEL:=0x020A , 120 * (InStr(A_ThisHotkey, "Up") ? 1 : -1) * (A_EventInfo ? A_EventInfo : 1) << 16 | GetKeyState("LButton") | GetKeyState("RButton")<<1 | GetKeyState("Shift")<<2 | GetKeyState("Ctrl")<<3 | GetKeyState("MButton")<<4 | GetKeyState("XButton1")<<5 | GetKeyState("XButton2")<<6 , x | y<<16 ,, % "ahk_id " DllCall("WindowFromPoint", "Int",x, "Int", y, "Ptr") Return
可読性って大事だな、と思った
? や | 演算子で1行まとめにしてコンパクトにするのもいいけど 動かないときはいったん分解してわかりやすい形に書き直したほうがいい その過程でtypoなどの間違いを見つけやすくなるし 人からもらったもののコピペなどでも自力で解読しようとする努力は必要 最終的に質問するにしてもはコード追いやすくしといたほうが答えてもらえる確率高くなる
何時間間隔とかで実行したいときは、SetTimerを使うようですが、 1日1回13時に実行とか、0:30 1:30 〜 23:30 とか時間を指定して実行したいときはどうすればいいですか?
>>166 if A_Hour=13
{
msgbox,本日13時処理分
}
これをsettimerで1時間なり1分間隔でまわす
あるいはifの中に実行済みフラグを付けて実行済みかどうか判別させる
Compile_AHK IIだとUPS圧縮せずにコンパイルできますが、 最近のAHK_Lには対応していない様です。 新しいAHK_L用のコンパイラでmpress圧縮せずに コンパイルする方法ってありますでしょうか?
UPS → UPX です
MouseGesture.ahkを使い始めたのですが ジェスチャーの条件定義で全てのアプリ(ウィンドウ)に適用させる 条件定義ってどう設定したら良いんでしょうか? 分かる方いましたら教えてください。
Space::Send,{Joy2} とかジョイスティックのキーイベント発生させようとしても動作してくれないね AHKって基本的にジョイスティックの入力を監視は出来るけど乗っ取れないって理解で良いのかな Sendmode弄ってみたけどInputでもPlayでもダメみたい、Timerでパッドボタン連射させようと思ったんだけど・・・
そう。できない。
>>6 だとちと分かりにくいかもしれんな。
AutoHotkey_L でMsgbox を使って出力すると文字化けします。どうすれば解決しますか?
>>175 スクリプトファイルをUTF-8で保存する。
IEキャッシュフォルダ内のファイルを削除したいのですができますか? FileDelete,C:\Users\owner\AppData\Local\Microsoft\Windows\Temporary Internet Files\* こう書けばできるかなと思ったんですが削除できませんでした。
ありがとうございました。
AutoHotkey_L 更新 Revision 60 - September 24, 2010 Added: File.Encoding for changing or retrieving the codepage in use by a File object. Added: Variadic functions and function-calls and indirect mode for callbacks. Added: Object.Clone() Changed: ByRef parameters no longer require the caller to supply a variable. Changed: Obj.foo := "" now frees foo's contents as originally intended (but still doesn't remove the field). Changed: OnMessage functions now tolerate optional and ByRef parameters. Changed: RegisterCallback now enables execute access on callbacks in 32-bit builds (already did in 64-bit builds). Changed: RegisterCallback now treats explicit ParamCount="" as omitted. Fixed: For-loop was treating non-expression "0" as true for scripted enumerators. Fixed: ComEvent (ComObjConnect) not working on the ANSI build. Fixed: ComEvent (ComObjConnect) not correctly backing up/restoring local vars when calling a function which is already running. Fixed: Buffer overflow in A_EndChar when there is no end char. Fixed: Func->mNextFunc not inititialized to NULL (used only by LowLevel scripts). Debugger: Added the capability to retrieve an object's contents (with a supported debugger client). Debugger: Fixed a few bugs. ---- 可変長引数は便利そうだ。 DllCallの引数に配列オブジェクトを渡すことが出来たみたいで、 可変長引数との連携でDLLの関数のインポートが簡単にできそうでフォーラムが盛り上がっとる。
なるほど、ふむふむ ほうほうなるほどねーなるほど、うん、なるほどね すみません英語わかりません
Cdecl には便利だなぁ Random, value, 0, 999 MsgBox,% sprintf("%d = 0x%08x", "Int", value, "Int", value) sprintf(format, params*) { VarSetCapacity(buff, 1024) ; バッファ長は適当 params.Insert(1, "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf")) params.Insert(2, "Ptr"), params.Insert(3, &buff) params.Insert(4, "Str"), params.Insert(5, format) params.Insert("Cdecl Int") If DllCall(params*) Return buff }
182 :
名無しさん@お腹いっぱい。 :2010/09/27(月) 16:10:50 ID:LQAeJ7X/0
IMEがONになっているときだけ、 A & $B::などのコンビネーションキーを有効にするには、 どうすればいいでしょうか? IMEがOFFのときには、A押しっぱでAのキーリピートを発生させたいです。 当方、WinXP、AutoHotkey_L使用。IME.ahk導入済みです。 以下、うまくいかなかった残骸。 Hotkey,If,(IME_Get() == 0) Hotkey,a & $b, Off Return Hotkey,If,(IME_Get() == 1) Hotkey,a & $b,LabelA Return LabelA: Send,{Blind}@ Return
> Hotkey,If,(IME_Get() == 0) AutoHotkey_Lは使ってないので文法に違いがあるのかも知れんけど こういう書き方ってできるんだっけ? あと、IME_Get() はLoopかSetTimerで定期的に見てやらんといかんのでは?
>>182 >>9 に書いてあるけど、AHK_Lならこんな感じでできる。
#If (IME_GET() == 1)
a & $b::Send,{Blind}@
#If
コマンドラインで受け取ったときの%1%とかを関数の中で使う場合 p1 = %1% IF( p1 ){ って使うしかない? あとLにするデメリットって何かあるっけ? 2バイト文字を1文字あたり2文字として扱ってるスクリプトがたくさんあると 移行がめんどくさそうだけど
> p1 = %1% ってのは、しょうがないとおもって諦めて同じようにやってる。 それ以外のデメリットというか、非互換はDllCall系かな。 ANSI版の関数を決め打ちで呼んでいるスクリプトは修正が必要。 旧流行らせるページのものは殆どこれに該当。 ユニコード版の場合、そこの ActiveX は使わないのが吉。ComObjCreate() を使うべし。
autohotkey_lの話が出ているので便乗して質問します。 ime.ahkを使っています。 goolge日本語入力で、sendで漢字を表示しようとすると文字化けします。 ユニコードでソースを保存しているのですが、なぜかそうなってしまいます。 microsoft imeとatokでは問題ありません。 google日本語入力とautohotkey_lの相性問題でしょうか?
簡単な再起呼び出し自体はなんとなくわかるのですが RegExでの再起呼び出しの仕方がよく分かりません どなたか例を書いていただけないでしょうか
; 後方参照 : マッチした語句を参照 Haystack = キュウリキャベツトマト Pattern = ([ア-ン])[ア-ン]\1 MsgBox, % RegExMatch(Haystack, pattern, $) ? $ : ; 再帰 : パターンの再利用 Haystack = キュウリキャベツトマト Pattern = ([ア-ン])(?1)(?1) MsgBox, % RegExMatch(Haystack, pattern, $) ? $ :
190 :
182 :2010/09/29(水) 12:45:50 ID:UMOsfPx00
>>184 ありがとうございます。
ずいぶんシンプルな記述ができるのですね。
昨日、遠回りな記述を発見しまして、それでずっと書いていましたが、これで少しは楽できそうです。
↓遠回りな記述
$b::
If(IME_Get() == 0)
{
Send,b
}Else
{
If(GetKeyState("a","P") == 1)
{
Send,{Blind}@
}Else
{
Send,b
}
}
Return
>>189 ありがとうございます
今後利用させていただきます
AutoHotkeyで文字列を置換したいのですが…わかりません。 RegExReplace() を使って正規表現による置換をすれば、できるようなのですが難しくてわかりません。 やりたいことは、文字列中のアットマーク以降の文字だけに置換したいのです。 例 "あいうえお@かきくけこ" → "かきくけこ" "abcd@efgh" → "efgh" "0123456@789" → "789" 文字数は決まっていません。 エクセルとかだと、ワイルドカードを使って「*@」を取ってしまえばできるのに。 教えてください。お願いします。
193 :
名無しさん@お腹いっぱい。 :2010/09/30(木) 16:01:14 ID:EZTOI8wM0
これつかって、アクティブウインドウを中央に配置 できる?
WinMoveでできるよ
>>192 RegExReplaceでやりたいなら
unko =
(
あいうえお@かきくけこ
abcd@efgh
0123456@789
)
unko := RegExReplace(unko,"`n).*?@(.*?)",$1)
msgbox,% unko
>>195 出来ました。
.*? を使えばエクセルのワイルドカード*と同じように使えるのですね。
ありがとうございます。
正規表現って難しいですね。
その代わりいろんなことができるのでしょうけど。
AutoHotkey_LのUnicode版で標準入出力ってどうすればいいですか?
>>11 だと文字コードをどう変換してもうまく動作してくれないです。
198 :
197 :2010/10/01(金) 08:02:15 ID:/Nakdzh+0
Revision 61 - October 3, 2010 Added: ObjClone(Object), forgotten when Object.Clone() was implemented. Added: Support for RegEx Unicode properties in Unicode builds. Also upgraded PCRE to 8.10. Added: Object.Remove(int, "") removes Object[int] without affecting other keys. Changed: ComObj.xyz() is now always treated as a method-call. Changed: Var := 123 is now left as an expression, for consistency. This makes Var := 123 and Var := (123) equivalent, whereas previously the former assigned only a string and the latter assigned both a string and a cached binary integer. In particular, this avoids some confusing type mismatch errors with COM objects. Fixed: Dynamic variadic calls to functions with mandatory parameters. Fixed: The final parameter of an assume-global variadic function had to be explicitly declared local. Fixed: Static initializers interfering with setting of breakpoints. Fixed: More pointer size-related errors with PCRE callouts on x64 builds. Fixed: Input with 'M' option treated Ctrl-M (`r) as Ctrl-J (`n). Fixed: Object.Remove(n) returned 0 (not "") if Object[n] didn't exist.
>>199 のうち分からないのが2つあります
>Changed: Var := 123 is now left as an expression, for consistency.
と
>Fixed: Input with 'M' option treated Ctrl-M (`r) as Ctrl-J (`n).
です。
前の方は、"left as an expression, for consistency"が意味不明です。
説明文は分かるのですが…
後の方は "'M' option" ということば自体が分かりません。
はやらせるページにこんな記述はなかったと思います。
>>200 前者は続く文読めばわかるよね。
後者は公式のドキュメントに書いてあるよね↓
Input [, OutputVar, Options, EndKeys, MatchList]
Options
M: Modified keystrokes such as Control-A through Control-Z are
recognized and transcribed if they correspond to real ASCII characters.
Consider this example, which recognizes Control-C:
履歴書の習得言語にAutoHotkeyと書きかけたw
>>200 前者の件。
書いてあるとおりだけど、以前までのRevでは数値で書いてあっても文字として格納していて、
今Revからは式の結果が格納される。
例) 以下を実行した結果。
Rev.61 : 256
以前のもの : 0x100
; ---- test.ahk ----
; SetFormat, IntegerFast, d
MsgBox, % Func()
Func() {
static value := 0x100
Return value
}
ふむ。おもろいな。 param1 := Object("x", 100, "y", 200, "z", "hoge") param2 := Object(1, 100, 2, 200, 3, 300, 4, 400, 5, 500) Func1(param1*) Func2(param1*) Func3(param2*) Func4(param2*) Func1(x, y) { MsgBox, % "x + y = " (x + y) } Func2(z) { MsgBox, % "Hello, " z "!" } Func3(p1, p2, p3) { MsgBox, % "p1 = " p1 "`np2 = " p2 } Func4(params*) { num := 0 For k, v in params num += v MsgBox, % "total = " num }
AutoHotkeyjp新機能説明も追加してくれてるのか 最近の更新に全くついていけてないからありがてえ
206 :
200 :2010/10/05(火) 12:49:12 ID:UVi77zYS0
みなさんありがとうございます。 具体的に分かりました。
ラベルの動的生成ってできるでしょうか? Menuの動的生成しようとして機能にラベルしか割り当てられなくて詰まった・・・
ラベルはハードコーディングするしかないよ。 メニューの動的生成なら、固定ラベルに飛ばして、 A_ThisMenu, A_ThisMenuItem, A_ThisMenuItemPos で分岐すりゃいいだけかと。 Loop, %A_MyDocuments%\*.* { File%A_Index% := A_LoopFileFullPath Menu, Menu1, Add, %A_LoopFileName%, Label1 } Menu, Menu1, Show Return Label1: MsgBox, % "Your select is : """ File%A_ThisMenuItemPos% """" Return
>>208 特殊変数気付きませんでした
それで自分のやりたいことはできます。ありがとうございました
Autohotokeyで生成されたGuiでなく 通常のコンテキストメニューを対象にしたいのですがどのようにすればよいのでしょうか
>「通常のコンテキストメニューを対象にしたいのですが」 対象をどうしたいのかがよくわからない。 表示中の項目を抜き取って、別の項目に差し替えて処理をさせるとかは AHKでは、かなり難しいレベルだと思う。
ますます意味がわからない。ゆとり世代なの?
コンテキストメニューを半透明にしたい WinSetでコンテキストメニューを透過させようとした タイトルの指定方法がわからない WinSetで可能なのかあるいは他の方法があるのか どなたかわかる方いらっしゃいませんか?
>>216 ahk_class #32768
過去スレでマウスカーソル上の
ウインドウタイトルやクラスの取り方を見た気がする
>>217 AU3_Spy.exeで取得できなかったので出来ないものだと思っておりました
ありがとうございます
質問です、 AutoHotkey はキーボードkey押しで監視対象ソフトへのショートカット押しぐらいしか使ったことがないのですが、 質問内容は2種類です。 1.他の動作に悪影響を出しにくい高速な文字列の受け渡しとその手法。 自作ソフト(非表示常駐もする)から作成される文字列をAHKで高速で受け取れるようにって出来るものでしょうか? 300 バイト/秒(1000 ms) 〜 30 バイト/100 ms ぐらいの可変バイト数/速度 受け取れれば、AHK から他のソフトへ送信できるようにしたい。 やりたい事は特定ハードウェアから情報(18 ms )を受け取れる自作ソフトからデータを他で簡単に利用できるようにしておきたい。 悪影響の例 ) 他のソフトとの文字列受け渡し用にクリップボードを使うとその文字列に占有されて 他でコピー&ペースト作業に支障がでる。 2.他のソフトをコントロールする為に自作ソフトからイベント発行するのに効率的な方法。 仮想キーコードの出力は出来るので、AHK で囲い込み出来ると良いのですが、、、、、 悪影響の例? ) 自作ソフト↑仮想キー発行でさせたい処理以外に 一般キーボード入力と間違われて他の割り当てで重複処理されると困る。 上記の2点が可能なら、自作ソフトの特定動作やデータに対してAHK 経由で他のソフトを自由にコントロールできて便利なのです。 御教示お願いします。 AutoHotkeyを流行らせるページなどで入手したマニュアルや AHK の C++ ソースをざっと眺めてみたのですがよく解らない。
1. 透明GUIにEditBox作って自作ソフト側から文字列ドロップとかSendとか 文字コード制限出ちゃうかもだけど 2.簡単にやりたいなら[F13]〜[F20]あたりのキーボードにないキーコード使う ロジのマウスみたいにドライバで発行可能なハードもあるので注意が必要かも 確かRegisterCallback()やOnMessage()でイベント通知できたような 外部とのやりとりに使えるかどうかはわかんないけど Message飛ばせれば1,2 ともに解決しそうではあるね
イベント通知はSendMessageで行う。AHK側はOnMessageで待ち受けする。 自作アプリ側でAHKのプロセス内に VirtualAllocEx でメモリ確保して文字列書き込んで、 SendMessage でそのアドレスを通知する。 AHK側はメッセージを受けとったら、該当アドレスのデータをコピーしてを変数に格納(AHKLのStrGetだと楽)。 成功コードを返す。 SendMessageの戻りを受けて、メモリを解放。
222 :
210 :2010/10/07(木) 20:50:06 ID:iPOq7eSA0
>>220-221 お早い返答で恐れ入ります。
RegisterCallback() 関数はAHK の関数ですね、速度は出せなさそうなのでキー監視用途でしょうか?
Win32API の SendMessage 関数
LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
ですか、
http://wisdom.sakura.ne.jp/system/winapi/win32/win52.html 戻り値待ちで停止する訳にはいかないので、送りっぱなしの非同期の
PostMessage() が都合が良いかなぁ
EditBox やテキストBox を自作ソフトに設置すると簡単な文字列は AHK で拾えるということでしょうか?
それだと楽で良い、、、
それとも透明GUIはAHK 側?
なにぶん AHK の解説文が難解でして
返答待ちっていっても数10ms位だと思うけど。
>EditBox やテキストBox を自作ソフトに設置すると 逆かな、AHK側にGUIでウィンドウ作って自作ソフト側から投げてやる でも221の方法でMessage投げた方が負荷は軽いしスマートだと思う
RegExReplaceで「"」を「あ」に置換する場合エラーが出るんですが RegExReplaceで「"」のエスケープはどうすればよいのでしょうか?
Hoge = "hogehoge" MsgBox, % RegExReplace( Hoge, """", "あ") MsgBox, % RegExReplace( Hoge, "\x22", "あ") MsgBox, % RegExReplace( Hoge, Chr(34), "あ")
おーサンクス!!! 助かりました。
アッー!
FileDelete, atwiki.html
word = おーとほっときー
url =
http://www1.atwiki.jp/test/?cmd=search&keyword=%word% Run, %url% ;←Firefoxで開くと正常
URLDownloadToFile, %url%, atwiki.html ;←「おーとほっときー」が文字化け・・
@wikiの検索結果ページを保存したいんだけど、URNDownloadToFile使うとすごい文字化けしてしまう
どうにかして文字化けさせずファイルに保存できませんか?
>>230 URLEncode関数で、エンコードしてから渡せば、うまくいくはず。
検索ワードの間のスペースとかも、適宜加工する必要がある。
Firefoxで開けるのは、それをFirefox側でやってくれてるからじゃない?
>>231 ありがとう
AutoHotkey_Lではできなかったから普通の方でやったら動いたんだけど、
#$%&てstー、オートホットキー といれてみたら
?E?E??E??E??E???E?t?E、オート?EチE??キー になってしまっててちょっと使えそうにないかも・・
>>232 URLEncode関数なんてあったんですか
ちょっと調べてみます、ありがとう
word := UrlEncode("おーとほっときー") ↑ 式での代入なので注意 ; AHKL用超簡易版。enc には UTF-16, UTF-8, CP932(=Shift_JIS), CP50220(=JIS) が利用可。EUCは無理。 ; URL全体には使わず、エンコードしたい部分だけに使うこと。 UrlEncode(str, enc="UTF-8") { hex := "00", func := "msvcrt\" . (A_IsUnicode ? "swprintf" : "sprintf") VarSetCapacity(buff, size:=StrPut(str, enc)), StrPut(str, &buff, enc) While (code := NumGet(buff, A_Index - 1, "UChar")) && DllCall(func, "Str", hex, "Str", "%%%02X", "UChar", code, "Cdecl") encoded .= hex Return encoded }
>>235 おお、AHK_L最新でばっちり動きました!
自分じゃどうやってもできなかったので本当に助かりました
皆さんありがとうございました
237 :
名無しさん@お腹いっぱい。 :2010/10/08(金) 19:56:18 ID:i7+Z9MYnP
1年くらい前にここでいろいろ教えてもらったものですが
やっとここで教えてもらったことをまとめられましたので報告します。
お題はパソコン学習リモコン「PC-OP-RS1」をAutoHotkey_Lで操作するです。
スクリプト自体はかなり前から出来ていたんですけどね
このたびHPにしてみました。
ttp://xbmc.inpane.com/main/rc/autohotkey.php AutoHotkey_Lと学習リモコンの組み合わせはいろいろできそうです。
いろんな赤外線の信号をデータベース化しちゃおうかな
なんか面白そうなことやってんな とりあえず乙
240 :
237 :2010/10/09(土) 20:19:44 ID:Wj3h9FRbP
こういう説明動画はいいね AutoHotkey を使ってどう動かすか、という様を伝えるには 文字よりもわかりやすそう
Ahk2Exe_Lについて質問です autohotkey_lのサイトの下の方にAhk2Exe_Lと書いてますが この実行ファイル版は無いのでしょうか? インストール先のcompilerフォルダを見ても、Ahk2Exe_LではなくAhk2Exeしかありません それか、Ahk2Exeが実際にはAhk2Exe_Lなのでしょうか この点が分かりません
推薦エディタのSciTE4を使ってるんですが 新規作成する場合、デフォルトで文字コードをUTF-8にすることはできませんか?
中古で買ったWindowsMobileにAutohotkeyforPocketPC入れてみた。 調べたら更新されててユニコード版もあった。 ほんとに動くんだな。感動したわ。 それにしてもPocketPC版についての日本語の情報はないねw 誰もつかってねえのかな?
If( !IsOjbect( objHoge := Object() ) ) MsgBox, えらー! If( !objHoge.Insert( "HoGe" ) ) MsgBox, えらー! If( !objHoge.Remove() ) MsgBox, えらー! ・・・ってエラーチェックってすべき? 視認性も悪くなるし何よりもめんどくさくなってきた
AHKってテキスト読み込みと追加書き込みはできるけど
消したり書き換えはできないよね?
行削除したいときとかってどうやって対処してますか?
>>242 たしかAhk_Lと一緒にあるAhk2ExeがL版だった気がするから置き換えればおk
プロパティのバージョン確認して、本体と2exeが同じバージョンなら大丈夫
あと蛇足かもだが、.ahkのエンコードをUTF-8(BOM付き)にしないといかん
249 :
242 :2010/10/10(日) 20:24:03 ID:q9exBTyQ0
>>247 エラーチェックするのって、自分以外にアクセスする場合でだけいいんでないの?
(ファイル、ネットワーク、別プロセスetc)
引数が足りなくて、オブジェクト作れないとかはスクリプトをきちんと書けばどうにかなるもんだし。
( obj := Object(params*) は厄介そうだが・・・ )
----
ところで、URLDownloadToFile がXPだと動かないバグがあって最ビルドしたやつを配布してるから、
思い当たる人はバイナリを更新した方がいいね。
※ x86 Unicode だとファイルサイズは同じだけどハッシュ値は違ってきちんと中身が変わってる
>>248 自分はファイルの内容を全部読み込んで、必要なところを編集させて、
ファイルを消去して、新規書き込みしてる
>>248 やったことないけど Loop,READ を使えばできるんじゃない
>>250 ちらほらフォーラムでも言われてたのに自分は動いてるからってさんざん無視してたが
やっとLexikos謝罪か。うーん
まぁ、フォーラムも、愉快な仲間達からのツッコミと、 ユニコード版に関する混乱で「互換性のページ見ろ」で解決するやつ で埋まってるからなぁ
>>251 だよねやっぱそれしかないか
消すのに成功して書くのに失敗した場合は
対象ファイルが消えてしまうと思うとちょっと不安なんだよね
>>252 読み込みは色々できるけど、書き込みはFileAppendしかないんだ
iniの形式なら消したりできるから、普通のでもできないかなーというところ
心配なら元ファイルとは別に新ファイル作って 書き込み終了後に元ファイルを削除、新ファイルをリネームとか
257 :
251 :2010/10/12(火) 23:34:43 ID:SesNTd6o0
自分はテスト用スクリプトは Dropbox 対応フォルダの中で走らせていて、 バックアップの面ではかなり大丈夫
すごく初歩的な質問かもしれませんが、申し訳ありません。 右コントロールキーを使って、2ストロークキーを実現させたいのですが、どうすればいいでしょうか? 右Ctrlを押したあと、離してから、次のキー(たとえばJやKやL)をおすと、 特定の入出力をするというものです。 右Ctrlとの順押し2ストロークで動作を発生させたいのですが、 同時押し(本来のシフト操作)では本来のCtrlの動作をさせるのを残しておきたいのです。 (本来のCtrl動作の後に押したキーも、順押しの動作ではなく、本来の動作をさせる。) つまりCtrlを押してから何もキーを押さずにそのままコントロールキーを離したときだけ、2ストロークキーの始まりにしたいのです。 これはどうすればいいでしょうか?
~RCtrl Up:: Input, char, L1 T1 If char = j Send, JJJJJJJJJJJ Else if char = k Send, KKKKKKKKKKKKKK Else If char = l Send, LLLLLLLLLLLL Return こんなんでいいんじゃないのかね。 > つまりCtrlを押してから何もキーを押さずにそのままコントロールキーを離したときだけ、 ってのは厳密じゃないけど。 どうしても厳密にやりたいなら、LLフック か RwwInput を DllCall で仕込んでチェックかなぁ
_Lの人が精力的に頑張ってくれるようになって、 別に自分がやらんでもいいやみたいな気になっちゃったんだろうな
AutoHotKey_L Version v1.0.48.05.L61
を使用しています。
以下のスクリプトで、ResultSet変数にWQLのクエリの結果が
入っていると思うのですが、値の参照の仕方が分かりません。
http://sites.google.com/site/autohotkeyjp/reference/AutoHotkey_L/Objects 上記サイトのオブジェクトのページも読みました。
VBScriptだと
--code--
Set objWMIService = GetObject("winmgmts:")
Set ResultSet = objWMIService.ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
For Each I in ResultSet
MsgBox I.deviceID
Next
--code--
のような形で取得できるのですが、AutoHotKey_Lではどうすれば
取得できますでしょうか?
--code--
;WMIを利用
wmi := ComObjGet("winmgmts:")
;WQLでCドライブのディスク番号とパーティション番号を取得する
ResultSet := wmi.ExecQuery("Select * From Win32_DiskPartition WHERE Bootable=True")
--code--
よろしくお願い致します。
AutoHotkey_Lでタスクの一覧を表示するスクリプトを組んでいるのですが、 その際にプロセスIDから実行ファイルのフルパスを調べて、 Menu,Icon で実行ファイルのアイコンもついでに表示させたいと考えています。 通常はこれで問題無いのですが、実行ファイルがアイコンを持っていなかった場合は Menu,Icon でメニュー登録をしようとすると、エラーでスクリプトが停止してしまいます。 事前に場合分けしてアイコンが存在しないケースでは、処理をスキップさせるしか無いみたいなのですが 実行ファイルにがアイコンリソースを含むかどうかを判別する方法が思いつきません。 どなたか、いいアイデアはありませんでしょうか?
ちょっと面倒だけど hIL := IL_Create() Loop, { FileSelectFile, filePath, 1, %A_WinDir%, Select File, executable(*.exe) If (ErrorLevel) Break ret := IL_Add(hIL, filePath) MsgBox, % """" filePath """ has " (ret = 0 ? "no icon" : "icon(s)") } IL_Destroy(hIL)
>>266 おおっ、ありがとうございます
ret := IL_Add(hIL, filePath)を組み込む事で見事に場合分けすることができました。
この行が何を意味してるのかはさっぱり理解できませんが…orz
まあ、これから勉強していきたいと思います、本当に助かりました。
ListViewで使うイメージリスト関数か こんな使い方あったのね、参考になります
AutoIt ↓ AutoIt 2 ┐@ | ↓ : AutoHotkey1.0┐ : | ↓ : | AHKL (1.0ベース) ┐ : ├←Aーー┤ ↓ : | .│ AutoHotkeyU (Unicode化) : | .├←ーーーー┤ : | .↓ 開発終了 : | AHKL(ANSI , Uni)ーーーー┬ーーーーーーーーー┐ : | .│ ↓ B | : | .│ AutoHotkey64(x64とCOM対応).| ↓. | .├←ーーーーーーー┤ ↓C AutoIt3 | .↓ 開発終了 AutoHotkey_N(マルチスレッド、モジュール化etc) E. ↓ AHKL(ANSI & Uni32 & Uni64) : やる気なし. | D (現在) @ AutoIt のホットキー機能が貧弱で改善提案だしたが受け入れられず。AutoIt2を元に作成。 A 独自版を作る一方、各種機能改善・追加が本家に取り入れられている B COM機能は COM.ahk の機能がほぼそのまま取り込まれた。 C かなりプログラマー向きな拡張。他のプログラム言語からAHKスクリプトを実行したりできる。 D 非プログラマー向きのツールが理想で、Ahk2を予定していたが協力者が集まらないため。 またプログラマー向きな方向性を持つ派生版が人気なのも萎えさせる一因に。 E 余談だが、文法をガラリと変えてかなりスマートな感じに。 まぁ、Crisお疲れってところかな。 Lexikosは最近は色々あってイッパイイッパイかもしれんね。
>非プログラマー向きのツールが理想で、Ahk2を予定していたが協力者が集まらないため プログラマ向きの関数や機能は、必要ない人はつかわなければいい、 という考え方ではダメだったのかな。 あと後半は、ahk2で具体的にどう改善するつもりだったの?
適当翻訳(1/2) ■ 僕の今の状況とウェブサイトの変更について by Cris(AHK作者) AHKプロジェクトを始めたのは、非プログラマを含む利用者にホットキーや自動化の利便性を 提供したかったからなんだ。僕はスクリプト言語は簡易で柔軟であるべきだと思っている。 だから本格的なプログラム言語にすべきじゃないと思ってた。 何年か経つと、ユーザコミュニティは、少なくとも最もアクティブなメンバーは、AutoHotkeyに 対してプログラム的な機能--配列やオブジェクトなど--を求めているのがはっきりしてきた。 それは僕の望む方向じゃなかった。今思うとその頃から興味を失いかけていたのかも知れない。 コミュニティメンバはユニコードとx64対応に関心が向いていた。自分も多少はそれに関心はあったけど、 もっと簡単な文法で、かつ以前との互換性がなるべく保たれるようなAHK V2を作ろうと思ってた。 でも、自分自身としてはその方向性に自信もモチベも持てないんで、開発者用のプライベート フォーラムに議題を挙げたんだ。1年半ほど頃かな、AHKの新機能について議論を始めて、 共通バージョンを策定しそれを作成しようとした。 でもしばらく立つ頃には、V2が果たして正しい方向性なのかと疑念を抱くようになったんだ。 その中で、時間が足りなかったり、V2あるいは共通バージョンに対する興味が失われているように感じたんだ。 でもそれはよくわかるよ、誰だって時間的制約や優先順位があるわけだしね。
適当翻訳(2/2) そんな感じで感心と活動が鈍ったけど、Lexikos, fincs, Sean, jackiku, Micha 達が AutoHotkeyが有用であると思い、新たな機能を追加してくれたんだ。 こういうかんじで、なんとなく機は熟したと思ったから、WebサイトをAHKLに委譲したんだ。 (中でも、ダウンロードのページが一番大事になる) 時間が経てば、サイトの統計(つまり何がダウンロードされたか)が、 サイトの構成をAHKLに梶を切るかどうかの判断材料になるはず。 AHKがどのバージョンあっても、フォーラム全体の利用に当たって不自由が無いことを願うよ。 サイトの維持に関しては僕が続けるつもりだよ。 それが出来なくなりそうなら、他の信頼の置けそうな個人なり団体なりが管理するところへ 引っ越しができるであろう十分な期間をもってアナウンスをするつもりだよ。 何年にもわたって色々と支持してくれたみんなに、ありがとう!
乙 細かいことを言うとCrisじゃなくてChrisだね
おお、翻訳ありがとう!そしてCrisさん、いままで乙でした。 中の人も、派生版の人も、いろいろと悩みを抱えてるんだね。
>>273 俺はずっと勘違いしてたっぽいな。
文中のjackiekuもミスってる。
文もおかしな所もあるが、まぁわかるっしょ。
>>274 釣られたなw
プログラマー向きの機能で非プログラマーでも使えるのを作ってくれよ AHKLなんかもうわけわからん
たしかにAHKLはわけわからん
こういうCOMオブジェクトってどこで調べるの? 検索してもExcellとかしか出てこない・・
>>277 >非プログラマー
なら内部わかる必要あるの?
おれなんてDllCallすらわからないんだぜ
おれもdllは、全く理解できない。 ここで教えてもらったものをブラックボックス関数として コピペして、ツギハギして結果を受け取るだけ。 でも、なんとか希望通りに動いてくれてる。
オリジナルはプログラマーとかいう以前にunicode未対応なのが厳しい
Lで分からんところってObjectだけだろ? 本家でもDllCall(), NumGet(), NumPut(), RegisterCallback()あたりは分からんだろ おれも、各々の分野を学ぶ気にはならんから使えなくても仕方ないと割り切ってる
どれも公式とかで解説してくれるし分かりやすくない?
あと文法がJavaScriptとかVBScriptぽい?のがなあ・・・>Object 元のAHKのと違いすぎて混乱する
オブジェクトってよくわからないけど ahkってダウンロード機能が弱いから vbsでつかってるwinhttpを使えたらなとよく思うんだけど もしかしてそういうことも可能なの?
autohotkeyjpの人がdllcallについて丁寧な解説記事を書いていた気がする ところで、AHKLで機能が強化されているcomについて誰か例題を沢山書いてくれないかなあ
290 :
sage :2010/10/14(木) 21:21:37 ID:yPX1n0WZ0
>>269 AutoHotkey_N じゃなくて AutoHotkey_Hかな?
>>272 >AHKLに委譲
細かいようだけど移譲はしてないね。ページを書き換えただけみたいよ。272は結構はしょってオブラートにしてるけど、Chrisの原文の文章から読める雰囲気は結構暗いかも。
fincsが負けた感が滲み出ててちょっと複雑って発言してるね。
多分 Chris は Lexikos にライバル意識みたいなのがあったんじゃないかな。一方LexikosはChrisに認めてもらおうと頑張っててそれが裏目に出た。
なんにせよChrisは人をまとめて動かす力がなかったみたいね。
292 :
264 :2010/10/15(金) 00:35:19 ID:leOgQaRc0
>>279 どうもありがとうございます!
確かに動作しました。
もう全く動かなかったので諦めて、VBScript(wmi.vbs)でWQLの結果を生成して、それを .txt ファイルに吐き出す
スクリプトを書いて、AHKから
RunWait, wmi.vbs
みたいな感じに呼び出して、吐き出した .txt ファイル(disk.txt)を
FileReadLine, val, disk.txt, 1
みたいに val 変数に読み込んで、その後
FileDelete, disk.txt
で消す、みたいな超面倒な手順で実装してしまいましたよ・・・。
こんなくだらないコード書いて感じたのは、AHKって標準入出力も扱えないのか?ということ・・・。
DllCallとかさっぱり分からないのでどうにも対応方法がありませんでした・・。
もう一回書き直そうかな、解決策教えて頂きましたし・・・。
本当にありがとうございます
ScriptControlが使えるからJscriptやVbscript使える人は、そっちで処理してもいいんじゃないかな?
ttp://www.autohotkey.com/forum/topic61509.html oSC := ComObjCreate("ScriptControl")
oSC.Language := "JScript"
script =
(
oshl=new ActiveXObject('WScript.Shell');
oshl.popup('autohotkeyL でScriptControl WScriptオブジェクトは使えない。Unicodeで保存。');
;//WScript.Echo(2000);WScript.Echo(1); / * ←これは使えない * /;
)
oSC.ExecuteStatement(script)
oSC.Eval(script)
>>293 紹介ありがとう。これは良いリファレンススレ
例えばこんなGUIを作ったとして、 TreeViewとEditBoxのあいだの点線をドラッグして双方の表示領域を変えることってできない? Janeでいうボードビューとスレッドビューみたいな ┌──────────┐ │ │ TreeView │ ├--------------------┤ │ │ Edit │ │ └──────────┘
;//
>>291 ややこしいことはJscriptでさっさと処理してAHKで値を受け取ってしまおう。
oSC := ComObjCreate("ScriptControl")
oSC.Language := "JScript"
script =
(
main=function(sAAA,sBBB,sCCC){ ;
if(typeof(sAAA) == 'undefined'){sAAA = '///' ;} ;
if(typeof(sBBB) == 'undefined'){sBBB = '###' ;} ;
if(typeof(sCCC) == 'undefined'){sCCC = '$$$' ;} ;
sAAA = sAAA + '---' + sAAA ;
sBBB = sBBB + '---' + sBBB ;
sCCC = sCCC + '---' + sCCC ;
oshl = new ActiveXObject('WScript.Shell') ;
oshl.popup('sAAA=' + sAAA + "\n\n" + 'sBBB=' + sBBB + ' sCCC=' + sCCC) ;
return(sAAA.length + ' '+sBBB.length +' '+ sCCC.length) ;
} ;
)
oSc.addCode(script) ;
stestA := "Ahogehoge_AutohotkeyLで実行_ユニコードで保存" ;
stestB := "Bhogehoge" ;
scommand = main("%stestA%", "%stestB%")
sret := oSC.eval( scommand )
msgbox, %sret%
>>295 出来なくはないよ。かなりの力業になると思うけど。
OnMessage で WM_LBUTTONUP/DOWN と WM_MOUSEMOVE 拾うようにする。
境界領域でボタン押下拾ったら、マウス移動トラックするようにして、
移動差分を算出して、GUIコンポーネントを移動する。
ボタンが離されたらトラッキングを停止。
GUIプログラムをそこまで低レイヤーのことまで自分で用意してやるより、 VisualStudio無料版で.NET使ってやった方が汎用的でかつ楽だよなぁ。
>>297 ありがとう
確かにここまでするのは大変そうだ・・
今のところサイズ変更しなくては使えないってレベルではないし、しばらくはこのままで使ってみる
AutoHotKeyはウインドウやコントロール検出してキー送ったり、そういう自動化はすごく向いているし、
プログラマーでなくてもコピペで切り貼りで使えるのは素晴らしいけど、
GUIは弱いよね。
.NETやDelphi並に簡単にGUI作れればいいんだけどね
.NET Framework依存はともかく.NET使うと起動は遅くなるだろうし、
AutoHotKeyの利点なくなるだろうけど
AutoItはGUIビルダーのようなツールがあるみたいだな
実験記録 No.02:AutoItで簡単GUI作成
http://blog.livedoor.jp/blackcode/archives/1480018.html
> .NET Framework依存はともかく.NET使うと起動は遅くなるだろうし、 > AutoHotKeyの利点なくなるだろうけど .NET Frameworkを間接的に使うとか、そういう話が抜けてた 非.netアプリから.netのライブラリが使えるかしらんけど。 ついでだけど、DelphiはGUIライブラリだけDLL化して他の言語から使う方法あったと思うけど、 AutoHotKeyから使うなら一皮かぶせる必要あると思うし、 Unicode対応したDelphiがフリーで手に入らないからちょっとな
本格的なGUIには向いてないのは確かだな。でも以下のような用途なら十分戦力になる ・コマンドライン用ツール(ffmpegとか)のフロントエンドにして、 雑多なオプションをGUIで手軽に選べるようにする。一度作ればマニュアル要らず。 (携帯電話変換君があるからこの例はあまり訳にたたんがw) ・コマンドライン引数に対応してなくて、いちいちGUIでファイル選ぶようなアプリで、 その代わりに引数貰って起動して、引数書き込んでボタン自動で押す -- 元々はこういうのを AutoIt や 本家AHKの目指していたところなんだろうけどさ。
aaa.ahkに #Include test\bbb.ahk bbb.ahkに #Include %A_ScriptDir%\ccc.ahk って書いてある場合 test\ccc.ahkじゃなくてaaa.ahkと同じフォルダのccc.ahkが読まれる?
読まれる? って書く前に、試した結果はどうだったの?
aaa.ahkから起動した場合は aaa.ahkと同じフォルダのccc.ahkが読まれる aaa.ahkすっとばして直接bbb.ahkを起動した場合は bbb.ahkと同じフォルダのccc.ahkが読まれる 自分(bbb.ahk)のパスはA_LineFileで取れるけど #includeでは使えないね なにげにめんどくさいところだ
関数ライブラリスクリプトの場合は挙動がちょっと違うので注意。 %A_Desktop% + main.ahk + xxx.ahk %A_MyDocuments%\\AutoHotkey\Lib + sub.ahk + xxx.ahk ---- main.ahk ---- sub() ---- sub.ahk ---- #Include, xxx.ahk ; ★ sub() { Gosub, XXX } ---- xxx.ahk (両方とも) --- XXX: MsgBox, %A_LineFile% Return ---------------- 結果は %A_MyDocuments%\AutoHotkey\Lib\xxx.ahk ★を「%A_ScriptDir%\xxx.ahk」にすると %A_Desktop%\xxx.ahk になる
>>304 聞き方が悪かった
試した結果が
>>303 だったんだけどこの理解で合ってるかと思って。
自分で一からスクリプト書くなら注意して書けばなんとかなりそうだけど
他人が作ったスクリプトが複数で構成されてる時に
autohotkey.ahkからincludeして使うとき不便だから何か解決方法はないものかと。
>>305-306 ありがとう。
ファイルごちゃごちゃになるのは諦めて1つのフォルダに全部置く事にした。
ある画面、あるソフトが最前面のときのみ あるキーを別のキーに入れ替える、っていうのはどう書けばいいかな? プロセスが存在していたら、っていうのは出来るけど、 あくまで最前面の時のみキーリマップ変更っていうのをやりたい。
#IfWinActive
おお、これかサンクス
AutoHotkeyJpの左ペインを見てみたら AutoHotkey_L 専用セクションが出来ているね ありがとう>管理人さん
画面のある特定範囲内にあるウィンドウの中で、最前面のものを取得する…という処理は どう作ればいいのでしょうか? デュアルディスプレイでマウスポインタを各モニタ間で移動させた時に、その画面内の 最前面ウィンドウを自動的にアクティブにする、という用途で使いたいんですが…
WinGet, list, List ; 条件無し でリスト取ると、重なりで上から順に並んでるから、Loopして順に座標調べて、 該当画面内にあれば、WinActivate して Break でいいんじゃね?
318 :
314 :2010/10/18(月) 03:48:53 ID:rYM4Bbm40
>>315 うまくできました! ありがとうございます
192で質問して、教えていただいた者です。正規表現ビギナーです。 正規表現による置換を使って @以前の文字列を削除したり @以降の文字列を削除したり したいのですが、@以降の文字列を削除するのがうまくできません。 Ans1 :=RegExReplace("あいうえお@かきくけこ",".*?@","") Ans2 :=RegExReplace("あいうえお@かきくけこ","@.*?","") msgbox, ( ".*?@"での答え→%Ans1% "@.*?"での答え→%Ans2% ) 上のスクリプトでやってみたのですが、結果は かきくけこ あいうえおかきくけこ となってしまいました。 Ans2は"@.*?"で置換すると、どうして「あいうえお」になってくれないのですか? どのようにしたら、@以降の文字列を削除できますか?
正規表現に置ける*の意味と?の意味を再確認しる
ahkの質問じゃないなw
>>319 自己解決しました。
"@.*"で置換をやったらうまくいきました。
なぜ「?」が要らないのかまだよくわかりませんので
「サルにもわかる正規表現入門」をよく読んで理解したいと思います。
>>320 さんアリガトウ。
ついでに
>>321 さん
悪うございました(謝)。
A_TickCountを○時間○分○秒って感じのフォーマットにしたいんですが どう一般的にどう計算させればよいのでしょうか? 知恵を下さい。
A_Tickcountを1000で割ると、稼働時間の 秒 になる。 それを60で割ると、分になる それを60で(ry って感じでやってるよ、俺は。
325 :
314 :2010/10/18(月) 19:43:56 ID:rYM4Bbm40
すみません、
>>314 に追加で質問
>>315 のやり方で大体うまくいってるんですが、
バルーンヒントを除外する方法って何かないでしょうか?
ウィンドウの情報は、座標以外にも、タイトルやらクラスやらスタイルやら取れるんで、 それらで判断すりゃいいかと。 ウィンドウクラスかウィンドウスタイルで除外するのが楽だと思うけど。
>>326 ありがとうございますー
タイトルやクラスは他にも空白のものがあるかもしれないので、
とりあえずツールチップやバルーンのウィンドウスタイル頭4文字"0x94"を判別して
除外するようにしてみました。これでうまくいくかな?
タスクマネージャーとかで表示されているすべてのプロセスのリストを取得する関数とか 有りませんか?
DetectHiddenWindows, On してから >315 全ユーザーのプロセスまで取れるかどうかはわからん
331 :
330 :2010/10/19(火) 12:56:58 ID:clvatLXW0
自己解決しました。 NumputではなくStrLenでした。全角も1文字と数えるので、全角文字=2文字となる補正すればOKでした。 Dropするファイルのパスを一文字ずつ分解して、正規表現で半角以外だったら補正値+1、 とすることで、かなり力業ですが解決しました。 まったくスマートではないのですが、取り敢えず動きました。
個人的に移植したやつ。 hwnd : 対象窓, files : 対象ファイル(`n区切り), ptX&ptY : 落とす座標, fNC: 真なら絶対座標/偽なら相対 DropFiles(hwnd, files, ptX=0, ptY=0, fNC=False) { static char_type:= A_IsUnicode ? "UShort" : "UChar" , char_size := A_IsUnicode ? 2 : 1 , isUnicode := A_IsUnicode ? 1 : 0 files := RTrim(files, "`r`n`t ") . "`n`n" byte_length := StrLen(files) * char_size Loop, Parse, files If (A_LoopField = "`n") NumPut(0x00, files, (A_Index-1) * char_size, char_type) hDrop := DllCall("GlobalAlloc", "UInt", 0x42, "UInt",20 + byte_length, "Ptr") p := DllCall("GlobalLock", "Ptr", hDrop) NumPut(20 , p + 00, "Int") ; offset NumPut(ptX , p + 04, "Int") ; pt.x NumPut(ptY , p + 08, "Int") ; pt.y NumPut(fNC , p + 12, "Int") ; fNC NumPut(isUnicode, p + 16, "Int") ; fWide DllCall("RtlMoveMemory", "Ptr", p + 20, "Str", files, "UInt", byte_length) DllCall("GlobalUnlock", "Ptr", hDrop) PostMessage, WM_DROPFILES := 0x233, hDrop , 0, , ahk_id %hwnd% } 利用例) IfWinNotExist, ahk_class Notepad { Run, Notepad WinWait, ahk_class Notepad } DropFiles(WinExist(), A_ScriptFullPath)
ttp://www.autohotkey.com/forum/topic18550.html このトピックにある、GetModuleFileNameEx()って関数なんですが
これまでは返された値を StrGet(&戻り値, "CP932") して利用していたのですが
このままだと戻り値に"è"とか"é"の文字が入っていた場合、
勝手に"e"などの文字に変換されうまく動作していません。
適当にいろいろ弄っていたら
CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize)
の行の GetModuleFileNameExA を GetModuleFileNameEx にしたら偶然動いてしまいました。
DllCallをどう扱えばいいのかの根本が理解できてない段階なので、
これで本当に問題がないのか教えて頂けないでしょうか?
AutoHotkey_L Revision 61のUnicode x64版を利用してます。
Unicode版ならGetModuleFileNameExは、GetModuleFileNameExWを呼び出すから問題ないよ。 ただ、そのコード自体はUnicodeとx64を考慮してないから、ちょっと変更する必要がある。 FileNameSize := 260 ... CallResult := DllCall("Psapi.dll\GetModuleFileNameExA", "UInt", hProcess, "UInt", 0, "Str", ModuleFileName, "UInt", FileNameSize) ↓ static size_of_char := A_IsUnicode ? 2 : 1 FileNameSize := 260 * size_of_char ... CallResult := DllCall("Psapi.dll\GetModuleFileNameEx", "Ptr", hProcess, "Ptr", 0, "Str", ModuleFileName, "UInt", FileNameSize)
>>334 ありがとうございます
そうか、Unicodeは1文字でANSIの倍のバイト数を消費するから2倍する必要があるんですね。
UInt とかこの辺は、今のところ自分の場合とりあえず総当たりで動作するまで他のに変えてみる、
全種類試して動かない場合は素直に諦めるっていう、ひどい有様ですがw
ハンドルやポインタはは全部 Ptr だとおもっていい。(UINT_PTRを除く)
>>323 こんな感じでどう?
msgbox % formatseconds(A_Tickcount // 1000)
Return
FormatSeconds(NumberOfSeconds) ; Convert the specified number of seconds to hh:mm:ss format.
{
time = 19990101 ; *Midnight* of an arbitrary date.
time += %NumberOfSeconds%, seconds
FormatTime, mmss, %time%, mm:ss
return NumberOfSeconds//3600 ":" mmss ; This method is used to support more than 24 hours worth of sections.
}
Vimのようなモード切替の概念をAutoHotkeyで実現したいのですが、可能でしょうか? 例えば、Ctrl + Shift + mで、特殊モードになって、h j k lがそれぞれ←↓↑→のカーソル移動になり、 Escを押すと特殊モードを終了して本来の入力に戻る、みたいな。
>>339 そんなところにあったとは(節穴)。ありがとうございます。助かりました。
ところで、AHKの変数って、:=代入が同時に宣言にあたるのですか?
誰かの書いたスクリプトを見ていると、急に見たこともない変数が普通に使われていたりして困惑することが多々あるのですが。
変数宣言は必要ない。というかできない。まぁ、すぐ慣れるよ。typoはどうしようもないけどw
>>2 のAutohotkey_Lのリンク先にあるダウンロードからUnicode x86のzipを落としたのですが、
#Includeのパスに日本語が入っていると起動時にエラーではじかれます。
ANSI x86の方だと問題ないのですが、こういう物なんでしょうか。
Unicodeの方が2バイト文字も問題なく扱えると思っていたのですが。
Unicodeで書いてないだけだろ
>>343 Shift-JISのスクリプトそのまま使ってました…。失礼しました。
ありがとうございます。
実行中の指令を止める方法はありませんでしょうか? 例えば、1秒おきに、1 2 3 4...と、100まで入力していくスクリプトがあったとして、 これを実行途中に、指定したボタンを押すと、そのスクリプトを無効にしてインプットを止めたいのですが。
>>345 1から100までループしているスクリプトのループの中で、
if stopflag=1
break
みたいのを入れて、
a::
stopflag=1
return
って感じでグローバル変数でフラグつくればいいんじゃない?
それか1秒おきって決まってるなら SetTimer, Label, 1000 して SetTimer, Label, OFF するとか Label: count++ Tolltip, count return
>>346 >>347 お返事いただき有難うございます。
とても参考になりました。
有難うございました。
AutoHotkey_L 64bitでなんかMouseGesture.ahkのMG_GetFocus()が失敗してるなと思ったら64bitに対応したコードじゃないのね MG_GetFocus(){ VarSetCapacity(tmp, A_PtrSize == 8 ? 72 : 48) NumPut(A_PtrSize == 8 ? 72 : 48,tmp,0) return DllCall("user32.dll\GetGUIThreadInfo","UInt",0,"Str",tmp) ? NumGet(tmp,A_PtrSize == 8 ? 16 : 12) : 0 } に書き換えたら問題なく動いた
まぁ、多少なりともDllCallいじれるなら、互換性のページ読めばすぐ直せるしな
351 :
名無しさん@お腹いっぱい。 :2010/10/21(木) 18:22:06 ID:3tOe/dQz0
ちょっとお尋ねしますが、右クリックすると "1"キー入力 10ms待機 "1"キー入力 5ms待機 "右クリック" という動作をさせられますか?
可能
させられますか? って、そのまま作ればいいだけじゃん
>>351 書いていることの各行に相応するコマンドがあるんで、
日本語→AHK語に変えるだけでおk
ahkファイルをダブルクリックして動かしてたら。 自分の書いたスクリプトに誤りがあって、暴走してしまった。 こんな時(暴走してしまっているような状態のとき) ahkを止める方法はないですか?
タスクマネージャー(Ctrl+Alt+Del)を開き、 「プロセス」タブを選択し、(マウスが効かない場合はCtrl+Tabで「プロセス」タブにする) AutoHotkey.exeを終了させる(ahkスクリプトが複数実行されていればその数だけ終了させる)
>>356 なるぼど、そうか
無理やり閉じるんだから
そういう方法しかないんですね。
昔、キーバットっていう記録再生ソフトを使ってたもので、
キーバットではctrl+pauseで止めれたそのイメージがあったものですから。
サンキュウ。
おぉ、キーバット。あれは地味に良いソフトだ。俺も昔使っていた。 AHKの処理を中止するコマンドか。ありそうだけど。知らないけど。
単純に、タスクトレイで右クリックして「PAUSE」じゃダメなの? 俺もよく暴走させるけど、これでほとんど用が足りてる。 どうしても、いつでもホットキーでやめたいならば、 esc:: exitapp とか書いておけばいい。
このソフトってキーボード二つ用意して肩っぽのaキーだけ ホットキー割り当てて処理できたりします?
そういう機能はない。 無理矢理出来なくもないかもしれない。 ウチのマシンでは動くけどよその環境じゃ分からん。
専用のキーボードみたいなの買おうと思ってたんですが出来ないんですか・・・ ありがとうございます。
>専用キーコード 「お気に入りキーボード」みたいなのなら独自のキーコード吐いてるだろうから可能じゃね? つか360の時点の話しだと汎用キーボード二つ並べて使う前提にしか読めんのだが 専用キーコード前提なら最初からそう書け
専用キーコードを吐けるキーボードを使うという話ではなく汎用キーボードを
何か特定の用途専用のキーボードとして扱いたいという話だと思う。
キーの吐き出し元が特定のキーボードかどうかを判別して
挙動を変えるということを力技でやっていた人が昔いたようだけど、
俺には難しくてよく分からなかった。
>>35 あたり参考。
毎度の如く情報の少ない書き込みから余計な妄想を働かせて文句を垂れつつ 自分話をしたがる奴の多いこと多いこと わからねえなら口をはさむな
昔Xでionとか使ってたな。懐かしい。
>>314 で質問した者なんですが改めて
画面のある特定範囲内にあるウィンドウの中で、最前面のものを判定するには
どう組んだらいいんでしょうか?
デュアルディスプレイの片方の画面に少しでもかかってるウィンドウを判定したいんです。
WinGet, List_id, list, , ,
Loop, %List_id%
{
WinGetPos, Xpos, Ypos, Width, Height, ahk_id %this_id%
〜
こんなかんじで上から順にウィンドウの座標を取得し、
四隅の座標をひとつひとつ画面範囲内入っているかどうかを判定していたのですが、
ウィンドウのサイズを最大化すると四隅の座標が全て画面より4ピクセル大きくなってしまい
全て判定から外れてしまって…
いくらでもやりようがあると思うけど WinGet, MinMax, Minmax やって最大化してたら、ウィンドウの中央が どの画面に入っているか、でみりゃいいんじゃね? SysGet とかでウィンドウ枠の幅を得て計算したり、とかでもいいとは思うけど
>>368 予想どおりだが、終了してもマルチモニタ気にしてなくてウインドウ配置ぐちゃぐちゃになってワロタww
ウインドウ配置もどすツールくらいあるから実害はなかったけどw
でも、これおもしろね。
仮想デスクトップ込みのシンプルなウインドウマネージャか。
Windowsからフルスクリーンにした1つのターミナルソフトでunixにつなげて、
コマンドライン中の画面を何分割にもして使っている人を思い出した。
>>371 ありがとうございます! ウィンドウの中心座標で判定するようにしました
ちょいと質問。AHK_L(公式から取れる最新のX64のやつ)を使って a:: Hotkey,d,Empty,On return b:: Hotkey,d,Empty,Off return d:: Msgbox,s return Empty: return 見たいにして簡単なテストをしてるんだがaを押してもbを押しても dを押したときに何も変わらないんだ…。はやらせるページとか見て なんか変なミスしてんのかなーと思って見直してみても わからない…。だ、だれかHotkeyの使い方教えてくれまいか。
>>374 の挙動は、
・ 起動直後は[D]押下で[s]出力
・ [A] 押下で [D] 押下時のに「何もしない」ようにする。
もともとのホットキー定義は上書きされる。
・ [B] 押下で [D] 押下時の挙動をオフにする
元々のものはEmptyに上書きした上でオフ、[A] で定義したものはオフに
となると思うけど、それが意図したものだろうか?
個人的意見を言うと、Hotkeyコマンドで切り替えるのは凄く分かりづらいので、
#If で条件を明示した方がいいと思ってる。
>>374 こういう動作が希望?
a::flag=1
b::flag=0
$d::
if flag=1
Msgbox,s
else
send, d
return
最終的に、
>>376 みたいのが希望だったんっだけど、なんかですね、
俺がやったとおりにすると
>>375 のいうようになるのかと思ったらならないんだよ。
だからHotkeyのコマンドって調べたところにのってたのと
違うのかなーと思って聞いたのでした。
ただ、聞いてみると確かにHotkeyでやるより#Ifでやったほうがよさそうだ。
答えてくれた人、ありがとう。
>>377 んじゃ、こういうのが希望?
面倒くさそうだけど。
a::Hotkey,d,Empty,On
b::Hotkey,d,d,On
d::
Msgbox,s
return
Empty:
return
こういう場合、
>>376 の例みたいに、フラグで機能割り当ての管理をしたほうがラクだよね。
うちでは、フラグの変数を、押すたびにインクリメントして、
機能の割り当てをローテーションで変えたりして使ってる。
質問です。宜しくお願いします。
Win+Prtscnが押されたら
1.画面コピー
2.ペイントの起動
3.プリントスクリーンの貼付
の動作を一気にしたいのです。
-----
MsgBox,今後、Win+PrtScnでペイントを起動し画面を貼付ますヨ。
#PrintScreen::
Run,mspaint.exe
Sleep 100
!hvp
return
-----
を作りましたが、ペイント起動後何も起こりません。貼付迄動作しません。
質問1
この場合、>Run,mspaint.exe の前にPrintScreenキーを押す(ハードコピー)記述は必要なのでしょうか?
Prtscnキーを押す動作なので PrintScreen と記述したらエラーになっちゃいましたけど・・・
質問2
>!hvp の部分はプルダウンメニューから貼付を選択してるつもりです。こういう記述で良いんでしょうか?
Alt+H、V、P のつもりです。
http://iup.2ch-library.com/i/i0175925-1287981773.jpg 因みに、昨日からAHK弄ってるレベルです。
検証してないけど >Sleep 100 いくらなんでも短すぎる気がする 2000くらいで始めて、徐々に縮めていったほうがいい >!hvp これ何? sendコマンド付いてないじゃん あと、いっきにコマンド流しても反応しないことがあるので、 altHを送った後にメニューが出てるか確認して、 出ていたら次のコマンド送るようにするとか、 いろいろ細かい細工をする必要がある。
autohotkeyでまずマスターしたいのは sendの使い方だよね
384 :
380 :2010/10/25(月) 14:25:39 ID:TOpAYAMo0
MsgBox,今後、Win+PrtScnでペイントを起動し画面を貼付ますヨ。 #PrintScreen:: Run,mspaint.exe Sleep 2000 ;ALT+Hキーを押してプルダウンメニューの表示 { Send {ALT down} Sleep 60 Send {H down} Sleep 30 } Send {ALT up} Send {H up} ;貼付けを選択 Sleep 1000 { Send {V down} Sleep 30 } Send {V up} ;クリップボードからの貼付けを選ぶ Sleep 1000 { Send {P down} Sleep 30 } Send {P up} return
385 :
380 :2010/10/25(月) 14:33:41 ID:TOpAYAMo0
ペイントを起動して張り付けれられるのを待つのは、 Sleepでもいいけど、WinWaitActive を使う方がいい。 ウィンドウの指定の「お作法」を知る必要があるけど、 せっかくAHK使い始めたんだし覚えて損はないぞ。
; pushを作ってみたよ rrrpush(byref o,sss){ if(o.length == ""){ o.length := 0 ; } ; o.Insert(o.length,sss) ; o.length:= o.length + 1 ; return o ; } ; ooo := object() ; rrrpush(ooo,"プッシュ0") ; rrrpush(ooo,"プッシュ1") ; sss := " ooo[0] = " ooo[0] "`n ooo[1] = " ooo[1] "`n ooo.length = " ooo.length msgbox,%sss% sss := " ooo.0 = " ooo.0 "`n ooo.1 = " ooo.1 "`n ooo.length = " ooo.length msgbox,%sss%
なにそれ?
389 :
380 :2010/10/25(月) 15:33:50 ID:TOpAYAMo0
>>386 あーこういうものあったんですね。
>指定したウィンドウがアクティブになるまでスクリプトの実行を一時停止します。
あとで改造してみます。
>>387 push/pop みたいな LIFO(Last in, first out)は、
arr.Insert(itemToPush)
popedItem := arr.Remove(arr.MaxIndex())
でいけるっしょ。
index = 1 を使えば、shift/unshift も可能。
FIFO なら、
arr.Insert(itemToAdd)
item := arr.Remove(1)
でいいし。
>>246 亀だが、昔随分前に使って、こりゃダメだ、と思ってた。
#If も使えるし、AHKLw相当だな。
画面の向きを何とか検知できれば、
融通の利かない SortInchkey を捨てられそうだ。
Run, foobar2000.exe /comand:Next でAHKからfoobarをコントロールしているのですが、 曲が切り替わったあとに最速で曲名を取得するにはどうすればいいでしょうか? 切り替わる直前にタイトルバーが一瞬foobar2000になるので、 Loop WinGetTitle, sTitle, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8} Until sTitle != foobar2000 で取得しようとしたのですが、切り替わる前の現在のタイトルが取得されてしまいました 今は長めにSleepしてからWinGetTitleで切り替わったあとのタイトルバーの文字列を取得していますが、 このSleep部分を自動化することはできないでしょうか
>>391 PocketPC版のAutohotokeyはWin32用とは違ってキーカスタマイズに使うわけじゃないけど、
ちょっとしたことさせるには結構いいと思うわ。
AHKだけでフルスクリーンにする方法がよくわからんので、
手前のアプリをフルスクリーンにするExeをRunして誤魔化してるがw
GUIで大きなボタンが使えて、ファイル操作が出来て、Win32版とほぼ同じコードが動かせるインタープリタはほかにあるのかな?
394 :
392 :2010/10/26(火) 22:30:51 ID:bvWup9giP
自己解決しました Run, foobar2000.exe /comand:Next WinWait, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8} WinWaitClose, foobar2000 ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8} WinGetTitle, sWinTitle, ahk_class {E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8} で取得できました
>>394 3rd Party製のCOMを使うと色々便利だよ
COM Automation Server for 0.9, Public technology preview
http://www.hydrogenaudio.org/forums/index.php?showtopic=39946 // auto execute
fb2k := ComObjCreate("Foobar2000.Application.0.7")
fb2k_playback := fb2k.Playback
ComObjConnect(fb2k_playback, "Fb2kPlayback_")
return
#n::fb2k_playback.Next() ; 次の曲
#p::fb2k_playback.Previous() ; 前の曲
Fb2kPlayback_TrackChanged(bLocationChanged)
{
global fb2k_playback
MsgBox, % fb2k_playback.FormatTitle("%artist% - %title% - %album%"); foobarのタイトルフォーマティング
return
}
インターフェイスや関数は、インスコされたフォルダにあるfoobar2000.idlを参考に
396 :
392 :2010/10/26(火) 23:57:17 ID:bvWup9giP
>>395 うおお、これはすごい・・!
ありがとうございます、こちら使ってみます
397 :
392 :2010/10/27(水) 00:28:26 ID:dzE2OZRCP
すみません、ComObjCreate("Foobar2000.Application.0.7")でfoobarが起動してしまうのは仕様でしょうか? MouseGesture.ahkに組み込んでいるので、Windows起動時に毎回foobarが起動してしまうと少し面倒です またスクリプト終了時にfoobarが存在しないとRPC サーバーを利用できません。というエラーが表示されるのですが、どういう意味でしょうか?
AutoHotKeyを初めて使ってみようと思って公式サイトからダウンロードしたんですが、 カスペルスキー先生にTrojan-GameThief.Win32.OnLineGames.xfzpだって怒られてしまいました。 これは誤検知ってことで良いんでしょうか?
foobar見つけたらComObj生成、存在しなくなったらComObj破棄というタイマーを500msで回すことで解決しました ありがとうございました
>>398 たぶんね。
AHKはキー入力の監視・乗っ取りなどスパイ的な事ができるんで、
その辺がトロイなどと認識されているかもしれない。
あるいは、実行ファイルが圧縮されているんだけど、それが誤検出の元だったりもする。
>>400 やっぱりそうですか。それに少し安心しつつ、ちょっと使ってみようと思います。
ありがとうございます!
>>399 ごめんあれからすぐ寝てた。タイマーでもおkだけとヘルパを使う手もあるみたい
fb2k_helper := ComObjCreate("Foobar2000.ApplicationHelper.0.7") ;Foobarの起動状態を監視するヘルパ(COMServer2Helper.exe)
ComObjConnect(fb2k_helper, "Fb2kHelper_") ;Foobar起動時/終了時に呼び出されるイベント
return
Fb2kHelper_ServerStateChanged(bRunning) { ;bRunning: false(終了時), true(起動時)
global
if bRunning
fb2k := ComObjCreate("Foobar2000.Application.0.7"), fb2k_playback := fb2k.Playback, ComObjConnect(fb2k_playback, "Fb2kPlayback_")
else ; この時点で恐らくFoobar(サーバ)が死んでるので、RPCなんちゃらエラーが出る。ComObjErrorで回避…
ComObjError(false), fb2k_playback := "", fb2k := "", ComObjError(true) ;特別な開放処理は必要ない…と思う
return
}
;Fb2kPlayback_TrackChanged上記と同じなので省略
長くなりそうだったので詰めた。読みづらくてスマソ
autohotkeyの派生はautohotkey_lだけかと思っていたら autohotket_hやautohotkey_nもあるのね こんがらがってきた
404 :
402 :2010/10/27(水) 12:48:46 ID:C3BMn1dN0
あ、もしWindows終了時とかCOMServer2Helperが先に終了してエラー出るなら、 Auto-executeでComObjError(false)やっちゃうのがいいかも。必要なときは(true)/(false)で囲む形で
>>402 教えていただいた方法で書き直しました
こちらのほうが無駄がなくていいですね
本当に助かりました、ありがとうございます
皆さんのところでは、Win 7 x64 + AHK_L x86 rev 61 で SoundPlay は動いてますか?
なんで64で32使ってるの? Win7 32bitでAhk_L 32bit Unicodeだとちゃんと音鳴るぞ
そろそろ_L版に乗り換えなきゃなぁと思ってるのだけど、うちも64機で、 以前から使い続けている32bitのAHK本家がそのまま動いたから それをそのままつかってる。soundplayも、問題なく動いてる。 64bitマシンで64bit対応AHKをつかうと、どんな恩恵があるの?
409 :
406 :2010/10/28(木) 21:07:19 ID:jJZO3LXf0
>>407 DllCall でドライバー直接たたいてる部分が AHK_L x64 で動んのですよ。
ポインターサイズやバッファーサイズの変更だけではどうにもならなかったので
諦めて x86 ビルドを使ってます。それ以外のスクリプトは x64 ビルドでいいんだけどね。
>>408 そうですか、じゃあ自分ちだけの問題みたいですね。なんだろ?
エスパーしてみると、裏で排他モードで何か鳴らしてるとか。
質問
Ctrl + Shift + C を操作してクリップボードにコピー →クリップボード内の=以降を正規表現で抽出(ファイル名)
→Googleディスクトップ検索 迄を一気にしてるつもりなんですが・・・
キー操作の Ctrl+C を Ctrl + Shift + C に置換えてるつもりですが、
Ctrl + Shift + C を押してもクリップボードへのコピーが出来てないようです。
従って、前にCtrl+C でコピーした内容がクリップボードに残ってて、検索される様なのですが?何が悪いのでしょうか?
-----
MsgBox,Ctrl + Shift + C で文字列の最後の=以降(ファイル名)をgoogleデスクトップで検索。
^+C::
;Ctrl+Cキーを送信して、クリップボードにコピー
Send,^c
;クリップボードにテキストが格納されるまで待機
ClipWait
;1行文字列の置換。
ClipBoard := RegExReplace( ClipBoard, "^.*=(.+?)$", "$1" )
;複数行文字列の置換。
;ClipBoard := RegExReplace( ClipBoard, "\A.*=(.+?)$", "$1" )
;置換えられたクリップボード(抽出されたファイル名)をGoogleディスクトップで検索します。
Run,
http://127.0.0.1:4664/search&s=P6EiCVVf5KnXpjFRh9HLxn61WY8?q=%ClipBoard% Return
-----
宜しくお願いします。
412 :
411 :2010/10/31(日) 00:11:24 ID:dGqZc2fG0
自己解決しました。
413 :
411 :2010/10/31(日) 00:23:45 ID:H5Svzd9O0
ガセです。継続してレス希望してます!
ディスクトップって・・・いままで生きてて、おかしいと思ったことはないの?
415 :
411 :2010/10/31(日) 00:48:52 ID:H5Svzd9O0
ああ分かってたのにデスクトップの間違いでやんす。
とりあえず、最初の Send,^c の前に、 sleep,1000 を入れてみて、様子を見てみたら? 物理キー入力と、キー送りが近すぎると、 動かないことが多い。
>>411 少なくともウチでは動くなぁ。
でも、その処理だとClipWaitで無限に待ったりしてないのかね?
いったんクリップボードを空にして、
タイムアウトを0.2秒くらいに設定してErrorLevel で変更されたかどうか見た方がいい。
^+C::
Clipboard =
Send, ^c
ClipWait, 0.2
If (ErrorLevel = 0)
{
q := RegExReplace( ClipBoard, 〜〜, 〜〜)
Run,
http://127.0.0.1:4664/search?s= 〜〜&q=%q%
}
ところで、
・正規表現置換後の文字列は普通の変数使った方がいいと思う
・それとURLのパラメタの並びおかしくね?
・コマンドの説明そのままのコメントは見にくくなるだけで要らない感じ
418 :
411 :2010/10/31(日) 01:24:20 ID:H5Svzd9O0
>>416 >>417 あ〜ホントだ。待機時間入れたら思ってた通りに動きましたわ。
ErrorLevel/変数/パラメタ/コメントの修正は、寝て起きてシャキットした頭で再度してみます。
>>416 様
>>417 様
夜分遅くお手数お掛けしました。ありがとうございます。
あ、コメントの件だけど、スレに貼る時のことね。 > ;Ctrl+Cキーを送信して、クリップボードにコピー > ;クリップボードにテキストが格納されるまで待機 こういうのはコマンド見りゃわかるし、分からなきゃマニュアル読めばいいだけだしな。
RegExReplace()で置換後文字列にTABを設定したいのですが どうしたらよいでしょうか? "\t"とするとそのままの文字が表示されてしまいます
MsgBox, % RegExReplace("hageTABhageTABhogeTABhoge","TAB",A_Tab)
MsgBox, % RegExReplace("abcdeABCDE", "i)b", "`t") 分かりづらいんだけど、 ・ 正規表現パターンの部分は正規表現のルールでエスケープする ・ 置換文字列の部分はAHKのルールでエスケープする 正規表現エンジン自体には置換機能は無く、マッチング機能のマッチ情報を元に AHK側で実装しているためにこうなっている。 ※ ちなみに、正規表現エンジンはUTF-8で動かしているので UTF16←→UTF-16 の置換を数度繰り返すため、 置換が遅いという報告がフォーラムに上がってる
間違っとるw UTF-8 ←→ UTF-16 ね
; このスレ参考にして、DLLの呼び出しのところを弄ったらAutohotkeyLでもFmod.dllが動きました。感謝!fmodce.dllはまだうまくいってないけどw
;
http://www.autohotkey.com/forum/topic53012.html AudioFile =%A_WinDir%\Media\tada.wav
; AudioFile =%A_ScriptDir%\test.wma
; AudioFile =%A_ScriptDir%\てすと.wma
msgbox,%AudioFile%
fMod := DllCall("LoadLibrary", "Str","FMOD.DLL")
DllCall( "FMOD.DLL\_FSOUND_Init@12", "UInt" ,44100, "UInt" ,32, "UInt" ,0x2)
fStream := DllCall("FMOD.DLL\_FSOUND_Stream_Open@16", "AStr",AudioFile, "UInt" , 0x20000, "UInt" ,0, "UInt" ,0 )
Channel := DllCall("FMOD.DLL\_FSOUND_Stream_Play@8", "UInt" ,-1, "Uint" , fStream )
Sleep 5000
DllCall( "FMOD.DLL\_FSOUND_Stream_Stop@4", "Uint" ,fStream )
DllCall( "FMOD.DLL\_FSOUND_Stream_Close@4", "Uint" ,fStream )
ExitApp
テンキーレスキーボードを購入したはいいもののやはりテンキーが欲しくなり、 scrolllockONでmjkluio789キーをnumpad0〜9に置き換える機能を作りたく m:: getkeystate, state, scrolllock, T if state = D send {numpad0} return (scrolllockON時にmをnumpad0にリマップ) というものを書いてみたのですが、 これではscrolllockオフ時にmの反応がなくなってしまいます 何かうまい方法はないものでしょうか
いやいやいや
>>426 $m::
getkeystate, state, scrolllock, T
if(state = "D") {
send,{numpad0}
return
}
else {
send,m
return
}
return
うちではこれでうまくいった
ただ素直にNumLock使えばいいと思うけど
AHKL使おうぜ #If GetKeyState("ScrollLock", "T") M::Send, {Blind}{Numpad0} J::Send, {Blind}{Numpad1} K::Send, {Blind}{Numpad2} L::Send, {Blind}{Numpad3} U::Send, {Blind}{Numpad4} I::Send, {Blind}{Numpad5} O::Send, {Blind}{Numpad6} 7::Send, {Blind}{Numpad7} 8::Send, {Blind}{Numpad8} 9::Send, {Blind}{Numpad9} #If
以前からahkで作ってexe化したラッパーに画像を関連付けしていまして、 実行時のX1ボタンやX2ボタンの押下状態で実際に実行するアプリを変えられる様にしていたのですが、 最近になってMouseGesture2を導入してからこの動作に問題が出てきました。 実行ファイルをダブルクリックの際に同時にX1やX2ボタンを押していても実行自体がされません。 「動作割り当て」にX1+左クリックやX2+左クリックを一部のアプリで登録しており、 その設定が干渉しているんだなとは分かるのですが、回避することが出来ません。 上記動作で「Default」条件にMG_Abort()とかを定義してみてダメでした。 MG_Abort()を設定した後で、試しに下の様なスクリプトでテストすると X1やX2を押しながらダブルクリックしても、どちらも0にしかなりません。 a := GetKeyState("XButton1", "P") b := GetKeyState("XButton2", "P") Msgbox, X1=%a% X2=%b% Return なにか上手い方法はありませんでしょうか?
「なにか上手い方法」ってフレーズはやってんの?
解決するために、自分では考えられない方法や手順に関して、
いろんな方法があるから、そう書くんじゃね?べつに嫌な気分にはならないけど。
>>430 さきに実行されたスクリプトが、キー入力を吸い取ってしまう。
だから、あとから起動されたスクリプトの入力に降りてこなくなる。
キー入力を吸い取らないように、キー定義の前に ~ をつけるとか、
同時に稼動しても問題ないように、双方を改造するしかない
これをやると、キーの2度押しコードの1回目とかで、無効にすべきキーが平常時のように
流れてしまうなどの弊害も出るので個別に面倒を見る必要がある。
>>430 そのジェスチャツールがボタン押下メッセージ奪って捨てちまうんで、
他のアプリとってはボタンが押されているのは気付きようがない。
でも、まぁ出来なくは無いかも知れない。
ボタン押下を検知できるのは常駐側だけなんで、そいつにお伺いたてればいいんじゃないのかね。
ラッパーExeから常駐スクリプトにSendMessageして、常駐側がGetKeyStateの結果を返す、とか。
>>428-429 出来ました!
私のキーボードにはnumlockがついてなかったので重宝しそうです
クリップボード文字列の英数を全角→半角に置き換えたい場合に 1文字ごとに1行のスクリプトを書いているのですが これをまとめて記述する方法はないでしょうか
文字コードでやりゃいいんじゃないのかね。 ToHankakuNumAlpha(str, target="A 1") { alpha := RegExMatch(target, "[A-Za-z]") num := RegExMatch(target, "\d") Loop, Parse, str { code := Asc(A_LoopField) If (alpha) && (code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A) out .= Chr( 0x41 + (code - 0xFF21) ) Else If (num) && (code >= 0xFF10 && code <= 0xFF19) out .= Chr( 0x30 + (code - 0xFF10) ) Else out .= A_LoopField } Return out }
カッコ間違ってるw > If (alpha) && ((code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A)) ちなみにAHKLユニコード版でないと動かない。 あと、記号類とかも一気にやりたいならNKF使うといいよ。
((code >= 0xFF21 && code <= 0xFF5A) || (code >= 0xFF41 && code <= 0xFF5A)) このORの右側って左側に含まれてるように見えるんだけどなんで?
うひゃー。左側は (code >= 0xFF21 && code <= 0xFF3A) だな Chr("A") Chr("Z") 0xFF3B〜0xFF40( [\]^_` )の誤爆があるんで、 A〜Z(0xFF21〜0xFF3A) と a〜z(0xFF41〜0xFF5A)を分けたつもりだったんだが…orz
6文字だけ記号が入ってるのか…意味わかんねw
>>435 まとめて記述、強引に書いてみた
;tarの並び順の通りに、対応して置き換える文字をrepに並べる
tar=ABCabc/¥()123
rep=ABCabc/\()123
Loop, Parse, rep
{
rep%A_Index% := A_LoopField
}
str = ABCDEF/¥(aaazzz)
Loop, Parse, str
{
order := RegExMatch( tar, A_LoopField )
If( order )
out .= rep%order%
Else
out .= A_LoopField
}
MsgBox, %out%
>>432 ,433
アドバイスありがとうございます
SendMessageでスクリプト間の通信は、ちょっと自分には難しそうなので断念しましたw
MouseGesture2で実行中も、X1・X2を押下したままジェスチャのタイムアウトまで
時間を待ってダブルクリックを実施すれば、X1・X2押下の状態がラッパーまで
通知されていたので、試しにスクリプト中の「移動中にタイムアウト」と
コメントが入っている部分をまるっと拝借してX1+左クリックやX2+左クリックの
押下時にMouseGesture.ahk側で実行するようにしたところ、期待通りの動作になりました。
Critical
SetMouseDelay,-1
MG_TimedOut=1
BlockInput,On
Loop,Parse,MG_CurTriggers,_
If A_LoopField<>
GoSub,MG_%A_LoopField%_Down
BlockInput,Off
Critical,Off
MouseClick, left
上記がそうなんですが、流行らせるページの管理人さんのスクリプトが高度すぎて
いまいちどうして上手く動作出来ているのかは理解できてません。
ほぼMouseGesture.ahkの956行あたりからそのまんまですが、
MouseMoveの行を削って、最後にMouseClick, leftを追加しました。
(MouseClick, leftを追加しないとトリプルクリックが必要だったので)
お恥ずかしい話ですが、これ何で上手く動いてるのでしょうか?
なんとなくですが、タイムアウトしたらトリガー押下を後からエミュレートしてる?とか考えてますが…
442 :
435 :2010/11/04(木) 05:00:57 ID:KIq6zHjp0
すみませんがもう1件質問させていただきます
複数行のクリップボード文字列を上下逆順に並べ替えたいのですが
どのようにしたらよいでしょうか
例)
A………
B………
C………
↓
C………
B………
A………
行数は可変です
(行数固定なら単純にマッチさせて逆順で置き換えればいいと思うのですが)
>>436 .
>>440 ありがとうございました。申し訳ないのですが自分の現在の理解度では
うまくクリップボード文字列に応用させられなかったので
全角半角置換についてはとりあえず今まで通りで行く事にします
443 :
442 :2010/11/04(木) 05:02:32 ID:KIq6zHjp0
>C……… のあと1行開いてるのはただの打ちミスです。スミマセン
command = run,c:\windows\system32\ %command% こんな感じで、変数の中に命令を代入したいのですが無理なんでしょうか。 別の設定ファイルの条件にしたがって分岐したいのですが、If 〜Elseが何十個も並ぶのが見にくいので変数でまとめてしまいたいんです。
文字列として変数に格納されているコマンドを実行するのは無理。 コマンドに渡すパラメタを変数で指定するならOK(1) もしくは、サブルーチンラベルを格納してそこにジャンプするようにする(2) あとはDynamic Function Call とかオブジェクトのメソッドにするとか… ランチャなら殆どは(1)で済む。 分岐で複数命令を実行したいなら(2)。 (1) command1 = spider.exe command2 = C:\Progaram Files\Hoge\hoge.exe Run, %command1% (2) Label = ExecCommand1 If IsLabel(Label) Gosub, %Label% (略) ExecCommand1: Run, foo.exe Return ExecCommand2: Run, bar.exe Return
>>393 WM機でGUI全画面に出来た。DllCall使うとは思わなかったw
#NoTrayIcon
isFull := False
Gui, +LastFound -Caption
Gui, Add, Button,, Close
Gui, Add, Button,, FullScreen
SetFullScreen(isFull)
Gui, Show, , Sample
WinMaximize
Return
ButtonClose:
ExitApp
ButtonFullScreen:
SetFullScreen( isFull := !isFull )
Return
SetFullScreen(isFull, SIP=True) {
flags := isFull ? 0x02 | 0x20 : 0x01 | 0x10
flags |= SIP ? 0x04 : 0x08
yOffset := isFull ? 0 : 26
DllCall("SHFullScreen", "UInt", WinExist(), "UInt", flags)
WinMove,,, 0, yOffset, A_ScreenWidth, A_ScreenHeight - yOffset
}
>>444 ありがとうございます
うまくいきました
右shiftキーの左隣(かなの「ろ」)ってどう記述すればいいんだろ? キーヒストリーだと半角のバックスラッシュ(\)って表示されるんだけど メモ帳で書くと「\」になっちゃう キーコード指定すれば問題なく使えるから困りはしないんだけど
AHKでGUIアプリを作ったのだけど そのウィンドウがアクティブなときだけ有効なホットキーを設定したいのだけど どうしたらいいのだろう? Gui, +LastFound WinGet, id, ID #IfWinActive ahk_id %id% a::b #IfWinActive ↑こんな感じでやれたらいいのだけど ウィンドウの指定で変数が使えないみたいなので 今はウィンドウタイトルの一致で設定してるけど もっと確実な方法はないものかなぁと なるべくLの機能は使わずにやれたらうれしいです
GroupAdd, MyGui, ahk_id %GuiId% #IfWinActive, ahk_group MyGui or #If WinActive("ahk_id " GuiId)
453 :
450 :2010/11/06(土) 14:59:34 ID:anhitfLM0
>>451 上の方のやつでうまく動かすことが出来ました
下の方はLの機能?うちのでは動きませんでした
どうもありがとうございました
すっごい今更なんですけど 1.0.48.04 - September 25, 2009 の Added full support for "if % expression". [thanks kenomby] っていうのは、具体的にどういうものなんでしょうか? if (expression)とは別物?
同じだと思う。 これは文法エラー(コマンドタイプ) If a > 1 { MsgBox, Greater } これはOK (式タイプは "{" を行末に付けてもOK) If (a > 1) { MsgBox, Greater! } これは通るので式タイプと見さされているっぽい If % a > 1 { MsgBox, Greater! }
>>455 なるほど、%で式だと明示的に書けるようになった、て事だったんですね
ありがとうございました
RegExReplace()でマッチさせる文字列に変数を使う方法はあるでしょうか iniファイルでマッチする文字列を管理したいのですが RegExReplace()内では変数がきかないみたいです
きくように書け
動きません できません やれないみたいです できないみたいです って書くよりも、その動かないコードを直接貼り付けたほうが、 ここの住人は働くし、働きやすい
RegExMatchで最後の数字列をマッチさせたいんですが、 RegExMatch(URL, "P)(?<=\D)(\d*)(?=[./\b])", Decimals) これではfoo/bar1.htmとかfoo/bar1/とかはマッチしてもfoo/bar1を逃してしまいます。 どう書き換えたらfoo/bar1までマッチするんでしょうか
>>462 ありがとうございます。
(\d+)(?=\D*)$とSplitPathを組み合わせたら何とかできそうです。
>>463 _L限定でよければ、ADOとか。SQLite ODBC Driverが必要だけど
; Janeの画像キャッシュ名からサイズを得てみる
db := ComObjCreate("ADODB.Connection")
com := ComObjCreate("ADODB.Command")
sDriver := "DRIVER=SQLite3 ODBC Driver;Database=Cache.icx" ; Cache.icxのパス
db.Open(sDriver)
com.ActiveConnection := db
com.CommandType := 1
com.CommandText := "SELECT size FROM headerTable WHERE cacheName=?"
sCache := "foo.vch" ; 調べたいキャッシュの名前
VarSetCapacity(n, 8)
rs := com.Execute(n, sCache)
if (!rs.EOF)
MsgBox,% rs.Fields(0).value
rs.Close(), rs := "", com := "", db.Close(), db := ""
まったくプログラムの知識がないのですが AutoHotkeyを勉強できる方法・サイトなどを 教えてください
hoppfrosch wrote: What about updating the examples within the AHK_L-Manual to be unicode compatible (- or AHK-L compatible at all)? Lexikos: Already done, but the downloads and online documentation hadn't been updated. There weren't very many ANSI-specific examples, afaict. ってな具合なんだけど、AutoHotkeyJp の doc は AHKL 用に最適化してもいいかな? 両方の互換性を考慮して旧docと真docの両方を読み直して、 双方の互換性のことを色々記述するのは結構なな手間なんで。 幸いにも旧docのミラーはあるわけだし
>>465 _L愛用してるので全く問題ないです
ありがとうございました!
470 :
名無しさん@お腹いっぱい。 :2010/11/08(月) 15:16:48 ID:xOom4MwI0
>>441 >SendMessageでスクリプト間の通信は、ちょっと自分には難しそうなので断念しましたw
SendMessageでスクリプト間の通信をするようになれば、
保守管理がかなりやりやすくなるんじゃないかな。
SendMessageの例は一見するとわからないかもしれないけど、
じっくり眺めてみればわかるはず。
>>468 賛成です。
できれば、AHKLのq and a がautohotkeyのforamに立っていたので、
その内容も紹介してほしいです。
すみません質問です。AHK_L使っていて、GetKeyStateを使って#Ifで 条件分岐させようとしてます。aだけならGetKeyState("a","P") = 1 でいいんですが、すべてのキーが押されてないときもしくは押されてるときって どう書けばいいですかね?"a" "b" "c"とか列挙してけば何とかなると思ったら 長すぎるよってエラーが出てしまいまして。どうすればいいですかね?
「全てのキー」って何を意味するの?キーボード上の全部のキーを全部押す状況ってあるの? それとも「任意のキーが押されている/どのキーも押されていない」ってこと? 具体的な条件を書いた方が早いと思う。
すいません補足ありがとうございます、 「任意のキーが押されている/どのキーも押されていない」 ってことです。 ちなみに今は xを押してるとき、iを押してるとき、xもiも押されてないときって感じでやってます。
キーボード上の全部のキーを全部押してもそれを検出することは不可能だけどな
Inputをタイマーで回せばいんじゃね
パフォーマンス的にはどうかと思うけど一応。 通常のタイプには向かない。これ使うといかに自分のキータイプがオーバーラップしているかが分かる。 #If CheckOtherKey() a:: b:: MsgBox,, [%A_ThisHotkey%], Some key is already pressed return #If ; どのキーも押されていない時のホットキー定義 CheckOtherKey() { static keys1:="abcdefghijklmnopqrstuvwxyz012345678-^@[;:],./" , keys2:="vkDC|vk1C|vk1D|vkF3|vkF4|Space|Enter|Backspace|Pause|F1|F2|F3|F4|F5|F6|F7|F8|F9|F10|F11|F12" ;足りないなら追加を ListLines, Off Critical SetBatchLines, -1 thisKey := RegExReplace(A_ThisHotkey, "^\W+|\s.+") Loop, Parse, keys1 If (A_LoopField != thisKey) && GetKeyState(A_LoopField, "P") Return True Loop, Parse, keys2, | If (A_LoopField != thisKey) && GetKeyState(A_LoopField, "P") Return True }
>>476 うおお、わざわざありがとうございます。
これから試してみます。
それとキーボード上の全部のキーを全部押す状況ってあるの? ってことですが
それをいわれるとそんな状況ってないOTL
あとは自分で考えて試行錯誤してみます。
どうもありがとうございました!
PC上で今(どのくらい)音が鳴っているか調べる事ってできる?
Windows上のボリュームを習得・変更はできるけど、鳴ってる音の音量は無理とはいわないけどきびしいんじゃないか。 無茶をするなら、再生リダイレクトで鳴ってる音を拾ってwave編集ツールなりdllなりで何デシベルかを返してもらうとか。
If()、if()、if、If、IF Loop、While(1)、While(True) 最近他人のコード見るたびにどれで書くか迷うようになった・・・
そろそろSwitch文が欲しい
なあちょっと聞きたいんだが・・・。 皆さ、GetKeyState("LAlt","P")とかで LAltが押されてることを調べることってできてるか・・・? 俺のマシンはできないというかなんというか。 これで判定文を書いてもうまく動いてないんだ…。 んでちょっと皆に聞いてみたくなったわけだが。 使ってるのは最新のAHK_Lです。
うちは動くなぁ Loop Sleep, 1 Until GetKeyState("LAlt", "P") MsgBox, LAlt detected
>>479 別ツールから取得してるんだけどdllか・・・
正直全く分からんけどいじってみるよ。ありがとう
空白しか含まれない文字列の場合〜っていう条件分岐どうやればいいかな? こんなの考えたけどなんか無駄な気がする CheckSpaceOnly(str){ static Space_Zenkaku := " " StringReplace, str, str, %A_Tab%, StringReplace, str, str, %A_Space%, StringReplace, str, str, %Space_Zenkaku%, return str == "" } str1 := " " str2 := "あ いう え お" MsgBox, % "「" . str1 . "」は" . ( CheckSpaceOnly(str1) ? "空白だけ" : "空白だけじゃない" ) MsgBox, % "「" . str2 . "」は" . ( CheckSpaceOnly(str2) ? "空白だけ" : "空白だけじゃない" )
非スペースがあるかないかを見た方が処理が早く終わるよ InputBox, str, Test, Enter some string,,200,110 If RegExMatch(str, "[^\s ]+") MsgBox,, RegEx, The string has non-space character!! nonspace:=False Loop,Parse, str If A_LoopField Not in %A_Space%,%A_Tab%, nonspace:=True Until (nonspace) If (nonspace) MsgBox,, Loop, The string has non-space character!!
おっと、ターンに + は要らないな。 "[^\s ]" で。 携帯でスクリプト打つのはムズいのぉ@AhkCE
>>486 見やすいしどう考えても置換するより速いね
どうもありがとう助かりました
AutoHotkey.exeを管理者権限で起動しないとAutoHotkeyが管理者権限で起動されたアプリケーションを操作できない でも管理者権限で起動してしまうと今度はAutoHotkeyから起動したアプリケーションを管理者権限を持たないアプリケーションが操作できない ぬおーMouseGesture.ahkで詰んだ 管理者権限AutoHotkeyからウェブブラウザ開くと他アプリがウェブブラウザへURL送れない
>>489 自分も似たような問題で悩んだ
基本的な解としては、通常権限で常駐するラッパーアプリケーションが必要になる
そしてそいつに AHK から命令を送って起動させる
自分とこでは、AHK から "ファイル名を指定して実行" に起動パスを送るって方法で
対処してかれこれ 1 年になります
書き忘れ AHK は管理者権限で起動しておきます
RunAsじゃだめなの?
もう覚えてないんだけど、RunAs で上手くいかない事例があったんだよね
ごめん色々調べてみたんだけれどファイル名を指定して実行に送るがわからなかった shell32.dllにDllCallみたいなことするの? AHKからrun, wscript myrun.js %cmd%でJScript呼び出して中でobjShell.Runしてもだめだった RunAsはいまいち使い方を理解してない・・ 管理者権限で実行するためのコマンドだった気がするけど違ったっけ
自分は英語版 OS + ファイル名に日本語は使わないので
日本語環境では適宜調整が必要かも
ファイル名を指定して実行、基本的な仕組みは以下のとおり
----
Run, shell:::{2559a1f3-21d7-11d4-bdaf-00c04f60b9f0}
WinActivate, Run ahk_class #32770 ; 日本語 OS なら "Run" を変えなきゃかも
Send, ここの文字列が送られる
----
RunAs はユーザーを変更して起動するコマンドです
詳しくはヘルプをどうぞ
http://www.autohotkey.com/docs/commands/RunAs.htm
>>492 理由を思いだした
RunAs はログオン用パスワードが必須なので、
複数のコンピューター/アカウントで使いまわす汎用スクリプト用には使いづらかった
起動時に username/password を InutBox とかで入力させて変数に入れておけばいいんでないのかね
>>497 うーん、自分はいいけど他人にやらせるのが面倒くさい
manifestで uiAccess="true" を付けて デジタル署名を付ければOKです。
64bit版と32bit版の二つを動かせば。。
質問です。以下のスクリプトは正常に動くのですが、 WinGetActiveTitle, Title If Title =Add Bookmark { 処理A }else{ 処理B } 2行目を If Title =ブックマークに追加 とすると、ウィンドウタイトルが「ブックマークに追加」でも処理Bに分岐してしまいます。 日本語の扱いの問題と思うんですが、どう回避したらいいんでしょうか。
503 :
489 :2010/11/13(土) 21:24:46 ID:AZ03NlDy0
みんなどうもありがとう 結局いろいろ試してみた結果、外部スクリプトでサーバー書いて元スクリプトからメッセージ送って操作する方法で落ち着いた 鯖スクリプトAhkCmdSvr.ahk #Persistent WM_USER_GOOGLESEARCH := DllCall( "RegisterWindowMessage", "Str", "WM_USER_GOOGLESEARCH", "UInt" ) Gui, Add, Text, , AhkCmdSvr OnMessage( WM_USER_GOOGLESEARCH, "AhkCmdSvr" ) return AhkCmdSvr( wp, lp, msg, hWnd ){ global WM_USER_GOOGLESEARCH, WM_USER_OPENPATH If( msg == WM_USER_GOOGLESEARCH ) /* ほにゃらら〜 */ } 〜〜〜〜〜〜〜〜〜〜〜〜 元スクリプトMG_User.ahk GoogleSearch: Msg := DllCall( "RegisterWindowMessage", "Str", "WM_USER_GOOGLESEARCH", "UInt" ) DetectHiddenWindows, On PostMessage, %Msg%, , , , % "ahk_id" WinExist( "AhkCmdSvr.ahk ahk_class AutoHotkeyGUI" ) DetectHiddenWindows, Off return みたいな 常駐スクリプト増えちゃうしメンテが大変だけど
どっちにしろプロセス分けなきゃいけないし、メッセージ毎に関数分かれてるから メンテもそれほどじゃないっしょ。 あと、メッセージ番号はユニーク(なはず)なんで、ブロードキャストしちゃってもいいんじゃないのかね PostMessage, DllCall("RegisterWindowMessage", "Str", "RemoteFunction", "UInt") , wParam, lParam ,, ahk_id 0xFFFF
505 :
501 :2010/11/13(土) 22:10:17 ID:+JgI8frP0
>>502 どうもありがとうございます。
AutoHotkey_Lに乗り換えることで解決しました。
MouseGesture.ahkの書き換えがちょっと手間でしたけど、これで快適になりました。
506 :
489 :2010/11/13(土) 22:26:25 ID:AZ03NlDy0
>>504 たしかに一斉にPostした方が簡素でいいですね
ありがとう
うちの環境で(AHKとAHK_L両方でやってみたんだが) a:: While GetKeyState("a","P") = 1 { If GetKeyState("NumpadLeft","P") = 1 ; { ToolTip,4 } } return ってやってaを押しっぱなしにしてNumpadLeftを押すと4が表示されるのはいいんだが Leftを押したときにも表示されちゃうんだよね。これって皆のところでもそうなのかな。 というか実は仕様だったりするのか? (英語のフォーラムのバグレポートに下手な文章で書いては見たんだけど、 まずここで聞けばよかった・・・)
508 :
名無しさん@お腹いっぱい。 :2010/11/14(日) 14:13:19 ID:dGM1bnQ20
Shift+DeleteをDeleteだけにするスクリプトと、 その逆のDeleteをShift+Deleteにするスクリプトを教えて・・・
<わからない9大理由> 1.読まない …参考書などを読まない。読む気などさらさらない。 2.調べない …過去スレ、ググるなど最低限の内容も自分で調べようとしない。 3.試さない …めんどくさいなどの理由で実行しない。する気もない。 4.覚えない …人から聞いて、楽して得た答えは身に付かないから、すぐに忘れる。 5.説明できない …何に困っているのか、第三者に正確に伝わる文章が書けない。 6.理解力が足りない …理解力以前の問題で理解しようとしない。 7.人を利用することしか頭にない …甘え根性でその場を乗り切ろうとする。 8.感謝しない …教えてもらって当たり前。事がすんだらさようなら。 9.逆切れする …自分の思うようにならないと逆切れする。 ★教えて君五大要素★ 1 読まない (文盲) 2 調べない (能なし) 3 試さない (発想力欠如のアホ) 4 理解力が足りない (馬鹿) 5 人を利用することしか頭にない (死ね)
読まないって読んでもないから文盲とは言わないよね
マニュアル類は全体的な整合性で記述してある。 そんなんもの積み上げれば積み上げるだけ、どこから取り付いて良いかさえ分からないのが初心者。 全部読めてしまったら聞く必要もないし。 表現されていないことは聞く必要があるけど。 マニュアルでことが済むようになるのはある程度少し知るようになってからだね。 有り難いのは魅力的な表現力で適切な知識のあるところに誘ってくれる人。
普通なら、
>>1 の日本語解説のイントロダクションと使用例を読んでるはずで
キーの指定法の確認として、マニュアルのホットキーの項目を見て目的達成
3〜4ページ読むだけなんだから、通常の人間ならここで質問するまでもないな
どっから手をつけたらいいのかわからないからとっかかりを教えて つーならまあいいんだけど イントロダクションにすら辿り着けない初心者の人も多そうだし だが理解する気ゼロのスクリプトクレクレはスルーでいいだろ この手合いは誘導したって読みゃしないよ
イントロのページなんだけど、ほぼ流行らせるページのままなんでかなり不親切なんだよな。
本家の現在のチュートリアル(
ttp://www.autohotkey.com/docs/Tutorial.htm ) のほうが全然マシなんで、
いつか訳して差し替えてやろうと思ってるけど、「暇な時でいいや」って感じで怠ってる。
そのまま訳すのもどうかとは思ってるんだけど、日本のサイトでのこういう解説って
インストーラのどのボタンを押すとかを手取り足取りスクリーンショット付きで解説してるけど、
あそこまでやるのもどうかと。
多分ほとんど直訳で済ましちゃうんだろうけど。
解説サイトをはじめから読む気がない人とか 今の解説サイトは不親切だとか、難しくて理解できないとか言う人は いくら最初に背中を押してやっても、その後まともに使いこなせるようになるとは思えない
イントロダクションのページより英語のままでも本家のチュートリアル読んだほうが まずは何をやったらいいのかがわかると思う。
初めてスクリプト書く人には取っ掛かりにくいとは思うから… 1)インストール 2).ahkを新規作成して下3行記入して保存 Space:: MsgBox, Hello Return 3)実行してスペース押す この次にイントロダクション、使用例、使用方法を読むって流れがいいと思う
流行らせるページが消えたのは残念なことだ 管理人氏も消すこたあないのになあ
nilのほうに人が来ないからね。しょうがないでしょ。
消したところで、はたしてnilを盛り上げるだけの効果はあったのかな? なんか、全然話題になってないけど。
nilはあのライセンスじゃ使う気もおこらない
別に盛り上がる必要はなく、バグ報告してくれる報告者だけ確保できればいいってスタンスらしい AHKページあるとそういう人すら呼び込めなくなる可能性があるので消すってな趣旨のことを書いてた
ウザい要望厨が湧くくらいには周知されたみたいだよ。 跡地のHTMLを書いてFTPで更新しただけにしては上出来だね。
>>522 今見てきたけど、何あのギャグみたいなの
マジであのライセンスなのか
Nilのライセンスってどういう文面なん?
AHKを流行らせる協会のようなジョークじゃないの
スレ・板違いも程々にな
PCスタンバイからの復帰後に自動でスクリプト再起動(reload)するにはどうすればいいでしょうか
はやらせるスクリプトで、電源環境の変化を検出するやつがあるから、 それで復帰を検出して、reloadすればいいんじゃね? 余談だが、俺はこれをつかってノーパソでスタンバイ復帰後、 俺しか知らない特定の操作をしてるかどうかのフラグを設けている。 その条件が満たされない場合、第三者が勝手に触ってるとみなして、 強制シャットダウンさせるようにしている。(再起動後はドライブがロックされる)
WM_POWERBROADCAST
533 :
529 :2010/11/17(水) 20:37:55 ID:gEJMTsRQ0
過去ログの電源メッセージ掴む方法で再起動できました みなさんありがとうございました
解像度を変更するにはどうすればいいのでしょうか
その質問を書く前に、何を試したの?
AutoHotkeyJp で検索かけたところ 取得する方法は書いてありましたが どの関数で変更すればいいかは見つけることができませんでしたが・・・
Remarkの欄にありましたー お騒がせしました^^
何か挙動が変なときがある。 FireFoxの XUL/migemo みたいな検索がしたくて、アルファベット押したら検索ボックスにキー入力させるやつ。 (KeyWait しているのは意図的にキーちょっと長めに押した時のみ反応させるため) #If (Janeのスレビューにフォーカスがある) && (キャレットが表示されていない) a:: b:: (中略) z:: KeyWait, %A_ThisHotkey%, T0.2 If (ErrorLevel) { IME_Set(0) BlockInput, On Send, ^f Send, %A_ThisHotkey% KeyWait, %A_ThisHotkey% BlockInput, Off } Return で、普通なら押したアルファベットが入力されるだけなんだけど、 たまに %A_ThisHotkey% の中身がおかしいのか、 「?hk_id XXXXXXX」 と出力される時がある。? は押下中のキー、XXXXXは数値。 検索文字を消して再入力すればいいだけなんで、あまり実害はないんだけど気持ちが悪い。 環境は XP Pro SP3, Lw61 32bit
漏れ本家AHK使っててAHKLの機能は何も必要ないけど もう更新されないしセキュリティ的にそろそろAHKLに移行する頃?
逆に本家使い続けるメリットって何かなって思ってみたり
メリットってのとは違うけど 歌詞サイトから取得した歌詞をDAPで見栄え良く表示させるために 文字列を整形するスクリプト書いたときのことだけど、 L版だとStrLen()でバイト数じゃなく文字数返されるので困ったことがあった。 んで、オレの知識じゃわからんので結局本家で作ったってのがあったな
ANSI(シフトJIS)でのバイト長を得るだけなら、以下のようにすれば出来るよ。 str = あいうえお MsgBox, % length := StrPut(str, "CP932") - 1 最後の -1 は終端のヌル文字(0x00)の分
543 :
541 :2010/11/20(土) 23:30:11 ID:xeNOkRtD0
>>542 ありがとう。
今度似たようなスクリプト書くときそれでやってみます。
544 :
名無しさん@お腹いっぱい。 :2010/11/23(火) 22:00:49 ID:IXfByVvb0
英語版キーボードでShiftなど + CapsLock をCapsLock押下に割り当てたいのですが 漢字ひらがななどの変換になってしまいうまくいきません。 うまくいった人はいますか? (CapsLockはESCにしました) 日本語入力での直接入力とひらがなの切り替えは F1::Send !{sc029} でやっています
545 :
544 :2010/11/23(火) 22:54:37 ID:IXfByVvb0
入力言語が日本語の時も英語のときも挙動がおかしいんです
547 :
544 :2010/11/23(火) 23:02:15 ID:IXfByVvb0
#CapsLock::CapsLock で出来ました。日本語英語とも動きます。ありがとうございました。 Winキーは便利ですね。ロック系の組み合わせは Winキーとだと安定するんでしょうか。
548 :
544 :2010/11/23(火) 23:10:44 ID:IXfByVvb0
そういえば +Capslock::Capslock は英語入力だとちゃんと動きました誤解があるといけないので
_人人人人人人人人人人人人人人人_ > すごくどうでもいい <  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^^Y^ ̄ ヘ(^o^)ヘ |∧ /
Lock系キーの動作は環境(キーボードやBIOS等)で変動するので他の人の参考にはならない 報告したいならPCやマザボの機種とか細かく環境書かないとほぼ無意味
NumLock状態をデバイス側で管理(?)するトリッキーなのもあったりするしな あと、OSのロケールとドライバの種類も大事だな
imeの処理を質問します。 変換中の文字列を取得しようと思い、
過去ログで出ていたahk.imeを改変して関数を作りましたが、 うまく動きません。
dllcallを使うために↓のページを利用しました。
http://msdn.microsoft.com/ja-jp/library/cc447983.aspx http://msdn.microsoft.com/en-us/library/ms905973.aspx どこを修正すればよいのでしょうか。
IME_ConposStr_GET(WinTitle="A") {
VarSetCapacity(stGTI, 48, 0)
NumPut(48, stGTI, 0, "UInt") ; DWORD cbSize;
hwndFocus := DllCall("GetGUIThreadInfo", Uint,0, Uint,&stGTI)
? NumGet(stGTI,12,"UInt") : WinExist(WinTitle)
VarSetCapacity(st2GTI, 4000, 0)
NumPut(4000, st2GTI, 0, "UInt") ; DWORD cbSize;
DllCall("SendMessage"
, UInt, DllCall("imm32\ImmGetCompositionString"
, Uint,hwndFocus
, Uint,"GCS_COMPSTR"
, Uint,&st2GTI
, Uint, 4000)
, UInt, 0x0283 ;Message : WM_IME_CONTROL
, Int, 0x0005 ;wParam : IMC_GETOPENSTATUS
, Int, 0) ;lParam : 0
return stGTI
}
結論から言うと無理。 IMEを使ってるプロセス以外からは入力コンテキストのハンドル(hIIMC)が取れていない。 というか色々間違ってる。動くわけがない。 ・SendMessage の投げ先の HWND がおかしい、 というかImmGetCompositionString の戻り値はバッファ長で HWND ではない。 ・ImmGetCompositionString の第1引数は hIMC ・UINT型なのに文字列渡して意味ない ( GCS_COMPSTR := 0x8 )
そうですか、そもそも無理でしたか。。。 スレ汚し失礼しました。
時間ごとにクリックさせていく自動化をしたいんですが、 初心者にはAHKかUWSCどっちがオススメですか? AHKのほうが、軽い気がするし、拡張性あるのでよさそうに見えるのですが 英語できない人間にはコードを知ったりするのが難しそう。 おしえてください。
時間ごとにフリスク食べさせていく自動化をしたいんですが、 初心者にはWindowsかMacどっちがオススメですか? Linuxのほうが、軽い気がするし、拡張性あるのでよさそうに見えるのですが 程度低い人間には教えたところで使ったりするのが難しそう。 おしえてください。
その程度なら、重い/軽いってのを気にする程のもんじゃないな。 習うより慣れろで、拡張性云々よりも自分の手に馴染むかどうかだよ。 どっちもネットで落としたらすぐ使えるんだし、とにかく試して決めればいいだけかと。
UWSCだと、動作記録→スクリプト保存→改変がすごくスムーズ 一からスクリプトを書くより、この流れのが初心者には楽 ヘルプが完全日本語 Loop処理の命令がいろいろあるが、初心者には1つだけの方がいいかもしれない AHKはコマンドの引数に要求されるのが変数と文字列の両方あるので、混乱するかも メッセージボックスはUWSCに比べてすごく書きやすい ホットキーでの再生/一時停止/再開が格段に使いやすい AHKのほうが軽い気がする 繰り返し何かさせるにはTimerがものすごく便利
一行にに命令は無理ですか?
二個の命令ということです
それは、なんのために?
dvorak を全部autohotkey で実現することにしたので 大文字小文字の命令なでは一行にまとめたいのです 見やすそうなので
すいません dvorakでひら仮名入力するのは久しぶりなので 誤字がひどいです
このスレの住人が作ってるAHK製の DvorakJ ってのがあるよ
Jじゃないdvorak を使う予定なのと キーアサインを個人的にもう少しいじるので
dvorakJ を参考にして書けそうですありがとうございました
超初心者の俺にはAutoMouseが最強 誰かwin7でも使えるようにしてくれw
>>558 レスどもです。こうやってみると
UWSCのほうが初心者にはいいみたいですね。
AHKは一時停止とかもできるのか、いいなぁ
3キー以上ってストロークのが使いやすくね? 1&2&3&4より1&2-3-4のが。 それよりも1&2でMenu出して選ぶのが好みだけど
正規表現テスター使ってみようかな?どうしようかな?どきどき
>>567 AutoMouseは最強だが最弱でもある
かなり初心者の質問です 常時有効にしたいキー群Aと、SuspendコマンドでOn/Off切り替えしたいホットキー群Bを 2つのファイルに分けて常駐させているのですが ひとつのファイルにホットキーをまとめるにはどう書くとスマートですか?
Lの#if
>>576 まとめられました!
すばやい御回答に感謝です
main.ahkスクリプトで、 sub.ahkのサスペンドやポーズなどを制御するには、どうするのが確実ですか? 1つだけならsubにサスペンドのホットーキー書いておいてmainでSendすればいいのですが 複数同時にしようとすると上手く切り変わらなかったりshift押しっぱなどの症状がでます あとexe化したスクリプトaaa.exeが常駐している状態で aaa.exe -sをコマンドラインで実行した場合、 引数「-s」を取り扱う方法はありますか?
>>578 ホットキーの待ちうけがあるスクリプトを複数連携させると、いろいろ面倒なことになるから、
メインスクリプトでキーの待ちを全部書いておき、必要に応じてホットキー無しのサブを
起動させるほうが安定すると思う。
連携のコツは、ファイルのINIやレジストリなどで管理情報を書いておき、
どのプロセスがいつ読んでも今の状況を外部から把握できるようにする。
引数は %1% %2% とかで読める。
引数の数は %0%
>>578 前者:
SendMessage と OnMessage 使うのが確実。
>>503-504 あたりも参照
DetectHideenWindows,On と WinMenuSelectItem 使ってもいいがトグルしかできない。
(頑張れば出来なくもないけど、SendMessageのほうが遙かに楽)
後者:
#SingleInstance, Ignore を指定してやらんといけないんで結構面倒。
自分と同じパスのAHKのプロセス探して、無い場合は自分が常駐して、
ある場合はそいつに引数を通知するって処理を自分で実装する必要がある。
引数(文字列)の受け渡しは面倒かも。
>>220-221 あたりを参照。
スイッチ・フラグみたいなのを通知するだけなら Send/PostMessageだけでいい。
>>579 , 580 ありがとうございます
WinMenuSelectItemは盲点でした
トグルだけでいいので目的は達成できそうです
SendMessage…いい加減手を出そうかな
あと
>>185 今さら自己解決。常識かもしれないけど。
IfGreater, 1, 0, MsgBox, True
とか
If 1 < 1
{
MsgBox, False
}
のコマンド型だとそのまま使えた
どの命令が実行されても 一緒に実行される命令ってかけますか? 他の命令に手を加えずに
言葉が足りなすぎ、やり直し
a::x b::y c::z . . . とあるときに どっかに書きくわえる形で a,b,c, が押されるたびにMsgBox 2 が実行されるようにすることは可能ですか?
できるけど、リマップのままじゃ無理。
a::Send x ならどうでしょうか
色々やり方はあるけど、共通関数噛ますとかすりゃいいだけ。 a::MySend("x") b::MySend("y") c::MySend("z") MySend(key) { ; ここに共通前処理 Send, %key% ; ここに共通後処理 }
a::Send xはいじりたくないんですけど…
じゃあこれ。説明はめんどいからしない。 OnMessage(0x8000, "MsgListener") #If Aspect() a::x b::y c::z #If Aspect() { DllCall("PostMessage", "Ptr", 0, "UInt", 0x8000, "UPtr", 0, "UPtr", Object(Object("key", A_ThisHotkey))) Return True } MsgListener(wParam, lParam) { obj := Object(lParam),keyName:=obj.key,ObjRelease(obj),obj:="" Tooltip, % keyName }
説明は欲しいんですけど…
591 :
582 :2010/11/28(日) 13:19:30 ID:Qeh4ib5M0
僕は説明要りません。DllCallは昔だいぶ使ったので大体わかります。
大体なのかよ
593 :
582 :2010/11/28(日) 13:45:53 ID:Qeh4ib5M0
それは各命令を調べれば完全にわかるだろう、ということです
>>589 様、ともかくありがとうございました
ま、一応。 Postしてるのは #If の処理時間を短くかつ非同期にするため。 hwnd=0x0 の窓に投げると自スレッドのキューにメッセージ溜められるんだけど、 コマンドのPostMessageだと窓が見つからなくて動作しないから DllCall にしてる。 lParamでキー名を格納したオブジェクトのポインタを渡して、後で復元。参照回数は適宜操作。
1.0.90.00 - November 27, 2010 Fixed: UrlDownloadToFile in Unicode builds on Windows < 7. Fixed: Upper-ANSI characters were sent as Alt+0 in ANSI build. Fixed: File.Pos was incorrect after attempting to read past EOF. Fixed: Escape sequences in #If expressions and static initializers. Fixed: ClipboardAll sometimes crashed the script with certain formats. Fixed: Transform HTML calculated length incorrectly for NNN; entities. Fixed: VarSetCapacity now correctly ignores #MaxMem for ByRef variables. Fixed: FileAppend,,file.txt set ErrorLevel=1 even on success. Fixed: Match length was miscalculated for RegEx callouts with the P) option. Integrated Sean's improvements to number handling in COM interop. Optimized RegExReplace and RegExMatch in Unicode builds.
本家が久々の更新か、と思ったらL
ロードマップがでてるな。
>>264 ,279 は v1.0 まで据え置きのようだ。
その他 v1.0 では
JSON をサポートするように
obj[key] .= "hoge" が利用できるように
etc.
v1.1では
SplitStr() : 割結果を配列オブジェクトで返す
RegExMatch() : 拡張してサブマッチをオブジェクトの配列で返すように
etc.
http://www.autohotkey.com/misc/AutoHotkey-v2.htm v2.0 では
互換性を捨てて多くの改善を行う方針。
If の評価式は*必ず*括弧でくくるように
= 演算子は常に評価のみで、代入は := のみに
→ IfEqual, IfGreater, EnvSet, EnvAdd などは廃止、汎用の「式」を使え
その他少なくない数ののコマンドが廃止・非推奨となるので、関数版を使え
#ifWinActive, などは存続
なんだか AutoIt v3 に近くなる印象。
でも何だか中途半端な気もする。
python 使いじゃないので JScriptで。 Dllのパスをカレントにしてから(もしくはフルパス指定で)COM登録しておく > regsvr32.exe AutoHotkey.dll [test.js] var ahk = new ActiveXObject("AutoHotkey.Script"); ahk.AHKtextDll("Gui,Add,Text,,This is test script\nGui,Show,,Test\nExit\nGuiClose:\nExitApp"); while (ahk.ahkReady()) {WScript.Sleep(100);continue;}
>>599 ありがとうございます。
ですが、うまく動きません
regsvr32.exe AutoHotkey.dllを実行し
(
http://www.autohotkey.net/~tinku99/ahkdll/ のHotkeyIt提供Win32wのバイナリを使いました)
test.jsにvar ahk以下の3行を保存して
test.jsを実行したら、
エラー「文字が正しくありません。」
コード「800A03F6」
ソース「Microsoft JScript コンパイル エラー」と表示されました
test.jsからautohotkey.dllを呼び出すときの設定が違うということなのでしょうか
書き忘れてました。 test.jsをutf-8 BOM で保存してます。 utf-8 non BOM だと「オートメーションサーバーはオブジェクトを……」というエラーメッセージが表示されます
>If の評価式は*必ず*括弧でくくるように この間全部括弧なしに書き直すか迷ってた マジで書きなおさなくてよかった・・・ >= 演算子は常に評価のみで、代入は := のみに これは良いね 使ってていつもすごい違和感があった
>>603 やはりautohotkey.dllを呼び出す前の問題ですね
調べてみます
ありがとうございました
v2では定数定義が欲しいなぁ。 プリプロセッサみたいな機構はあるんだし、出来なく無いだろうけど。 ロード時に文字列置換するだけでもいいんでどうにかならんかなぁ。 #Const WM_MOUSEMOVE 0x200 とか #Alias Convert vk1Csc079 #Alias NonConvert vk1Dsc07B
はやく v2 でないかなぁ。変態言語仕様が少なくなるのは多少残念ではあるけど。
今のペースだと3年ぐらい先じゃね?
現状でもやはり ^!F4::send, みたいなモディファイアキーを二つ含んだ ショートカットキーは無理なのでしょうか?
煽る気は全くないが、 その程度ならすまんが解説よむなり自分で試すなりしてくれ。
すいません
コマンドラインから検索ワードとして文字列を渡して検索結果をGUIのEditに文字列で表示するスクリプトつくっているのですが 既にスクリプトSearch.ahkが起動している場合、どうやって引数を渡せばいいんでしょうか?
>>578 ,580と似てるけど、GUI持ってるなら #SingleInstance, Off にして
起動済みのGUI窓にControlSetText して自分は終了でいいんでないの。
場合によっては検索ボタンとかも押してやる。
>>611 search.ahkの重複起動をOKにする
↓
search.ahk起動時、search.ahkがタスクリストにいるか、process,existなどで確認する
いたら、前から起動してるほうへ情報を転送し、自分は何も処理しないで終了する
いなければ、普通に処理実行
>>611 ,613
なるほど!
起動時にIfWinExistでそのスクリプトのGUIが存在したらControlSetTextして終了させる方法でやってみます
ありがとうございました
マウスカーソル(矢印ポインタ)を上下左右に動かすのって出来ますか? 文字カーソルはできるみたいなのですが、 矢印のポインタを簡単でも(飛び飛びでも)いいので 動かせられればと思っているのですができません。 ESC & I::MouseGetPos, imamousexpos, imamouseypos MouseMove, %imamousexpos%, %imamouseypos% +30, 50 return こんなんじゃやっぱだめですね
そのコマンドは引数に 式 が使えるから % は要らない というか、式では %〜% は使わない
ESC & I:: MouseGetPos, imamousexpos, imamouseypos MouseMove, %imamousexpos%, % imamouseypos +30, 50 return こうしたら動く 複数行の場合は「::」の後すぐ改行する MouseMoveの引数には文字型が要求されてるので、「% 」で変数型にする ちなみに第4引数にRを指定すれば色々いらなくなって1行で書ける Esc & i::MouseMove, 0, 30, 50, R
と思ったら式でもいけるのか
さすがahkって感じの仕様だなw
>>612 これは良ヒントになりました
見えないGUIコントロール作ってそれで引数を扱えば楽そうだ
>>616 レスありがとうです。いまだに%の意味わからなかったりしますが
>>617 レスありがとうです。
ちゃんと動きました。そしてちゃんとマニュアルのmousemoveのところに
第4引数ちゃんと書いてありますね。。。見落としてました。
結局まだ"% imamouseypos +30"の意味わからないけど、どうして片方サイドは%いらないのか
a=5 b=20 c=a*b の3つの変数があったとして(cは文字列) cの見た目通りの数式を変数zに代入することはできますか? z:=a*b の代入を何らかの方法で実現して、 MsgBox, %z% で100とさせたい 四則演算、括弧、乗数の数式に対応したいです
やりたいこと書いた方がいいかな。 簡易のテキスト形式の電卓を作ろうと思ってます メモ帳とかで下の用に書いてあったとき cの値をMsgBoxに表示するようなもの a=5 b=20 c=a*b
Eval のある言語使っちまえばいい a=5 b=20 c=a*b sc := ComObjCreate("ScriptControl") sc.Language := "JScript" script = var a = %a%;var b = %b%; sc.ExecuteStatement("var a=" . a . ",b=" . b) MsgBox, % sc.Eval(c)
>>623 なんぞwww
全く分からんけど、どう見ても危険ではないのでとりあえず実行した
これがオブジェクトの力か…ありがとう
AHK書いてる人はエディターって何使ってる? 最近入力ミス多いから強調表示や自動補完使いたくなってきた あとラベル/関数の折りたたみとか・・
SciTE4AutoHotkeyを使いなさい
Vimでautohotkeyのsyntax使うとか
Extrasフォルダの中身を 秀丸とかemeditorとかの強調表示や入力補完に 自動で変換してくれるスクリプトが過去スレにあったはず
現在カーソルが合っているファイル名を取得して Everythingという検索ソフトに渡すスクリプトを書きたいのですが いきなり詰まってしまったので質問させて下さい カーソル位置のファイル名を取得するにはどのようにしたらよいでしょうか?
カーソルって何? 何にせよ、とりあえずコピーしてクリップボードを使うのをまず考える。 具体的でないので話はここまでしかできん。
632 :
629 :2010/12/06(月) 06:44:42 ID:hnUEFu2IP
>>630 わかりにくくてすみません
マウスカーソルがあっている
あるいはエクスプローラ上でフォーカスが当たってるファイルという意味で書きました
上記と関係なくもうひとつ別な質問なのですが
zip版とインストーラ版のAutoHotkey_Lって動作が違うのでしょうか?
クリップボード文字列をRegExReplaceで置き換えるスクリプトを書いたのですが
zip版では思ったとおりの挙動になるのですが
インストーラ版だとクリップボードが複数行の場合におかしな挙動になります
マイナーバグのアップデートならアナウンスすらしないでZIP版を差し替えることはよくある。 ってかね。アンタ毎回情報少なすぎ。 必要な情報を書かなきゃ意味ないよ ・不具合があると思われる双方のバージョンやファイルサイズ、 ・不具合のあるスクリプト(の一部) とかが何も書いてないじゃん。再現出来なきゃ何の意味もないわけ。
>>625 にちょっと関連してるのですが
エディタの入力補完などの動作を
ahkのスクリプトを書く用に、ahkで実現してる人っていますか?
できたら晒して欲しいのですが。
あ、あともう1件お願いします ahkの変数名に使えない文字は !"#$%&'()=^~|\/.,<>?[]{}`:;+-* だけだと思うのですが、これで合ってますか? でこれを除外しようと下の様に正規表現を記述した場合にエラーになるのですが どのように記述すれば除外できるでしょうか MsgBox,% RegExMatch( "dummy", "^[^!""#\$%&'\(\)=^~|\\/\.,<>?[\]\{\}`:;\+-*]*$" )
ちなみに俺はEmEditorで、登録したキーワードと単語( [a-z_]+ )が候補に挙がるようにしてる。 パラメタを忘れがちな SplitPath などはスニペットを利用。
Windowsキーと組み合わせて動く動作(Win + Tabや、Win + f、Win + bなど)を発行したいのですが、うまくいきません。 これは不可能なことなのでしょうか? ;;右Winキーに#{tab}や#b >#h:: >#l:: Send,#{tab} Return RWin & vkE2::Send,#b
ウチでは無問題
capslockのオン・オフを一つのキーで切り替えることはできるのでしょうか? send,+{capslock}と書くと、capslockが有効なままになってしまい、オフにできません。 日本語配列のキーボードを使っています。 方法があればご教示ください。
GetKeyState("CapsLock", "T") SetCapsLockState
>>10 って、#InstallKeybdHook 入れりゃすむんじゃね?
少なくともうちの環境だと今のところ問題ないみたい
(WindowsXP、SetPointあり、その他の
>>10 のツールは入っていない)
>>643 もう2年以上この問題で戦ってるが、それ入れても出てるよ。
最近気づいたことは、XPだと頻繁に出るが、
Win7-64bitで32bit版AHKだと、ほとんど出ない気がする
キー発行するツールをAHKに一本化したら全く発生しなくなった。
過去ログになんかあった気がしたけど見つけた
AutoHotkey スレッド part9
http://pc12.2ch.net/test/read.cgi/software/1253888736/477 477 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2009/11/29(日) 04:49:46 ID:JxrO7rna0
使い始めたばかりでテンプレにある症状と同じかはわかりませんが
Ctrlキーが押しっぱなしになる原因が自分の場合ですがわかりました
~RCtrl:: a ;文字は特に何でも良い
~Ctrl:: a
上のどちらかををキーマップをしてるときに
外部のアプリケーションからCtrlキーが送られるとCtrlキーが押しっぱなしになるみたいです
自分の場合では、マウ筋からウィドウを閉じるCtrl+Wキーを送ったり
CLCLからCtrl+Vでの貼り付けを行うと必ず再現します
RCtrlキーを押すと直ります
647 :
643 :2010/12/11(土) 06:18:39 ID:jpHQD/GQ0
つまり、AHKが原因の場合はフック使えばOKってことか。 ただ、全部が全部AHKのせいって訳でもないでしょ。 こんなもんかなぁ。なんだか解説ページ丸写しのような感じになってしまった。 誰か修正してくれ。 Q:[Ctrl][Shift][Alt]が押されっぱなしになる時がある。これってAHKのせい? A: AHKが原因の場合とそうでないときがある ○AHKが原因の場合 AHKには、以下のような修飾キー付きのホットキーで修飾キー無しでキーを発効する場合、 一時的に修飾キー押下を解除して、発効後に押下状態を再度設定する機構がある。 しかしこのように発効するキーストロークが多い場合は、Sendコマンドが完了する前に 物理キーが押下解除されてしまっている場合がある。この齟齬が押しっぱなしの原因となる。 例) ^W::Send, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww これを回避するためには、以下の方法をとればよい: ・キー押下状態を常に監視するキーボードフックを導入する(#InstallKeybdHook) ・キー発効のコマンドを SendInput, SendPlay にする(SendModeで一括指定でもよい) ・上記二つが出来ない場合は、SetKeyDelay, 0 等としてキー発効をなるべく早く行うか、 #HotkeyModifierTimeout で修飾キー押下のタイムアウト値を長めに設定をする。 なお、他のキー発効を行うツール(クリップボードユーティリティやマウスジェスチャツールなど)が、 発効する修飾キーが原因となる場合もあるが、フックの導入でほぼ解決出来ると思われる。 ○AHK以外が原因の場合: 環境により異なるので何とも言えないが、以下のような環境の場合発生する事が報告されている。 ・ Logicool(Logitec)のマウスユーティリティSetPoint(verによっては問題ない事もあるとか) ・VirtualPC, WMWare, 窓使いの憂鬱 等のキーボードフィルタドライバを用いるアプリケーションを使っている
例) ^W::Send, wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww これしばらく試してみたけど、全然押しっぱにならない
いつのまに流行らせるページに代わるリファレンスがっ!
誘導してもらってきました。
ふつうお絵かきソフトって↓こういうのがあるんだけど
http://up3.viploader.net/ippan/src/vlippan174622.jpg 今使ってるソフトはそういうのがなくて
ショートカットキーで操作するようになっているんです。
こういうのはAUTOHOTKEYで作りたいので誘導してもらったんですが
何をどうすればいいですか?
とりあえずSmartGUI Creatorをインストールして
好きなボタンやテキストを張り付けれる所までは分かったのですが
この先はなにをすればいいですか???
ツールが吐きだしたスクリプトを編集して、ボタン工藤時のイベントを記述する。 具体的には Gui,Add の G オプションで呼ばれるサブルーチンを変更して、 キーを送るようにする。 GUIツールで処理内容を自動で作ってくれるようなツールは無く、 テキストエディタでスクリプトを編集することになる。
ありがとうございます。 たとえばノートパッドをお絵かきソフトだと仮定して ノートパッドが起動中、作ったウィンドウが ノートパッドの上にあって 消しゴムのボタンをクリックするとeキーを押したのと同じに したいんですが 「ノートパッドが起動中、作ったウィンドウが ノートパッドの上にあって」っていうのはどういうスクリプトになりますか? 以下を作ってみたんですがノートパッドにeキーが入力されませんでしたOTL Run,C:\Windows\System32\notepad.exe #IfWinActive ahk_class Notepad Gui, Add, Button,gEkey x2 y1 w30 h30 +Center, 消しゴム Gui, Add, Button,gZkey x32 y1 w30 h30 , 元に戻す Gui, Add, Button,gSkey x2 y31 w30 h30 , 筆大 Gui, Add, Button,gDkey x32 y31 w30 h30 , 筆小 ; Generated using SmartGUI Creator 4.0 Gui, Show, x127 y87 h65 w113, New GUI Window return Ekey: send, e return #IfWinActive
意図がよく分からんな。 > 具体的には Gui,Add の G オプションで呼ばれるサブルーチンを変更して、 をきちんと理解汁。 適当なサンプル作ったんで、リファレンスと格闘してくれ。寝る。 ※ 全角空白はタブに置換すること Run, NotePad.exe,,,pid GroupAdd, NotePad, ahk_pid %pid% Gui, +ToolWindow +AlwaysOnTop Gui, Add, Button, gButton1, 消しゴム Gui, Add, Picture, gButton2, %A_WinDir%\System32\main.cpl Gui, Show,, ツールバー WinWait, ahk_group NotePad WinWaitClose ExitApp Button1: WinActivate, ahk_group NotePad Send, Button1 Action Return Button2: WinActivate, ahk_group NotePad Send, Button2 Action Return GuiClose: ExitApp
>>656 ふぉおおおおおありがとうございます!!!
すみません 指定したフォルダ内のファイルやフォルダをすべて別フォルダにコピーさせたいです autohotkeyjpのFileCopyDirとFileCopyのサンプルがやりたいことに近いのですが、 できれば、コピーできなかったフォルダ名だけじゃなくて、ファイル名も表示させるようにしたいです どうすればいいでしょうか
ワイルドカードでコピーするんじゃなくてLoop回して1個ずつコピーして失敗したら変数に追記格納って感じだな
あるソフトをautohotkeyで操作して そのソフトのsave画面を表示させて その後手入力で任意のファイル名で保存後 その保存したファイル名と場所を AutoHotkeyで使いたい場合どうすればいいでしょうか?
あるソフトをautohotkeyで操作して そのソフトのsave画面を表示させて その後手入力で任意のファイル名で保存後 その保存したファイル名と場所を AutoHotkeyで使えるようにコーディングすればよい。 自分で手を動かさない丸投げ思考なやつに教えるものはない。
なら黙ってればいいのに
>>660 >>661 が言っているように、
>>660 の発言を逐一autohotkeyの処理に置き換えればいい
>>1 のautohotkeyjpのすぺてのページに目を通せば、どれもクリアできることが分かるはず
>>659 地道にそうするのがよさそうですね。そうします。
665 :
660 :2010/12/14(火) 23:56:50 ID:LF4MqoFR0
最初考えたのは一旦あるソフト上で保存したファイルを 一番新しいファイルとして検索して見つけて 場所と名前を取得するというのだったけど それじゃあ検索範囲が広すぎかなっと思ったんです。 すいませんでした。
保存用のダイアログを作ってみたんですが 保存用ダイアログに任意の名前を入力後(実際にはまだ存在しないファイル) その名前が取得できたかMsgBoxでfilenameを表示してみると ファイルの名前じゃなくて「filename」と表示されてしまいました・・・ どうすれば任意の名前が取得できるのでしょうか? FileSelectFile, filename , s 18, %A_Desktop%, 保存, *.psd MsgBox, filename
ワロタ
うわあああああ ごめんなさい、じこかiketusimasita 変数を%で括るんですねOTL お騒がせしてすいませんでしたOTLOTL
MsgBox, %filename% でどうよ
>>669 ありがとうございますOTL
ほんとうにすいませんすいませんOTL
俺が読解力がないのかなぁ。
>>660 は 手取り足取り教えてくれって意味じゃなくて
SaveAs のダイアログで表示されているフォルダパスと、
自分が入力したファイル名をどうやって取得すればよいのか?
って事なのかと思った。
ファイル名は Edit の値をループでとり続ければ何とかなりそうだけど、
フォルダパスは COM の Shell.Application でも列挙されないし、
お手上げだなぁと思ってレスしなかったけど、
>>672 save画面に直接入力せずに、
一旦autohotkeyのguiを経由して入力するよう
ワンクッションをかませればいいんじゃないかな
>>672 本人が何を考えてるかまでは、外部の人間はわからんからな。
やりたいことだけ列記して、途中経過をまるで提示しなかったのが、敗因だろう。
このスレって、コードを途中まで書いておけば添削してくれる人は多いじゃん。
添削するほうも、相手のやりたいことがコードを見ればある程度わかるから
添削もやりやすいし。
一番だめなのが「あるソフトを使って・・・」「あるダイアログが出るのを判別して・・・」
みたいな、具体的に書かないやつ。
ソフトによって、判別方法や抜き取る方法もいろいろあるから、
その書き方だと、一般論でしかアドバイスできない。
で、一般論なら
>>1 に全部書いてあるから、それを読めって話になる。
ぼかすのは多分、汎用性のない質問は「そんなソフト知らねーよ」で よけられてしまうかもって認識があるからだろうね 実際はこのスレの場合は具体的に書いた方が回答得られやすいんだけど
たぶんID:LF4MqoFR0 = ID:Kt8/zhW60だから、 ahkの保存ダイアログで保存名を入力させて名前とフォルダを取得してから あるソフト上のsave画面で取得した名前で保存する方針にしたんだろう さすがにMsgBoxはもう間違えないけど 文字列要求のとこに変数直書きはよくやるな
>>676 そうですそうです。
ID:LF4MqoFR0 = ID:Kt8/zhW60です。
どうもすいませんでした。
お陰様で653っぽい物が出来て
凄く嬉しいです。
ありがとうございました。
まぁ思い通りにいって何よりだ。 言っちゃあ何だが、レスの書き方の割には、こういうツールが「あう」人なんかな。
配列変更(月配列みたいな)にAHKを使っているのですが、 プレフィクスシフト(前置きシフト)にInputコマンドを利用していると、 素早く入力したときにInputコマンドが無視されてしまいます (Inputを発生させるキーを押した後間髪入れずに次のキーを押すと、本来シフトがかかるべき字が無シフトで出力される)。 こんな感じ Input,cha,L1 T1 If cha = q Send,ぁ Else If cha =w Send,ひ Return 高速入力に耐えうるプレフィクスシフトを実現させるには、どうすればいいと思いますか?
簡略化するにしても最低限動くコードをのせるべき
配列ってバッファのことじゃなくて親指シフトみたいなキーボード配列のことか シフトッつってんのに何で << とか >> とか使ってないのかひとしきり悩んでしまったわ
>>679 SetBatchLines, -1
これはすでに試した?
キーボードのLを左クリックと全く同じ動作にしたいんですが 押しっぱなしにすると連射してしまいます。 本家のマニュアルにあった prevent auto repeat feature 云々のも うまくいきません。 どうすればよいでしょうか
プレフィクスシフトって要は2ストロークキーだよな。それならホットストリングでどうにかならんもんなの? 自前で実装するにしても、Inputはあまり使わない方がいいんじゃないかなl・・・ 興味本位で作ってみた。実用に値するかは分からんけど。 コードはかなり圧縮したんで明日になったらもう分からないと思うw KeyMap := Object() KeyMap["A", "B", "C"] := "あ" KeyMap["B"] := "い" KeyMap["C", "B"] := "う" #If MultiStroke(A_ThisHotkey, KeyMap) a:: b:: c:: d:: ; 0〜9, A〜Z, 記号類とかも列挙するのがいいけど割愛 MultiStroke() Return MultiStroke(p*) { static @, $ := Object() If ( p.MaxIndex()==2 ) { $.Insert(p[1]) ,@:=p[2][$*] Return IsObject(@) ? True : (@!="" || $.MaxIndex()>1) ? $.Remove(1,999) : } Send, %@% }
l:: send, {lbutton down} keywait, l send, {lbutton up} return
>>686 それがうまくいかなくて今やり直したら出来ました
別の部分が干渉してしまって意図通り動かなかったようです
ご迷惑をおかけしました
キーボードでトラックポイントの代用にするのが目標です
過去ログに同じようなネタがなかったか? てか1スレ中に1回くらい同じようなのが出てきてる気がする
スレ住人ってね、代謝するんだよ。 一所に澱んでる人にはわからないのかもしれないけど。
キーボードのキーをマウス代わりにするっつーことは、
キー押下でマウス移動やクリック・ホイール等を発行するんだろうけど、
複数のホットキーで KeyWait 等のスレッド止まる系を使ってて
それらのキーを同時押ししちまうと「擬似マルチスレッド」の問題が出るわな(
>>8 )
稀な状況でなく、ドラッグ&ドロップとかの通常操作で起きうる。
キー状態見て発行すりゃスレッドは止まらない
L::Send, % !GetKeyState("LButton") ? "{LButton Down}" :
L Up::Send, % GetKeyState("LButton") ? "{LButton Up}" :
>>690 車輪の再発明をしたいのならそれでいいけど
そうじゃないのなら、過去ログとかフォーラムを見れば、て事なんだが
なんでそうひねれくれるんだかねぇw
スクリプト系スレだと車輪の再発明という言葉が頻発するけど、 練習の手段としてなら他人がすでに別のプログラムで実現させていることを自分でコードを書いて動かしてみるのありだと思うんだよ 言語の習得のためなら、車輪の再発明大いに結構。 他人のコードを最小限に改良して最短距離で目的を達するというのも、上級者の姿勢としては正しいとは思うのだが。
質問者に言ったんでしょ
自分は見覚えある質問だと思ったら過去ログコピペするなり誘導するなりしてる 同じ質問に繰り返し答えるのはたしかに無駄だが ご新規さんに質問前に過去ログ全部当たってこいってのは難しいっしょ、dat落してるし
あるキーを単独で押したときと、他のキーと組み合わせたときで 挙動を変えることはできますか? たとえばコントロールキーを単独で押したときにはIME切り替え、 他のキーと組み合わせたときは通常のコントロールキーとして 使う場合です。
できる。
>>1 の解説サイトの「ホットキー」のページを熟読汁
過去ログ > AutoHotkeyJp の ファイル置き場
AutoHotkey_LでMouseGesture2動かないのね。。。
ごめん、文字コードの問題だった。
>>648 亀だけどテンプレ作成してくれてありがとう
NGワード 「wたくさん」 で見落としてた・・・
Send, {w 20} とかに変えようぜ
vk1Dsc07B & `;:: は出来るんだけど vk1Dsc07B & `::: は失敗する… セミコロンってただエスケープするだけじゃだめなの?
>>704 正攻法かしらないけどコロン(:)もvkBAsc028って書き換えてみては。
効かなかったらKeyHistoryで確認。
AutoHotkeyLでWindowsキーを無効化したいのですが, どうも安定しません 以前は LWin::return で単独押下のみ無効になり, Win+Rのような修飾キーとしては機能していたと思うのですが, 試してみたところWinキー自体が無効になり, Rが素通りして押されてしまいます LWin::return LWin & r::Send,#r とすると, Win+Rだけでなくその他(Win+Eなど)のショートカットも有効になってしまいます 2つめのやり方で最初の予定通りの動作をするとはいえ, 記述通りの動作でないのはどうも気持ちが悪いです なんとか記述通りに動作するようにできないでしょうか スクリプトは上記のみで試しに動かしました またWinきーだけでなく, ctrl, alt, shiftでも同じ挙動になりました
URLDownloadToFileでタイムアウトの時間指定できませんか?
LWin:: IfWinExist, ahk_class CabinetWClass WinMove, 0,0 return これでエクスプローラー一つだけ動かせるのですが、他のも二つ…三つと動かせないでしょうか? class一緒だと無理ですかね ご教授お願いします
WinGet, 〜, List でマッチするクラスのウィンドウリストを取得して、 Loopでリストの全部に対して操作する
>>710 エクスプローラーのみなのですが、一個一個別々の指定することも可能でしょうか?
「別々」なのをきちんと識別出来るならなんでも出来る
713 :
706 :2010/12/23(木) 23:29:29 ID:pS+FmOIa0
>>708 無事期待通りに動かすことができるようになりました
ありがとうございます
おいーっす 1.0.91.01 - December 24, 2010 Fixed: Unexpected results with File.Write(Str) after text-reading. Fixed: UTF BOM check caused unexpected results in files without a BOM. Fixed (ANSI): Parsing loops and File.ReadLine() treated Chr(255) as EOF. Fixed (Unicode): RegExReplace errors where the UTF-8 and UTF-16 lengths differed. Fixed: Disabling the last hook hotkey breaks Input. Added: Simple optimization for RegExMatch/Replace.
1.0.91.00 - December 21, 2010
>>2 All changes in this release are COM-related.
Added: ComObjError now returns the previous setting.
Added: ComObjType(co) and ComObjValue(co).
Added: ComObjMissing().
Added: ComObjArray() and basic SAFEARRAY support.
Added: "Take ownership" parameter for ComObjParameter().
Changed: Values passed to COM functions via ComObjParameter are no longer freed in the process of calling the function.
Changed: ComObj.x() now falls back to PROPERTYGET if member 'x' is not found. This fixes for-loops for some objects.
Changed: Wrap unhandled variant types in an object rather than returning integer value.
Changed: Manage VT_UNKNOWN/VT_ARRAY lifetime automatically, by default.
>>Added: Simple optimization for RegExMatch/Replace. これはどういう事なんだぜ? パフォーマンス上がったよ!ってこと?
うん
おいーっす
>>2 1.0.91.02 - December 26, 2010
COM: Added protection against NULL IDispatch/IUnknown pointers.
COM: Skip QueryInterface for IDispatch if VT_DISPATCH is passed explicitly.
Minor fix for maintainability: obj.field := var now correctly yields SYM_STRING, not SYM_OPERAND.
なんかいっぱい来てる。訳してるけど意味分かんないやw
もう一から作り直してほしいわ ロードマップができてるんだから、さっさとやってほしい・・・
何様w
しばらくうp様子見だなこりゃ
そういえば
>>264 ,279 が治ってるな
._NewEnum() が通るようになったんで For ループで回せる。
質問させてください。WinXP(SP4)を使ってます。 WinGet, t , Transparent, A Msgbox, t = %t% で不透明度を表示しようと思ったんですが、どのウィンドウも初期値はカラッポなんですが そういうものなんでしょうか?、 Winsetで一度不透明度を変更すると、その後は数値が入ったままになってくれるんですが…
>>1 のドキュメントくらい読もうな
>Transparent
> ウィンドウの不透明度。
> 0が完全に不可視、255が完全に不透明。
> 半透明でないときは空になる。
>>725 すみません、なんとなく理解できてきました
上の例だとtの値が空の時はOFF(完全に不透明)って認識でいいんでしょうか
そう ってか、説明文の繰り返し以上のことはないよ
>WinXP(SP4) いつでたんだよ
流行らせるページの管理人さんがつくってくれた ファイルランチャーFileLaunch.ahk みたいなので新しいのありませんか? 2006年の6月で開発おわっちゃったみたいだし。 こういうコマンド入力型のランチャーほしい。 今はCraftlaunchつかってるけど。 だれかおしえて
散々既出だけど、質問が後を絶たないからでしょ。 きちんと読まないのが悪い。
あるならそのまま使えばいい話では? 追加の機能が欲しいなら、自分で実装するか、 やり方をこのスレで聞くかすればいい。ただし丸投げは禁止。
AHK_Lで実行ファイル化するとき、マニフェストファイルを埋め込むように 管理者権限つきの状態で実行ファイル化することはできないでしょうか?
1.0.91.03 - December 27, 2010 Fixed: RegEx callout subpattern vars - broken by v1.0.90.00.
COM便利すぎワロス コマンドラインも引数付きで取得できる。 Gui, Add, ListView, x2 y0 w400 h500 grid, Process PID|Name|Command Line For process in ComObjGet("winmgmts:").ExecQuery("Select * from Win32_Process") LV_Add("", process.ProcessId, process.Name, process.CommandLine) Gui, Show,, Process List
FileLaunch.ahkが難しくて使えない。 /scanall でエンター押してもうんともすんとも言わない。 scan.txtにF:\^ ってしてるんだけど。 最初つまづいて打開できないぐらいなら、止めたほうが いいんだろうけど、フォルダ検索とかかなり便利そうで使いたい。
指定のファイルをazpaintで開いて上書き保存して閉じるという ものを作ってみたのですが Send,,^sの実行が間に合わないままウィンドウが閉じられてしまいます どうしたらよいのでしょうか? (ウィンドウが閉じている間にSend,,^sが実行されたと思われるピンっという音がする) #WinActivateForce Process, Exist,AzPainter2.exe azpid = %ErrorLevel% if azpid = 0 { ;azpaintの場所を書く Run,C:\Users\ユーザー名\Desktop\azpt209\AzPainter2.exe %A_ScriptDir%\ttt.psd,,,azpid } WinWaitActive,ahk_pid %azpid% ;azpaintでの上書き保存のショートカットキー Send,,^s ;ショートカットキーを押したら保存中のウィンドウが出るので ;そのウィンドウが閉じて元のウィンドウが出るまで待つ WinWaitActive, ahk_pid %azpid% Process, Close,%azpid% WinWaitClose, ahk_pid %azpid% ExitApp
Process, Close は強制終了だから、 WinClose でいいならそれを使う。
FileLaunch.ahkのウインドウ上では、AHKのホットキー機能利かないんですね。 下カーソルキー(↓)を無変換とkに割り当てたいのですが、出来ないです。 自分のGUIだから無理なのかな。 #IfWinActive,ahk_class AutoHotkeyGUI vk1Dsc07B & k:: Send,{Blind}{Down}
741 :
737 :2010/12/29(水) 15:30:02 ID:ohwA7N190
こんな感じで出来ました ありがとうございます! #WinActivateForce Process, Exist,AzPainter2.exe azpid = %ErrorLevel% if azpid = 0 { ;azpaintの場所を書く Run,C:\Users\ユーザー名\Desktop\azpt209\AzPainter2.exe %A_ScriptDir%\ttt.psd,,,azpid } WinWaitActive,ahk_pid %azpid% sleep 1000 ;azpaintでの上書き保存のショートカットキー Send,^s WinWaitActive, 処理中 WinWaitClose, 処理中 WinWaitActive, ahk_pid %azpid% WinClose, ahk_pid %azpid% WinWaitClose, ahk_pid %azpid% Exit
礼はいいとしてその程度の例はいらないというわがまま意見
使い始めて一週間経ってない俺には必要というわがまま意見
本体めちゃでかくなっちょる
>>735 ここら辺ってJavaScriptのクラスとかオブジェクトの文法とほぼ同じ?
_Lの拡張っぷりがすごすぎてAHKに無限の可能性を感じてきた
まあ実行速度がry
つかほんと、プログラミング経験ゼロのahk初心者から
ScriptControlでVBもJScriptも使いこなせる玄人までの
幅広い人たちの集うスレだな
>ここら辺ってJavaScriptのクラスとかオブジェクトの文法とほぼ同じ? COMオブジェクトをAHKのオブジェクトで包んだラッパーだから使い方は一緒。 ただ、引数や戻り値として使える型に制限がある。 今回の更新はそれを解消するために、COMで使える配列型など(のラッパー)を用意したって感じ。
>>733 Compile_AHK使って、Vista UACを変更すればいいんじゃないの
つか「管理者として実行」またはプロパティで「管理者としてこのプログラムを実行」にチェックとか
そういった解決方法はだめなのか
なんとかしてcomを使って普通の標準出力を使えないものでしょうか コマンドプロンプトからコンパイル済のプログラムを呼び出して、その結果を取得したいです
COMは万能じゃないよ。 ってかファイルオブジェクトで出来るだろ。
他ランチャーから、Autohotkey.iniに書かれている複数行に渡るスクリプトを呼び出して 動かしたいのですがどうやればできますか? exe代わりに、ahk拡張子のファイルを作って実行しようと思ったのですが、 そのままコピペしても動かないし、余分にひとつAHKが常駐してしまうので、 目的を達せられないのです。教えてください。
これを参考にランチャーからスクリプトA(下記例のsender.ahk)を実行して、 常駐スクリプトB(下記例のreceiver.ahk)に値を渡し スクリプトAを終了させればいいんじゃないかな AutoHotkey スレッド part8 290 名前:名無しさん@お腹いっぱい。 [sage] 投稿日:2009/06/21(日) 18:58:11 ID:16cGC6mhP (p2) まあ、人それぞれだから好きにすればいい 一応OnMessageだってahkのコマンドだし、覚えるのが大変なのはGUI絡みだって同じだと思うけどね 文字列の受け渡しになるとちょいと面倒になるけど、数値の受け渡しならこの程度で済む --- receiver.ahk --- OnMessage(0x5555,"MsgHandler") MsgHandler(wParam, lParam, msg) { TrayTip,Receiver,Message %msg% arrived:`nWPARAM: %wParam%`nLPARAM: %lParam% } --- sender.ahk --- F12:: SetTitleMatchMode 2 DetectHiddenWindows On PostMessage, 0x5555, 11, 22, , receiver.ahk ahk_class AutoHotkey return
1.0.91.04 - December 29, 2010
>>2 Fixed (Unicode): RegExReplace omitted all text up to StartingPosition (broken by v1.0.90.00).
SciTE_beta4って日本語がぁだめだねぇ...
文字列受け渡し ;--- sender.ahk --- 受け手のEditを書き換えて、メッセージで通知する。改行はLF(`n)になるので注意 DetectHiddenWindows, On ControlSetText, Edit1, %Clipboard%, getmojiretsuGUI ahk_class AutoHotkeyGUI SendMessage, 5555, 0, 0, , getmojiretsuGUI ahk_class AutoHotkeyGUI ;--- receiver.ahk --- メッセージを受け取ったらサブルーチンを実行する OnMessage( 5555, "getmojiretsuFnc" ) getmojiretsuFnc(){ GoSub, getmojiretsuSub } ;Editを作成、コントロールハンドルを取得しておく Gui, Add, Edit, Multi Gui, Show, Hide, getmojiretsuGUI If A_DetectHiddenWindows = Off { DetectHiddenWindows, On WinGet, getmojiretsuCtrlHWND, ControlListHWND, getmojiretsuGUI DetectHiddenWindows, Off } Else WinGet, getmojiretsuCtrlHWND, ControlListHWND, getmojiretsuGUI Return ;受け取ったときのサブルーチン getmojiretsuSub: ControlGetText, mojiretsu, , ahk_ID %getmojiretsuCtrlHWND% MsgBox, %mojiretsu% Return
GUI使って文字列やりとりするなら、メインウィンドウのEditに書いちまえばいいじゃん。 送り手: DetectHiddenWindows, On SetTitleMatchMode, 2 IfWinExist \serv.ahk ahk_class AutoHotkey { ControlSetText, Edit1, ほげほげ PostMessage, 0x8001 } 受け手: OnMessage(0x8001, "MsgListener") MsgListener() { DetectHiddenWindows, On ControlGetText, value, Edit1, %A_ScriptFullPath% ahk_class AutoHotkey MsgBox, % value }
749です。 ご回答ありがとうございます。 ただ提示された文字式が高度すぎてまったく分かりませんが。 当初自分がやろうと思っていたことは出来るようになりました。 ただ単にやりたい複数行のスクリプトを空のahk拡張子ファイルに コピペして、それを実行することで、思うことが実行できました。 なぜ前にテストしたときはまったく動かなかった&AHKアイコンが 余分にひとつタスクトレイに残ることになったのか分かりませんが。 ただやはりちょっと実行時重く感じますし、すぐ壁に当たるでしょうから ご掲示されたsenderとreceiverのやつ試してみます。片方は本体の autohotkey.iniに書いちゃっていいのかな。 とにもかくにもありがとうございました。
常駐スクリプトで保持している情報(変数)がが必須な処理をする必要がある場合、 常駐スクリプトに何らかのメッセージを送って機能を呼び出してやらないといけない。 そうでないなら、単体スクリプトをランチャーから呼び出すだけでいいはず。 常駐スクリプトと単体スクリプトで同じ機能を持たいだけならば、 関数やサブルーチンに分割した別ファイルをインクルードすればいいだけのこと。 前者のケースってあまりなさそうだけど。
メインのexeを実行。並行して複数のサブexeも実行
サブが先に終わり、結果をメインに投げる
受けとったものをメインが利用、とか
複数の結果を同時に利用する場合はサブだけじゃ難しい
まあ文字列はiniとかtxtのが楽そうだけど
>>755 このEdit1てのはどこに存在してるの?
普段は何も書いてないみたいだし、exe化してもあるし
AutoHotkeyの本体。トレイアイコンから呼べるやつ。 ListVars や ListLines で各種情報を表示するところ。
exeを実行したらAutoHotKeyのインストールフォルダにあるiniを自動で読み込んでくれない どうするの?これ。 マイドキュメントに設定ファイル置くのが嫌なので悶絶するけど 一生変わらんのだが 久々にアップデートしようと思って、AutoHotkey_Lのインストーラーを落として 実行してインストールしたのに。 >AutoHotKey.ahkの拡張子を.iniに変更し、インストールフォルダ(AutoHotkey.exeが存在するフォルダ)に置いておくと、 >マイドキュメントフォルダにAutoHotKey.ahkがなくても、インストールフォルダにあるiniを読み込む ってのググルとでてくるけど、何度やっても無理だ。なにもうこれ
AutoHotkey.ahkを拡張子変えずにインストールフォルダに置いたら、 いままでと同じように起動してくれた。 ドキュメントにahkファイル置かなくても。 .iniに変えてインストールフォルダに置いたら マイドキュメントにかならずつくろうとする。 ほかのページやAutoHotkeyJpにもiniに変えると 前のように出来るみたいに書いてるけど、 オレの場合違うんだが。 あーしんど、英語読めないのはやっぱり致命的だわ
ここの連中はただでさえ初心者大嫌いだから そんな態度じゃ罵倒されるだけだぞ Revision 51 - April 11, 2010 * Changed: Use <EXENAME>.ahk instead of AutoHotkey.ini or AutoHotkey.ahk.
>>762 ありがとうございます。ほんとだ。デフォの名前に限らずEXEファイルの名前と
ahkファイルの名前を同じにすれば、きちんと動くw
すごい改善。こうなればいいなーって書いてた掲示板あったけど
そのとおりになったのか。
分かりやすいところにどっか書いてて欲しかった。
おれが英語読めないだけだけど。
このスレに来たのは今年のはじめでした。
お世話になりました。
みなさま良いお年を。
フルスクリーンで動作するソフト(ゲーム等)でAutoHotkeyでさらに前面にテキスト表示する方法を考えてます。 見当も付かないのでヒントだけでもお願いします。 ゲームのFPSを計るソフトのように表示したいのです。
ここの連中はただでさえ初心者大嫌いだから そんな態度じゃ罵倒されるだけだぞ
>>765 まず、GUIを作って文字を表示する((これが基本)
WinSet, で最前面化が可能。
同じく、WinSet で特定色を透過させられるので背景色を透過させる。
アンチエイリアスが掛かって汚いなら、Gui, Font でアンチエイリアスを抑制する。
GUIにはタイトルバーを無しで、ツールウィンドウにすると良い。
表示する時は非アクティブで表示させるようにする。
以上でできる。
だ が し か し 、ゲームのように DirectX で描画している場合、
ちらついたり一瞬で消えたりと、うまいこと表示されないこともある。
これはどうしようもない。
>>766 どう質問すれば答えが出やすいとか、もうちょっと建設的にアドバイスしてやれよ。
>>767 ヒント(?)だっけ。ツールチップ(?)だっけで
文字表示するのはむりか
1.0.91.05 - January 1, 2011 Fixed: Cleanup code in COM method calls was freeing the wrong parameters. Fixed (ANSI): DllCall set incorrect length for wstr parameters on output. Fixed: Variadic function calls were unstable when param object was empty. そろそろバグも出尽くす頃かなぁ。 バージョンは表記は以前のリビジョンよりは分かりやすいな。
autohotkey_l unicodeの質問です。
autohotkeyで無名関数を実現したいです。
フォーラムに情報はないものかと探し回っていたら、autohotkey_l製作者lexikosのそれらしき書き込みを見つけました。
LowLevel & dynamic code
http://www.autohotkey.com/forum/post-241575.html#241575 ですが、autohotkey_l最新版だとサンプルコードが動きません。それと、これは一昨年の情報でした。
最終的にはjavascriptのlambdaみたいなものを使いたいのですが、
無理なのでしょうか。
本日から14日前の日にちを出したいです。 どうするのが一番簡単ですか?
>>771 処理をその場にインライン化したいだけって意味の無名関数なら言語仕様的に無理でしょ。
というか、無名関数がなきゃ実現できないことなんかい?
>>772 タイムスタンプ形式のデータを格納した変数に対して、必要な日数(過去ならマイナス値)を単位指定して「加算」する。
MouseGenture.ahkで、Aeroのタイトルバーの条件式ってどうやんの? hittestじゃ反応しないぞ。なんかsendmassageとか使えば出来るとか?
#SingleInstance FORCE で使ってるスクリプトで、何らかの原因(ネットワーク越しのfilereadで読み込み中に失敗など) でスクリプトが半死のとき、定期間隔でsettimerを回して半死を判別しています。 それで、死んでると判断したときに、自分自身をreloadするようにしています。 reloadの際に、今動作中のスクリプトが応答しないと、新スクリプトの開始時に 「前回のスクリプトが居残っていますが、少し待ちますか?YES/NO」 のダイアログが出ますよね。 このダイアログに返答しないと、次のスクリプトが動いてくれず、 無人PCでの自動運転だと、ここで稼動しなくなってしまいます。 このダイアログを出さなくする、あるいは、自動でYESにするような 方法ってありますか?
MouseGenture.ahkを使ってみているのですが、
特定のウインドウをアクティブにしたい時に処理内容にWinActivateを書いています。
これをタイトルで正規表現でマッチングしたいと思い
SetTitleMatchMode, RegExをどこか初期化時に書けばいいというのはわかりましたが、
MG_User.ahkの ;;;;;;;;↓↓初期化処理↓↓;;;;;;;;;; の下に書けばよいのでしょうか?
グローバルな設定なため他に致命的な影響がでないものかな、と思いまして。
単独で使っています
MouseGenture2 ver 2008/10/07です。
http://lukewarm.s101.xrea.com/myscripts/mousegesture/index.html
>>775 死んでる場合や応答が極端に遅い場合、OnExitで終了しない場合は
該当ダイアログで Yes を選んでも、再度同じダイアログが出るだけ。
別プロセス(別スクリプト)で該当スクリプトのプロセスを殺して、再度起動って感じになるかも。
コマンドの Reload の部分を 「Run, Reloader.ahk %A_ScriptFullPath%」みたく変えるとかで対応かな。
-- Reloader.ahk --
DetectHiddenWindows, On
IfWinExist, %1% ahk_class AutoHotkey
{
WinGet, pid, PID
Process, Close, %pid%
Run, %1%
}
ただ、プロセスの強制終了なんでタスクトレイアイコンは残って、エラい事になる。
WinMenuSelectItem で殺せなかったらなどの処理をした方がいいかもしれない。
なんだこれeuc-jpにurlエンコードできないんか。Perlスクリプト書くか。。
StdIO.ahkでPerlとかRubyのコマンド使えるヤツ、AutoHotKey_Lじゃ使えないの? 使えている人いる?
WheelRedirect.ahk導入したらFirefoxでスクロールできないぞ
馬鹿自慢大会
なんで日記スレになってんのw
WheelAccel.ahk入れると秀丸で↑スクロールしても↓スクロールになるし、Firefoxでスクロールできない。
二つのファイルが同一ファイルか調べたいんですが専用の関数とかありますか?
>>777 ありがとうございます。外から仕留めるのが確実っぽいですね。
その方法で対策してみます。
ここの連中はただでさえ初心者大嫌いだから そんな態度じゃ罵倒されるだけだぞ
初心者じゃないだろ、教えてちゃんだろ
>>510 762 :名無しさん@お腹いっぱい。[sage] :2010/12/31(金) 11:20:55 ID:lES3dB0a0 (PC)
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ
Revision 51 - April 11, 2010
* Changed: Use <EXENAME>.ahk instead of AutoHotkey.ini or AutoHotkey.ahk.
766 :名無しさん@お腹いっぱい。[sage] :2010/12/31(金) 23:13:09 ID:+6h9CfsS0 (PC)
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ
787 :名無しさん@お腹いっぱい。[sage] :2011/01/03(月) 05:21:55 ID:HQWXyqVC0 (PC)
ここの連中はただでさえ初心者大嫌いだから
そんな態度じゃ罵倒されるだけだぞ
わざわざ抽出する馬鹿自慢大会でした。
JaneとかJTrimみたいなDelphi製アプリケーションで最小化させるにはどうすればいいの? Alt+Space+Nで大体大丈夫だけど、反応しないヤツもあるし。
WinMinimize の解説をもう一度読むんだ
792 :
名無しさん@お腹いっぱい。 :2011/01/05(水) 15:29:02 ID:JNyNcWfG0
aキーを押しっぱなしにするためのスクリプトは作成可能でしょうか? Send {a down} のみだと一回しか押されませんでした。 よろしくお願いします。
キーリピートを発生させるにはループかタイマーで定期的にキー発行する その際は {a DownTemp} のほうがいい。
794 :
名無しさん@お腹いっぱい。 :2011/01/05(水) 18:32:02 ID:JNyNcWfG0
ありがとう。やってみます。(・v・)
初心者な質問で済みません。 AutoHotkey_L(64bit)を使って、 IfWinActive, ○○○ - Mozilla Firefox のようにFirefoxのページタイトルを指定したいのですが、全角文字が含まれるとうまく働きません。 どのようにすれば解決できるでしょうか?どうか、ご教示ください。
スクリプトをutf8で保存
スクリプトをUTF-8で保存
>>796 ,797
おお、即レスありがとうございます!
やってみたら無事できました。保存形式だとは全然気付かなかったので、
分からないままになるところでした。教えて頂いてありがとうございます!
Saiというお絵かきソフト上で、aキーを押した時に特定の座標をクリックしたくて (座標にはレイヤーパレットがあって、特定のレイヤーを選択させる予定) 以下のようなスクリプトを組んだんですが a:: BlockInput, on MouseClick, L,xpos,ypos,1,0 BlockInput, off return このソフトはペンタブレットを使用していると独自にその座標を取得しちゃうみたいで、 BlockInputを入れてもマウス(ペンタブ)の入力が無効化されず、ペンの位置にカーソルが 留まってしまいxpos,yposの座標をクリックできないんです 何かいい方法はないものでしょうか?
MouseMove と Send, {LButton} で解決できたら・・・いいね
>>800 残念、タブペンが指すキャンパス部分に点が打たれてしまいました・・・
マウスポインタの数を増やすソフトってのがいくつかあるんだけど 中にはSAIの統制が及ばないものがあるかもしれない
>>801 WindowsXP SP3 + 旧Bamboo(CTEシリーズ) + Bamboo最新Driver
という環境だけど、ペンタブでBlockinputが効く。
旧Driverだと効かない。
環境が書かれてないのでなんとも言えないけど、ペンタブのドライバーを更新してみては?
該当環境ならドライバの更新だな そうでないなら、WM_LBUTTONDOWN(0x201) と WM_LBUTTONUP(0x202) を PostMessage するとか。効かないかもしれないけど。
わたしもUWSCでSaiを操作しようとしてSaiのMouse情報取得が独自なせいでUWSCでの操作がいろいろできず困ったわさ
807 :
799 :2011/01/08(土) 14:38:06 ID://XNXGBg0
>>802-806 ありがとうございました!
>>805 の中身を流用して、これを入れることでレイヤーの選択を実現できました
ControlGet, layCtrlHwnd,Hwnd,, sfl_window_class29, レイヤー
saiLayerClickX := xpos
saiLayerClickY := ypos
clickLParam := saiLayerClickX | (saiLayerClickY << 16)
SendMessage, 0x201, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd%
SendMessage, 0x202, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd%
プログラミング素人なんで、いまいちSendMessageコマンドが何をしているのか
理解できてないままなんですが…「0x201」とか「<< 16」とかどういう意味なのかさっぱり
ア、アンタの為に私が作った訳じゃないんだからね!
>>766
>>808 勉強になります! 今までカーソルを直接動かす方法しか知らなかったのですごく便利そう
autohotokey_lで複数のahkファイルを起動させるのってどうやるの? 今、ショートカットに引数でスクリプトネーム記述してるんだけど2番目、3番目のファイル読み込んでくれない
すみません、 引数にAutoHotkey.iniを指定したらできました
ショートカットのコマンド欄に以下のように記述しているなら間違い。 "〜\AutoHotkey.exe" script1.ahk script2.ahk script3.ahk ... というか、ファイルリストをパラメタで指定したらそれらを全部開くってのは、 メディアプレイヤーとかの挙動ではありがちだけど、一般的かというと微妙。 面倒かもしれないけど起動させたいだけの exe を呼んでやらなきゃならない。 "〜\AutoHotkey.exe" script1.ahk "〜\AutoHotkey.exe" script2.ahk "〜\AutoHotkey.exe" script3.ahk : つまりショートカットじゃ実現できないんで、まとめて起動させる手法が必要 バッチでもいいし、AHKで Ru, 〜\Script1.ahk Ru, 〜\Script2.ahk Ru, 〜\Script3.ahk などとスクリプト書いてやってそいつを呼べばいい。
うはw エスパー間違ってるw というか exe リネームしなくてもいいんだぜ。
ファイルの場所を変数に入力して 一番最後の実行ファイルの名前だけ取り出す コマンドはありますか? c:\AAA\BBB\ccc\ddd.exe 右から\マークの位置を調べてその文字数で取りだすしかないですか??
おっとすまん誤爆
>816 SplitPathですね、ありがとうございます!!
820 :
799 :2011/01/09(日) 15:28:31 ID:VqTecAm80
すみません、再度質問させてください a::Lay_Select(0);一つ下のレイヤーを選択 s::Lay_Select(1);一つ上のレイヤーを選択 Lay_Select(x){ CoordMode, Pixel, Screen WinGetPos, layX, layY, layW, layH, レイヤー ahk_class sfl_window_class;レイヤーウィンドウ位置取得 ControlGet, layCtrlHwnd,Hwnd,, sfl_window_class29, レイヤー ControlGetPos, layCtrlX, layCtrlY, layCtrlW, layCtrlH, sfl_window_class29, レイヤー PixelSearch, SellayX, SellayY, layX + layW - 28, layY + layCtrlY, layX + layW - 28, layY + layH -28, 0xdb5e6f , Variation, Fast ;レイヤーパレット右端ピクセルの色から選択中レイヤーを検索 if ErrorLevel = 1 ;PixelSearchのエラーレベル:0…完了 1…失敗 return if ( x = 0 ) if SellayY - layY - layCtrlY + 44 < layCtrlH ;レイヤー下限位置判定 saiLayerClickY := SellayY - layY - layCtrlY + 44 else return else if SellayY - layY - layCtrlY - 6 > 0 ;レイヤー上限位置判定 saiLayerClickY := SellayY - layY - layCtrlY - 6 else return saiLayerClickX := SellayX - layX - layCtrlX clickLParam := saiLayerClickX | (saiLayerClickY << 16) SendMessage, 0x201, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd% SendMessage, 0x202, 0x0001, clickLParam ,, ahk_id %layCtrlHwnd% return } Saiで、aキーで一つ下、sキーで一つ上のレイヤーを選択するスクリプトを組んだのですが、 aとsを素早く交互に押すと、片方の選択処理が終わる前にもう片方の処理がカブってしまい 結果、同じレイヤーダブルクリックしてしまう現象が起きてしまいました (レイヤーをダブルクリックするとレイヤー名変更ダイアログが出てしまう) それを回避する方法をご教示いただけませんでしょうか…
甘えてんじゃねえぞ
処理が終わる前に、次の操作が始まってしまう。 それなら、処理が終わるまで待つといいよ。
流行らせるページのスクリプトで、コピーかカットの状態でクリップボードに格納するやつを AHK_Lに移植しようとしてるんだけどできない 文字の長さは倍にしたし、型はStr以外全部UIntだし、何がダメなのか分からんちん これどうしたら上手くいくんでしょうか? ps=C:\test.txt ClipboardSetFiles(ps)
;続き。filesをクリップボードにセットする関数。fMoveが0でコピー、1で移動 ClipboardSetFiles(files,fMove=0){ DllCall("OpenClipboard",UInt,0) size:=20+StrLen(files)*2+4 hData:=DllCall("GlobalAlloc","UInt",0x2042,"UInt",size) p:=DllCall("GlobalLock","UInt",hData,"UInt") NumPut(20 ,p+0) ;offset NumPut(0 ,p+4) ;pt.x NumPut(0 ,p+8) ;pt.y NumPut(0 ,p+12) ;fNC NumPut(0 ,p+16) ;fWide DllCall("RtlMoveMemory", "UInt",p+20,"Str",files,"UInt",StrLen(files)*2) DllCall("EmptyClipboard") DllCall("SetClipboardData","UInt",15,"UInt",hData) DllCall("GlobalUnlock","UInt",hData) hData:=DllCall("GlobalAlloc","UInt",0x2042,"UInt",4) p:=DllCall("GlobalLock","UInt",hData,"UInt") NumPut(fMove ? 2 : 1 , p+0) pde := DllCall("RegisterClipboardFormat","Str","Preferred DropEffect") DllCall("SetClipboardData","UInt",pde,"UInt",hData) DllCall("GlobalUnlock","UInt",hData) DllCall("CloseClipboard") }
>>820 上で出てるとおり、イベント割り込みの関係だな。
>>8 も参照のこと。
凡例(☆:開始、★:終了、→:処理、…:中断、×:破棄、・:バッファ中)
十分に期間が長い、あるいは単独押下のときは、普通に終了する。
A ☆→→→→★
Aの処理が終わる前にBが押されると、Bの処理が割り込み優先して実行される。
A ☆→→……………→→★
B ☆→→→→★
Aを素早く2連打したときは、同一ホットキーに割当て可能なスレッドはデフォルトで1個なので
処理完了以前に連打した場合は破棄される。
A1 ☆→→→→★
A2 ×
Critical を使うと割り込みが抑制され、処理はバッファされ後回しにできる。
A ☆→→→→★
B ・・・・・・☆→→→→★
>>823 アドレス・ハンドルにはPtr型を使う。とくに x64 なら必須
>>825 さんくす!
ほぼ全パターン変えて試してみたけどできなかったから
潔く諦めて外部ツールに処理してもらうことにしたぜ! ..orz
>>826 関数の開始時に、グローバル変数で、適当なフラグをたてて、
関数の終わりで、フラグを寝かす。
関数開始時に、そのフラグがたってるかチェック。
立ってたら、フラグが変化するまで処理を中断すればいいんじゃない?
俺は普段そうやってるけど。
828 :
名無しさん@お腹いっぱい。 :2011/01/09(日) 21:15:29 ID:DAkQQGwM0
あ、ほんとだw
>>826 =823
そういえば、クリップボードにセットするデータはヌル文字で区切って、
最後にヌル文字を二つ並べるって約束らしいけどそれやってるかい?
★はヌル文字で、Unicodeだと 0x00 0x00 の2バイトになる。
ファイル文字列★ファイル文字列★・・・ファイル文字列★★
この件だと
>>332 が参考になると思う。
831 :
820 :2011/01/09(日) 22:09:26 ID:VqTecAm80
>>825 ありがとうございます! ただ、Criticalを入れても改善できませんでした
>>820 のスクリプトのSendMessage直前に
tooltip, %clickLParam%
を入れて監視してみたんですが、clickLParamの数値は正しく変更されてるのに
クリックするポイントは一つ前の処理と同じになってしまうみたいです
これはどうなってるんでしょうか…?
処理がかぶっての現象、って認識から間違ってるのかも
すみません、プログラミング素人が手探りでやってるので
トンチンカンな事言ってるかもしれません ご容赦願います…
すいません、改行ってどうすればいいか教えて下さい。 /nか::か\nか'nかと思ったんですがうまくいきません。 Gui, Add, Text, x20 y125 w350 h20 , 設定1(ここで改行したい)*注意・・・・
>>832 Gui, Add, Text, x20 y125 w350 h20 , 設定1`n*注意・・・・
>>833 気持ちはわかるが、正解をとっとと書いたほうが早い場合もある
835 :
832 :2011/01/10(月) 00:14:15 ID:nVHB/T9/0
有難うございます ' じゃなくて ` だったんですね・・・。
こんなの作ったんですが 3行目のvOutの所でエラーが出ます。何が違っているのでしょうか??? Gosub,Gui Gui: Gui, Add, Edit, x20 y80 w340 h20 vOut,%Edit1% Gui, Add, Button, x370 y80 w90 h20 gSansyou,参照... Gui, Add, Button, x260 y230 w100 h30 gSettei,設定 Gui, Add, Button, x370 y230 w100 h30 gKyanseru, キャンセル Gui, Show, x130 y90 h280 w480, Show Return Sansyou: FileSelectFile, OutputVar1 , 3, %A_ProgramFiles%, 参照, *.exe Edit1 = %OutputVar1% GUI, Destroy Gosub, Gui Return Settei: Gui,Submit,NoHide IfNotExist, %Out% MsgBox, %Out%は存在しないディレクトリか存在しないファイルです。 Return MsgBox,%Out%は存在します ExitApp Kyanseru: ExitApp GuiClose: ExitApp
837 :
820 :2011/01/10(月) 01:29:39 ID:a+x/+a0P0
すみません、自己解決しました… 単純なミスです 下のレイヤーを選択する際にクリックするポイントと、上のレイヤーを選択する際のポイントが 接近しすぎていたせいで、ダブルクリックとして判断されていただけでした 片方のレイヤー選択の際、クリックするポイントのX座標を13ドットすらす事で解決できました お騒がせしました アドバイスださった方々、ありがとうございました
>>836 変数内の値を照会するばあいは %〜% とする。
コマンド等で変数を指定する場合は、そのまま書く
エラーメッセージと翻訳は以下ですOTL The same variable cannot be used for more than one control. The current thread will exit. Specifically: vOut 同じ変数が、複数の支配のために使われることができない。 現在のスレッドを表示する。具体的には:vOut
>>840 Gosubの後も実行されるから
3行目(以降)が都合2回実行されるんだよ。
一番簡単に修正するには2行目にReturnを入れる。
有難うございます!!! できましたぁぁぁぁぁぁx!!!
たびたびすいません basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe IfInString, %basyo%,Photoshop, { msgbox %basyo% } ってやるとエラー出ます。 The following variable name contains an illegal character: "C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe" 文字が不正ですっていうんです・・・。 文字の問題なら もしかしてInstaller for AutoHotkey_Lを使った方がいいのかと 思って公式からDownload→Installer for AutoHotkey_Lをクリックすると 「これは報告されている安全でない Web サイトです。 www.autohotkey.net 」ってなります。 もうどうしたらいいんですかOTL
あきらめたらいいんじゃないかな
>>844 そうですね・・・別のう回路をかんがえますかな
wheelredirect系で一番まともなのどれだよ。 大体Firefoxとかでスクロールできなくなるじゃねーか
848 :
843 :2011/01/10(月) 15:53:32 ID:nVHB/T9/0
>>836 を試していたんですがうまくいかなかったんですが
basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe
IfInString, basyo,Photoshop,
{
msgbox %basyo%
}
だと駄目で
basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe
IfInString, basyo,Photoshop,msgbox %basyo%
ってやるとうまくいく事が分かりました。
どうもお騒がせしました。
msgbox部分に沢山命令を入れたい場合はgosubいれといた方がいいんですか?
849 :
843 :2011/01/10(月) 15:56:17 ID:nVHB/T9/0
ごめんなさい自己解決です basyo=C:\Program Files\Adobe\Photoshop Elements 2\PhotoshopElements.exe IfInString, basyo,Photoshop { msgbox %basyo% } だとうまくいきました。 (Photoshopの後に「,」がつくかつかないか) 本当にお騒がせしました
最後のカンマが余計 ex) MsgBox, Hoge,
デスクトップ上の特定の部分を30分おきに 自動でマウスの右か左でクリックしてくれるソフトを探してるんですが このソフトはそれが出来るソフトですか? vista32bit
出来ます
できますよ
出来ますか? どういうふうにやれば良いんでしょうか? 全くの初心者です
a
初心者ならHiMacroExとかの方がいいと思うよ。
ウィンドウシェードやりたくてwinmoveでリサイズしても、最低ウィンドウサイズがあるやつは小さくならないんだけど、 なんとかならねー?
>>856 それでも出来る上にそっちの方が簡単ならそっちを使います
なんでこんなスレになっちゃったんだろ
シェード中は元窓は隠してGUIに置き換えちまうって手があるぞ。
ID:w8CmlM6s0 ID:b3oEGb/I0 こういうのは本当レスする気なくなるわ
>>861 なるほど。やってみる。
あと、Windows 7のメモ帳のタイトルバーがMouseGesture.ahkのMG_HitTest()でnowhereになるのはなんで?
WheelRedirectはマウ筋使えばなんとかなった。それだけのために使うのもあれだが。
あ、単にマルチディスプレイで対象ウィンドウのx座標がマイナスだと取れないのか。>MG_HitTest 駄目じゃん。。。
ツイッターでやれ
ironAHKのスクリプトはwindows用バイナリとしてコンパイルできるのでしょうか?
http://www.ironahk.net/の Scripts can be compiled into standalone executables
というところのリンクをクリックしたら404でした。
windowsでもlinuxでも同じスクリプトでキーフックできそうなので興味を持ったのですが
バイナリ化して実際に使っている方はいますか?
IronAHK.exe /out Example.exe Example.ahk
普段AutoHotKeyを使っていて、MouseGesture2というのを使ってみましたが、 起動してしばらくは上手く動作するのですが、気づくとMouseGesture2での動作がきかなくなっています。 何か疑う所はないでしょうか? やりたいことは、マウスを画面端に持って行くと特定のウインドウをアクティブにするといったことです。 今のところ初期設定の他にこれだけを設定しています。 ・「ジェスチャ定義」で 定義名「画面下中」 EB2_(画面下端に接触(中央)) を設定 同様に「画面下右」「画面下左」「画面上中」なども 画面下端に接触(右)、画面下端に接触(左)などように設定 ・「動作割り当て」で 「画面下中」に対して、条件Default、 動作は、 WinActivate, ahk_class Chrome_WidgetWin_0 にしてGoogle Chromeのウインドウをアクティブに 同様に、 「画面下右」「画面下左」「画面上中」などもそれぞれ他のアプリを設定 MouseGesture2を再起動したら、同様に設定を保存するとまた動作するようになります
どっかで動作が詰まってるんだと思う。 fileappendでログを吐き出させて、 settimerで60秒ごとに生死判別してみて、 死んでる場所を特定するしかないだろう。
>settimer スレッドが停滞するような処理記述してたら追い打ちだけどな
相性の問題か、特定のアプリと一緒に使うと なぜかマウス関連の動作が効かなくなるってのはある
WinActivateを特定のウィンドウやハング寸前のウィンドウに対して行うと AHKのスレッドが止まっちゃうことがある
そうなると、MaxThredsPerHotkey の関係で スクリプトを再起動するまで動かないままになるわな WinActivate って色々な方法でアクティブ化するってあうけど、 お行儀が悪い方法(AttachThreadInput + SetFocus とか)やってんのかね。
874 :
868 :2011/01/11(火) 23:23:21 ID:I+5MuC+W0
ありがとうございます
いろいろ原因は考えられそうですね
>>871-873 なるほど、それはありそうです
いくつかアクティブにするウインドウの中で、MouseGesture2を使う前からハングしやすいものがあったはずなので
ちょっとWinActivateにするアプリを絞ってみてみます
>>869 こういうときのために他のスクリプト言語にもあるようなlog4なんたらみたいなloggingライブラリがあれば楽そうですね
ロガーはこんな感じでやってる。全部使い方は同じ。 ログ自体出したくない時はロガーインスタンス自体作らない。 Logger := Logger_ConsoleImpl() ; Logger := Logger_Default() ; Logger := Logger_FileImpl("hoge.log") Loop, 10 Logger.WriteLine("ほげほげ - " A_Index) MsgBox, Click To Close ; ---- Logger.ahk ---- Logger_ConsoleImpl() { Return DllCall("AllocConsole") ? FileOpen(DllCall("GetStdHandle", "int", -11, "ptr"), "h `n") : } Logger_FileImpl(logFile, append=true) { Return FileOpen(logFile, append ? "W" : "A") } Logger_Default() { Return Object("WriteLine", "Logger_RedirectToOutputDebug") } Logger_RedirectToOutputDebug(text) { OutputDebug, %text%`n }
876 :
868 :2011/01/12(水) 01:14:01 ID:ZtXTpZDM0
>>875 あれっそんな記法できたっけ、とエラー出て思ったんだけど
テンプレにあるAutoHotKey_Lのobjectsの記法かな?
AutoHotKeyは浦島太郎なんだけど、今はもしかしてAutoHotKey_Lが主流?
877 :
868 :2011/01/12(水) 01:15:07 ID:ZtXTpZDM0
テンプレ
>>9 に書いてあった。スマソ
よく読むわ。
1.0.92.00 - January 13, 2011 Added support for compound assignments with objects, such as x.y += z. Improved IniWrite in Unicode builds to prevent an empty line from appearing at the top of each new file. Improved the parser to be more permissive about what can follow {/}/Else, especially when combined. --- ふむ。やっぱ楽なのはいいな。 obj := Object("int", 100, "str", "abc") obj.int += 5 obj.str .= "あいう" MsgBox, % obj.int "`n" obj.str
あれ、この記述今まではできなかったんだ 気付かなかった
ロードマップによると次のv1.0.93.xxで1.0系の機能追加は打ち止めってことになるんかな。 このペースだと2月か3月くらいには出そうな感じだ。 1.1系はまだ仕様が煮詰まって無いみたいだし夏以降かなぁ。 今まで通り、出来そうな所から実装で段階リリースになるかもしれんけど。 個人的にはこの方向性は歓迎なんだけど、 関数型になると途端に訳分からなくなる人って居るからなぁ でもブラックボックスでも使えるライブラリが作りやすい環境にはなると思う。
てか関数型になったらNilScriptどうすんの そのためだけに作ったそうじゃん
882 :
名無しさん@お腹いっぱい。 :2011/01/16(日) 17:13:16 ID:oRQ2+GBW0
>>3 を参考にしてジョイスティックのボタン13を短く二回押しした時にCtrl+Cを送るコマンドを作ってみました。
~Joy13::
SetTimer,Joy13_CheckCnt, 200
Joy13_cnt += 1
if(Joy13_cnt == 2)
{
Send,^c
}
return
Joy13_CheckCnt:
Hotkey,~Joy13, Off
SetTimer,Joy13_CheckCnt, Off
Joy13_cnt = 0
Hotkey,~Joy13, On
return
ここまではうまくいったのですが、Ctrl+Cを送る条件の「ボタン13を2回押し」の条件を
「ボタン1を押している最中にボタン13を2回押し」にしたいのですが、条件の追加がどうも上手くいきません
かなり初歩的な質問なのですが、アドバイスいただければ幸いで
関数型で分からなくなる人がって言うから いきなり関数型言語になるのか!と思ったら 全然違ってた まぎらわしいよー
オブジェクト指向を関数型って呼び始めたアホは誰だよw
AutoHotkey_L=AutoHotkey LISP
>>882 GetKeyStateで判断すりゃいいんじゃないか。
ちなみに JoyNN はどうせボタンイベント捨てられないんで ~ つけても付けなくても同じ気がするが。
AHKL使い始めてからというもの、こういう書き方はもうしなくなったなぁ。
今はこんな感じでやってる。DoubleClick() の名前はアレだが一応汎用。
#If DoubleClick() && GetKeyState("Joy1")
Joy13::Send, ^c
DoubleClick() {
static LastTime:=Object(), doubleClickTime := DllCall("GetDoubleClickTime", "UInt"), lastX:=-9999, lastY:=-9999
CoordMode, Mouse, Screen
If InStr(A_ThisHotkey, "Button")
MouseGetPos, x, y
Else
x := y := 0
flag := ( A_TickCount - (LastTime.HasKey(A_ThisHotkey) ? LastTime[A_ThisHotkey] : 0) ) < doubleClickTime
&& Abs(x-lastX) < 10 && Abs(y-lastY) < 10
LastTime[A_ThisHotkey]:=A_TickCount, lastX:=x, lastY:=y
Return flag
}
>>883 紛らわしくてすまんね。
コマンドはなるべく廃止の方向で、関数に置き換えられるって意味で書いた。
その言い訳はちょっと無理がある
888 :
名無しさん@お腹いっぱい。 :2011/01/16(日) 19:00:35 ID:oRQ2+GBW0
>>886 アドバイスありがとうございます
お陰でなんとか解決できました
ノートPCにPgUp, Homeとかが欲しくなる ↓ コンビネーションも使えるAHKでリマップすることに ↓ 最前面表示のトグルとか便利だから組み込みコマンドを使い始める ↓ InputBoxじゃ不満になってGUIに手を出しAHKに翻弄される ↓ 一通りAHKを理解し、小物のexeを作りまくる ↓ 常駐ソフトをすべてAHKで代替するべくSendMessageやDllCallを使い始める ↓ オブジェクトを使いこなすためにJavaScriptを学び始める ←今ここ
↓ 情報を求めて2chのこのスレに常駐 ↓ 知ったばかりの知識をひけらかしたくなり書き込み ↓ くだらない質問に説教 ↓ 無職 ←今ここ
AHKを使えるようになると、周辺機器のユーティリティのUIがクソで不便だとか、 ソフトの設定の煩雑さやダイアログが余計だとか、自動運転とか、 このあたりは自分で工夫さえすれば、どうにでも料理できるね。 最初はマウ筋の代替で使い始めたが、AHKのおかげで、 PCの活用の幅がものすごい広がった。
TeamViewerっていうリモートデスクトップソフトの切断後に表示される「よければライセンスかってね!」ってダイアログをイベントフックして自動で消してる ほんとAHKは便利 Avira AntiVirの広告ダイアログも追加しようかな
まぁ"auto"は automation から来てるからな。 ホットキー(キーアサイン)機能だけみるとやや貧弱だが、 キー発行と自動化を組み合わせると他のツール(の単独利用)じゃ出来ないようなことも楽々。
>>892 avira_close:
Process, Exist,avnotify.exe
pid=%errorlevel%
if pid!=0
{
WinClose,ahk_pid %pid%
WinWaitClose,ahk_pid %pid%,,1
closeflag=%errorlevel%
if closeflag=1
msg=%A_Now%,PID=%pid%,closeflag=%closeflag%(広告プロセスを検出したがウインドウ出現前。)
if closeflag=0
msg=%A_Now%,PID=%pid%,closeflag=%closeflag%(広告表示ウインドウのクローズに成功)
file=%A_Scriptdir%\avira_close_log.txt
fileappend,%msg%`n,%file%
}
1年ほど前に使ってたやつで、これを1秒のsettimerでまわして、とりあえず快適に動いてた。
広告が出ても1秒以内に消える。
細かい例外処理は未検証、aviraをやめてしまったので、今もこれで動くかはわからないけど。
>>885 の書き込みを見て思いついたのですが、
gaucheとautohotkey_lを連携できるでしょうか。
キーフックと出力はautohotkey_lで行って、
その間の処理はgaucheに行わせたいです。
言い換えますと、押されたキー名とその時間をgaucheに送って、
gaucheの側で処理し、
最終的にはそれをもとにautohotkey_lの側でキーストロークを発行したり
guiを作成したいのです。
↓のような形になると思いますが、
gaucheで処理をしている間、
これではスクリプトが待ってくれない気もします。。
;gaucheと連携させる
with_gauche = 1
#if (with_gauche)
a::
b::
c::
rslt := to_gauche(a_thishotkey,a_tickcount)
ahkl_output(rslt)
return
1.0.92.01 - January 18, 2011
Changed: FileCreateDir now sets A_LastError.
Fixed: GuiControl() or similar was sometimes misinterpreted as a command.
>>895 毎回プロセス立ち上げるとか、CGIとして常駐させてAHKとはhttpで話すとか色々あるとおもうけど。
AHKとは離れるかもしれないけど、soundbeepコマンドで ブザーを鳴らすデバイスが、XPとVista以降で違うんだね。 XPまでは、soundbeepを使うとマザーボードに実装されているブザーが鳴るんだけど、 Vista/Win7は、オーディオ出力からビープ音が出力されて、本体は黙ったまま。 AHKで自動運転させて、異常があったらブザーで通知する使い方をしてたのだけど、 OS変えてから、内蔵ブザーデバイスが使えなくなってしまった。 国内海外でいろいろ検索したけど、 「Vista以降でAUDIO出力からブザーを鳴らさなくする方法」は 沢山出てくるが、本体実装のブザーを鳴らす方法については見つからず。 ブザーを鳴らす回避策、ないでしょうか。 外部ツールを叩く方法でも構いません。
>>895 gaucheってdll呼べないの?
AutoHotKeyを外部アプリから組み込めるdllがあったように思う
指定したファイルのアクセスを監視できないでしょうか? 別アプリからのファイルアクセスがあった瞬間で分岐したいのですが ヒントだけでもお願いします。
>>899 書き込みが伴うのかとか、最初にファイルが存在しなくてもよいのかとか、
もっと具体的に書かないとアドバイスのしようがない。
1.0.92.02 - January 19, 2011 Fixed a memory leak which occurred when the return value of an object invocation or built-in function was not used, such as file.ReadLine() or SubStr(x,y,z) alone on a line. Replaced the fix from v1.0.92.01 with a better fix, which also fixes k::MsgBox(),x:=y and doesn't break if().
902 :
899 :2011/01/19(水) 04:47:51 ID:uBpCdQYM0
>>900 説明不足でした。
既に存在しているファイルへの読み込みのみのアクセスで書き込みは伴いません。
さて、そろそろ次スレのことでも考える時期か。 本家は事実上の開発停止。Lexkosが一派が本流になる。 ってところか。 賛否両論あると思うが、 個人的にはAHKLのユニコード版をこのスレのオススメに したほうがいいんじゃないかと思う。 インストーラも整備されたし、ダメ文字とかの制約も無いし。 テンプレ読むような初めて触る人にとって余計なことをしないで済む。
本家用のスクリプトが使えません>< てのがさらに増える
そうなるのは目に見えてるけど、 中身を見たりいじったりしない人は本家を使い続ければいいだけかと。 「オフィス2000使ってます、新しいオフィスの文書が開けません」 ってのと同じで、その環境でクローズしてて問題ないなら そこにとどまればいいだけのことかと。 別に排除しようってわけじゃない。
>本家使え このスレに書かれてるスクリプトが動きません>< てのが返って来る テンプレに注意点を書いてても こういう連中は見ないだろうしね
そのためのテンプレで、アンカーで解答、でいいでしょ。
>>903 の意見に賛成するよ。
本家対策をいろいろとテンプレに書くよりも
unicode版だけを薦めて、
必要に応じてunicodeへの書き換えの要点を示せばいいだろうから。
>>903 本家やこのスレの流れ知らずにネットでちょっと検索して便利なものがあるな、と思って使い始めると
AHKLじゃなくて本家の方を使い始めて苦労してた俺のような人もいるので、
テンプレに
>>909 みたいに"L"使えって書いてくださると
助かる人がいるとおもう・・・
過疎り気味なのでネタでも AHKLならではの利用サンプル1 ■ 標準入出力 ; ---- stdout.ahk ---- stdout := FileOpen(DllCall("GetStdHandle", "int", -11, "ptr"), "h `n") Loop, 10 stdout.WriteLine(A_Index . "行目") ; ---- stdin.ahk ---- stdin := FileOpen(DllCall("GetStdHandle", "int", -10, "ptr"), "h `n") While !stdin.AtEOF() q .= stdin.ReadLine() ; ここを改変すれば行毎の処理が可能 MsgBox, % q --------------------- 実行例) スクリプトを配置したディレクトリでコマンドプロンプト以下のように実行。 > set ahk="C:\Program Files\AutoHotkey\AutoHotkey.exe" > %ahk% stdout.ahk | %ahk% stdin.ahk ■ メニューにアイコン表示 Loop, 3 { Menu, M1, Add, 項目%A_Index%, Dummy Menu, M1, Icon, 項目%A_Index%, %A_WinDir%\Explorer.exe, %A_Index% ; , 32|64 } Menu, M1, Show Dummy: ※ コメントを外して 32 や 64 を指定すれば大きいアイコンも可
AHKLならではの利用サンプル2 ■ エクスプローラで選択中のファイルのフルパスをコピー COMをりようしているので、特殊フォルダがあってもOK SetTitleMatchMode, RegEx #IfWinActive, ahk_class CabinetWClass|ExploreWClass #c:: FileList:= For window in ComObjCreate("Shell.Application").Windows If ( window.hwnd == WinExist() ){ For item in window.document.SelectedItems FileList .= item.path "`n" Break } Clipboard:=FileList, window:=item:= Return ■ アクティブアプリのあるフォルダを開く OpenProcessでやる方法よりベターかも。 #vkDCsc07D:: ; Win + \ WinGet, pid, PID, A For process in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'") Run, % "explorer.exe /select`,""" . (process.ExecutablePath) . """" process = Return
AHKLならではの利用サンプル3
■ IEの自動運転
ie := ComObjCreate("InternetExplorer.Application")
ie.Visible := True
ie.Navigate("
http://www.google.co.jp/ ")
While ie.Busy()
Sleep, 50
MsgBox, 読み込み完了`n`nフォームに文字を入力します
form := ie.document.GetElementsByTagName("FORM")[0]
form.q.value := "AutoHotkey"
MsgBox, フォームを送信します
form.submit()
While ie.Busy()
Sleep, 50
MsgBox, 検索結果が表示されました`n`n終わります
form:=""
ie.Quit() ; 終了させないと iexplore のプロセスが残るので注意
■ AutoHotkey.dllを利用してマルチスレッド
COMを介して利用するので AHKL でも利用可。
事前に AutoHotkey.dll をDLして、モジュール登録をやっておく必要がある。
(DLLのあるディレクトリで「regsvr32.exe AutoHotkey.dll」を実行)
code := "#NoTrayIcon`nMsgBox, Thread #"
Loop, 10 {
ComObjCreate("AutoHotkey.Script").AhkTextDll(code . A_Index)
Sleep, 100
}
以上
SendMessageとかみんなどうやって調べてるの?
>>915 リソースハッカー根気がないと発見できない作業もある
firefox やoperaの検索ウインドウの位置をcontrolGetPos で汎用的に
取得したいんですがこれもリソースハッカーで出来ますか?
オブジェクト使えない身にはサンプルはありがたい
どっかにまとめておける場所が欲しいね
>>915 WinAPI Database for VB Programmerのアルファベット順表示「W」の項あたり
ふつうにウィンドウメッセージで検索すればたくさん出る
>>916 リソースハッカーを勘違いしてね?
~^f::WinGetActiveStats
が汎用的だと思うけど
メッセージの番号はわかってる前提なのかな そのへん不明なときは Winspector みたいな Spyツールで調べると楽だよ
一方Delphi製アプリは毎回番号が変わった
無変換 & F に検索でよくつかうコントロール+Fを割り当てたいのですが ちゃんと設定しているのに、エラー音がなって失敗します。 どうすれば無変換とFに検索を割り当てられますか?
書いたの見せて
vk1Dsc07B & F::send, ^{F} です。スペースは半角にしてるしどこが悪いんだろう。 いろいろできたらいいなぁと思うことがあるんです。 ・クリップボードに新しくコピーが成功したらなんか音を出す ・クリップボードのなかにある不完全なアドレス(例*ttp)をhttpにする。(*httpになってもよい)
:: Send, ^f エラー音て何だろう?
>>923 Sendは大文字=Shift押しながらFキー押したって意味になるはず。
エラー音がなってるのは、多分Ctrl+Shift+Fに割り当てられた機能が
発動できない状況だったからじゃないかな。
>>923 OnClipboardChangeサブルーチンラベル
レス有難うございました。 :: Send, ^f でうまくいきました。 sendの項目改めて、見てみ来ました。今度からそうしてみたいです。 OnClipboardChangeサブルーチンラベルの項目もみてきて 一応設定できました。BEEP音鳴らしてます。 httpの補完次やってみます。ありがとうございました。
OnClipboardChangeって、まともに使える? PCの日常操作で、画像のスクショを取るなどテキスト以外の情報が クリップボードに入ると、通知無しにいきなりAHKが終了する症状が頻発して、 使うのをやめてしまった。 結局、クリップボードの情報でなにかやりたいときに、 OnClipboardChangeを使わず 「いまクリップボードに入ってる情報を加工する関数」 を作成して、手動でそれを呼び出して、あれこれ加工するようにしてる。
A_EventInfo 見てテキストかどうかの分岐をしてそうならしょうがないな
>>929 いま、死蔵させたコードを見直してみたのだけど
OnClipboardChange:
if A_EventInfo=0
event=空
if A_EventInfo=1
event=テキスト
if A_EventInfo=2
event=データ
if event!=テキスト
return
〜加工処理〜
return
これで、1のときだけ加工処理をやって、ほかはreturnするようにしてたけど、
やっぱりたまに落ちる。どうも、最初のif文にたどり着く前に死んでる気がする。
931 :
名無しさん@お腹いっぱい。 :2011/01/25(火) 18:08:20 ID:aMrptlve0
WinSet, Trans , 100, A ↑のように半透明にしたいんですが、これが効かないウィンドウがあります ベクターにある透明化のソフトでは問題なく透明化できました(WindowAlpha・なんでもすけなど) どうしてもAHKで透明化したいのですがどのようにしたらいいですか?
>これが効かないウィンドウ これを書かないと誰も判断できない
失礼しました 株取引のソフトでmanextraderというソフト これで開くウィンドウすべて透明にできないです ベクターのフリーソフトではすべてうまくいきましたが・・・ 何が原因なんでしょうか・・・
# They have no effect on a window that lacks a caption (title bar) and lacks the always-on-top property. For GUI windows, this can be solved by removing the caption only after making the window transparent. Alternatively, the following properties allow transparency to take effect: Gui -Caption +ToolWindow. ヘルプにこう書いてあったんですがこれが原因でしょうか 解決方法ありましたら教えてください
935 :
名無しさん@お腹いっぱい。 :2011/01/25(火) 21:21:19 ID:R279zQ/j0
Aキーを押している間、Sキーの機能が停止するように設定ってできますか?
>>936 #f::
Process,Exist,firefox.exe
if ErrorLevel<>0
A
S
WinActivate,ahk_pid %ErrorLevel%
スクリプトはわかるんですが・・・
これでできないのですが原因わかりませんか?
>A >S これの意味がわからない。 ってかここでエラーにならないの?
>>937 > Aキーを押している間
と書いてあるのに [Win]+[F]のホットキー定義になってる。
Firefoxも唐突だし、その上
>>938 。
やりたい操作や条件をもっと具体的かつ厳密に書いた方が解決が早いと思う。
>>938 スクリプトが違ったのか
ありがとうございます。にわかの友人に聞いたのが間違っていました。
Aキーを押している間、Sキーの機能が停止するスクリプトは難しいですね。
スレの方々でもわからないスクリプトがあるとは・・・
ゲームで使いたいと思いました。 ゲームでは Qキーで左に移動 Wキーで右に移動 Sキーでジャンプ Aキーで下に移動 となっています。ジャンプしているときにSキーを離すと同時に下に移動すると高速で降りられます。 このコマンド入力のタイミングが非常にシビアなのでAutoHotkeyを使いたいと思いました。 オフラインゲームなのでAutoHotkeyは使用可です。 すごいしょうもないことですがよろしくお願いします。
>>940 >Aキーを押している間、Sキーの機能が停止するスクリプトは難しいですね。
そもそも、なにをやりたいのかわかんないのが問題なんだよ。
process,existで判別するだけじゃ、firefoxが起動されていれば
どこでもコードが発動することになって、まずまともに動かないだろう。
windows+fを押した後、どんなシーンでなにをどう変えたいのか、
具体的に書け。
>スレの方々でもわからないスクリプトがあるとは・・・
お前のレスに情報が足りなすぎるから、わかんないんだよ。
物事を正確に人に伝える技術も身に付けろ。
こいつには正解を教えるべきじゃない と、俺の経験が言っている
緊急性はなさそうなので俺は降りるわ。 ちょっと上でもあったが、質問者は、なんでゲーム名とかアプリ名とかを 具体的に書かないんだろうか。隠す必要はどこにあるんだろうか。 名前さえ書けば、暇な人や、AHKの経験を積むため腕試ししたい人が 勝手に試してコードを書いてくれる可能性があるのに。 書かなきゃその可能性ゼロ。大損だね。
>>931 MButton::
MouseGetPos,,, hWnd
WinSet, Transparent ,200, ahk_id %hWnd%
return
マウスカーソル下のウィンドウを半透明化するスクリプトだけど、
これはどう?
>>941 全然難しくないし、数行で実現できる。
何度も書くけど、意図した動作を言葉できちんと記述できないようじゃ、スクリプトも記述できないんだよ。
言葉できちんと条件や動作を説明できるなら、一対一対応でコマンド等に置き換えられるケースが多い。
まぁ、ある程度の慣れは必要なのはしょうがないけどさ。
で、多分だが、
S と A は同時押下があって、その順序は S → A の順で、
S 押下中に A を押しても A は発行されずに、
S 押下解除の直後で、まだ A が押されているなら A の発行を開始する
というようなことなんじゃないかな。
そうなると、特定キーの押下解除を待つってコマンドがあるんで、
そいつを使えば万事解決かと。
難しそうだが手出してみようと思って過去ログ漁り始めたんだが…… 74 :名無しさん@お腹いっぱい。:04/11/03 18:19:35 ID:qnClhCL9 できました!有り難うございました〜 SetTimer, PopUpClose, 250 return PopUpClose: IfWinActive, 100% Free Hentai Pics!! Send, ^W return --------------------- いきなり吹いた
948 :
名無しさん@お腹いっぱい。 :2011/01/26(水) 11:40:36 ID:z7TMcCykP
しばらくAHKを書いていなかったのですが最近やってみたら昔書いたスクリプトが動かないことに気付きました。 下記のようにした場合、2重登録はできませんと言われるのですがifが効いていないかんじなのですが ifで振り分けたい場合はどうしたらいいのでしょうか? Var = 0 #a::Var = 1 if Var = 0 #b::MsgBox, 0 if Var = 1 #b::MsgBox, 1
あ、なんか思い出してきた・・・ if #Ifちがうんだっけ
すみませんできました
>>914 のマルチスレッド機能は
dllの普通の読み込みではできないのでしょうか。
comの方が使いやすそうだというのはわかりますが、usbメモリに入れて持ち歩いているので、
スタンドアローンで動く方がいいです。
952 :
名無しさん@お腹いっぱい。 :2011/01/26(水) 14:12:27 ID:TQqHCHEl0
「特定のウインドウでなおかつ IME が OFF の場合」に限り、ホットストリングを実行させる方法を試行錯誤しているのですが、両方の条件を満たす記述方法がどうしてもわからず、どなたかにお知恵を拝借したく存じます。
OS は Windows 7 で、AutoHotkey_L 最新版(Unicode x86/1.0.92.01)、ime.ahk を使っています。
具体的には、(1)秀丸メールのメール作成画面で、(2)IME が OFF の場合、この二つの条件が満たされた場合に、以下のホットストリングを実行させたいのですが。
::ce::Dear Mr. Clint Eastwood:
::mf::Dear Mr. Morgan Freeman:
::hs::Dear Ms. Hilary Swank:
(1)のみであれば、次のスクリプトでうまくいきました。
#IfWinActive, ahk_class TuruKameOuterView
::ce::Dear Mr. Clint Eastwood:
::mf::Dear Mr. Morgan Freeman:
::hs::Dear Ms. Hilary Swank:
#IfWinActive
また、(2)のみであれば、ime.ahk を使って、次のスクリプトで正しく動作しました。
#If (IME_GET() == 0)
::ce::Dear Mr. Clint Eastwood:
::mf::Dear Mr. Morgan Freeman:
::hs::Dear Ms. Hilary Swank:
#If
(1)と(2)の両方の条件を満たす書き方がわかりません。
>>1 の AutoHotkeyJp と Autohotkey_L のヘルプを読みましたが、例えば以下のように、
#If (IME_GET() == 0)
#IfWinActive, ahk_class TuruKameOuterView
と、条件文を二行続けるとスクリプトの直上のものしか有効にならないことだけはわかりました。
「AutoHotkey_L ime on off」などのキーワードでググってもみたのですがヒットせず。どなたかおわかりでしたら教えて頂きたく存じます。
953 :
d :2011/01/26(水) 14:19:41 ID:VFIJyQru0
ロリ乳 ふくらみかけ 12歳 でググれ
955 :
名無しさん@お腹いっぱい。 :2011/01/26(水) 14:57:40 ID:TQqHCHEl0
>>954 できました! ありがとうございます!
ご指摘のページは私も既に目を通して、「or のところを and に書き換えればいい」ということはわかったのですが、「or」 のあとの書き方が間違っていたようです。ともあれ助かりました!
>>951 できるよ。
http://www.autohotkey.net/~HotKeyIt/AutoHotkey/ の一番下に例。
でも、面倒だから AutoHotkey_H 同梱の AhkDllObject.ahk と AhkDllThread.ahk を使った方がいい。
obj := AhkDllObject()
obj.ahkTextDll("MsgBox, Sub")
MsgBox, Main
でも、この方法だとスレッド1個に対してDLL1個を必要とするんで
(別ファイルであればいいのでシンボリックリンクでもOK)
動的にスレッド数を増減させるような構成を考えてるなら面倒。
それに対して、COMはDLL登録してしまえばインスタンスは作り放題なんでかなり楽。
スクリプトの最初で、regsvr32 で登録して、 OnExit で regsvr32 /U で解除するって方法もある。
ただ、登録・解除は管理者権限が必要なので、USBでの運用だと厳しいかも知れない。
mousegesture.ahkをAutoHotkey_Lで使用するために2つのサイトを参考に 何も考えずに以下の事をためしました。OSはwindows7x64です。 とりあえず全ての.ahkを文字コードUTF-8で保存しなおす MG_Edit.ahkの1572行め1574行目に,UTF-8を加える。 edit.ahkとmousegesture.ahkでnやrの前以外にある全て の`を消す。 MouseGesture.ahkの187行目にある"GDI32.DLL\TextOutA"からAを抜く。 ------------------------------------------------------- こうすることで文字やタブがちゃんと表示されるようになったんですが、矢印ナビ だけが表示されません。どうしたら表示されるか分かりますか?
使った事も、中身見た事もないから、上に書いてないことを一般論で、 **ポインタとして使われているUInt型**をPtr型に変える 構造体でポインタとして使われている所のサイズを A_PtrSize にして、オフセットも変える ANSI文字列しか対応していない関数に AStr 型で渡すか、StrPutでCP932に変換したバッファアドレスを渡す まぁ、俺は使わないけど、使う人もいるだろうから、出来上がったら 生存期間の長いロダにでも挙げればヨロ込む意図が居るかもしれん。
960 :
957 :2011/01/28(金) 01:37:05 ID:HxIj4fVL0
>>959 参考にして実行したことを
>>957 に書いたつもりで、そこにのってあることも
全て実行したと思っていて、それでも矢印ナビにチェックいれても表示さ
れないと認識していて質問したんですが、どこらへんが間違っているか
足りないことを教えてくれませんか?
>>958 どうやら足りないのは自分の頭のようで、説明されてる意味がよくわかりません。
誰かがうpるのをまてってのはわかりました。ツールチップでのナビ表示はできて
るのでこれでそれまで我慢しますか。
その記事にx64とは書いてないから、あくまでAHKL Unicodeへの移植だろう。 だとすると、やっぱポインタのはず。
XPでは
>>957 の手順で問題なく動くね。うん。そんだけ。
x64とかわかんね
どなたか、スクリプト書いていただけませんか? クリップボード内にある冒頭h抜きのアドレス(複数行)をちゃんと httpの文字列にするスクリプトが欲しいです。 お願いします。
>>960-961 他のスクリプトは一切動いてない状態で試してる?
Guiの番号が被ってると表示できなかったりするけど。
>>964 こんな感じで動くと思う。
#h::
Str := Clipboard
Clipboard := RegExReplace(Str, "(?<!h)
ttp:// ", "
http:// ")
Return
>>965 ありがとうございました。動きました。
まさかこんなはやく書いていただける方がでてくるとは。
少し予めぐぐって探していたのですが、なかったんですよね。
近いスクリプトから弄るっていうのも僕できないので
迷っていたのですが。
ttp://がない場合 、tp://の処理をするみたいなスクリプトを次
自分でかいてみたいなと思います。
967 :
名無しさん@お腹いっぱい。 :2011/01/28(金) 12:43:42 ID:7MsjdgIIP
こんにちわ最近やっとn52teを入手しました。 いまさらって感じなんですがこれから設定をしようといろいろネットを見ていたんですが なんか割り当てできるキーの数が3モード切り替えしかないから全キー×3しかないと嘆いている ページがいっぱいかかりますがなんでAHKを使わないんだろうと思いました。 それはさておき、n52teでAHK_Lを使用してモード切り替えをこれからやろうと思うのですが 今現在のモードをモード切り替えをした時に画面に出したいと思うのですがなにかよい方法はないでしょうか? 最前面にでかでかと文字が表示されるようなものをイメージしています。 たしかBDRemoteというソフトのモード切り替えの時にもそんなかんじにできたと思うのですが
968 :
961 :2011/01/28(金) 15:17:48 ID:9GcbxX4S0
>>965 セーフモードで起動して矢印ナビが表示されるかためしましたが、
やはり矢印ナビは表示されませんでした。
>>967 Progress, h100 W400 X100 Y100 B1 C00 ZH0 ZW0 ZY2 FM60 WM200 CWFFFFBF , , n52のモード
sleep, 1000
Progress, off
※各オプションは適当
>>969 まさにやりたかったことはこれでした
ありがとうございます
>>969 パラメーターいじってて気づきましたが
これプログレッシブバーの見た目を変えてるんですね
なるほどー
MouseGesture.ahkって64bitOSだとナビが出ないのはもちろんのこと、 他のビルトインの機能も動かないの多いだろ、これ。 DllCallの引数、ポインタ型のやつに何も考えないでIntとか渡しちゃうってちょっとひどい 直すの面倒くさかったんだから!
>>973 それが開発された当時はx64版なんぞ無いし、Ptr型もサポートされてない。Intで正しかったんだよ。
>>974 乙乙
ahklからluaを使いたいのですが、1.lua の読み込みに失敗し、Error failed to...エラーがでます
どこを直せばいいのでしょうか
; ahklからluaを使う
;
http://www.autohotkey.com/forum/post-268666.html#268666 ;
http://www.autohotkey.com/forum/post-355457.html#355457 #include lua.ahk
#include lua_ahkfunctions.ahk
hDll := lua_loadDll("lua51.dll")
l := luaL_newstate()
if(luaL_loadfile(L,"1.lua") || lua_pcall(L,0,0,0))
msgbox % "Error failed to load " lua_tostring(L,-1)
else
{
lua_getglobal(L,"screenWidth")
screenWidth := lua_tonumber(L,-1)
out := "Screen Width := " screenWidth "`n"
lua_getglobal(L,"appName")
appName := lua_tostring(l, -1)
out := out "Screen Name := " appName
msgbox % out
}
lua_close(L)
lua_UnloadDll(hDll)
1.luaの内容は↓です appName = "Firefox" screenWidth = 400 どちらのファイルもutf-8(bom)で保存しています
exe版Age2chでスレの更新確認しているのですがポップアップでの通知機能がないため Age2chの外部ツールオプションでexe化したAHKスクリプトを起動し代わりにバルーン等の ポップアップ通知をさせたいと思っています。 外部ツールにブラウザ等を指定しないのはブラウザを閉じて 作業している時に起動されると困るためです。 レスがあったと言うことを通知するだけならば MsgBox , 4144, 確認時刻, %A_YYYY% %A_MM%/%A_DD% %A_Hour%:%A_Min% ExitApp で出来るのですが複数スレが対象となるとどれか分からなくなります。 URLをWM_COPYDATAで送るオプションがありメッセージで送るのだから URLのみじゃないかもと思いexe化スクリプトと外部プログラムでのメッセージやりとりを しらべていたのですがうまく作れません そもそもメッセージにURL以外含まれていなければどうしようもないのですが形としては スレタイトル 新着レス数(またはレス数) 確認時刻 の様な、せめてスレタイトルだけでも表示できる物が作りたいです。 どなたかお願いできないでしょうか。また、作らなくても要望を満たせるツールが在れば 探すヒントでもいいので教えて欲しいです。 よろしくお願いします。
980 :
名無しさん@お腹いっぱい。 :2011/01/30(日) 14:13:08 ID:Y+N1ABfO0
MouseGesture.ahkです。 ジェスチャ後にアクティブウインドウを画面中央に移動させたいのですが WinMove, A, , (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2) このように記述してもウインドウは中央に移動してくれません・・・ アクティブウインドウを中央に移動させるにはどのように記述すればいいのでしょうか?
Shift+Spaceで任意の関数実行、Ctrl+Shift+SpaceでShift+Space本来の挙動にするにはどうすればいいですか?
>>980 wingetpos, , , width, height, A
WinMove, A, , A_ScreenWidth/2-Width/2, A_ScreenHeight/2-Height/2
983 :
980 :2011/01/30(日) 21:22:19 ID:Y+N1ABfO0
>>982 わぁ、できました!
どもですm(_ _)mペコリ
>>979 WM_COPYDATAで送られてくるデータの内容は、送信元次第なので仕様を確認しろとしか言いようがない。
自前でスレの更新日時を撮りにいくならこんな感じで出来る。要AHKL
url =
http://hibari.2ch.net/test/read.cgi/software/1280482227/l50 If RegExMatch(url, "
http:// (?P<host>\w+\.(?:2ch\.net|bbspink\.com))/test/read.cgi/(?P<board>[^/]+)/(?P<dat>\d+)/?", $) {
req := ComObjCreate("WinHttp.WinHttpRequest.5.1")
req.Open("HEAD", "
http:// " $host "/" $board "/dat/" $dat ".dat")
req.Send()
If ("OK" = req.StatusText) {
If RegExMatch(req.GetAllResponseHeaders(), "Last-Modified:\s(.+)", $)
MsgBox, % "更新日時: " . $1
} Else
MsgBox, % "Error: " req.StatusText
req :=
}
タイトルと件数は subject.txt を撮りに行けばOK
AutoHotKey_Lで32bitや64bitのプロセスのpidから実行ファイルのパスを取る方法を教えてください。 winmgmtsを使う物や、getProcessExeNameNTでは取れませんでした。
986 :
名無しさん@お腹いっぱい。 :2011/01/30(日) 22:22:37 ID:Wb8eDpAJ0
!#z::
>>985 WinGet, pid, PID, A
For process in ComObjGet("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessId='" pid "'")
MsgBox, % process.ExecutablePath
return
>>985 0x80020003 - メンバーが見つかりません。
ってなります。AutoHotKey_Lは32bit版、OSはWindows 7 x64です。
x64版を使わないから
DllCall使ってるところが動かなくなってしまうので。。 DllCallの所を直しつつ、64bit版でやってみます。
建ててくる
992 :
530 :2011/01/31(月) 14:26:17 ID:EA7pWmp2P
>>969 sleepだと連続切替が効かないのでSetTimerに変更しました。ま、n52teにJoyToKeyを併用しないと服飾キーが押せないみたいですが
n52pf := Object()
n52pf[0] := "SAI"
n52pf[1] := "Photoshop"
#x::
If ( n52 > n52pf.MaxIndex() - 1 ){
n52 = 0
} else {
n52++
}
BlnMsg( n52pf[n52], "1000", "X10 Y10 B1 C00 ZH0 ZW0 ZY2 FM12 WM1 CWFFFFBF" ) ;
return
BlnAct = 0
BlnMsg(Txt, Time, Opt) {
global BlnAct
BlnOffSet()
Progress, %Opt%, , %Txt%
SetTimer, BlnOff, %Time%
BlnAct = 1
return
BlnOff:
BlnOffSet()
return
}
BlnOffSet(){
global BlnAct
If (BlnAct = 1) {
Progress, off
BlnAct = 0
}
}
服飾わろた
突っ込もうと思ったら、すでに突っ込まれててワロタ
装飾キーw
いや、それも違うだろw
どんだけオシャレさんなんだw
.
.
∧,,,∧ ( ・∀・) 1000ならジュースでも飲むか ( ) し─J
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。