找回密码
 加入
搜索
查看: 4609|回复: 5

[GUI管理] 怎样监控记事本的关闭事件,加个关闭的提示。

[复制链接]
发表于 2015-3-13 21:34:24 | 显示全部楼层 |阅读模式
本帖最后由 m765555 于 2015-3-13 21:48 编辑

本人是想打开记事本后,点击关闭按钮时,想手动加个关闭的提示,提示确定和取消两个选择。当鼠标点击关闭时,记事本窗口隐藏,如果选确定则直接关闭记事本,如果选取消则重新显示记事本。此功能成功后想用于其它软件中,代码一直未能成功,请各位高手,大大们,帮忙瞧一瞧,研究一下,感谢。代码如下:
Opt("GUIOnEventMode", 1)
#include <GUIConstantsEx.au3>
Global $soft_pid=Run("notepad.exe")
Global $soft_hand=_pid_jb($soft_pid)
;MsgBox(1+64+262144,"提示",$soft_hand) ;显示一下句柄看看是否正确。
GUISetOnEvent(-3,'close_soft',$soft_hand)

While 1
        Sleep(100)
WEnd
 
Func close_soft()
        $xx=MsgBox(1+64+262144,"提示","确定关闭记事本吗?")
                 If $xx=1 Then
                         Exit                                       ;如果点击确定则把窗口关闭。
                 ElseIf $xx=2 Then
                         GUISetState (@SW_SHOW ,$soft_hand)   ;如果点击取消则把窗口再显示出来。
         EndIf
EndFunc



Func _pid_jb($pid)    ;此函数是通过pid获取句柄。
        Dim $jb = ""
        While $jb = ""
                $win_list = WinList("[REGEXPTITLE:.+]")
                For $i = 1 To $win_list[0][0]
                        If BitAND(WinGetState($win_list[$i][0]), 2) And WinGetProcess($win_list[$i][1], "") = $pid Then $jb = $win_list[$i][1]
                Next
        WEnd
        Return $jb
EndFunc   ;==>pid_jb
 楼主| 发表于 2015-3-14 19:48:09 | 显示全部楼层
无人问津,冷清呀,哎
发表于 2015-3-16 01:24:42 | 显示全部楼层
回复 2# m765555

GUISetOnEvent() 有 3 个参数, 第 3 参数为 "由 GUICreate() 函数返回的窗口句柄 (默认为先前使用的窗口)".

说明此函数只能作用于脚本创建的窗口, 记事本不是脚本创建的, 因此此函数没有作用!
 楼主| 发表于 2015-3-17 09:10:07 | 显示全部楼层
131738 大
哪有其它的办法解决吗?
发表于 2015-3-17 13:56:48 | 显示全部楼层
办法是有的,例子子类化,拦截WM_CLOSE;还有SetWindowsHookEx.但跨进程都要注入
 楼主| 发表于 2015-3-18 19:46:29 | 显示全部楼层
慢慢研究一下,谢谢提示.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 12:20 , Processed in 0.083362 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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