AutoHotkey スレッド part13

このエントリーをはてなブックマークに追加
932名無しさん@お腹いっぱい。:2012/03/22(木) 21:02:18.41 ID:JFABkL43i
非クライアント領域のhittestでってのは散々既出だな

・MouseGetPos で コントロールとれない場合は親窓のhwnd使う
・マルチウィンドウで座標が負になる場合のLPARAMの考慮する
・MouseGetPosの示すHWNDが怪しいなら別メソッドで取得する
・WindowFromPoint使ってみる
・非クライアント領域の独自描画しているアプリ(タイトル
バーでないのにドラッグできるとか)は諦める
933名無しさん@お腹いっぱい。:2012/03/22(木) 23:59:31.47 ID:JFABkL43i
1.1.07.02 - March 22, 2012

Fixed a rare crash which can occur when GetClipboardData() fails.

Fixed ComObjArray() to return an empty string on failure instead of an arbitrary integer.

Fixed Object.Remove(i, "") affecting integer keys when !Object.HasKey(i) .
934名無しさん@お腹いっぱい。:2012/03/23(金) 20:55:42.18 ID:UWgt6SZK0
>>813
これ便利そうでよさげだなと横から借りパクしようとおもたんだけど
うちのWin7 x64でぴくりとも動かなかった・・
環境毎にどこか変えるんでつか?
935名無しさん@お腹いっぱい。:2012/03/23(金) 22:55:11.75 ID:AhH/CGbT0
>>934
Win7 pro 64bit で >>813 をそのまま試したけど
Autohotkey、Autohotkey_L 32bit、Autohotkey_L 64bit の3種で動いたよ
936名無しさん@お腹いっぱい。:2012/03/24(土) 00:39:50.06 ID:XjXMH97B0
例によってAutoExecuteセクションで引っかかってる悪寒
既存スクリプトに組み込むなら5行目まではスクリプトtopに置け
937名無しさん@お腹いっぱい。:2012/03/24(土) 09:18:59.43 ID:ZKISyUUV0
>>813をカーソルが無意識に端にいくことも考えて、基本構造はそのままで
何かのキーを押しながらカーソルが端で発動
→Win+T に出力
→Shell_TrayWnd がアクティブのときホイール上下を(Left,RightもしくはUp,Down)に変換
→最初の何かのキーをEnterに変換
ってしたいですのですがどうしたらいいでしょうか?
downflag とかよくわからないです この場合813で何がいらないとかも
GetKeyStateあたりと座標とを論理積をとればいいでしょうけど・・
#IfWinActive 〜はわかります
938名無しさん@お腹いっぱい。:2012/03/24(土) 09:26:02.32 ID:YI8kv2BTO
頑張って試行錯誤してみましょう
案外自分でできちゃったりするものです
解決したらその手順を詳しく書いてみるとみんなが喜びますよ
939名無しさん@お腹いっぱい。:2012/03/24(土) 19:15:28.17 ID:eS3+B8mo0
>>937

#persistent ; 意味は >>1 の解説サイトや日本語ヘルプを参照
#SingleInstance, FORCE ; 同上
altdownflag = 0 ; altdownflag という名の(フラグ)変数を用意し、値が0(false)なら「Altを押していません」ということにする
settimer, taskchange, 500 ; 500msごとに taskchange というサブルーチンを実行する
return ; AutoExecuteセクションはここまで

