我想设计一个能调用电脑中已有软件的程序,最好是c++语言的,求高手指点,万分感谢!!!
发布网友
发布时间:2022-05-07 04:53
我来回答
共4个回答
热心网友
时间:2023-10-16 01:46
给你介绍三个函数,代码很简单,可以直接打开电脑内的软件
启动另一个exe程序有三个方法:
WinExec();ShellExecute();和CreateProcess();
其中WinExec()最简单,ShellExecute()较灵活,CreateProcess()最复杂。
1.
WinExec()有两个参数,第一个是要打开的exe文件的路径,第二个是显示方式,如下:
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
等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。
缺点:不灵活,只能用于打开可执行文件(exe文件)。
2.
ShellExecute
可以打开不同种类的文件,可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,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不支持定向输出。
3.
CreateProcess 一
共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制
新的进程的细节属性,若要达到这些目的,我们就需要使用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);
如果要执行的exe文件需要加载配置文件,则将倒数第三个参数NULL设置成当前目录(暂时理解为exe文件所在目录)。否则不识别配置文件,加载错误。
关于三个SDK函数: WinExec, ShellExecute,CreateProcess
的其他注意事项:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include <shlobj.h>// 可替换为 windows.h
#include <shellapi.h>
如 果定义了头文件#include <windows.h>的话就不必定义 #include <shlobj.h>
了,"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);
热心网友
时间:2023-10-16 01:47
exec函数族,如execle
spwan函数族,如spwanle
热心网友
时间:2023-10-16 01:47
CreateProcess就可以,今天刚好用到
热心网友
时间:2023-10-16 01:48
进程间通信方法很多,一般常用共享内存、管道、端口通信。
热心网友
时间:2023-10-16 01:46
给你介绍三个函数,代码很简单,可以直接打开电脑内的软件
启动另一个exe程序有三个方法:
WinExec();ShellExecute();和CreateProcess();
其中WinExec()最简单,ShellExecute()较灵活,CreateProcess()最复杂。
1.
WinExec()有两个参数,第一个是要打开的exe文件的路径,第二个是显示方式,如下:
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
等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。
缺点:不灵活,只能用于打开可执行文件(exe文件)。
2.
ShellExecute
可以打开不同种类的文件,可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,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不支持定向输出。
3.
CreateProcess 一
共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制
新的进程的细节属性,若要达到这些目的,我们就需要使用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);
如果要执行的exe文件需要加载配置文件,则将倒数第三个参数NULL设置成当前目录(暂时理解为exe文件所在目录)。否则不识别配置文件,加载错误。
关于三个SDK函数: WinExec, ShellExecute,CreateProcess
的其他注意事项:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include <shlobj.h>// 可替换为 windows.h
#include <shellapi.h>
如 果定义了头文件#include <windows.h>的话就不必定义 #include <shlobj.h>
了,"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);
热心网友
时间:2023-10-16 01:47
exec函数族,如execle
spwan函数族,如spwanle
热心网友
时间:2023-10-16 01:47
CreateProcess就可以,今天刚好用到
热心网友
时间:2023-10-16 01:48
进程间通信方法很多,一般常用共享内存、管道、端口通信。
热心网友
时间:2023-10-16 01:46
给你介绍三个函数,代码很简单,可以直接打开电脑内的软件
启动另一个exe程序有三个方法:
WinExec();ShellExecute();和CreateProcess();
其中WinExec()最简单,ShellExecute()较灵活,CreateProcess()最复杂。
1.
WinExec()有两个参数,第一个是要打开的exe文件的路径,第二个是显示方式,如下:
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
等等,就不会出现正常的 窗体,但是已经被加到任务列表里了。
缺点:不灵活,只能用于打开可执行文件(exe文件)。
2.
ShellExecute
可以打开不同种类的文件,可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,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不支持定向输出。
3.
CreateProcess 一
共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。如果我们要得到足够多的关于新的进程的信息,控制
新的进程的细节属性,若要达到这些目的,我们就需要使用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);
如果要执行的exe文件需要加载配置文件,则将倒数第三个参数NULL设置成当前目录(暂时理解为exe文件所在目录)。否则不识别配置文件,加载错误。
关于三个SDK函数: WinExec, ShellExecute,CreateProcess
的其他注意事项:
1、定义头文件
在头文件stdafx.h中必须定义以下两个头文件:
#include <shlobj.h>// 可替换为 windows.h
#include <shellapi.h>
如 果定义了头文件#include <windows.h>的话就不必定义 #include <shlobj.h>
了,"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);
热心网友
时间:2023-10-16 01:47
exec函数族,如execle
spwan函数族,如spwanle
热心网友
时间:2023-10-16 01:47
CreateProcess就可以,今天刚好用到
热心网友
时间:2023-10-16 01:48
进程间通信方法很多,一般常用共享内存、管道、端口通信。