OSDN Git Service

config.execElevated: use msgWaitforMultipleObjects and peekMessage/translateMessage...
authorMichael Curran <mick@kulgan.net>
Fri, 12 Aug 2011 05:30:59 +0000 (15:30 +1000)
committerMichael Curran <mick@kulgan.net>
Fri, 12 Aug 2011 05:30:59 +0000 (15:30 +1000)
source/config/__init__.py

index c01e520..da3a64c 100644 (file)
@@ -3,6 +3,8 @@
 \r
 import globalVars\r
 import _winreg\r
+import ctypes\r
+import ctypes.wintypes\r
 from copy import deepcopy\r
 import os\r
 import sys\r
@@ -317,7 +319,12 @@ def execElevated(path, params=None, wait=False):
        shellapi.ShellExecuteEx(sei)\r
        if wait:\r
                try:\r
-                       winKernel.waitForSingleObject(sei.hProcess, winKernel.INFINITE)\r
+                       h=ctypes.wintypes.HANDLE(sei.hProcess)\r
+                       msg=ctypes.wintypes.MSG()\r
+                       while ctypes.windll.user32.MsgWaitForMultipleObjects(1,ctypes.byref(h),False,-1,255)==1:\r
+                               while ctypes.windll.user32.PeekMessageW(ctypes.byref(msg),None,0,0,1):\r
+                                       ctypes.windll.user32.TranslateMessage(ctypes.byref(msg))\r
+                                       ctypes.windll.user32.DispatchMessageW(ctypes.byref(msg))\r
                        return winKernel.GetExitCodeProcess(sei.hProcess)\r
                finally:\r
                        winKernel.closeHandle(sei.hProcess)\r