我怎样才能从C程序调用notepad.exe?

我已经写了一个时间表程序在C

#include<stdio.h> #include<conio.h> void main() { int i=0; int selection; char day[20]; char sub1[20]; char sub2[20]; char sub3[20]; FILE *fp; fp=fopen("aa.txt","w"); textcolor(5); textbackground(3); clrscr(); while(i<3) { printf("Enter the day "); scanf("%s",day); printf("Enter the period 12.30-1:30 "); scanf("%s",sub1); printf("Enter the period 1.35-2.40 "); scanf("%s",sub2); printf("Enter the period 2.45-3.50 "); scanf("%s",sub3); fprintf(fp,"\n %s TIMETABLE IS AS FOLLOWS\n",day); fprintf(fp,"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n"); fprintf(fp,"| TIME | 12.30-1.30 | 1.35-2.40 |2.45-3.50 |\n"); fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n"); fprintf(fp,"| SUBJECT * %s * %s * %s|\n",sub1,sub2,sub3); fprintf(fp,"|~~~~~~~~~|~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~|~~~~~~~~~~|\n"); i++; } printf(" Time table has been Created in the File aa.txt successfully"); getch(); } 

当我完成时间表。 时间表在a.txt文件中创build。 我想要打开这个文件并自动显示在记事本中。 如何编程在C?

使用

 system("notepad.exe aa.txt"); 

Dani已经描述了更简单的方法(使用system ),所以我只会用Windows API来描述其他(更复杂但更灵活)的方法。 浏览API(概述 – >系统服务 – >进程和线程),有一个关于如何使用CreateProcess()函数创建进程的小例子。 在你的情况下:

 CreateProcess("notepad.exe", // Name of program to execute "aa.txt", // Command line NULL, // Process handle not inheritable NULL, // Thread handle not inheritable FALSE, // Set handle inheritance to FALSE 0, // No creation flags NULL, // Use parent's environment block NULL, // Use parent's starting directory &si, // Pointer to STARTUPINFO structure &pi); // Pointer to PROCESS_INFORMATION structure 

然后等待记事本进程退出,如示例中所述。

第三种方法:使用ShellExecute shell函数告诉shell使用默认的编辑器“打开文件”:

 #include <windows.h> #include <Shellapi.h> // ... if(ShellExecute( NULL, // No parent window for error message boxes/... "open", // Shell action ("verb") to be performed on the file (as opposed to "print", "explore", ...) "aa.txt", // File to be opened NULL, // Command-line parameters - not used when opening documents NULL, // Working directory - the current one is used by default SW_SHOW // State of the window of the application being launched - SW_SHOW is the default )<=(HINSTANCE)32 // If ShellExecute returns a value <=32 it means that an error has occurred ) { puts("Cannot open aa.txt with the default editor - ShellExecute failed."); } 

这将使用txt文件的默认编辑器打开aa.txt

在我看来,这是最好的解决方案:

  • 它尊重用户对编辑器的选择(不像CreateProcess ,它只是打开notepad.exe ); 如果我将PSPad设置为txt文件的默认编辑器,它将弹出PSPad而不是记事本。

  • 它没有编辑器的搜索路径的问题( notepad.exe在哪里?)

  • 它的行为是完全定义的,不同于依赖于command.com / cmd.exesystem函数,它们在Windows版本之间有细微的差别,并且不给你任何记录/简单的方法来检查操作是否成功;

  • 它不会像system那样给你带来任何“可移植性的错觉”,它会在Linux机器上愉快地编译,但在运行时却不起作用。