taskchange:
CoordMode,Mouse,Screen ; マウスカーソルの座標をスクリーン上の絶対座標にする。
mousegetpos, x, y ; マウスカーソルの座標(x,y)を取得する。
if x and y { ; 「 if x=0 or y=0 」や「 if !x or !y 」と同じ。つまり、「もし、マウスカーソルが上端、及び左端以外なら」
send, % altdownflag ? "{alt up}" : ; altdownflag が 1(true)ならAltを開放する(Alt Up)
altdownflag = 0 ; Alt を開放したのでaltdownflagを0(false)にする。
return ; サブルーチンの処理をここまでとし、呼び出し先のところへ戻る
}
altdownflag = 1 ; ↓でAltを押したままにするので altdownflag の値を1(true)にする。
send, {alt down} ; Alt を押したままにする。
send, {tab} ; Tabのキーストローク(Tab Down → Tab Up)を送る
return ; サブルーチンの処理をここまでとし、呼び出し先のところへ戻る(というか、ココまでしか無い)
940名無しさん@お腹いっぱい。:2012/03/24(土) 20:20:46.94 ID:D+mjM/f50
で、Hotkey機能でDIOの「無駄」を再生してるやつはおらんのか
941名無しさん@お腹いっぱい。:2012/03/25(日) 11:49:16.64 ID:cCbycZ2m0
USBにつなげている二つのキーボード両方ともが
キーが押しっぱなしの状態にしばしばなります。
これはAutohotkeyの既知の問題でしょうか?

ゲーム時のみ、押したキーを離しているにもかかわらず
ゲーム内では押しっぱなしの状態になっていることがあります。
Ctrlなどモディファイアだけじゃなく押したすべてのキーでなります。
ゲームもひとつじゃなく3Dのほとんどのゲームでなります。

autohotkeyもx84とx64両方最新のをつかったのですがかわりません。
ロジクールのsetpointの問題なのかなぁ
942名無しさん@お腹いっぱい。:2012/03/25(日) 13:24:00.83 ID:8mSXMKb+0
疑わしい点を一つ一つ排除して調べるしかない
ソフトウェアなら常駐外して、USBならPS/2に挿すとか
943名無しさん@お腹いっぱい。:2012/03/26(月) 01:10:29.86 ID:m6/2bQ5Q0
以前流行らせるページに載っていたマウスホイールのスクリプト
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
Loop,%A_EventInfo%
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}
return

↑がFirefox11上で動かないんですが・・・どなたか修正してくださいませんでしょうか?
944名無しさん@お腹いっぱい。:2012/03/26(月) 01:12:07.13 ID:m6/2bQ5Q0
ホイールアップです↓
*WheelUp::
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
Loop,%A_EventInfo%
PostMessage,0x020A,%wp%,%lp%,,ahk_id %ctrl%
}
return
945名無しさん@お腹いっぱい。:2012/03/26(月) 01:43:38.71 ID:ZWP2NEPP0
>>943
>>932 の1個目
小窓がなくなり classNN が空だから
946名無しさん@お腹いっぱい。:2012/03/26(月) 14:14:58.02 ID:27ZbuURF0
autohotkey_lの更新内容の
>Fixed Ctrl/Alt/Shift key-down hotkey breaking any corresponding key-up hotkey defined before it.
>Fixed key-down hotkeys to always use the hook if defined after a key-up hotk
それぞれどういうこと?
947名無しさん@お腹いっぱい。:2012/03/26(月) 21:39:42.95 ID:ruz1Gfzi0
そんなことより、本家フォーラムに凸してる日本人が色々とやばい。
ttp://www.autohotkey.com/forum/viewtopic.php?t=83057
948名無しさん@お腹いっぱい。:2012/03/26(月) 22:22:23.10 ID:FrYkSMM/0
ほんとだw早く鎮火させないと大変なことに!!!
I corrected the fault ...っておめーが訂正したわけじゃねーから!!!
949名無しさん@お腹いっぱい。:2012/03/27(火) 02:06:55.60 ID:hITMuSc/0
別にいいんじゃないの?
っていうか特におかしいところはないじゃん。
他人のスクリプトをforkして改造する人なんて
autohotkeyのforumにはそれなりにいるんだし
950名無しさん@お腹いっぱい。:2012/03/27(火) 10:39:22.73 ID:DfVkSiGH0
>>944
>>658 で一応回避可能
951名無しさん@お腹いっぱい。:2012/03/27(火) 16:20:48.31 ID:urqYWATw0
初心者質問ですみませんが……

