打开记事本,并打开一个文件(系统能识别记事本应用程序的路径,可不用绝对路径)
ShellExecute(Handle, 'open', PChar('notepad'), PChar('c:\test\readmetxt'), nil, SW_SHOW);
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。
1CreateProcess因为使用复杂,比较少用。
2WinExec主要运行EXE文件。如:WinExec(’Notepadexe Readmetxt’, SW_SHOW);
3ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
首先必须引用shellapipas单元:uses ShellAPI;
1)标准用法
ShellExecute函数原型及参数含义如下:
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall;
●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口
句柄,即ApplicationHandle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
●Operation:用于指定要进行的 *** 作。其中“open” *** 作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件
夹;“print” *** 作表示打印由FileName参数指定的文件;“explore” *** 作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执
行默认 *** 作“open”。
●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
●Directory:用于指定默认目录。
●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。
2)特殊用法
还可以将FileName参数设置为“>
2个错误;
错误1:
fscanf(fp,"%d",&n[a]);
因为你前面fprintf(fs,"%d\n",n[a]);加了\n,所以应该改为fscanf(fp,"%d\n",&n[a]);
错误2:
FILE fp=fopen("c:\\data\\class1txt","r");
FILE fs=fopen("c:\\data\\class1txt","wt");
很多情况下只是打开文件没有关闭文件;
FILE fp;
FILE fs;
最好改为在case 2:
fp=fopen("c:\\data\\class1txt","r");
在case 3 :
fs=fopen("c:\\data\\class1txt","wt");
下面是我改正好的代码:在WINDOWS下可以执行,结果正确;
#include <stdioh>
#include <conioh>
int menu();
int main()
{
FILE fp;
FILE fs;
int a,n[11]={0};
system("md c:\\data");
begin:
switch(menu())
{
case 1:
for(a=1;a<=10;a++)
{
printf("N[%d]=",a);
scanf("%d",&n[a]);
}
goto begin;
case 2:
fs=fopen("c:\\data\\class1txt","wt");
for(a=1;a<=10;a++)
fprintf(fs,"%d\n",n[a]);
fclose(fs);
printf("Save successful!\n");
goto
begin;
case 3:
fp=fopen("c:\\data\\class1txt","r");
for(a=1;a<=10;a++)
fscanf(fp,"%d\n",&n[a]);
printf("Readed it!\n");
goto begin;
case 4:
for(a=1;a<=10;a++)
printf("N[%d]=%d\n",a,n[a]);
getch();
goto begin;
case 0:
printf("See you!");
//sleep(1);
}
return 0;
}
int menu()
{
int a=-1;
begin:
system("cls");
printf("\n");
printf(" 1 add\n");
printf(" 2 save\n");
printf(" 3 rede\n");
printf(" 4 show\n");
printf(" 0 quit\n");
printf("\n");
printf("Enter your choice:");
scanf("%d",&a);
if(a>4||a<0)
{
printf("Input erro!\n");
//sleep(1);
goto begin;
}
return
a;
}
;
用 Runtime 的 exec 方法的确是可行的。
假设我们已经把以下的 C 程序编绎成 adderexe:
#include <stdioh>
int main() { / 简单地循环打印标准输入上的两个整数之和 /
int a, b, lineNumber = 0;
while (scanf("%d %d", &a, &b))
printf("Line# %d \t %d + %d == %d\n", ++lineNumber, a, b, a + b);
return 0;
}
以下的 Java 程序可以在启动 adderexe 后,跟 adderexe 的标准输入和输出接轨,然后持续不断地向它发送数据和索取结果:
import javaio;
class C {
public static void main(String[] args) throws Exception {
final Process proc = RuntimegetRuntime()exec("adderexe");
// 用另一个线程把参数送到 proc 的标准输入上去。
new Thread() {
public void run() {
OutputStream stdin = procgetOutputStream();
for (int i = 0; ; i++) {
try {
Threadsleep(1); // 要休息片刻才看得到 I/O 的缓存效果。
stdinwrite((i + " " + i + "\n")getBytes());
} catch (Exception ex) {
exprintStackTrace();
}
}
}
}start();
// 主线程负责读取并打印 proc 的标准输出。
BufferedReader stdout = new BufferedReader(new InputStreamReader(procgetInputStream()));
for (String line; null != (line = stdoutreadLine()); )
Systemoutprintln(line);
}
}
循环里的 Threadsleep(1) 纯粹是为了凸显 I/O 的缓存效果。
我测试时看到大约 900 行的缓存量(用 32-bit XP 和 Java 16)。
以上就是关于C++调用exe:一个简单的程序,一个exe中时一个输入框和一个按钮,输入内容后点击按钮调用并显示另一个exe全部的内容,包括:C++调用exe:一个简单的程序,一个exe中时一个输入框和一个按钮,输入内容后点击按钮调用并显示另一个exe、delphi 调用exe文件后怎么获得执行结果、c语言问题:第二次打开exe文件的时候始终无法读取数据。。。。。。。,在线秒回。。。。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)