2015-09-20 33 views
0

我有此腳本打開監視器關閉:如何使SendMessage解除阻塞?

import win32api, win32con 

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

"end"不打印和腳本永遠不會結束。
當終端窗口保持打開時,這很煩人。

如何使SendMessage非阻塞?

回答

3

因爲底層的Windows功能被阻塞,所以不能使win32api.SendMessage()非阻塞。相反,你可以使用win32api.PostMessage(),它具有相同的特徵:

import win32api, win32con 

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

[SendMessage函數(https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950.aspx)和[PostMessage的] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms644944.aspx)沒有相同的簽名。雖然'SendMessage'返回值,這是處理消息的結果,'PostMessage'返回一個布爾成功代碼。 – IInspectable

+0

@IInspectable:你可能是對的,我無法測試它。我的意思是傳遞相同的函數參數。這兩者都沒有被記錄爲在PyWin32文檔中返回任何東西,但我認爲'SendMessage'將返回一個整數,而'PostMessage'似乎返回並且錯誤或'None',不是布爾值。 – mhawke

+0

如果「SendMessage」的PyWin32包裝器沒有記錄爲返回任何內容,則「SendMessage」無用(如果它不返回任何內容)或文檔(用於省略重要的信息)。 – IInspectable