tôi sử dụng
procedure ShellOpenAs(const AFileName: string; AHandle: HWND);
begin
ShellExecute(AHandle, 'open', PChar('rundll32.exe'), PChar('shell32.dll,OpenAs_RunDLL ' + AFileName), nil, SW_SHOWNORMAL);
end;
Sửa (lấy cảm hứng từ bình luận và https://stackoverflow.com/a/13229516/1431618 David): Người ta có thể bỏ qua ShellExecute
và RunDll32
bằng cách gọi OpenAs_RunDLL
trực tiếp:
procedure OpenAs_RunDLL(hwnd: HWND; hinst: HINST; lpszCmdLine: LPSTR; nCmdShow: Integer); stdcall; external shell32;
procedure ShellOpenAs(AHandle: HWND; const AFileName: string);
begin
OpenAs_RunDLL(AHandle, HInstance, PChar(AFileName), SW_SHOWNORMAL);
end;
Cũng SHOpenWithDialog là trên Windows Vista và sau đó. (Tôi tìm thấy nó thú vị mà Microsoft đã viết một RUNDLL điểm vào tương thích nhưng cho đến Vista không bận tâm để cung cấp một hàm API thông thường.)
Nguồn
2012-02-10 08:36:11
điều này có thể thực hiện: 'rundll32.exe shell32.dll, OpenAs_RunDLL" C: \ Đường dẫn \ TEXT.TXT "' –
có thể trùng lặp của [Cách mở hộp thoại mặc định cho cửa sổ nếu ShellExecute không thành công do không có liên kết tệp nào trong C++?] (Http: // stackoverflow.com/questions/6364879/how-to-open-a-mặc định-hộp thoại-cho-cửa sổ-if-shellexecute-lỗi-do-no-file-ass) – Anders