非クライアント領域のhittestでってのは散々既出だな
・MouseGetPos で コントロールとれない場合は親窓のhwnd使う
・マルチウィンドウで座標が負になる場合のLPARAMの考慮する
・MouseGetPosの示すHWNDが怪しいなら別メソッドで取得する
・WindowFromPoint使ってみる
・非クライアント領域の独自描画しているアプリ(タイトル
バーでないのにドラッグできるとか)は諦める
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) .
>>813 これ便利そうでよさげだなと横から借りパクしようとおもたんだけど
うちのWin7 x64でぴくりとも動かなかった・・
環境毎にどこか変えるんでつか?
>>934 Win7 pro 64bit で
>>813 をそのまま試したけど
Autohotkey、Autohotkey_L 32bit、Autohotkey_L 64bit の3種で動いたよ
例によってAutoExecuteセクションで引っかかってる悪寒
既存スクリプトに組み込むなら5行目まではスクリプトtopに置け
>>813をカーソルが無意識に端にいくことも考えて、基本構造はそのままで
何かのキーを押しながらカーソルが端で発動
→Win+T に出力
→Shell_TrayWnd がアクティブのときホイール上下を(Left,RightもしくはUp,Down)に変換
→最初の何かのキーをEnterに変換
ってしたいですのですがどうしたらいいでしょうか?
downflag とかよくわからないです この場合813で何がいらないとかも
GetKeyStateあたりと座標とを論理積をとればいいでしょうけど・・
#IfWinActive 〜はわかります
頑張って試行錯誤してみましょう
案外自分でできちゃったりするものです
解決したらその手順を詳しく書いてみるとみんなが喜びますよ
>>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 ; サブルーチンの処理をここまでとし、呼び出し先のところへ戻る(というか、ココまでしか無い)
で、Hotkey機能でDIOの「無駄」を再生してるやつはおらんのか
USBにつなげている二つのキーボード両方ともが
キーが押しっぱなしの状態にしばしばなります。
これはAutohotkeyの既知の問題でしょうか?
ゲーム時のみ、押したキーを離しているにもかかわらず
ゲーム内では押しっぱなしの状態になっていることがあります。
Ctrlなどモディファイアだけじゃなく押したすべてのキーでなります。
ゲームもひとつじゃなく3Dのほとんどのゲームでなります。
autohotkeyもx84とx64両方最新のをつかったのですがかわりません。
ロジクールのsetpointの問題なのかなぁ
疑わしい点を一つ一つ排除して調べるしかない
ソフトウェアなら常駐外して、USBならPS/2に挿すとか
以前流行らせるページに載っていたマウスホイールのスクリプト
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上で動かないんですが・・・どなたか修正してくださいませんでしょうか?
ホイールアップです↓
*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
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
それぞれどういうこと?
ほんとだw早く鎮火させないと大変なことに!!!
I corrected the fault ...っておめーが訂正したわけじゃねーから!!!
別にいいんじゃないの?
っていうか特におかしいところはないじゃん。
他人のスクリプトをforkして改造する人なんて
autohotkeyのforumにはそれなりにいるんだし
初心者質問ですみませんが……
;Ctrl+スペースで終了、エクセルがアクティブウィンドウの時はAlt+スペースに
#IfWinNotActive ahk_class XLMAIN
^Space::WinClose,A
#IfWinActive ahk_class XLMAIN
!Space::WinClose,A
これにOpenJeneの書き込みウィンドウ(TWriteForm)の場合も加えたいんですが、
どう変えれば良いのでしょうか?
>>950 >>945 有難うございます
ロムってろと言われそうですが分からないので
スクリプト貼って頂けないでしょうか?
ROMらないくていいから、自分でやって詰まってからおいで
ここは自浄努力する質問者には親切だが、思考停止してる奴にに手助けする人間はいないよ
>>951 #IfWinActive ahk_class TWriteForm
!Space::WinClose,A
を足しゃいいのでは?
>>953 いろいろ試してみたんですが……
それも足してみたんですが、
#IfWinNotActive ahk_class XLMAIN
^Space::WinClose,A
の方が動いてしまうので、これを無効にしたいのです。
#IfWinNotActive ahk_class XLMAIN もしくは TWriteForm
みたいにできればいいんですが、or入れても|入れても動かないしわからずじまいです……
>>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
>>949 GNUだからコードの改変は好き勝手にどうぞだが、付随する
ドキュメントには著作権があるのが当然。それなのに、
紹介ページと説明書きの継ぎ接ぎで変なchmを作って配って
自分の著作物だと主張している。
極めつけは、継ぎ接ぎヘルプのなかで流行らせる氏管理人の
名称が、用務員みたいなニュアンスの単語に置き換わってる。
元々まとまって完成してた流行らせる氏の日本語説明書きを、
機械翻訳にかけるものだから、至る所が文として破綻しており
真面目に読んでるであろう外国人に申し訳なく感じる。
その点、MouseGestureL.ahkとして引き継いだ開発者さんは、
跡地のBBSで一言挨拶を入れて、結果、跡地のからリンクまで
もらえているのに、あまりにも対称的。
それでも、おかしくないと言えるの?
そういうのは>947でネタ上げた時点で言ってくれよ
>949じゃないがフォーラムざっと舐めただけじゃわからんかったし
ひどいなー、そんなことになってたのか
プンスカ
ここで聞いてもあれだが、Chromeで新しいタブを開いた時に、「最近閉じたタブ」へ
キーボードでフォーカス移すってどうやるの?
仕方ないから、MouseClick,Lbuttun何かで代用してるけど。
※その後10個の「最近閉じたタブ」候補がでるけれども、それもキーボード操作で貫徹させたい。
こめこめ Chrome内でFlashにフォーカスを奪われた時、(方法わからなかったが)Alt押せば
フォーカス戻ることが最近わかった。
~Ctrl::
if A_TickCount < %ctrldouble%
{
run,notepad.exe
ctrldouble=0
}
else
{
ctrldouble=%A_TickCount%
ctrldouble+=400
}
return
コントロールキーをダブルクリックでアプリが実行されるようにしたいです。
しかし上のように記述すると、ctrlを押しっぱなしでアプリが連続起動してしまいます。
長押しでは無効にしたいのですがどうすればいいですか。
特定のソフトウェアが起動した場合、日本語IMEがonになるような設定は可能でしょうか?
Windows 7 64bitで Jane Viewを使用しているのですが
起動時にはimeがOFFで無変換モードになっていて 毎回手動で話し言葉モードにしています
これをなんとか出来るなら これを機に当ソフトを始めて頑張って 記述をかいてみようと思うのですが
>>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
>>963 ありがとうございます。
ctrl長押しで連続起動しなくなりました。
しかし、ctrlをダブルクリックしたあと、すぐにキーを離さないと
アプリが連続起動してしまうようになってしまいました。
キーリピート?
Gui, Add, StatusBar, cRed, Test
で文字色指定しても変わらないんだな
ステータスバーの文字色を指定する方法はないものか
>>962 Jane Viewの起動時だけime-onにしたいなら
事前にime側でIME-Onのショートカットキーを割り当てておき、
Autohokey(run, Jane Viewのパス)でJane Viewを起動させ
Jane ViewがアクティブになったらIme-Onのショートカットキーを実行させるとか。
>>965 >>969 ありがとうございます
> Autohokey(run, Jane Viewのパス)でJane Viewを起動させ
> Jane ViewがアクティブになったらIme-Onのショートカットキーを実行させるとか。
なんとなく解決方法が見えてきたような気がします。
チャレンジしますね
そろそろ次期テンプレか、phpBB形式の日本語フォーラムが欲しいですね。
ctrl+cやctrl+vなどのショートカットが効かなくなりましたすいません
レス消費遅いスレだし
そろそろ次スレのテンプレ案まとめ始めたら?
>>974 >>963 の Return の直前に
keywait, ctrl
でも入れてみては。
あと、ならないならならないで自分で試行錯誤しないとスルーされるだけだよ。
>>975 お願いします。
>>976 ありがとうございます。
ためしてみます。
自分でやろうにもなにをどうしたものかさっぱりで。
初心者用の資料が足りなすぎると思います。
スクリプトのエラーで↓みたいなダイアログが出ますが
エディタでエラー箇所にジャンプする機能・設定ってありますか?
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.
>>976 別に自分が求める追加要素はないですし・・
ただ個々に適当に提案してみては?位なので
>>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%