1

プログラム A が別のプログラム B を開き、プログラム B が指定されたファイルを開くようにしたい状況があります。現在、CreateProcess を使用し、コマンド ライン引数にファイル パスを渡すことで、これを達成しようとしています。これが私のコードです:

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
CreateProcess("C:\\ProgramB.exe", "C:\\MyFile.txt", NULL, NULL,
              FALSE, 0, NULL, NULL, &si, &pi);

ここで何が間違っていますか?プログラム B の DragAndDrop は true で、ウィンドウへのファイルのドラッグ アンド ドロップは正常に機能し (WM_DROPFILES メッセージを送信しても成功しませんでした)、プログラム B はファイルを開くダイアログで問題なくファイルを開くことができますが、このコマンドには問題があります。ファイルが見つからないと言っています。

4

1 に答える 1

1

実行時にコメントで述べます

"C:\ProgramB.exe" "C:\MyFile.txt" 

コマンド プロンプトから、プログラムは起動しますが、ファイルは開きません。これは、実行可能ファイルがファイル名を引数として渡すことをサポートしていないことを意味します。CreateProcessこれは、への呼び出しが失敗する理由を説明しています。これは、コマンド インタープリタの cmd.exe とまったく同じことを行っています。一方が失敗すると、もう一方も失敗します。

あなたが試みていることは不可能なようです。

また、プロセスに を送信したとも言いましたWM_DROPFILES。それはあなたがそのようにできることではありません。アプリケーションがドラッグ アンド ドロップをサポートしている場合は、ファイルを開く操作を自動化できますがWM_DROPFILES、別のプロセスから送信するよりも複雑です。最初のステップは、アプリケーションが対話的に実行されるドラッグ アンド ドロップを受け入れることができるかどうかを確認することです。

于 2013-04-26T16:54:55.827 に答える