1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 """
29 Wrapper for shell32.dll in ctypes.
30 """
31
32 __revision__ = "$Id: shell32.py 618 2010-02-11 02:15:09Z qvasimodo $"
33
34 from defines import *
35 from kernel32 import LocalFree
36
37
38
39
40
41
42
44 _CommandLineToArgvW = windll.shell32.CommandLineToArgvW
45 _CommandLineToArgvW.argtypes = [LPVOID, POINTER(ctypes.c_int)]
46 _CommandLineToArgvW.restype = LPVOID
47
48 if not lpCmdLine:
49 lpCmdLine = None
50 argc = ctypes.c_int(0)
51 vptr = ctypes.windll.shell32.CommandLineToArgvW(lpCmdLine, ctypes.byref(argc))
52 if vptr == NULL:
53 raise ctypes.WinError()
54 argv = vptr
55 try:
56 argc = argc.value
57 if argc <= 0:
58 raise ctypes.WinError()
59 argv = ctypes.cast(argv, ctypes.POINTER(LPWSTR * argc) )
60 argv = [ argv.contents[i] for i in xrange(0, argc) ]
61 finally:
62 if vptr is not None:
63 LocalFree(vptr)
64 return argv
65
66 CommandLineToArgvA = MakeANSIVersion(CommandLineToArgvW)
67 CommandLineToArgv = CommandLineToArgvA
68
69
70
71
72
73
74
75
76
77 -def ShellExecuteA(hwnd = None, lpOperation = None, lpFile = None, lpParameters = None, lpDirectory = None, nShowCmd = None):
78 _ShellExecuteA = windll.shell32.ShellExecuteA
79 _ShellExecuteA.argtypes = [HWND, LPSTR, LPSTR, LPSTR, LPSTR, INT]
80 _ShellExecuteA.restype = HINSTANCE
81
82 if not nShowCmd:
83 nShowCmd = 0
84 success = _ShellExecuteA(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd)
85 success = ctypes.cast(success, c_int)
86 success = success.value
87 if not success > 32:
88 raise ctypes.WinError(success)
89
90 -def ShellExecuteW(hwnd = None, lpOperation = None, lpFile = None, lpParameters = None, lpDirectory = None, nShowCmd = None):
91 _ShellExecuteW = windll.shell32.ShellExecuteW
92 _ShellExecuteW.argtypes = [HWND, LPWSTR, LPWSTR, LPWSTR, LPWSTR, INT]
93 _ShellExecuteW.restype = HINSTANCE
94
95 if not nShowCmd:
96 nShowCmd = 0
97 success = _ShellExecuteW(hwnd, lpOperation, lpFile, lpParameters, lpDirectory, nShowCmd)
98 success = ctypes.cast(success, c_int)
99 success = success.value
100 if not success > 32:
101 raise ctypes.WinError(success)
102
103 ShellExecute = GuessStringType(ShellExecuteA, ShellExecuteW)
104