[英]How can you open a file with the program associated with its file extension?
有一種簡單的方法可以通過Windows中的相關程序打開文件嗎? (比如在Windows資源管理器中雙擊它,但使用我的代碼自動完成)
例如,在計算機A上,“text.txt”將在wordpad中打開,但在計算機B上,它將由Notepad ++打開,因為用戶文件擴展名分配。
我試過ShellExecute
ShellExecute(0, L"open", L"c:\\windows\\notepad.exe" ,L"c:\\outfile.txt" , 0 , SW_SHOW );
這有效,但如果我省略notepad.exe參數奇怪的事情發生(顯示隨機瀏覽器)。
您希望使用該文件作為文件參數打開,而不是參數參數。 無需指定要使用的程序, ShellExecute
將為您查找。
ShellExecute(0, 0, L"c:\\outfile.txt", 0, 0 , SW_SHOW );
通過將動詞保留為NULL(0)而不是L"open"
,您將獲得文件類型的真正默認操作 - 通常這是open
但不總是。
請參閱啟動應用程序 :
ShellExecute(NULL, "open", L"c:\\outfile.txt", NULL, NULL, SW_SHOW);
在Windows上,一個好的內存鈎子就是想到shell可以執行的所有數據文件。 您也可以在命令框中嘗試它,您只需鍵入文件名,它就會被打開。 或者,反過來說,Windows中的每個文件都可以打開,可執行文件的默認打開操作就是執行它們。
這里有一點點可能性:
如果你想打開 - 例如 - 文件默認情況下用Notepad ++(如果已安裝),你可以掃描它的注冊表項(如果它存在)和它在哪里(通常是HKLM\\SOFTWARE\\Wow6432Node\\Notepad++
[測試Win7])然后走那條路然后打開它。
std::wstring file = L"C:\\\\Outfile.txt";
if (NotepadPlusPlusExists()) //Open with Notepad++ or use an other program... (maybe your own ?)
{
std::wstring wsNPPPath = GetNotepadPlusPlusPath();
ShellExecuteW(HWND, L"open", wsNPPPath.c_str(), file.c_str(), NULL, SW_NORMAL);
}
else //Open with default associated program <---
ShellExecuteW(HWND, NULL, file.c_str(), NULL, NULL, SW_NORMAL);
如果您希望用戶能夠更改默認程序或選擇他/她想要使用的程序,您可以打開“打開方式”對話框。
//std::wstring StringArgsW(const wchar_t *format, ...);
std::wstring wsCmdOpenWith = StringArgsW(L"C:\\Windows\\system32\\shell32.dll,OpenAs_RunDLL \"%s\"", file.c_str());
ShellExecuteW(HWND, L"open", L"C:\\Windows\\system32\\rundll32.exe", wsCmdOpenWith.c_str(), NULL, SW_NORMAL);
您也可以在資源管理器中打開該文件。
std::wstring wsCmdExplorer = StringArgsW(L"/select,\"%s\"", file.c_str());
ShellExecuteW(HWND, L"open", L"explorer.exe", wsCmdExplorer.c_str(), NULL, SW_NORMAL);
根據MS知識庫 ,ShellExecute應該可以工作(我們一直在Delphi中這樣做):
ShellExecute(Handle, "Open", Filename, "", "C:\", SW_SHOWNORMAL)
如果lpFile指定文檔文件,則該標志將簡單地傳遞給關聯的應用程序
因此,您需要將"c:\\\\windows\\\\notepad.exe"
替換為要打開的實際文件,並將lpParameters
保留為null。
也許試試開始而不是開放 ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.