发表回复 
如何左键拖拽文件激发热键?
2010-07-01, 06 : 34
如何左键拖拽文件激发热键?
只在资源管理器中起作用,左键拖拽文件然后松开,就激发热键行为



各位大鸟请赐教
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 06 : 48
 
我想把这个整合到一个包含其它热键的脚本中,如果用#IfWinActive ahk_class CabinetWClass会影响其它热键,使它们也只能在资源管理器中起作用.
若用
Hotkey, IfWinActive, ahk_class CabinetWClass
Hotkey, ~LButton, MyLabelForLButton
就必须把它写在整个脚本的前面,这样后面的代码就有不能被载入的可能
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 09 : 25
 
#IfWinActive是可以关闭的,看看帮助里的例子。
鼠标拖动时,所在窗口不一定是激活的,#IfWinActive可能会遗漏这一情况。
可以使用AHK_L的#If判断鼠标所在窗口而不是当前激活窗口。

AutoHotKey Ansi x86 v1.1.24.01
Win10.0.14388 x64
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 09 : 53
 
后面代码不载入是你写的有问题吧....改一下就可以的
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 10 : 34
 
看大家聊的热火朝天的,怎么才能判断到左键拖拽了东西?
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 13 : 51
 
5# xzk235 似乎只能用Hook。
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 15 : 45
 
[i=s] 本帖最后由 health901 于 2010-7-1 15:51 编辑 [/i]

有个想法,创建一个覆盖资源管理器的窗口,设置透明,拖拽文件时就会激发这个窗口的拖拽事件

没有实践过,仅想法

--------------------
在键盘指示灯程序(窗口透明,不激活,窗口始终最上)里测试了下,可行,只是不是很灵敏

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 16 : 33
 
我测试了一下自己用的hook脚本,抓不到拖拽的信息(貌似没有),不过可以用A_Cursor变量,在拖拽时此变量为Uknown,因此当鼠标按下时判断指针是否为Un​kown就知道是否在托拽了

补充一下鼠标为手形时也是Unknown,比如链接悬停,因此最好把浏览器窗口排除掉

懒惰是学习AHK的唯一动力
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 16 : 36
 
还是不解是如何判断左键拖拽了文件?请 health901 回复一下!!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 16 : 36
 
引用:有个想法,创建一个覆盖资源管理器的窗口,设置透明,拖拽文件时就会激发这个窗口的拖拽事件

没有实践过,仅想法

--------------------
在键盘指示灯程序(窗口透明,不激活,窗口始终最上)里测试了下,可行 ...
health901 发表于 2010-7-1 15:45 [Image: back.gif]
还是不解是如何判断左键拖拽了文件?请 health901 回复一下!!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 17 : 10
 
[i=s] 本帖最后由 health901 于 2010-7-1 17:18 编辑 [/i]

引用:我测试了一下自己用的hook脚本,抓不到拖拽的信息(貌似没有),不过可以用A_Cursor变量,在拖拽时此变量为Uknown,因此当鼠标按下时判断指针是否为Un​kown就知道是否在托拽了

补充一下鼠标为手形时也是Unknown,比 ...
maxspeedwind 发表于 2010-7-1 16:33 [Image: back.gif]
有想过Hook,但是一般的hook都捕获不了WM_的message,拖拽的message是WM_DROPFILE=0x233,需要嵌入,或者用dll的方式,挺麻​烦,也没看到有现成的dll和封装函数。
如果能hook到,再用API DragQueryFile
DllCall("DragQueryFile","uint",hDrop,"uint",0,"str",FilePath,"uint",Size)
应该是可以的。

@mingyu40
这个查看GUI的GuiDropFiles事件

不过弊端也显而易见,这种“hook”完全拦截了正常的操作,比如想把文件A拖到文件夹B里,会失效

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-01, 17 : 36
 
这个hook能解决部分问题,拖拽文件确实被捕获了,但是我还没看明白返回的句柄是什么的,从SysDragImage上看,应该是和WM_QUERYDRAGICON类​似,创建拖拽是的图形
[attach]1325[/attach]

http://www.autohotkey.com/forum/viewtopi...077#123077
需要此dll
http://www.autohotkey.net/~JGR/wineventhook.rar


附件 缩略图
   

所有脚本存至项目: https://github.com/health901/AHK, 欢迎fork
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 01 : 07
 
监视的是0X8000这个事件,即EVENT_OBJECT_CREATE,SYSDRAGIMAGE从代码里面看是CLASS
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 09 : 22
 
拖拽文件的时候,有的鼠标指针周围一圈会变黑,有的会全部变黑,能不能通过此来判断
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 09 : 47
 
[i=s] 本帖最后由 maxspeedwind 于 2010-7-2 09:51 编辑 [/i]

做了个简单演示
代码: (全选)
#IfWinActive,ahk_class CabinetWClass
~LButton::
Loop
{
        If GetKeyState("Lbutton","P")
        {
                If ( A_Cursor="Unknown" )
                        msgbox 你正在拖拽文件
        }        
        Else
                Break
}        
Return
#IfWinActive

懒惰是学习AHK的唯一动力
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 10 : 39
 
LS可以啊,就是我鼠标还没松开,msgbox就跳出来啦
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 11 : 30
 
Win7下拖拽时指针码没变。
这个有点像了,就是不能分辨拖拽文件还是框选文件
代码: (全选)
#IfWinActive,ahk_class CabinetWClass
~LButton::
MouseGetPos, X0, Y0
Return

~LButton Up::
MouseGetPos, X1, Y1
If !(X1=X0 && Y1=Y0)
{
        ClipTemp := ClipboardAll
        Clipboard :=
        Send, ^c
        ClipWait, 0.5
        If Clipboard
                Traytip,, %X0%`,%Y0% → %X1%`,%Y1%`n%Clipboard%
        Clipboard := ClipTemp
}
Return
#IfWinActive

AutoHotKey Ansi x86 v1.1.24.01
Win10.0.14388 x64
访问这个用户的网站 查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 11 : 38
 
11# health901
了解了了解了,谢谢!!
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 11 : 42
 
[i=s] 本帖最后由 jsttking0123 于 2010-7-2 12:54 编辑 [/i]

大家可以试试下面的
代码: (全选)
#IfWinActive ahk_class CabinetWClass
~LButton::
        sleep,200
        GetKeyState,state,LButton
        if state=D
        loop
  {
        If ( A_Cursor="Unknown" )
         {
Hotkey,*LButton Up,LBut_Up
Hotkey,*LButton Up,On
SetTimer,check_L,2000
break
         }
GetKeyState,state,LButton
        if state=U
break
  }
Return
#IfWinActive

LBut_Up:
sleep,100
send ^c
sleep,200
SplitPath, clipboard, name
tooltip,%name%
clipboard=%name% 
sleep,2000
tooltip
;run,D:\文件夹\Everything\Everything.exe
;WinWaitActive, ahk_class EVERYTHING,, 2
;if ErrorLevel
;Gosub check_L
;send ^v
Hotkey,*LButton Up,Off
Return


check_L:
Hotkey,*LButton Up,Off
SetTimer,check_L,off
return
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
2010-07-02, 11 : 46
 
谢谢大家指点,让我知道有If ( A_Cursor="Unknown" )这个判断和结尾添加#IfWinActive关闭上下文制约,都是没怎么看帮助文件惹的
查找这个用户的全部帖子
表示感谢 引用并回复 移动视图置页面顶端
发表回复 


论坛跳转:


联系我们 | Autohotkey 中文站 | 回到顶部 | 回到正文区 | 精简(归档)模式 | RSS 聚合