;Ctrl+スペースで終了、エクセルがアクティブウィンドウの時はAlt+スペースに
#IfWinNotActive ahk_class XLMAIN
^Space::WinClose,A
#IfWinActive ahk_class XLMAIN
!Space::WinClose,A

これにOpenJeneの書き込みウィンドウ(TWriteForm)の場合も加えたいんですが、
どう変えれば良いのでしょうか?
952名無しさん@お腹いっぱい。:2012/03/27(火) 18:08:16.94 ID:IZehNWy30
>>950 >>945
有難うございます
ロムってろと言われそうですが分からないので
スクリプト貼って頂けないでしょうか?
953名無しさん@お腹いっぱい。:2012/03/27(火) 18:52:50.53 ID:nmsbCjS/0
ROMらないくていいから、自分でやって詰まってからおいで
ここは自浄努力する質問者には親切だが、思考停止してる奴にに手助けする人間はいないよ

>>951
#IfWinActive ahk_class TWriteForm
!Space::WinClose,A

を足しゃいいのでは?
954名無しさん@お腹いっぱい。:2012/03/27(火) 19:22:53.75 ID:urqYWATw0
>>953
いろいろ試してみたんですが……
それも足してみたんですが、
#IfWinNotActive ahk_class XLMAIN
^Space::WinClose,A
の方が動いてしまうので、これを無効にしたいのです。

#IfWinNotActive ahk_class XLMAIN もしくは TWriteForm
みたいにできればいいんですが、or入れても|入れても動かないしわからずじまいです……
955名無しさん@お腹いっぱい。:2012/03/27(火) 19:47:19.73 ID:D2tdGQuO0
>>951
上から条件に一致するものが優先して実行されるので順番を入れ替える
#IfWinActive ahk_class TWriteForm
!Space::WinClose,A
#IfWinActive ahk_class XLMAIN
!Space::WinClose,A
#IfWinNotActive ahk_class XLMAIN
^Space::WinClose,A

or や | を使いたいなら正規表現を使う
SetTitleMatchMode, RegEx
#IfWinActive ahk_class (TWriteForm|XLMAIN)

正規表現がよくわからないならウインドウグループを利用する
GroupAdd, GroupA, ahk_class TWriteForm
GroupAdd, GroupA, ahk_class XLMAIN
#IfWinActive ahk_group GroupA
956名無しさん@お腹いっぱい。:2012/03/27(火) 23:07:11.62 ID:sOO6+tIO0
>>949
GNUだからコードの改変は好き勝手にどうぞだが、付随する
ドキュメントには著作権があるのが当然。それなのに、
紹介ページと説明書きの継ぎ接ぎで変なchmを作って配って
自分の著作物だと主張している。

極めつけは、継ぎ接ぎヘルプのなかで流行らせる氏管理人の
名称が、用務員みたいなニュアンスの単語に置き換わってる。

元々まとまって完成してた流行らせる氏の日本語説明書きを、
機械翻訳にかけるものだから、至る所が文として破綻しており
真面目に読んでるであろう外国人に申し訳なく感じる。

その点、MouseGestureL.ahkとして引き継いだ開発者さんは、
跡地のBBSで一言挨拶を入れて、結果、跡地のからリンクまで
もらえているのに、あまりにも対称的。

それでも、おかしくないと言えるの?
957名無しさん@お腹いっぱい。:2012/03/27(火) 23:38:57.64 ID:nmsbCjS/0
そういうのは>947でネタ上げた時点で言ってくれよ
>949じゃないがフォーラムざっと舐めただけじゃわからんかったし
958名無しさん@お腹いっぱい。:2012/03/28(水) 00:39:25.81 ID:G472pR7N0
ひどいなー、そんなことになってたのか
959名無しさん@お腹いっぱい。:2012/03/28(水) 08:43:33.23 ID:PqMPqVfC0
プンスカ
960名無しさん@お腹いっぱい。:2012/03/30(金) 22:43:44.41 ID:jNzOop3Z0
ここで聞いてもあれだが、Chromeで新しいタブを開いた時に、「最近閉じたタブ」へ
キーボードでフォーカス移すってどうやるの?

