Windows 中python程序监控自身进程是否收到WM_CLOSE消息
时间: 2023-03-05 21:33:35 浏览: 90
在 Windows 中,可以使用 `win32gui` 模块中的函数来监视并处理窗口消息。具体来说,要监视一个窗口是否收到 `WM_CLOSE` 消息,可以使用以下步骤:
1. 使用 `win32gui.FindWindow()` 函数查找要监视的窗口的句柄。如果窗口句柄已知,则可以直接使用该句柄,否则需要根据窗口的标题或类名等信息来查找窗口句柄。
2. 使用 `win32gui.SetWindowLong()` 函数设置窗口过程函数。窗口过程函数是一个回调函数,用于处理窗口消息。在本例中,需要监视 `WM_CLOSE` 消息,因此需要在窗口过程函数中处理该消息。
3. 在窗口过程函数中处理 `WM_CLOSE` 消息。当窗口收到 `WM_CLOSE` 消息时,可以执行一些操作,例如退出程序。
以下是一个简单的示例代码,可以监视自身窗口是否收到 `WM_CLOSE` 消息:
```python
import win32api
import win32con
import win32gui
# 窗口过程函数
def wndProc(hwnd, msg, wParam, lParam):
if msg == win32con.WM_CLOSE:
# 窗口收到 WM_CLOSE 消息,执行退出操作
win32api.PostQuitMessage(0)
return win32gui.DefWindowProc(hwnd, msg, wParam, lParam)
# 创建窗口
win32gui.InitCommonControls()
hwnd = win32gui.CreateWindow("BUTTON", "My Window", 0, 0, 0, 0, 0, 0, 0, None, None, None)
# 设置窗口过程函数
oldWndProc = win32gui.SetWindowLong(hwnd, win32con.GWL_WNDPROC, wndProc)
# 进入消息循环,等待窗口消息
while True:
msg = win32gui.GetMessage(None, 0, 0)
if msg == 0:
break
win32gui.TranslateMessage(msg)
win32gui.DispatchMessage(msg)
```
在这个示例中,我们创建一个简单的窗口,并在窗口过程函数中处理 `WM_CLOSE` 消息。在消息循环中,我们使用 `GetMessage()` 函数获取窗口消息,如果收到 `WM_QUIT` 消息,就退出消息循环。