1 |
# ported from http://permalink.gmane.org/gmane.comp.python.windows/3801 |
2 |
|
3 |
import win32gui |
4 |
import win32api |
5 |
import time |
6 |
import os |
7 |
|
8 |
# send WM_QUIT to explorer - 18 == WM_QUIT |
9 |
print "Shutting down Explorer" |
10 |
try: |
11 |
hwnd = win32gui.FindWindow('Progman', None) |
12 |
win32api.PostMessage(hwnd, 18, 0, 0) |
13 |
except: |
14 |
None |
15 |
|
16 |
# wait a while for it to exit - 10 seconds, checking twice/sec |
17 |
print "Waiting for Explorer to exit" |
18 |
for retryAttempt in range(1, 10): # 5 seconds |
19 |
time.sleep(0.5) |
20 |
try: |
21 |
if win32gui.FindWindow('Progman', None) == 0: break |
22 |
except: |
23 |
None |
24 |
time.sleep(2) |
25 |
|
26 |
# explorer is dead - restart it (SW_SHOW=5) |
27 |
print "Restarting Explorer" |
28 |
#InstExec('explorer.exe', '', '', False, False, 5, errCode) |
29 |
#os.system('explorer.exe') |
30 |
os.system('start explorer.exe') |
31 |
#os.spawnl(os.P_DETACH, 'c:\\windows\\explorer.exe', 'c:\\windows\\explorer.exe') |
32 |
#os.execl('c:\\windows\\explorer.exe', 'c:\\windows\\explorer.exe') |
33 |
|
34 |
# Now a few seconds to actually start - if we don't wait for this, |
35 |
# then we may write the RunOnce keys before it has, causing |
36 |
# explorer to process them as we are still installing (or just finished). |
37 |
# Explorer processes the 'RunOnce' etc entries before creating its main window |
38 |
print "Waiting for Explorer to start" |
39 |
for retryAttempt in range(1, 20): |
40 |
time.sleep(0.5) |
41 |
if win32gui.FindWindow('Progman', None) != 0: break |
42 |
# OK, explorer is back up |