仕方ないから、MouseClick,Lbuttun何かで代用してるけど。
※その後10個の「最近閉じたタブ」候補がでるけれども、それもキーボード操作で貫徹させたい。

こめこめ Chrome内でFlashにフォーカスを奪われた時、(方法わからなかったが)Alt押せば
フォーカス戻ることが最近わかった。
961名無しさん@お腹いっぱい。:2012/03/30(金) 23:03:24.92 ID:LJXOuUfe0
~Ctrl::
if A_TickCount < %ctrldouble%
{
run,notepad.exe
ctrldouble=0
}
else
{
ctrldouble=%A_TickCount%
ctrldouble+=400
}
return

コントロールキーをダブルクリックでアプリが実行されるようにしたいです。
しかし上のように記述すると、ctrlを押しっぱなしでアプリが連続起動してしまいます。
長押しでは無効にしたいのですがどうすればいいですか。
962名無しさん@お腹いっぱい。:2012/03/31(土) 00:38:28.34 ID:TYnmdsSqP
特定のソフトウェアが起動した場合、日本語IMEがonになるような設定は可能でしょうか?

Windows 7 64bitで Jane Viewを使用しているのですが
起動時にはimeがOFFで無変換モードになっていて 毎回手動で話し言葉モードにしています
これをなんとか出来るなら これを機に当ソフトを始めて頑張って 記述をかいてみようと思うのですが
963名無しさん@お腹いっぱい。:2012/03/31(土) 01:22:47.32 ID:MCh/xh300
>>961 こんな感じでどうかな
LCtrl,RCtrl,Ctrlのどれを使うかはお好みで

$LCtrl::
If (A_PriorHotKey = A_ThisHotKey && A_TimeSincePriorHotkey < 300)
{
Run, Notepad.exe
}
Else
{
Send, {LCtrl Down}
KeyWait, LCtrl
Send, {LCtrl Up}
}
Return
964名無しさん@お腹いっぱい。:2012/03/31(土) 07:09:16.66 ID:Fis9qy1g0
>>963
ありがとうございます。
ctrl長押しで連続起動しなくなりました。

しかし、ctrlをダブルクリックしたあと、すぐにキーを離さないと
アプリが連続起動してしまうようになってしまいました。
965名無しさん@お腹いっぱい。:2012/03/31(土) 09:59:00.95 ID:GlSKSoiJ0
966名無しさん@お腹いっぱい。:2012/03/31(土) 19:24:55.63 ID:xK2qpb4R0
>>964
俺のとこでは普通に動くな
967名無しさん@お腹いっぱい。:2012/04/01(日) 01:44:03.82 ID:4r7aicW20
キーリピート?
968名無しさん@お腹いっぱい。:2012/04/01(日) 13:04:29.04 ID:HPRTNeoM0
Gui, Add, StatusBar, cRed, Test

で文字色指定しても変わらないんだな
ステータスバーの文字色を指定する方法はないものか
969名無しさん@お腹いっぱい。:2012/04/01(日) 15:19:18.06 ID:L+yPP48L0
>>962
Jane Viewの起動時だけime-onにしたいなら
事前にime側でIME-Onのショートカットキーを割り当てておき、
Autohokey(run, Jane Viewのパス)でJane Viewを起動させ
Jane ViewがアクティブになったらIme-Onのショートカットキーを実行させるとか。
970名無しさん@お腹いっぱい。:2012/04/01(日) 22:05:41.02 ID:fVQT3D8b0
>>961
~ctrl up::でどうよ?
971名無しさん@お腹いっぱい。:2012/04/01(日) 22:10:23.13 ID:67yZte+g0
>>965 >>969
ありがとうございます

