をspawnlpを使用system
、例えばsystem("explorer /n, /select,c:\\123.doc")
。
それは私を悩ませたという理由だけで、私は先に行って、のCreateProcessでこれを行う簡単なプログラムを書いた:
#define UNICODE
#include <windows.h>
#include <string>
void SimpleWriteConsole(std::wstring msg) {
DWORD written = 0;
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE),
msg.c_str(), msg.length(), &written, NULL);
}
int wmain(int argc, wchar_t **argv, wchar_t **envp) {
SimpleWriteConsole(L"Opening explorer...\n");
std::wstring commandLine = L"explorer /n, /select,";
if(argc < 2) {
SimpleWriteConsole(L"Please include a file to select.\n");
return EXIT_FAILURE;
}
commandLine += argv[1];
STARTUPINFO startupInfo;
ZeroMemory(&startupInfo, sizeof(startupInfo));
startupInfo.cb = sizeof(startupInfo);
PROCESS_INFORMATION procInfo;
if(! CreateProcess(NULL, const_cast<wchar_t*>(commandLine.c_str()),
NULL, NULL, 0, 0, NULL, NULL, &startupInfo, &procInfo)) {
SimpleWriteConsole(L"Couldn't create process :(\n");
return EXIT_FAILURE;
}
CloseHandle(procInfo.hThread);
CloseHandle(procInfo.hProcess);
SimpleWriteConsole(L"Hooray launched explorer.\n");
return EXIT_SUCCESS;
}
それはCを取る:abc.txtパーツ\コマンドラインでパラメータとして。余分なDOSボックスはなく、既存のプロセス(execはそれを行うはずですが、btw)を食べず、廃止予定のAPIは使用しません。
ファイル名文字列は組み込みのファイル処理コンポーネントによって処理されるため、自動的に二重バックスラッシュで実装されます。いずれのタイプも動作しません。私は両方を試みた。 – MrVimes
別の考え方 - ファイル名ではなく、ディレクトリ名ではないと思いますか? –
おっと、ストライキはありません –