【问题标题】:How to make SendMessage unblocking?如何使 SendMessage 解锁?
【发布时间】:2015-09-20 09:13:03
【问题描述】:

我有这个脚本可以关闭显示器:

import win32api, win32con

print "start"
win32api.SendMessage(win32con.HWND_BROADCAST, win32con.WM_SYSCOMMAND, win32con.SC_MONITORPOWER, 2)
print "end"

"end" 不会被打印,并且脚本永远不会结束。
终端窗口保持打开状态很烦人。

如何使SendMessage 非阻塞?

【问题讨论】:

    标签: python winapi pywin32


    【解决方案1】:

    您不能将win32api.SendMessage() 设为非阻塞,因为底层的 Windows 函数是阻塞的。相反,您可以使用win32api.PostMessage(),它具有相同的签名:

    import win32api, win32con
    
    print "start"
    win32api.PostMessage(win32con.HWND_BROADCAST, win32con.WM_SYSCOMMAND, win32con.SC_MONITORPOWER, 2)
    print "end"
    

    【讨论】:

    • SendMessagePostMessage 没有相同的签名。 SendMessage 返回值,即处理消息的结果,PostMessage 返回布尔成功代码。
    • @IInspectable:你可能是对的,我无法测试它。我的意思是传递相同的函数参数。在 PyWin32 文档中都没有记录为返回任何内容,但我认为 SendMessage 将返回一个整数,而 PostMessage 似乎返回错误或 None,而不是布尔值。
    • 如果 SendMessage 的 PyWin32 包装器没有记录返回任何内容,那么 SendMessage 没有用(如果它没有返回任何内容),或者文档(用于省略重要的一条信息)。
    猜你喜欢
    • 2021-07-19
    • 1970-01-01
    • 2012-04-30
    • 2012-07-20
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    相关资源
    最近更新 更多