hualong1009 发表于 2016-12-29 08:43:30

在使用AUTOIT脚本中使用run跑外部程序不支持文件拖拽的问题

我在AUTOIT3脚本中使用run函数执行外部程序,但是该外部程序不能用文件拖拽,百度说和UAC有关系,有没有大神回答一下

q410225 发表于 2016-12-29 10:41:49

啥意思啊,是不是把文件拉到AU的程序里,然后自动运行?

wbb870319 发表于 2016-12-29 18:43:06

看不懂。到底是什么。

hualong1009 发表于 2017-1-4 23:00:24

回复 3# wbb870319
就是我在AU3脚本中使用run 或者shellexecute去执行的外部程序,比如Foxmail客户端等,执行的程序无法使用系统的拖拽功能,比如在添加附件过程中,只能使用文件浏览器去添加,不能直接将文件拖拽到客户端来添加,但是我手动打开的客户端确可以?Who know?{:face (396):}

Alam 发表于 2017-1-4 23:57:13

经测试,RUN出来的foxmail ,写信时,可以直接拖文件进去当附件.

austere 发表于 2017-1-5 12:39:51

或者可以用 ShellExecute 试试

tubaba 发表于 2017-1-6 12:53:55

#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)

austere 发表于 2017-1-6 17:27:50

回复 7# tubaba


大神   学习了~

hualong1009 发表于 2017-1-6 23:14:50

回复 7# tubaba
非常感谢,有时间我试试!

hualong1009 发表于 2017-1-6 23:15:26

回复 5# Alam
其实不是这个客户端,只是不方便透露。。。

hualong1009 发表于 2017-1-6 23:16:12

回复 6# austere
我现在就是用的这个去运行,可是依旧不行,7楼的回答可能有帮助!

hualong1009 发表于 2017-1-7 08:47:58

回复 7# tuba

    还是不行,还有别的补充么?{:face (377):}

hualong1009 发表于 2017-1-7 11:43:58

谁来回答一下呀

q410225 发表于 2017-1-7 11:50:41

本帖最后由 q410225 于 2017-1-7 11:51 编辑

不知道,没遇到过

austere 发表于 2017-1-7 12:59:21

If StringInStr(@OSArch, '64') Then DllCall("kernel32.dll", "Bool", "Wow64DisableWow64FsRedirection", "ptr",'')
加上这段代码,然后用ShellExecute打开试下~发哥的管理员权限的运行
页: [1] 2
查看完整版本: 在使用AUTOIT脚本中使用run跑外部程序不支持文件拖拽的问题