winexec函数,我要用C++调用一个.exe文件,怎么实现?
winexec函数,我要用C++调用一个.exe文件,怎么实现?详细介绍
本文目录一览: WinExec都有什么用法,函数功能是什么?
在Windows程序设计中WinAPI也为我们提供了类似的函数,它就是WinExec()
1)WinExec() 函数原型:
UINT WinExec(LPCSTR lpCmdLine,UINT uCmdShow);
参数说明:(激活的意思是能接受焦点,即标题栏变成蓝色)
lpCmdLine:以0结尾的字符串,命令行参数。
uCmdShow:新的应用程序的运行方式。其取值如下:
SW_HIDE 隐藏
SW_MAXIMIZE 最大化
SW_MINIMIZE 最小化,并把Z order顺序在此窗口之后(即窗口下一层)的窗口激活
SW_RESTORE 激活窗口并还原为初始化大小 SW_SHOW 以当前大小和状态激活窗口
SW_SHOWDEFAULT 以默认方式运行
SW_SHOWMAXIMIZED 激活窗口并最大化
SW_SHOWMINIMIZED 激活窗口并最小化
SW_SHOWMINNOACTIVE 最小化但不改变当前激活的窗口
SW_SHOWNA 以当前状态显示窗口但不改变当前激活的窗口
SW_SHOWNOACTIVATE 以初始化大小显示窗口但不改变当前激活的窗口
SW_SHOWNORMAL 激活并显示窗口,如果是最大(小)化,窗口将会还原。第一次运行程序 时应该使用这个值
比如说,我想要用记事本打开"C:\HDC.TXT",以正常方式运行:
WinExec("notepad c:\\hdc.txt",SW_SHOWNORMAL);
如果调用成功,这个函数会返回一个不小于31的值,否则调用失败,其返回值的意义如下:
0 系统内存或资源不足
ERROR_BAD_FORMAT .EXE文件格式无效(比如不是32位应用程序)
ERROR_FILE_NOT_FOUND 指定的文件设有找到
ERROR_PATH_NOT_FOUND 指定的路径没有找到
这个函数和system()非常类似,只能运行.EXE文件,这样在WINDOWS中有它不尽人意的地方,比如不能用此方法通过关联的方法打开文件,例如WinExec("1.html",SW_SHOWNA);就不能打开此文档。
vc中winexec使用?
*****
*****首先,常量字符串中‘\’必须写成‘\\’,也就是WinExec("E:\QQ.EXE",SW_SHOW); 必须改为:
WinExec("E:\\QQ.EXE",SW_SHOW);
*****
*****补充回答:SW_HIDE不行的话用SW_SHOWMINNOACTIVE。
除以上提到的三个以外,第二个参数还有以下7种选择:
SW_MAXIMIZE //最大化运行
SW_MINIMIZE //最小化运行
SW_RESTORE //将最大化或最小化的窗口恢复正常
SW_SHOWMAXIMIZED //激活窗口并以最大化运行
SW_SHOWMINIMIZED //激活窗口并以最小化运行
SW_SHOWNOACTIVATE //不激活
SW_SHOWNORMAL //普通方式
*****
*****继续补充回答:
ShellExecute我在项目中用过,我是这样调用的。ShellExecute (NULL,
"open",
"winrar.exe", // 程序名
"/c a // 以下5行命令行参数
-sfx Default.SFX
-i bck
-i icon test.ico
-z sescript FlashFXP FlashFXP",
NULL,
SW_SHOWNORMAL) // 程序界面显示方式
*****
*****最后一个参数还是窗口显示方式,用的默认的SW_SHOWNORMAL,但我实现了WinRar压缩/解压界面的隐藏,主要是通过命令行参数实现,即第三个包含隐藏界面设置,而且优先权比最后一个参数高,所有实现了隐藏。你自己找找QQ命令行参数设置,暂且只能帮你到这了。
winexec 开头的w要大写
WinExec("E:\\QQ.EXE",SW_SHOW); 要这样写 第一个\是转义字符 第二个才是真正的\
该函数只提供对16位机子的兼容。应用程序应该使用CreateProcess函数。
Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
说明
运行指定的程序
返回值
Long,大于31表示成功,请参考FindExecutable函数
参数表
参数 类型及说明
lpCmdLine String,包含要执行的命令行
nCmdShow Long,定义了以怎样的形式启动程序的常数值。参考ShowWindow函数的nCmdShow参数
注解
请参考对CreateProcess函数的说明,了解在目录中查找指定文件的顺序
VC中如何使用
WINSHELLAPI void WINAPI WinExecErrorA(HWND hwnd, int error, LPCSTR lpstrFileName, LPCSTR lpstrTitle);
WINSHELLAPI void WINAPI WinExecErrorW(HWND hwnd, int error, LPCWSTR lpstrFileName, LPCWSTR lpstrTitle);
参数说明:
hwnd,窗口句柄,一般为NULL。
error,出错信息。
lpstrFileName 文件名。
lpstrTitle标题名。
使用WinExec命令
⑴ 函数原型:
UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);
⑵ 参数:
lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。
uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。
⑶ 返回值:
若函数调用成功,则返回值大于31。若函数调用失败,则返回值为下列之一:
① 0:系统内存或资源已耗尽。
② ERROR_BAD_FORMAT:EXE文件无效(非Win32.EXE或.EXE影像错误)。
③ ERROR_FILE_NOT_FOUND:指定的文件未找到。
④ ERROR_PATH_NOT_FOUND:指定的路径未找到。
大于 31 {调用成功}
等于 0 {内存不足}
ERROR_FILE_NOT_FOUND = 2; {文件名错误}
ERROR_PATH_NOT_FOUND = 3; {路径名错误}
ERROR_BAD_FORMAT = 11; {EXE 文件无效}
//uCmdShow 参数可选值:
SW_HIDE = 0; {隐藏, 并且任务栏也没有最小化图标}
SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}
SW_NORMAL = 1; {同 SW_SHOWNORMAL}
SW_SHOWMINIMIZED = 2; {最小化, 激活}
SW_SHOWMAXIMIZED = 3; {最大化, 激活}
SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}
SW_SHOW = 5; {同 SW_SHOWNORMAL}
SW_MINIMIZE = 6; {最小化, 不激活}
SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}
SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}
SW_RESTORE = 9; {同 SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}
SW_MAX = 10; {同 SW_SHOWNORMAL}
案例:
1)执行完关闭窗口2000和xp中:
WinExec( "cmd /c type aaa.txt ",SW_NORMAL); //执行完后立即关闭DOS窗口
或
WinExec( "cmd /k type aaa.txt ",SW_NORMAL); //执行完后不关闭DOS窗口
2)WINEXEC是异步执行。不能等待命令结束。
例如,移动文件夹,小心还未复制结束,就已经被删除了。
可用
CreateProcess( "测试程序.exe ", NULL, NULL, NULL,
FALSE, 0, NULL, NULL, &si, &mProcessInfor);
//用下面地代码等待程序执行结束:
WaitForSingleObject(mProcessInfor.hProcess, INFINITE);
delphi 中如何使用winexec函数
WinExec('c:\qq2006正式版\qq.exe',1);这样的调用是可以的,
能不能从注册表中读取它的路径吗?如在
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\tt的值(如c:\qq\qq20077.exe)
代码怎样实现
要执行ACDSee看图程序,代码如下:
WinExec(Pchar('C:\Program Files\ACDSee\ACDSee32.exe'),sw_ShowNormal);
求Delphi中createprocess、pipe、winexec、shellexecute的详细用法
三个SDK函数: WinExec,ShellExecute ,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。
WinExec 两个参数,前一个指定路径,后一个指定显示方式。
ShellExecute 可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。
CreateProcess 一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。
三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:
WinExec
这个函数最简单,只有两个参数,原型如下:
UINT WinExec(
LPCSTR lpCmdLine, // 命令路径
UINT uCmdShow // 显示方式
);
使用方法如下:
WinExec("Notepad.exe", SW_SHOW); // 打开记事本
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); // 以最大化的方式打开Test.exe
需要注意的是若用 SW_SHOWMAXMIZED 方式去加载一个无最大化按钮的程序,譬如Neterm,Calc 等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。
ShellExecute
原型如下:
HINSTANCE ShellExecute(
HWND hwnd, //父窗口句柄
LPCTSTR lpOperation, //操作, 打开方式 "edit","explore","open","find","print","NULL"
LPCTSTR lpFile, //文件名,前面可加路径
LPCTSTR lpParameters, //参数
LPCTSTR lpDirectory, //默认文件夹
INT nShowCmd //显示方式
);
使用方法如下:
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL); // 打开C:\Test.txt 文件
ShellExecute(NULL, "open", "http://www.google.com",/ NULL, NULL, SW_SHOWNORMAL); // 打开网页www.google.com
ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打开目录D:\C++
ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:\Test.txt
ShellExecute不支持定向输出。
CreateProcess
原型如下:
BOOL CreateProcess(
LPCTSTR lpApplicationName, //执行程序名
LPTSTR lpCommandLine, // 参数行
//下面两个参数描述了所创建的进程和线程的安全属性,如果为NULL则使用默认的安全属性
LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // 继承标志
DWORD dwCreationFlags, // 创建标志
LPVOID lpEnvironment, // 环境变量
LPCTSTR lpCurrentDirectory, // 运行该进程的初始目录
LPSTARTUPINFO lpStartupInfo, // 用于在创建子进程时设置各种属性
LPPROCESS_INFORMATION lpProcessInformation //用于在进程创建后接受相关信息
);
使用方法如下:
PROCESS_INFORMATION pi;
STARTUPINFO si;
memset(&si,0,sizeof(si));
si.cb=sizeof(si);
si.wShowWindow=SW_SHOW;
si.dwFlags=STARTF_USESHOWWINDOW;
bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
可以看出,通过上面的几个不同的方法,都可以实现在应用程序中打开其他应用程序的目的,其中有些方法可能会麻烦一点,所以就需要我们根据不同的目的去选择最适合自己的方法去实现自己的目的!
关于三个SDK函数: WinExec, ShellExecute,CreateProcess 的其他注意事项:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include
// 可替换为 windows.h
#include
如果定义了头文件 #include
的话就不必定义 #include
了,"windows.h" 不光是包含了"shellapi.h",它还定义了许多数据类型,如果没有这些数据类型,shellapi.h本身会出错。
2、定义路径
C++中所表示的路径要用 " \\ "而不是平常所用的" \ ",所以以上三个函数表示路径都为:
Disk:\\Directory\\...\\File name
WinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED);
ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);
bool fRet=CreateProcess("D:\\putty.exe",NULL,NULL,FALSE,NULL,NULL,NULL,NULL,&si,&pi);
///////////////////////////////////////////////////////////////
WinAPI: WinExec - 运行外部程序
//声明
WinExec(
lpCmdLine: LPCSTR; {文件名和参数; 如没指定路径会按以下顺序查找: 程序目录/当前目录/System32/Windows/PATH环境变量}
uCmdShow: UINT {启动选项}
): UINT;
//返回值:
大于 31 {调用成功}
等于 0 {内存不足}
ERROR_FILE_NOT_FOUND = 2; {文件名错误}
ERROR_PATH_NOT_FOUND = 3; {路径名错误}
ERROR_BAD_FORMAT = 11; {EXE 文件无效}
//uCmdShow 参数可选值:
SW_HIDE = 0; {隐藏, 并且任务栏也没有最小化图标}
SW_SHOWNORMAL = 1; {用最近的大小和位置显示, 激活}
SW_NORMAL = 1; {同 SW_SHOWNORMAL}
SW_SHOWMINIMIZED = 2; {最小化, 激活}
SW_SHOWMAXIMIZED = 3; {最大化, 激活}
SW_MAXIMIZE = 3; {同 SW_SHOWMAXIMIZED}
SW_SHOWNOACTIVATE = 4; {用最近的大小和位置显示, 不激活}
SW_SHOW = 5; {同 SW_SHOWNORMAL}
SW_MINIMIZE = 6; {最小化, 不激活}
SW_SHOWMINNOACTIVE = 7; {同 SW_MINIMIZE}
SW_SHOWNA = 8; {同 SW_SHOWNOACTIVATE}
SW_RESTORE = 9; {同 SW_SHOWNORMAL}
SW_SHOWDEFAULT = 10; {同 SW_SHOWNORMAL}
SW_MAX = 10; {同 SW_SHOWNORMAL}
--------------------------------------------------------------------------------
//举例, 启动记事本:
procedure TForm1.Button1Click(Sender: TObject);
begin
WinExec('notepad.exe', SW_SHOWNORMAL);
end;
vc错误 WinExec函数的问题
这个黑框是因为你使用了控制台程序的模式,改为win32程序就不会出现了。
用WinExec是没有问题的。
改为Win32程序的代码为:
#include
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
WinExec("E:\\QQ\\QQ.exe",SW_SHOW);
return 0;
}
WinExec("E:\\Tencent\\QQ2009\\Bin\\QQ.exe",SW_NORMAL); //Bin前少\
最好用函数ShellExecute
ShellExecute(NULL,"open","E:\\Tencent\\QQ2009\\Bin\\QQ.exe", NULL,NULL,SW_SHOW );
使用WINEXEC函数要注意什么?
我在使用WinApi函数WinExec()时,出了点问题:我在FORM1上添加民一些必要的控件后,写了下列代码:procedure TForm1.Button1Click(Sender: TObject);var strCmd,strDir:string;beginstrDir:=directorylistbox1.Directory;strCmd:='subst a: '+strdir;Windows.WinExec(strCmd,sw_hide);end;我的意思是将对软盘的访问改向到对硬盘上某个文件夹的访问,如:subst a: d:\example但我在程序运行期间要不断变换文件夹,所以想用一个变量代替,但出现了错误。编译时的错误信息为:[Error]Unit1.pas(51):Incompatibletypes:'String' and 'PChar'[Fatal Error]Project1.dpr(5):Could not complie used unit 'Unit1.pas'如果我把Windows.WinExec(strCmd,sw_hide);中的变量strCmd换成一个字符串常量就没问题,请问各位怎么办?一旦解决,立即送分。
看看WinExec的声明,第一个参数要求一个PChar类型,因此你传入一个String类型会报告错误,而直接用一个字符串常量Delphi会认为你传的是一个PChar常量,因此没有问题。而PChar(strCmd)是将strCmd强制转换为一个PChar类型,另外,PChar和String之间是可以直接赋值的,如:var p:PChar; s:string;begin s:='subst a: c:\windows'; p:=s; WinExec(p,SW_HIDE);end;
joyhero(JoyHero)朋友,能不能告诉我为什么?另外能推荐点书看看吗?我先给一半分,OK?
WinExec(PChar(strCmd),SW_HIDE);
我要用C++调用一个.exe文件,怎么实现?
同时在编程环境里打开他们然后同时的编译,运行就行了
可以使用以下任意函数system(), WinExec(), ShellExecute(),CreateProcess()
详细介绍一下WinExec()
函数原型WinExec(String lpCmdLine,Long nCmdShow);
参数说明: 参数 类型及说明
lpCmdLine String,包含要执行的命令行
nCmdShow Long,为窗口指定可视性方面的一个命令。请用下述任何一个常数
SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED 最大化窗口,并将其激活
SW_SHOWMINIMIZED 最小化窗口,并将其激活
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口
SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
SW_SHOWNORMAL 与SW_RESTORE相同
例如要打开QQ
WinExec("D:\\Program Files\\Tencent\\QQ2009\Bin\\QQ.exe"SW_SHOW);
即可,路径要使用两个\
容易。
如果file1.txt file2.txt 是 yourexe.exe 的位置参数:
C++调用
system("yourexe.exe file1.txt file2.txt");
如果file1.txt file2.txt 是 通过 对话,从键盘打入:
(1)建一个文本文件,例如叫 my.in
my.in 的内容 有两行:
file1.txt
file2.txt
(2)C++调用
system("yourexe.exe < my.in");
my.in 代替了 键盘打入。
在vs下执行dos,WinExec
WinExec是WINDOWS提供的API函数,MFC里也可以用呀
简单办法是用 system()
文件导向 用 >>
char cmd[]="start /wait /b netstat -e -s >> D:\\a.txt";
system(cmd);
选项 /wait /b 就是 SW_HIDE 并等待执行。
C++ 编写一个WIN32程序,向CMD传递参数
首先传递多个参数可以用&,例如下面的命令使cmd.exe执行ping之后再执行dir命令:
cmd /c ping 127.0.0.1>ping.txt & dir >dir.txt
再次,启动cmd有很多种方法,system这就是其中一种
还有WinExec函数,如:WinExec("cmd.exe /c dir>ping.txt", 0);
再有ShellExecute函数,如ShellExecute(NULL,"open","cmd.exe","/c dir>ping.txt",NULL, SW_HIDE );
当然还有CreateProcess函数了。
所有示例如下:
#include
#include
// win32程序的入口函数
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// int a = WinExec("cmd.exe /c dir>ping.txt", 0);
// ShellExecute(0, "open", "http://www.neu.edu.cn/default.htm",NULL,NULL,SW_SHOWNORMAL);
// ShellExecute(NULL,"open","cmd.exe","/c dir>ping.txt",NULL, SW_HIDE );
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
TCHAR szCommandLine[] = TEXT("cmd.exe /c dir>ping.txt");
CreateProcess(NULL,szCommandLine,NULL,NULL,
FALSE,0,NULL,NULL,&si, &pi);
return 0;
}
18Delphi中如何调用windows应用程序?
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess!(使用时在uses 添加 shellapi)!1.CreateProcess因为使用复杂,比较少用。
2.WinExec主要运行EXE文件。如:WinExec('Notepad.exe Readme.txt', SW_SHOW);
3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。(WinExec 本人不推荐使用,因为他是十六位的,有时会被杀软误报);ShellExecute函数原型及参数含义:function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST; stdcall; hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执
行默认操作“open”。 FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。 Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。 Directory:用于指定默认目录。 ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。 如要打开一个网站:ShellExecute(handle, ‘open’, ‘http://aotian518.uueasy.com’, nil, nil, SW_SHOWNORMAL); 打开一个可执行的exe文件:ShellExecute(handle, ‘open’,‘ D:\123.EXE’,nil,nil,SW_SHOWNORMAL);
如还有不明白的请留言!
varpath:string;beginpath:="路径,若是直接可以在cmd里打上名字会出来的。这里也一样打上名字就行了";winexec(pchar(path),0);//第二个0或者1 0表示隐藏打开程序的界面。1表示正常打开。
使用Winexec()或者ShellExecute