找回密码
 加入
搜索
查看: 3921|回复: 13

[GUI管理] 请教下各位,WIN10下$GUI_DROPACCEPTED经常失效怎么办?

 火..   [复制链接]
发表于 2017-8-26 22:01:29 | 显示全部楼层 |阅读模式
本帖最后由 superflq 于 2017-8-26 22:02 编辑

很久没玩AUTOIT了,最近调试的时候发现,WIN10下$GUI_DROPACCEPTED经常失效怎么办?
我用了自带的实例脚本也没用,同样在WIN7和WIN8下就没有问题

搜索过论坛,很多方法无效,有没有好的解决办法?
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Example()

Func Example()
    ; 创建一个 GUI 及其各种控件.
    Local $hGUI = GUICreate("内置函数示例", 420, 200, -1, -1, -1, $WS_EX_ACCEPTFILES)

    ; 创建一个文本标签. 并设置其状态为接受拖放.
    Local $idLabel = GUICtrlCreateLabel("拖放文件到此标签.", 10, 10, 400, 40, $WS_BORDER)
    GUICtrlSetState($idLabel, $GUI_DROPACCEPTED)

    ; 创建一个输入框. 并设置其状态为接受拖放.
    Local $idInput = GUICtrlCreateInput("", 10, 60, 400, 22)
    GUICtrlSetState($idInput, $GUI_DROPACCEPTED)

    Local $idOK = GUICtrlCreateButton("确定", 310, 170, 85, 25)

    ; 显示 GUI.
    GUISetState(@SW_SHOW, $hGUI)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idOK
                ExitLoop

            Case $GUI_EVENT_DROPPED
                ; 如果 @GUI_DropId = $iLabel, 则设置文本标签接受拖放文件.
                If @GUI_DropId = $idLabel Then GUICtrlSetData($idLabel, @GUI_DragFile)

        EndSwitch
    WEnd

    ; 删除先前创建的 GUI 和所有控件.
    GUIDelete($hGUI)
EndFunc   ;==>Example
发表于 2017-8-26 23:07:44 | 显示全部楼层
tubaba 曾经提示过我,你加上这两句试试,我没测试环境
DllCall('User32.dll', 'BOOL', 'ChangeWindowMessageFilter', 'UINT', 0x0233, 'DWORD', 1)
DllCall('User32.dll', 'BOOL', 'ChangeWindowMessageFilter', 'UINT', 0x0049, 'DWORD', 1)
 楼主| 发表于 2017-8-26 23:41:22 | 显示全部楼层
回复 2# afan


    大大,这2句 在别的帖子里看到过,试了无效
还有有别的招吗
发表于 2017-8-27 00:04:12 | 显示全部楼层
回复 3# superflq


    我连那两句都没测试过,没环境,遇不到 …
发表于 2017-8-27 07:34:12 | 显示全部楼层
WIN10  一直没用过。没法试了
发表于 2017-8-27 10:51:02 | 显示全部楼层
嗯,我也遇到过这种问题。。最开始我还以为是代码问题。。。。。然后最后才发现。他喵的,是win10的问题。。。暂时没找到解决方法。
 楼主| 发表于 2017-8-27 20:13:57 | 显示全部楼层
回复 4# afan


    大大还在WIN7吗,赶紧升10了
发表于 2017-8-27 21:47:10 | 显示全部楼层
回复 7# superflq


    行业的很多还停留在xp呢。。。。不是每个人都适合升10的
 楼主| 发表于 2017-8-27 22:42:44 | 显示全部楼层
回复  superflq


    行业的很多还停留在xp呢。。。。不是每个人都适合升10的
yamakawa 发表于 2017-8-27 21:47



    哎,这个问题咋整呢
发表于 2017-8-27 23:03:26 | 显示全部楼层
tubaba 曾经提示过我,你加上这两句试试,我没测试环境
DllCall('User32.dll', 'BOOL', 'ChangeWindowMess ...
afan 发表于 2017-8-26 23:07


tubaba,用过他那个迷惑工具,就想A版一样,技术牛人,太膜拜了。
发表于 2017-8-28 10:51:05 | 显示全部楼层
回复 9# superflq


    这样可以么?我这里可以
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#RequireAdmin

DllCall('User32.dll', 'BOOL', 'ChangeWindowMessageFilter', 'UINT', 0x0233, 'DWORD', 1)
DllCall('User32.dll', 'BOOL', 'ChangeWindowMessageFilter', 'UINT', 0x0049, 'DWORD', 1)

Example()

Func Example()
    ; 创建一个 GUI 及其各种控件.
    Local $hGUI = GUICreate("内置函数示例", 420, 200, -1, -1, -1, $WS_EX_ACCEPTFILES)

    ; 创建一个文本标签. 并设置其状态为接受拖放.
    Local $idLabel = GUICtrlCreateLabel("拖放文件到此标签.", 10, 10, 400, 40, $WS_BORDER)
    GUICtrlSetState($idLabel, $GUI_DROPACCEPTED)

    ; 创建一个输入框. 并设置其状态为接受拖放.
    Local $idInput = GUICtrlCreateInput("", 10, 60, 400, 22)
    GUICtrlSetState($idInput, $GUI_DROPACCEPTED)

    Local $idOK = GUICtrlCreateButton("确定", 310, 170, 85, 25)

    ; 显示 GUI.
    GUISetState(@SW_SHOW, $hGUI)

    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE, $idOK
                ExitLoop

            Case $GUI_EVENT_DROPPED
                ; 如果 @GUI_DropId = $iLabel, 则设置文本标签接受拖放文件.
                If @GUI_DropId = $idLabel Then GUICtrlSetData($idLabel, @GUI_DragFile)

        EndSwitch
    WEnd

    ; 删除先前创建的 GUI 和所有控件.
    GUIDelete($hGUI)
EndFunc   ;==>Example
发表于 2017-8-28 11:25:15 | 显示全部楼层
回复  afan


    大大还在WIN7吗,赶紧升10了
superflq 发表于 2017-8-27 20:13


基本上每隔一段时间,我都会把我电脑的操作系统从WIN7升级到WIN10,但是基本上过不了两三天,又从WIN10换回到WIN7,如此反复已经很多次了。
发表于 2017-8-28 12:07:05 | 显示全部楼层
回复 12# 水木子


    为嘛不双启啊???
发表于 2017-8-29 06:24:24 | 显示全部楼层
win10 基本都要加 #RequireAdmin   才正常
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-31 01:18 , Processed in 0.074307 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表