Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 打开.doc文件,但不提供其处理程序应用程序C++;_C++_Windows_Visual Studio 2010_Winapi_Operating System - Fatal编程技术网

C++ 打开.doc文件,但不提供其处理程序应用程序C++;

C++ 打开.doc文件,但不提供其处理程序应用程序C++;,c++,windows,visual-studio-2010,winapi,operating-system,C++,Windows,Visual Studio 2010,Winapi,Operating System,我需要在我的C++项目中打开PDF和DOC文件,我唯一的限制是不能使用SelExcExcand和WiExeUT来打开扩展文件。 现在,我尝试使用WMI查询和OpenProcess()打开文件,但这两个过程都需要处理程序应用程序路径以及DOC/PDF文件路径 我无法给出默认的处理程序应用程序路径,是否有任何方法可以直接打开文件而不指定处理程序应用程序路径?您可以解析哪个应用程序与需要打开的文件关联。一个起点和起点。这可能很棘手,因为您可能需要考虑各种细节,但这正是ShellExecute所做的 如

我需要在我的C++项目中打开PDF和DOC文件,我唯一的限制是不能使用SelExcExcand和WiExeUT来打开扩展文件。 现在,我尝试使用WMI查询和OpenProcess()打开文件,但这两个过程都需要处理程序应用程序路径以及DOC/PDF文件路径


我无法给出默认的处理程序应用程序路径,是否有任何方法可以直接打开文件而不指定处理程序应用程序路径?

您可以解析哪个应用程序与需要打开的文件关联。一个起点和起点。这可能很棘手,因为您可能需要考虑各种细节,但这正是
ShellExecute
所做的

如果知道要使用哪个应用程序,请在已知应用程序中搜索它(
HKEY\U LOCAL\U MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Path
)。只有当您知道要处理的文件类型和要使用的应用程序时,这才有用

更简单的方法可能是执行
cmd.exe
,您不需要调用
ShellExecute
,它会为您完成任务(执行默认动词):

在代码中(只是一个示例…):


我必须打印一份文件,但我不能在我的计算机上插入打印机。有什么原因不能使用ShellExecute吗?找到处理应用程序的路径可以吗?你能通过cmd.exe执行它们吗?是的,找到处理应用程序的路径是可以的!请建议找到默认处理应用程序路径的正确方法,一种方法可能是通过注册表找到它?正确的方法是ShellExecute。您的Windows版本知道相关设置的位置。注意:仅知道应用程序路径是不够的。好吧,医生,可能是的。您需要完整的命令行,其中可能包含
/open=%1
。我只是尝试为ShellExecute()执行的相同操作创建一个POC,我希望复制它的功能。如果我使用注册表或任何Win32 API成功获取默认的应用程序路径以获取默认的处理程序应用程序路径,也可以通过其他方式来实现。@WindowsProgrammer OK,我明白。无论如何,我添加了更多链接以总结您可以解析文件关联(使用注册表)或使用CreateProcess执行cmd.exe(它将为您调用ShellExecute)。非常感谢@Adrianoth。正确的方法是调用
cmd.exe/c START c:\MyFile.txt
。但它仍然违反了问题的局限性。这仍然以间接方式调用ShellExecute@Windows程序员,您试图解决的真正问题是什么?
cmd /c MyFile.txt
CreateProcess("cmd.exe",
        "/c c:\\MyFile.txt",
        NULL,
        NULL,
        FALSE,
        0,
        NULL,
        NULL,
        &startupInfo,
        &processInformation);