2012-02-02 3 views
13

Windowsの関連プログラムでファイルを開く簡単な方法はありますか? (Windowsエクスプローラでダブルクリックすると、コードで自動的に実行されます)ファイル拡張子に関連付けられたプログラムでファイルを開くにはどうすればよいですか?

たとえば、コンピュータAでは、「text.txt」がワードパッドで開きますが、コンピュータBではメモ帳++によって開かれますユーザーはファイル拡張子の割り当てを行います。

は私が働くのShellExecute

ShellExecute(0, L"open", L"c:\\windows\\notepad.exe" ,L"c:\\outfile.txt" , 0 , SW_SHOW); 

を試してみましたが、私は奇妙なことが起こるメモ帳パラメータを省略した場合(ランダムエクスプローラが示されています)。

+0

すでに機能している場合はどうなりますか? –

答えて

19

あなたは、ファイル引数ではなく、パラメータ引数として開くには、ファイルを使用します。使用するプログラムを指定する必要はありません。ShellExecuteがあなたのために検索します。いうよりも、L"open"(0)NULLとして動詞を残すことによって

ShellExecute(0, 0, L"c:\\outfile.txt", 0, 0 , SW_SHOW); 

、あなたはファイルタイプの真のデフォルトのアクションを取得する - 通常これはopen常にではないです。ここ

+0

私は疲れていなければなりません、ありがとう! – Valmond

+0

例:mspaint。これは "open"で起動できません。 –

2

Launching Applicationsを参照してください:Windows上の

ShellExecute(NULL, "open", L"c:\\outfile.txt", NULL, NULL, SW_SHOW); 

は、良いメモリフックはシェルによって実行されているすべてのデータ・ファイルを考えることです。コマンドボックスで試してみてください。コマンドボックスでファイル名を入力するだけで、開くことができます。または、逆に、Windowsのすべてのファイルを開くことができ、実行可能ファイルのデフォルトの開始アクションは、それらを実行することです。

0

オープンの代わりに、スタートを試してみることがありますか?

+1

'open'は、ファイルをダブルクリックするときにExplorerが使用するデフォルトの動詞です。ファイル・タイプの実際のデフォルトを使用するには、パラメーターをNULLのままにすることができます。 –

1

lpFileは、ドキュメントファイルを指定した場合は、フラグが単に

だから、あなたが開いてlpParametersヌルを残したい、実際のファイルで"c:\\windows\\notepad.exe"を置き換える必要があり 関連付けられたアプリケーションに渡されます。

1

MS Knowledge Baseによると、ShellExecuteをは(我々はDelphiですべての時間をこれを行う)動作するはずです:

ShellExecute(Handle, "Open", Filename, "", "C:\", SW_SHOWNORMAL) 
1

少しより多くの可能性:

開きたい場合 - 例えば - (インストールされている場合)メモ帳で、デフォルトでは、ファイルを++、それが存在していて、どこであれば、あなたはそれのレジストリキーをスキャンすることができ、(通常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); 
関連する問題