09/03/20 18:11:28 Ie0QoNxm0
ああ、だめだ。あと下記も参考に
670 名前:665[sage] 投稿日:2008/06/06(金) 19:45:37 ID:89UJiJcz0
>>669
うあそういうことか
>>667
自レスも含みますが>666であったファイルの選択の状態を取得する他の方法を探したところ
ControlGetが使えそうなのでそれでやってみたテスト
~LButton::
MouseGetPos,MouseX,MouseY,WindowID,ClassNN,1 ; カーソル下の情報を取得(ClassNN以下いらないような
WinGet,DesktopID,,ahk_class Progman ; デスクトップのウィンドウIDを取得
ControlGet,StateListView,List,Selected,%ClassNN%,ahk_id %WindowID% ; StateListViewにSysListView32の選択項目名を入れる
If(A_TimeSincePriorHotkey<300 && DesktopID==WindowID && StateListView=="") ; デスクトップ上である&選択項目がない
Send,!{Numpad1}
return
アイコンのないところでダブルクリックをしたとき、イベントを乗っ取らないダブルクリックなので、
丁度よく最初のクリックの時点でデスクトップがアクティブになって選択状態が外れる
同じ方法でエクスプローラ・Openダイアログ等の余白をダブルクリックで上階層移動もできる
選択項目を利用するので MButton:: 等では途中に左クリック入れるとかしないとそのままではできない・・
489:名無しさん@お腹いっぱい。
09/03/20 18:41:45 oBtBrUgR0
>>486
レスありがとうございます。
~NumLock::pause
でできました^^
490:名無しさん@お腹いっぱい。
09/03/20 20:49:30 q1D8qFby0
へ~、UpperDirOneみたいなのが楽につくれるなぁ・・・と思ったけど
~LButtonでフォルダ移動の場合、項目がとれる前に移動が完了ちゃって
フォルダに移動した後にBackspace送っちゃって元通り・・・で意図したとおりに動かない
結局 ~ なしになったけどうまくいかんもんだねぇ
SetTitleMatchMode, RegEx
#IfWinActive, ahk_class CabinetWClass|ExplorerWClass
LButton::
if (A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) {
MouseGetPos,,,,classNN
ControlGet, selected,List,Selected, SysListView321, A
Send, % (classNN=="SysListView321" && !selected) ? "{BackSpace}" : "{LButton}"
} else {
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
}
return
491:名無しさん@お腹いっぱい。
09/03/20 20:54:15 w27aWi9q0
>>488,489
ありがとう!
月曜まで家に帰れないから試せないけど、帰ったらやってみる!
492:名無しさん@お腹いっぱい。
09/03/21 00:19:19 JP2qPQY00
某スレで盛り上がってたので書いてみました。
カーソルをくるくる回すとスクロールします。
URLリンク(lukewarm.s101.xrea.com)
493:名無しさん@お腹いっぱい。
09/03/21 00:26:44 g8LL/GxK0
>>492
どうやってAHKで再現しようか考えていたら・・・
ありがたく頂きます
494:名無しさん@お腹いっぱい。
09/03/21 00:28:23 ft3ZieEm0
これは面白いw
タッチパットのノートパソコンだとうまく利用できそう。
495:名無しさん@お腹いっぱい。
09/03/21 00:45:49 daHpkZkf0
おお、すんばらし。
組み込むと色々応用が効きそうだ。
496:名無しさん@お腹いっぱい。
09/03/21 01:16:17 e7LMny/o0
autohotkey.ini に includeで
#Include kurukuruscroll.ahk
と書いて使わせてもらったんだけど、includeする位置によって使えたり
使えなかったりするのはなんでだろう。
マニュアルのどこを読めばいいのか教えて欲しい。
497:名無しさん@お腹いっぱい。
09/03/21 05:54:27 enEmkL2t0
>>492
一つに纏められて助かりました
認識率と反応も完璧だね
498:名無しさん@お腹いっぱい。
09/03/21 07:41:19 QvNRDM9W0
>>496
URLリンク(lukewarm.s101.xrea.com)
ここの一番下auto-executeですね。
ホットキーが書いてあるとこより前に組み込みます。
変数が重複しないよう気をつけましょう。
499:名無しさん@お腹いっぱい。
09/03/21 08:45:00 e7LMny/o0
>>498
ありがとう!!!
各includeファイルのauto-executeセクションをautohotkey.iniのauto-executeセクションに移動したらうまく動いたー。
今までauto-executeセクションって知らなかった^^;
*.ahkを includeするときって
autohotkey.ini
-------------------
AAA.ahkの auto-executeセクション
BBB.ahkの auto-executeセクション
return
#Include AAA.ahk
#Include BBB.ahk
;ホットキー定義開始
-------------------
500:名無しさん@お腹いっぱい。
09/03/21 09:41:42 mEL9l3Hw0
ダブルクリック検出の件だが、何とかなったので張ってみる。コードのインデントに全角空白使ってるので注意。
; IsDoubleClicked関数
; ダブルクリックを判定する関数、L,R,M,X1,X2の各ボタンに対応
; システムからダブルクリック時間、範囲を取得して判定、AutoHotkey_Lの#ifでの使用を想定
IsDoubleClicked(){
Static dcTime=0,LastTime,tx,ty,LastMouseKey=0,lx=-256,ly=-256,lr=0
if(!dcTime){
dcTime:=DllCall("GetDoubleClickTime")
SysGet,tx,36
SysGet,ty,37
LastTime:=A_TickCount-dcTime*2
}
if(A_TickCount=LastTime)
Return lr
NowMouseKey:=(GetKeyState("LButton","P") | GetKeyState("RButton","P")<<1
| GetKeyState("MButton","P")<<2 | GetKeyState("XButton1","P")<<3
| GetKeyState("XButton2","P")<<4)
VarSetCapacity(Point,8)
DllCall("GetCursorPos","uint",&point)
if((LastMouseKey!=NowMouseKey)||((A_TickCount-LastTime)>dcTime)
||(abs((NumGet(Point,0)-lx))>tx)||(abs((NumGet(Point,4)-ly))>ty)){
lx:=NumGet(Point,0),ly:=NumGet(Point,4)
LastTime:=A_TickCount,LastMouseKey:=NowMouseKey
Return lr:=0
}
else{
LastTime:=A_TickCount-dcTime
Return lr:=1
}
}
501:500
09/03/21 09:42:42 mEL9l3Hw0
; Lv_HitTest関数
; リストビューでアイテム上にマウスがある時に種類を返す
; そもそもリストビュー上でない場合は何も返さず、
; アイテム上にない場合は0を返す
; 参考:流行らせるページの MouseGesture.ahk 内 MG_LvHitTest() 関数
Lv_HitTest(){
MouseGetPos,,,hwnd,class,1
MouseGetPos,,,,chwnd,3
WinGet,pid,PID,ahk_id %hwnd%
VarSetCapacity(point,8)
DllCall("GetCursorPos","uint",&point)
if(substr(class,1,13)=="SysListView32" || substr(class,1,9)=="TListView"){
p:=DllCall("kernel32.dll\GlobalAlloc","uint",0x40,"uint",8,"uint")
NumPut(NumGet(point,0),p+0,0),NumPut(NumGet(point,4),p+0,4)
DllCall("user32.dll\ScreenToClient","uint",chwnd,"uint",p)
hp:=DllCall("kernel32.dll\OpenProcess","uint",0x001F0FFF,"uint",0,"uint",pid,"uint")
pi:=DllCall("kernel32.dll\VirtualAllocEx","uint",hp,"uint",0,"uint",24,"uint",0x1000,"uint",0x4,"uint")
DllCall("kernel32.dll\WriteProcessMemory","Int",hp,"uint",pi,"uint",p,"Int",8,"Int",0)
SendMessage,0x1012,0,%pi%,,ahk_id %chwnd%
DllCall("kernel32.dll\ReadProcessMemory","uint",hp,"uint",pi+8,"uintp",flag,"uint",4,"uint",0)
DllCall("kernel32.dll\VirtualFreeEx", "uint",pi, "uint",0, "uint",0x8000)
DllCall("psapi\CloseProcess","uint",hp)
DllCall("kernel32.dll\GlobalFree","uint",p)
flag:=flag & 15
return (flag<4) ? ((flag<2) ? 0 : "ItemIcon") : ((flag<8) ? "ItemLabel" : "ItemState")
}
}
502:名無しさん@お腹いっぱい。
09/03/21 09:43:29 mEL9l3Hw0
; IsDesktopDoubleClicked関数
; デスクトップをダブルクリックした時にTrue
IsDesktopDoubleClicked(){
Return IsMouseOverDesktop() && IsDoubleClicked()
}
; IsMouseOverDesktop関数
; マウスがデスクトップ上にある時にTrue
; bbLeanだとProgmanじゃうまくいかなかったので
IsMouseOverDesktop(){
MouseGetPos,,,hwnd
Return (hwnd==DllCall("GetDesktopWindow")
||hwnd==WinExist("ahk_class Progman"))
}
503:500
09/03/21 09:44:06 mEL9l3Hw0
; 使い方 #ifじゃなくても何とかなるが、ダブルクリックじゃなかった時に
; 通常のクリックをするべきなので AutoHotkey_Lの#ifを推奨
#if IsDoubleClicked()
&& (WinActive("ahk_class CabinetWClass") || WinActive("ahk_class ExploreWClass"))
&& Lv_HitTest()==0
LButton::Send,{BS}
#if IsDesktopDoubleClicked()
LButton::Msgbox,デスクトップがダブルクリックされた
#if
以上、長くなった&見にくくてすまんがこんな感じでできた。
504:名無しさん@お腹いっぱい。
09/03/21 09:50:33 mEL9l3Hw0
; おまけ:行頭の全角スペースとTabを相互変換するスクリプト
#NoEnv
#EscapeChar '
Gui,Font,,MS ゴシック
Gui,Add,Text,,↓ここにコードを貼り付ける
Gui,Add,Edit,w640 h480 vData
Gui,Add,Button,gWsToTab,行頭の全角スペースをTabに変換
Gui,Add,Button,gTabToWs x+10,行頭のTabを全角スペースに変換
Gui,Show
Return
GuiClose:
GuiEscape:
ExitApp
GuiDropFiles:
if(A_EventInfo<=1)
FileRead,Data,%A_GuiEvent%
GuiControl,Text,Data,%Data%
Return
WsToTab:
TabToWs:
Gui,Submit,NoHide
Output:="",w:=(A_ThisLabel="WsToTab" ? 1 : 0)
Loop,Parse,Data,% chr(10)
{
chr:="",t:=A_LoopField
While (SubStr(t,1,(w ? 2 : 1))==(w ? " " : chr(9)))
t:=SubStr(t,(w ? 3 : 2)),chr.=(w ? chr(9) : " ")
Output.=chr t chr(10)
}
GuiControl,Text,Data,%Output%
Return
505:名無しさん@お腹いっぱい。
09/03/21 17:16:25 5yWBri8L0
横からすみません。
ググったらあんまりヒットしなかったので、以前貼られていた
DoubleKey関数紹介しておきますね。
出展:URLリンク(www.donationcoder.com)
DoubleKey(RunCommand, timeout){
if(A_PriorHotKey = A_ThisHotKey and A_TimeSincePriorHotkey < timeout)
Run, %RunCommand%
}
return
~LButton up::DoubleKey("hoge.ahk", 400)
みたいに各ボタンごとに処理を書いたahkファイル(ここでは同ディレクトリ内のhoge.ahk)
を別途用意する必要はありますが、これでも動作しまっする。
506:名無しさん@お腹いっぱい。
09/03/21 17:28:06 QyANxbob0
>>492のスクリプトを縦スクロールじゃなくて、横スクロールに
するにはどうすればいいんでしょうか?
507:500
09/03/21 18:03:47 mEL9l3Hw0
>>503のIsDesktopDoubleClickedを修正。
こうしないとアイコンダブルクリックした時にまで発動してしまう。
IsDesktopDoubleClicked(){
Return IsMouseOverDesktop() && IsDoubleClicked() && Lv_HitTest()==0
}
>>505
確かにそういう方法でも時間内に2回クリックした時に何かするってことはできるんだけど、
1回目と2回目のクリック位置が離れてる時にも発動したり、
↑みたいにアイコンダブルクリック時にも発動しちゃったりして、
いわゆるダブルクリック系の挙動としてはちょっと弱いかなーって思って書いてみた。
あと意地でも2回目のクリックを乗っ取りたかったってのもある。
でも少しこだわりすぎたかなーとは思ってる…
まぁ、自分で組み込んで使ってるし結果的には満足。
>>506
WheelUpとWheelDownってなってるところを
横スクロールできるキーに変えればいいんじゃないかな。
508:名無しさん@お腹いっぱい。
09/03/21 18:08:20 H5O5lVNo0
>>505
ID:mEL9l3Hw0がどこまで厳密なモノを求めてるのかわからんのでスルーしていたのだが。
そもそも>505レベルでいいんならこんなに頑張ったりはしないと思う
509:名無しさん@お腹いっぱい。
09/03/21 18:09:14 H5O5lVNo0
リロってなかった。蛇足スマソ
510:名無しさん@お腹いっぱい。
09/03/21 18:27:06 HbFBHhgK0
ぶっちゃけ、あっちのフォーラム行けばいくらでもあるけどね…
511:500
09/03/21 18:27:27 mEL9l3Hw0
>>500の書き方だと勘違いされそうなので
一応書いておくけど、俺は>>484ではないです。
>>490を見て、UpperDirOneに相当する機能は
別のソフト使ってたの思い出したので、
何とかAHKだけで実現できないかなと思って、頑張ってみた。
…これこそ蛇足だったかな。
512:名無しさん@お腹いっぱい。
09/03/21 19:39:14 5yWBri8L0
>>507
申し訳ありませんでした
> 1回目と2回目のクリック位置が離れてる時にも発動したり、
> ↑みたいにアイコンダブルクリック時にも発動しちゃったりして
そらそうですよね・・・深く考えずに書き込んだこと反省してROM専に戻ります。
あと IsMouseOverDesktop関数はいろいろ使えそうですね。頂きます&&乙であります。
513:名無しさん@お腹いっぱい。
09/03/21 20:03:23 YAcqdaL20
>>461
超亀レスで失礼します。
見つけたので貼っておきますね。
試してませんが通常ののキーボードでも動作するようです。
USB接続のテンキーを、プログラマブルキーボード
URLリンク(ioenc.net)
514:名無しさん@お腹いっぱい。
09/03/22 11:30:10 GrExewU20
こんにちは
MouseGesture2、2008/10/07版をVista SP1で使わせて貰ってます。
マウ筋の機能で「設定ホイール回転でアクティブ」という機能があるのですが
(ArtTipsというソフトでは、SETTING>快適マウスホイール>快適マウスホイールを使用する>フォーカス移動を行う)
これと同じ挙動をMouseGesture2で実現させるにはどのように記述すればうまく行きますか?
あと、JaneDoe Viewなど一部のソフトでWinMinimizeを使って最小化すると
デスクトップ左下にタイトルバーの小さくなったものが、残って最小化されてしまいます。
これを回避する方法を教えて下さい。
515:名無しさん@お腹いっぱい。
09/03/22 11:41:41 scspGd4S0
簡単なのはWheelUpとWheelDownのDefault(及び各々の条件)に
WinActivate
を記述する
516:名無しさん@お腹いっぱい。
09/03/22 11:46:37 T0zgn4OC0
流行らせるページのホイールリダイレクトでもいいんじゃね
517:名無しさん@お腹いっぱい。
09/03/22 11:56:01 4c0Fopck0
アクティブにしつつスクロールするなら両方
518:名無しさん@お腹いっぱい。
09/03/22 12:23:38 GrExewU20
>>515-517
親切に即レスありがとうございます。
>簡単なのはWheelUpとWheelDownのDefault(及び各々の条件)に
>WinActivate
>を記述する
が一番挙動が近かったのですがマウ筋とArtTipsの機能は
Xplorer2などの二画面ファイラーや小ウィンドウがあるようなソフトに対しても
各ウィンドウをホイールの回転でアクティブに出来るので、このような挙動を望んでいますが
無理な場合WinActivateでアクティブにするようにしたいと思います。
しかし、この場合ホイールUp、Dnでアクティブになったあと普通にスクロールが利かなくなってしまいますよね?
519:名無しさん@お腹いっぱい。
09/03/22 12:46:54 ZBRd96Tp0
>>490 をファイル選択ダイアログでも効くようにした
注意) 全角スペース利用、誤爆が無いとは言えない
; UpperDirOne
LButton::
if (A_ThisHotkey==A_PriorHotkey && A_TimeSincePriorHotkey<300) {
MouseGetPos,,,,classNN
if (classNN=="SysListView321") {
ControlGetText, text, SysListView321, A
if (text == "FolderView") {
ControlGet, selected,List,Selected, SysListView321, A
if (!selected)
Send, {BackSpace}
}
}
}
Send, {LButton Down}
KeyWait, LButton
Send, {LButton Up}
return
520:名無しさん@お腹いっぱい。
09/03/22 17:35:30 Rn9QKfmc0
MouseGesture2の設定で動作割り当てのキー操作を発生させるのパラメーターに
無変換キーの2回押しを設定したくて{無変換}{無変換}とやってみたのですが
認識してくれません。無変換キーは何で登録すれば良いでしょうか?
521:名無しさん@お腹いっぱい。
09/03/22 17:37:47 Biaw3oNa0
>>520
URLリンク(lukewarm.s101.xrea.com)
522:名無しさん@お腹いっぱい。
09/03/22 18:04:15 Rn9QKfmc0
>>521
ありがとうございます。そのページは見落としていました。
早速、カーソルが画面左下角に接触で1秒遅らせて無変換を2回押しがしたくて動作に
if(!MG_Timer(-1000)){
Send,{vk1Dsc07B}{vk1Dsc07B}
}
や
if(!MG_Timer(-1000)){
Send,{vk1Dsc07B}
MG_Wait(100)
Send,{vk1Dsc07B}
}
など、やってみたのですがうまく動きません。
どなたかアドバイスお願い致します。
523:名無しさん@お腹いっぱい。
09/03/22 23:07:53 gJvAxqMw0
動作の確認音にSoundbeepを使ってたけど、パソコン変えたらビープが鳴らないw
524:名無しさん@お腹いっぱい。
09/03/23 09:06:05 Y2hrPoG60
とりあえず転載、ID:GrExewU20 と ID:Rn9QKfmc0 はモリタポ用意して制作者の教えを乞え
URLリンク(lukewarm.s101.xrea.com)
> 123 名前:管理人 ★[] 投稿日:2009/03/23(月) 06:07:20
> 2chのAutoHotkeyスレにMouseGesture.ahkの質問が書かれていたのに、DION規制で書き込めなくて困る。
> 誰か親切な人があと555モリタポほど恵んでくれれば、p2で書き込めるのだが。
> URLリンク(find.2ch.net)エユ、「、熙ャ、ネ、ヲ、エ、カ、、、゙
しかしDION規制まじむかつく、Viewは何故か24時間以上起動させっぱだと●ログイン無効になるので
いちいち再起動させなくちゃいけなくて面倒だ
525:名無しさん@お腹いっぱい。
09/03/23 09:53:24 Edo9xp5W0
>>3のとおりに、CapsLockをF13~F24に割り当てようと思うんだけど、
Change Keyってどうやってこれ割り当てるの??
似たようなレジストリ変更タイプのキーチェンジソフトいくつか探してみたが、
どれもF12までしか割り当てられないっぽい・・・
526:名無しさん@お腹いっぱい。
09/03/23 12:36:14 WUKQO+dS0
>>522
Send,{vk1Dsc07B}{vk1Dsc07B} → Send,{vk1Dsc07B 2}
MG_Wait(100) → Sleep,100
>>518
Jane Doe Style は「ウィンドウ(W)」→「最小化(M)」
があるのでそれを実行させればいいんじゃない?
Send,!w
Send,m
それかJane Doe Styleのショートカットキーのカスタマイズで
最小化にキーを割り当ててそれをSendするとか。
アクティブにしてスクロールは
アクティブした後にWheelUp(Down)を送ればいいじゃない。
あと、コンボボックスをアクティブにしようとすると
コンボボックスが消えるのでアクティブにしないようにしとけば
概ね支障なく動くはず。
527:名無しさん@お腹いっぱい。
09/03/23 12:36:56 WUKQO+dS0
<< >>526の続き >>
;WU_ の Default に↓の2行を追記する。
gosub, CursorUnderActivate
Send,{WheelUp}
;WD_ の Default に↓を2行を追記する。
gosub, CursorUnderActivate
Send,{WheelDown}
;MG_User.ahk をテキストエディタで開き、以下を「サブルーチン定義」内にコピペ
;マウスカーソル下をアクティブにする関数
CursorUnderActivate:
MouseGetPos,,, m_id, m_control
WinGetClass, m_class, ahk_id %m_id%
;マウスカーソル下がコンボボックス(ドロップダウンリスト)ならreturn
If(RegExMatch(m_control, "ComboLBox\d+"))
return
;マウスカーソル下が非アクティブならアクティブ化
IfWinNotActive, ahk_id %m_id%
{
SetWinDelay,-1
WinActivate
SetWinDelay,100
}
return
;これで支障が出るなら>>517の方法がいいと思う。
528:名無しさん@お腹いっぱい。
09/03/23 12:39:05 WUKQO+dS0
あ、ウィンドウクラスは必要ないので↓は要らないや・・・
WinGetClass, m_class, ahk_id %m_id%
529:名無しさん@お腹いっぱい。
09/03/23 12:40:24 WUKQO+dS0
×;マウスカーソル下をアクティブにする関数
○;マウスカーソル下をアクティブにするサブルーチン
530:名無しさん@お腹いっぱい。
09/03/23 13:54:01 1ZxaOcnN0
>>525
K SC Type Up/Dn Elapsed Key
------------------------------------------------
7C 064 i u 0.04 F13
7D 065 i u 0.04 F14
7E 066 i u 0.04 F15
7F 067 i u 0.04 F16
80 068 i u 0.04 F17
81 069 i u 0.04 F18
82 06A i u 0.04 F19
83 06B i u 0.04 F20
84 06C i u 0.04 F21
85 06D i u 0.04 F22
86 06E i u 0.04 F23
87 076 i u 0.04 F24
531:名無しさん@お腹いっぱい。
09/03/24 23:15:50 mXwaygr80
多重起動を検知したくて以下のようにしたんだけど、
除外タイトルって効いて無い
それともPIDとかでの除外は無理なのかな
#SingleInstance, OFF
Process, Exist
myPid:=ErrorLevel
DetectHiddenWindows,On
IfWinExist, %A_ScriptFullpath% ahk_class AutoHotkey,,ahk_pid %myPid%
MsgBox, あり
Else
MsgBox, なし
532:名無しさん@お腹いっぱい。
09/03/25 01:46:19 zeEEOJ2T0
>>531
>>144,147,153
前々スレに多重起動検知で終了とかはあったよ。
タイトルが一緒でPIDが違うならで、判別してた。
一部だけ引用
;自分の情報を取得
DetectHiddenWindows, On
Process,Exist
pid:=ErrorLevel
WinGetTitle, g_scriptTitle, ahk_pid %pid%
WinGet, hwnd, id, ahk_pid %pid% ahk_class AutoHotkey
;ahk_class AutoHotkeyのウィンドウを全て列挙
WinGet, ahk_id_list, list, ahk_class AutoHotkey
Loop, %ahk_id_list%{
this_id:=ahk_id_list%a_index%
ahk_id_list%a_index%=
WinGetTitle, this_title, ahk_id %this_id%
if(g_scriptTitle==this_title && hwnd!=this_id){ ;自分以外で同じタイトルを見つけたら終了メッセージを投げる。
533:名無しさん@お腹いっぱい。
09/03/25 08:36:04 zeEEOJ2T0
暇だったから、作ってみた。あまりの使えなさに吹いたw
#persistent
CoordMode, Mouse, Screen
Settimer, Expose
return
Expose:
MouseGetPos, X, Y
if (Y<1){
;左右に並べて表示
SendMessage,0x111,405,,,ahk_class Shell_TrayWnd
keywait, LButton, D
KeyWait, LButton
;元に戻す
SendMessage,0x111,416,,,ahk_class Shell_TrayWnd
Loop
{
MouseGetPos, X, Y
if (Y>2)
break
}
}
return
534:名無しさん@お腹いっぱい。
09/03/25 13:01:45 UMyjgm290
>>525
俺はchangekeyでF13を割り当ててるよ。