[英]How can I call notepad.exe from a C program?
i have written a time table program in c我在 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();
}
when i finish the timetable.当我完成时间表。 the time table is created in a.txt file.时间表在 a.txt 文件中创建。 i want that file to be opened and show me automatically in a notepad.我希望打开该文件并在记事本中自动显示。 how to program that in c?如何在 c 中编程?
Use利用
system("notepad.exe aa.txt");
Dani already described the easier way (using system
), so I'll just describe the other (more complicated but also more flexible) way to do it using the Windows API . Dani 已经描述了更简单的方法(使用system
),所以我将只描述另一种(更复杂但也更灵活)使用Windows API的方法。 Browsing the API (Overview -> System Services -> Processes and Threads), there's a small example on how to create a process using the CreateProcess() function.浏览 API(概述 -> 系统服务 -> 进程和线程),有一个关于如何使用 CreateProcess() function 创建进程的小示例。 In your case:在你的情况下:
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
And then wait for the Notepad process to exit, as described in the example.然后等待记事本进程退出,如示例中所述。
Third way: use the ShellExecute
shell function telling to the shell to "just open the file" with the default editor:第三种方式:使用ShellExecute
shell function 告诉 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.");
}
This will open aa.txt
with the default editor for txt
files.这将使用txt
文件的默认编辑器打开aa.txt
。
In my opinion, this is the best solution:在我看来,这是最好的解决方案:
it respects the user's choice for the editor (unlike CreateProcess
, which just opens notepad.exe
);它尊重用户对编辑器的选择(与只打开notepad.exe
的CreateProcess
不同); if I set PSPad as the default editor for txt files, it will pop up PSPad and not notepad.如果我将 PSPad 设置为 txt 文件的默认编辑器,它将弹出 PSPad 而不是记事本。
it doesn't have problems with search paths for the editor (where is notepad.exe
?)编辑器的搜索路径没有问题( notepad.exe
在哪里?)
its behavior is fully defined, unlike the system
function, which relies on command.com
/ cmd.exe
, which have subtle differences between Windows versions and don't give you any documented/easy way to check if the operation succeeded; its behavior is fully defined, unlike the system
function, which relies on command.com
/ cmd.exe
, which have subtle differences between Windows versions and don't give you any documented/easy way to check if the operation succeeded;
it doesn't give you any "false feeling of portability" like the system
, that will happily compile on a Linux machine but will simply not work at runtime.它不会像system
那样给你任何“错误的可移植感”,它会在 Linux 机器上愉快地编译,但在运行时根本无法工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.