m765555 发表于 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("")
                For $i = 1 To $win_list
                        If BitAND(WinGetState($win_list[$i]), 2) And WinGetProcess($win_list[$i], "") = $pid Then $jb = $win_list[$i]
                Next
        WEnd
        Return $jb
EndFunc   ;==>pid_jb



m765555 发表于 2015-3-14 19:48:09

无人问津,冷清呀,哎

131738 发表于 2015-3-16 01:24:42

回复 2# m765555

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

说明此函数只能作用于脚本创建的窗口, 记事本不是脚本创建的, 因此此函数没有作用!

m765555 发表于 2015-3-17 09:10:07

131738 大
哪有其它的办法解决吗?

ceoguang 发表于 2015-3-17 13:56:48

办法是有的,例子子类化,拦截WM_CLOSE;还有SetWindowsHookEx.但跨进程都要注入

m765555 发表于 2015-3-18 19:46:29

慢慢研究一下,谢谢提示.
页: [1]
查看完整版本: 怎样监控记事本的关闭事件,加个关闭的提示。