我有一种情况,我希望程序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可以用我的打开文件对话框打开文件,但这个命令有问题说它找不到文件。
答案 0 :(得分:1)
您在执行
时发表评论"C:\ProgramB.exe" "C:\MyFile.txt"
从命令提示符开始,程序启动,但不会打开您的文件。这意味着可执行文件不支持将文件名作为参数传递。这解释了您对CreateProcess
的调用失败的原因。它与命令解释器cmd.exe完全相同。如果一个失败,那么另一个失败。
看起来你正在尝试的可能是不可能的。
您还说您已向此流程发送了WM_DROPFILES
。那不是你可以做的事情。如果应用程序确实支持拖放,那么您将能够自动执行文件打开,但它比从其他进程发送WM_DROPFILES
更复杂。第一步是确认应用程序是否甚至可以接受以交互方式执行的拖放操作。