python打开Windows的"打开"对话框
用ctypes模块是可以的。但是也可以去system("getopenfilename.exe"):
tdm-gcc-10.3.0.exe 61,647KB. 自带了Windows的头文件和库。
#define WIN32_LEAN_AND_MEAN #define VC_EXTRALEAN #define _WIN32_WINNT _WIN32_WINNT_WIN7 #include <windows.h> #include <commdlg.h> #include <stdio.h> #include <string.h> #define OFN_FORCESHOWHIDDEN 0x10000000 int main() { WCHAR* s = wcsdup(GetCommandLineW()); wprintf(L"%s\n", s); // https://docs.microsoft.com/en-us/windows/win32/api/commdlg/nf-commdlg-getopenfilenamew // https://docs.microsoft.com/en-us/windows/win32/api/commdlg/ns-commdlg-openfilenamea // g++ getopenfilename.cpp -lcomdlg32 // strip a.exe 24,078 bytes OPENFILENAMEW ofn; ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.lpstrFilter = L"Text Files\0*.txt\0All Files\0*.*\0"; WCHAR strFile[MAX_PATH] = L""; ofn.lpstrFile = strFile; ofn.nMaxFile = MAX_PATH; ofn.Flags = OFN_EXPLORER | OFN_ENABLESIZING | OFN_FILEMUSTEXIST | OFN_FORCESHOWHIDDEN | OFN_LONGNAMES; GetOpenFileNameW(&ofn); if (FILE* f = fopen("getopenfilename-out.txt", "wb")){ char s[MAX_PATH * 3]; WideCharToMultiByte(CP_UTF8, 0, strFile, -1, s, sizeof(s), NULL, NULL); puts(s); //fwprintf(f, L"%s\n", strFile), fclose(f); fprintf(f, "%s\n", s), fclose(f); } }
pywin32也是可以的:
int = GetOpenFileName(OPENFILENAME)
Creates an Open dialog box that lets the user specify the drive, directory, and the name of a file or set of files to open.
OPENFILENAME : string/bytes
A string packed into an OPENFILENAME structure, probably via the struct module.