我在这里遗漏了一些明显的东西。我正在使用DJGPP C编译器。我可以成功打开可执行文件,但不能打开默认程序中的文件。
#include <stdio.h>
int main(void) {
char sys_cmd[100] = "C:\\WINDOWS\\system32\\Calc.exe";
system(sys_cmd);
system("\"C:\\TextFile.txt\"");
system("\"www.bbc.co.uk\"");
getch();
return 0;
}
运行此代码会导致计算器启动。关闭计算器后,它会报告:
Bad command of file name
Bad command of file name
因此其他两个系统调用存在问题。我曾尝试在系统调用中添加“START”,但这并不能解决问题。刚刚搜索了我的Windows 7 Pro系统,它没有START.EXE。添加“cmd.exe”只是启动cmd,所以好像没有发送任何参数。
我可以正常输入“C:\ TextFile.txt”到cmd中,它会打开notepad.exe,里面打开TextFile.txt。
理想情况下,我会使用比system()更安全的方法来执行此操作,但我还没有在DJGPP中看到任何ShellExecute示例。
答案 0 :(得分:2)
您在djgpp中找不到ShellExecute,因为它只是DOS而且不会创建真正的Windows应用程序,因此无法访问Windows Api调用。
ShellExecute将能够使用Windows注册表找出需要使用哪个应用程序来打开某个文件扩展名。
我不知道exec()是否能够做到这一点,但我有疑问。
对于非常旧的版本,存在允许从djgpp编译程序调用windows api的交叉编译器。但由于这是基于编译器的2.9版本:http://www.delorie.com/djgpp/v2faq/faq3_6.html这可以被认为是死胡同。
如下面的评论所述,您可以插入从.txt到记事本的静态映射。如果你必须支持许多扩展,你基本上有两个选择:
请注意,djgpp已经过时,并且没有收到Gcc所做的相同更新
A&#34; hack&#34;将是从您的C程序创建一个临时的.cmd或.bat并委派您需要该批文件的文件的启动。