C++调用exe:一个简单的程序,一个exe中时一个输入框和一个按钮,输入内容后点击按钮调用并显示另一个exe

C++调用exe:一个简单的程序,一个exe中时一个输入框和一个按钮,输入内容后点击按钮调用并显示另一个exe,第1张

打开记事本,并打开一个文件(系统能识别记事本应用程序的路径,可不用绝对路径)

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文件的时候始终无法读取数据。。。。。。。,在线秒回。。。。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9660966.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存