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 为真,将文件拖放到窗口中工作正常(我也尝试发送 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 回答