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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
   | #!env python
import ctypes
from ctypes import wintypes
 
result = ctypes.create_string_buffer(1024)
class OPENFILENAME(ctypes.Structure):
	_fields_ = [
			("lStructSize", ctypes.wintypes.DWORD),
			("hwndOwner", ctypes.wintypes.HWND),
			("hInstance", ctypes.wintypes.HINSTANCE),
			("lpstrFilter", ctypes.c_char_p),
			("lpstrCustomFilter", ctypes.c_char_p),
			("nMaxCustFilter", ctypes.wintypes.DWORD),
			("nFilterIndex", ctypes.wintypes.DWORD),
			("lpstrFile", ctypes.c_char_p),
			("nMaxFile", ctypes.wintypes.DWORD),
			("lpstrFileTitle", ctypes.c_char_p),
			("nMaxFileTitle", ctypes.wintypes.DWORD),
			("lpstrInitialDir", ctypes.c_char_p),
			("lpstrTitle", ctypes.c_char_p),
			("Flags", ctypes.wintypes.DWORD),
			("nFileOffset", ctypes.wintypes.WORD),
			("nFileExtension", ctypes.wintypes.WORD),
			("lpstrDefExt", ctypes.c_char_p),
			("lCustData", ctypes.wintypes.LPARAM),
			("lpfnHook", ctypes.c_void_p),
			("lpTemplateName", ctypes.c_char_p),
			("pvReserved", ctypes.c_void_p),
			("dwReserved", ctypes.wintypes.DWORD),
			("FlagsEx",  ctypes.wintypes.DWORD),
		]
filename = OPENFILENAME(
	ctypes.sizeof(OPENFILENAME),
	0,
	0,
	bytes('*.txt', 'utf-8'),
	0,
	0,
	0,
	ctypes.cast(ctypes.addressof(result), ctypes.c_char_p),
	1024,
	0,
	0,
	bytes('C:\\', 'utf-8'),
	bytes('Open a file from Python', 'utf-8'),
	0,
	0,
	0,
	bytes('txt', 'utf-8'),
	0,
	0,
	0,
	0,
	0,
	0
)
 
ctypes.windll.comdlg32.GetSaveFileNameA(ctypes.byref(filename))
 
print (str(result.value)) | 
Partager