> Autohokey(run, Jane Viewのパス)でJane Viewを起動させ
> Jane ViewがアクティブになったらIme-Onのショートカットキーを実行させるとか。
なんとなく解決方法が見えてきたような気がします。
チャレンジしますね
972名無しさん@お腹いっぱい。:2012/04/01(日) 23:03:13.85 ID:C9TnMGud0
そろそろ次期テンプレか、phpBB形式の日本語フォーラムが欲しいですね。
973名無しさん@お腹いっぱい。:2012/04/02(月) 12:49:35.48 ID:5Ui/UDe50
>>970
出来ました!!
ありがとうございます
974名無しさん@お腹いっぱい。:2012/04/02(月) 12:51:39.71 ID:5Ui/UDe50
ctrl+cやctrl+vなどのショートカットが効かなくなりましたすいません
975名無しさん@お腹いっぱい。:2012/04/02(月) 18:51:06.91 ID:9rapEDYs0
レス消費遅いスレだし
そろそろ次スレのテンプレ案まとめ始めたら?
976名無しさん@お腹いっぱい。:2012/04/02(月) 19:01:02.02 ID:+wgA/llE0
>>974
>>963 の Return の直前に
keywait, ctrl
でも入れてみては。
あと、ならないならならないで自分で試行錯誤しないとスルーされるだけだよ。

>>975
お願いします。
977名無しさん@お腹いっぱい。:2012/04/02(月) 21:14:11.37 ID:5Ui/UDe50
>>976
ありがとうございます。
ためしてみます。
自分でやろうにもなにをどうしたものかさっぱりで。
初心者用の資料が足りなすぎると思います。
978名無しさん@お腹いっぱい。:2012/04/02(月) 21:17:32.15 ID:PFBPJ1V/0
スクリプトのエラーで↓みたいなダイアログが出ますが
エディタでエラー箇所にジャンプする機能・設定ってありますか?

Error at line 44 in #include file "D:\myscript.ahk".

Line Text: x
Error: This line does not contain a recognized action.

The script was not reloaded; the old version will remain in effect.
979名無しさん@お腹いっぱい。:2012/04/02(月) 21:49:19.57 ID:9rapEDYs0
>>976
別に自分が求める追加要素はないですし・・
ただ個々に適当に提案してみては?位なので
980名無しさん@お腹いっぱい。:2012/04/02(月) 23:00:07.25 ID:+wgA/llE0
スレ建ててきました
AutoHotkey スレッド part14
http://anago.2ch.net/test/read.cgi/software/1333372506/


>>978
誰かが作っているような気がするけど、
Authotkeyのエラーメッセージウィンドウが表示されたら1行目を読み取って
対象のスクリプトをテキストエディタで開いて
その行へ飛ぶ(テキストエディタに付いている指定した行へ飛ぶ機能を利用)
ようなスクリプトを常駐させておけばいいんじゃないかと。
981名無しさん@お腹いっぱい。
>>978
うちはこんな感じでやってる(全角スペース→半角スペース変換)
わざわざ2回実行してるのは、常駐タイプのスクリプトだとRunWaitで戻ってこなくなるため
AHK常駐環境だったら>980方式で組み込んじゃったほうがスマートかも


;まずは普通に実行してエラーダイアログが出ないかチェック
Run, %A_AhkPath% D:\myscript.ahk,,UseErrorLevel,PID
If (ErrorLevel)
  MsgBox,16,%A_AhkPath% D:\myscript.ahk `n起動エラー %ErrorLevel%
WinWait,ahk_pid %PID%, The program will exit. ,1
IfEqual ErrorLevel,1, ExitApp

;エラーっぽかったらリダイレクトで再実行
WinClose, ahk_pid %PID%
RunWait,%ComSpec% /C %A_AhkPath% /ErrorStdOut D:\myscript.ahk > d:\err.txt,,hide UseErrorLevel

;エディタのダイレクトタグジャンプ使いたならFileRead/FileAppend とかで整形

;エディタで開く
Run,notepad.exe d:\err.txt,,UseErrorLevel,%PID%
WinActivate,ahk_pid %PID%