在使用AUTOIT脚本中使用run跑外部程序不支持文件拖拽的问题
我在AUTOIT3脚本中使用run函数执行外部程序,但是该外部程序不能用文件拖拽,百度说和UAC有关系,有没有大神回答一下 啥意思啊,是不是把文件拉到AU的程序里,然后自动运行? 看不懂。到底是什么。 回复 3# wbb870319就是我在AU3脚本中使用run 或者shellexecute去执行的外部程序,比如Foxmail客户端等,执行的程序无法使用系统的拖拽功能,比如在添加附件过程中,只能使用文件浏览器去添加,不能直接将文件拖拽到客户端来添加,但是我手动打开的客户端确可以?Who know?{:face (396):} 经测试,RUN出来的foxmail ,写信时,可以直接拖文件进去当附件. 或者可以用 ShellExecute 试试 #CS 在Vista以上操作系统,由于UAC的限制,WM_DROPFILES只能由权限较低的APP拖拽到权限较高的APP,
反之如果从权限较高的APP拖拽到低权限的APP上,WM_DROPFILES不会被发送到低权限的APP消息队列。
所以,WM_DROPFILES会有时候变得不能响应。
解决的办法,从用户界面特权隔离 (UIPI) 消息过滤器添加二个消息.使用ChangeWindowMessageFilter注册WM_DROPFILES和COPYGLOBALDATA。
WM_DROPFILES = 0x0233,COPYGLOBALDATA=0x0049
对于文件拖拽(Drag&Drop)消息,需要解除过滤的消息不仅仅是WM—DROPFILES这一个,还有一个MessageID为0x0049的消息。
只有这两消息都添加到过滤器中,高权限下拖拽功能才可以正常使用。
ChangeWindowMessageFilter是Vista以上的一个API,WinXP下并没有。
#CE
Global Const $MSGFLT_ADD = 1
DllCall('User32.dll', 'BOOL', 'ChangeWindowMessageFilter', 'UINT', 0x0233, 'DWORD', $MSGFLT_ADD)
DllCall('User32.dll', 'BOOL', 'ChangeWindowMessageFilter', 'UINT', 0x0049, 'DWORD', $MSGFLT_ADD) 回复 7# tubaba
大神 学习了~ 回复 7# tubaba
非常感谢,有时间我试试! 回复 5# Alam
其实不是这个客户端,只是不方便透露。。。 回复 6# austere
我现在就是用的这个去运行,可是依旧不行,7楼的回答可能有帮助! 回复 7# tuba
还是不行,还有别的补充么?{:face (377):} 谁来回答一下呀 本帖最后由 q410225 于 2017-1-7 11:51 编辑
不知道,没遇到过 If StringInStr(@OSArch, '64') Then DllCall("kernel32.dll", "Bool", "Wow64DisableWow64FsRedirection", "ptr",'')
加上这段代码,然后用ShellExecute打开试下~发哥的管理员权限的运行
页:
[1]
2