windows启动进程的APIWinExec、ShellExecute和CreateProces详解

合集下载

winexec 用法

winexec 用法

winexec 用法WinExec 是一种在 Windows 操作系统上执行应用程序的函数。

它的原型如下:```c++UINT WINAPI WinExec(LPCSTR lpCmdLine, // 程序或命令行UINT uCmdShow // 显示方式);```其中,lpCmdLine 参数是要执行的程序或命令行,uCmdShow 参数是程序显示的方式。

在本文中,我们将介绍 WinExec 的用法,以及如何使用它来执行外部应用程序。

WinExec 函数的使用流程如下:1. 调用 WinExec 函数,并传入程序或命令行以及显示方式。

2. WinExec 函数执行程序,返回程序的退出代码。

```c++#include <windows.h>#include <stdio.h>在这个例子中,我们传入了 "notepad.exe" 和 SW_SHOW 两个参数。

其中"notepad.exe" 表示要执行记事本这个程序,而 SW_SHOW 则表示程序显示方式为“显示窗口”(常数值为1)。

在程序执行过程中,使用 WinExec 执行外部程序,会导致当前程序进入等待状态,直到外部程序执行完成。

在本例中,我们使用 printf 输出了 WinExec 返回的程序退出值,以便查看程序是否执行成功。

在实际应用中,使用 WinExec 函数可以方便地执行外部应用程序,比如启动计算器、打开浏览器等等。

下面是一些常见的用法。

1. 启动外部应用程序运行外部应用程序最常见的用法,例如:```c++WinExec("calc.exe", SW_SHOW);```这个例子会启动计算器程序。

某些应用程序需要传入参数才能运行,例如:这个例子会启动记事本程序,并打开 test.txt 文件。

3. 执行命令行WinExec 函数可以直接执行命令行:这个例子会执行 ping 命令,但不会显示命令行窗口(因为显示方式为 SW_HIDE)。

shellexecute用法

shellexecute用法

shellexecute用法ShellExecute 是一个Windows API 函数,用于在 Windows 操作系统中执行外部应用程序、打开文件、链接等操作。

它通常被用于从应用程序中打开其他文件、启动外部程序或访问 URL。

在不同的编程语言中,调用 ShellExecute 的方式可能有所不同,下面以C++为例,演示一下它的基本用法。

cpp#include <Windows.h>int main() {// 要打开的文件路径、程序路径或URLconst char* filePath = "C:\\path\\to\\file.txt";// 使用ShellExecute函数打开文件、程序或URLHINSTANCE result = ShellExecute(NULL, "open", filePath, NULL, NULL, SW_SHOWNORMAL);// 检查执行结果if ((int)result > 32) {// 成功执行return 0;} else {// 执行失败return 1;}}上述代码使用 ShellExecute 打开了指定的文件路径filePath,"open" 参数表示要打开这个文件,SW_SHOWNORMAL 参数表示以正常窗口状态打开。

如果 ShellExecute 返回值大于32,说明操作成功,否则操作失败。

请注意,ShellExecute 可以用于打开文件、程序和URL,但它不提供对操作结果的详细错误信息。

在实际使用时,您可能需要根据您的编程环境和需求适当调整参数和错误处理。

在VC中如何结束进程和启动新进程?

在VC中如何结束进程和启动新进程?

在VC中如何结束进程和启动新进程?在VC程序中如何结束系统正在运行的其他进程(该进程必须有窗口界面),其实很简单,按如下步骤进行即可:1.取得进程的句柄(利用FindWindow函数得到);2.获取进程ID号(用GetWindowThreadProcessId函数获取);3.打开进程,OpenProcess函数中的第一个参数设为PROCESS_TERMINATE,就可以获取处理该进程的句柄;4.利用TerminateProcess函数结束进程,将该函数的第二个参数设为4。

代码如下://结束进程int CStaticFunc::KillProcess(LPCSTR pszClassName, LPCSTRpszWindowTitle){HANDLE hProcessHandle;ULONG nProcessID;HWND TheWindow;TheWindow = ::FindWindow( NULL, pszWindowTitle );::GetWindowThreadProcessId( TheWindow, &nProcessID );hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE,nProcessID );return ::TerminateProcess( hProcessHandle, 4 );}而启动进程则只需要CreateProcess函数就可完成,需要注意的是这个函数的几个输入参数,第一个参数是//启动新进程int CStaticFunc::CreateNewProcess(LPCSTR pszExeName){PROCESS_INFORMATION piProcInfoGPS;STARTUPINFO siStartupInfo;SECURITY_ATTRIBUTES saProcess, saThread;ZeroMemory( &siStartupInfo, sizeof(siStartupInfo) ); siStartupInfo.cb = sizeof(siStartupInfo);saProcess.nLength = sizeof(saProcess);saProcess.lpSecurityDescriptor = NULL;saProcess.bInheritHandle = true;saThread.nLength = sizeof(saThread);saThread.lpSecurityDescriptor = NULL;saThread.bInheritHandle = true;return ::CreateProcess( NULL, (LPTSTR)pszExeName, &saProcess, &saThread, false,CREATE_DEFAULT_ERROR_MODE, NULL, NULL,&siStartupInfo, &piProcInfoGPS );}UNIX/C - 进程环境和进程创建1. UNIX进程环境知识主要讨论内容How main is calledHow to pass command line argumentsProcess memory layoutHow to allocate memoryEnvironment variablesWay to terminate processlongjmp and setjmp2. 8种方法结束进程(1) 5种正常结束方法Return from mainCall exitCall _exit or _ExitReturn of the last thread from its start routineCall pthread_exit(2) 异常结束方法Call abort收到一个signalResponse of the last thread to a cancellation request三个exit函数中,_exit 和_Exit会立刻将执行返回给内核,exit要做一些清理工作(比如close IO stream)再返回给内核。

Windows编程常用api

Windows编程常用api

Windows编程常⽤api转载⽹络⿊客常⽤WIN API函数整理⼀、进程创建进程:CreateProcess ("C:\\windows\\notepad.exe",0,0,0,0,0,0,0,&si,&pi);WinExec("notepad",SW_SHOW);ShellExecute(0,"open","notepad","c:\\a.txt","",SW_SHOW);ShellExecuteEx(&sei);遍历进程:CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);Process32First(hsnap,&pe32);Process32Next(hsnap,&pe32);终⽌进程:ExitProcess(0);TerminateProcess(hProc,0);打开进程:OpenProcess(PROCESS_ALL_ACCESS,0,pid);\获取进程ID:GetCurrentProcesssId();获取进程可执⾏⽂件路径:GetModuleFileName(NULL,buf,len);GetProcessImageFileName(hproc,buf,len);遍历进程模块信息:CreateToolhelp32Snapshot(TH32CS_SNAPMODILE,pid);Module32First(hsnap,&mdl32);Module32Next(hsnap,&mdl2);获取指定模块句柄:GetModuleHandle(“ kernel32.dll”);获取模块内函数地址:GetProcessAddr(hmdl,”MessageBox ”);动态加载DLL:LoadLibrary(“user32.dll”);卸载DLL:FreeLibrary(hDll);获取进程命令⾏参数:GetCommandLine();任何进程GetCommandLine函数地址后偏移⼀个字节后的4字节地址为命令⾏地址。

C++中运行外部程序

C++中运行外部程序

关于三个SDK函数: WinExec,ShellExecute,CreateProcess 的其他注意事项:【1】定义头文件必须定义以下两个头文件:#include <shlobj.h> // 可替换为windows.h#include <shellapi.h>如果定义了头文件#include <windows.h>的话就不必定义#include <shlobj.h>了。

【2】定义路径C++中所表示的路径要用" \\ "而不是平常所用的" \ ",所以以上三个函数表示路径都为:disk:\\Directory\\...\\File nameWinExec("D:\\Program Files\\Test\\Test.exe",SW_SHOWMAXIMIZED); ShellExecute(NULL,"open","C:\\Test.txt",NULL,NULL,SW_SHOWNORMAL);1、调用API: int system( const char *command );你可以传入一命令,启动某个程序。

如"ping ", "YourExe"等等不过这里有几点要值得注意:(1)、他不会立即返回,直到你启动的程序执行完成。

(2)、如果你启动是windows程序,它仍然会启动一个控制台,这就给人感觉太差劲了,但如果本身是控制台的,而且又需要等待它的完成,那这将是比较好的选择。

(3)、它的返回值代表是否执行成功以及程序的退出码。

(4)、不能运行*.txt文件或""2、调用API:UINT WinExec(LPCSTR lpCmdLine, // command lineUINT uCmdShow // window style);返回是否调用成功,如果大于32则调用成功这个API与API:system同样的使用简单,同用是使用命令行型式。

澄清应用程序中执行另一个应用程序的一个问题

澄清应用程序中执行另一个应用程序的一个问题

澄清应用程序中执行另一个应用程序的一个问题
王甲民
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】1999(000)012
【摘要】很多朋友在编写应用程序时,希望在自己的应用程序中执行另一应用程序,以便增强自己程序的功能。

笔者也曾在一些电脑杂志及BBS站点上看到说是可用Windows的API函数WinExec来执行另一应用程序。

这其实是不完全正确的。

WinExec的函数原型为:UINT WinExec(LPC-STR lpCmdLine,UINT nShowCmd),其中lpCmdLine指要执行的文件路径名,nShowCmd指要执行应用程序的显示方式,一般为SW_SHOW,返回值若大于31则执行成功,否则返回错误代码。

例如,用WinExec('C:\MyApp\MyApp16.exe',SW_SHOW)便可执行C盘MyApp目录下的MyApp16.exe。

【总页数】1页(P69)
【作者】王甲民
【作者单位】无
【正文语种】中文
【中图分类】TP316
【相关文献】
1.浅谈在Web应用程序中执行计划任务 [J], 王仙
2.移动应用程序在教育中的应用--以Splashtop2应用程序为例 [J], 刘权纬;王兴

3.SWAP:如何在一个应用程序中运行另一个应用程序 [J], Mak,N;闵珍晖
4.使用SRP控制应用程序的执行-一个帮助你创建应用程序黑名单和白名单的组策略功能 [J], Darren Mar-Elia; 黄思维(译)
5.VBA应用程序执行效率的改善与应用程序分发 [J], 安平
因版权原因,仅展示原文概要,查看原文内容请购买。

VC中调用外部程序方式总结

VC中调用外部程序方式总结

目前知道三种方式:WinExec,ShellExecute ,CreateProcess,别人已经总结的很好了《vc中调用其他应用程序的方法(函数)winexec,shellexecute ,createprocess》,我全文转载一下,另外后面加点自己的总结(黑体部分,除了标题)。

三个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 等等,就不会出现正常的窗体,但是已经被加到任务列表里了。

DelphiWinExecShellExec

DelphiWinExecShellExec

Delphi WinExec ShellExec 用法介绍(转)2009-10-20 10:40在Windows程序设计中WinAPI也为我们提供了类似的函数,它们就是WinExec()和ShellExecute(),下面就来讨论一下这两个函数的用法。

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);就不能打开此文档。

shellexecute createprocess用法

shellexecute createprocess用法

shellexecute createprocess用法1. 引言在计算机编程领域,shellexecute和createprocess是两个常用的函数,用于在Windows操作系统中执行外部程序。

这两个函数在实现上有一些区别和特点,本文将深入研究shellexecute和createprocess的用法,并比较它们之间的异同。

2. 概述shellexecuteshellexecute是Windows API中的一个函数,它可以用于启动一个外部程序,并将指定的文件作为参数传递给该程序。

这个函数可以执行各种类型的文件,包括可执行文件、文本文件、音频文件等。

使用shellexecute函数可以方便地实现打开、编辑、播放等操作。

3. 概述createprocesscreateprocess也是Windows API中的一个函数,它与shellexecute类似,也可以启动外部程序。

与shellexecute不同的是,createprocess更为底层和灵活,并且可以更精确地控制进程的创建和执行过程。

使用createprocess需要指定进程创建参数、环境变量等详细信息。

4. 使用场景比较4.1 执行可执行文件当需要直接运行一个可执行文件时,两个函数都可以胜任。

使用shellexecute只需传入可执行文件路径作为参数即可启动该程序;而使用createprocess则需要指定进程创建参数,并通过设置startupinfo结构体来控制进程的启动方式。

4.2 执行命令行命令如果需要执行命令行命令,例如调用系统命令或执行一些批处理脚本,createprocess则更为适用。

createprocess可以通过设置commandline参数来传递需要执行的命令,而shellexecute则无法直接执行命令行。

4.3 执行带参数的程序当需要向程序传递参数时,createprocess更为灵活。

通过设置commandline参数可以传递多个参数,并且可以在程序启动后通过获取进程句柄来与程序进行交互。

ShellExecute的使用

ShellExecute的使用

ShellExecute的使用ShellExecute函数是Windows API中的一个函数,它用于启动一个外部应用程序,并以指定的方式打开指定的文件、网址、目录等。

本文将介绍ShellExecute函数的使用方法和常见的参数说明。

```cppHINSTANCE ShellExecuteHWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd```参数说明:- hwnd:父窗口的句柄。

如果不需要该参数,可以传入NULL。

- lpOperation:要执行的操作,可以是"open"、"edit"、"explore"等。

一般情况下使用"open"即可。

- lpFile:要打开的文件、网址或目录的路径。

可以是一个绝对路径,也可以是相对路径。

- lpParameters:命令行参数,用于给打开的程序传递额外的参数。

- lpDirectory:要在其中启动应用程序的初始目录。

如果为NULL,则使用当前工作目录。

- nShowCmd:表示打开应用程序时的显示方式,可以是SW_SHOW、SW_HIDE等常量。

下面是一个示例代码,展示了如何使用ShellExecute打开一个网址:```cpp#include <windows.h>#include <shellapi.h>int mainreturn 0;```除了打开网址,ShellExecute函数还可以用于打开其他类型的文件,例如打开一个文本文件:```cpp#include <windows.h>#include <shellapi.h>int mainreturn 0;```上述代码中,将ShellExecute函数的lpOperation参数设置为"open",lpFile参数设置为"C:\\test.txt",并将nShowCmd参数设置为SW_SHOW,表示以默认方式打开文本文件。

SHELLEXECUTEAPI函数的用法

SHELLEXECUTEAPI函数的用法

ShellExecute API函数的用法ShellExecute函数是用来打开或者打印一个指定的文件。

这个文件可以是一个可执行文件,也可以是一个文档文件。

它的语法如下:HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpoperation, LPCTSTR lpFile ,LPTSTR lpParameters,LPCTSTR lplnrectory,INTnshowCmd ) ;它的参数是:hwnd这个参数将指定一个父窗口。

这个窗口将接收一个应用过程的任何消息。

例如,一个应用程序可产生一个消息对话框来报告一个错误。

IPOPeration它是一个空终端字符串,用来说明操作的模式。

下面的字符串是有效的:(1)“OPen”它将打开由参数IPFile指定的文件。

这个文件可以是一个可执行文件,也可以是一个文档文件。

(2)“Print“它将打印由参数IPFile指定的文件,这个文件是一个文档文件。

当它是一个可执行文件的时候,仍可以执行这个程序。

lpOPeration参数可以设置为NULL,在这种情况下,这个函数将打开由参数lpFlle指定的文件。

IPFile它是一个空终端字符串,用来说明要打开或者打印的文件。

IPParameters当参数IPFile指定的是一个可执行文件时,参数lpParameters是一个空终端字符串,用来说明要打开程序的参数。

当参数lpFile指定的是一个文档文件时,参数IPParameters应设置为空(NULL)。

IPDirectory它是一个空终端字符串,用来说明要打开或者打印的文件目录。

nshowCmd当参数IPFile指定一个可执行文件的时候,参数nshowCmd将指定在打开应用程序后如何显示这个应用程序。

它可以是下面的数值;(1)SW_HIDE隐藏这个窗口,并激活另一个窗口;(2)SW_MAXIMIZE最大化指定的窗口;(3)SW_MINIMIZE最小化指定的窗口,并激活在“Z”次序的下一层窗口;(4)SWRESTORE激活并显示这个窗口;当这个窗口是最小化或者最大化, Win -dOWS 将储它的原来位置和大小;(5)SWSHOW激活这个窗口,并以当前的位置和大小来显示;(6)SW_SHOWDEFAULT以STARTUPINFO结构指定的SW_FLAG来设置显示的状态,STARTUPINFO是在应用程序运行时,由函数CreateProcess初始他的,一个应用程序应以这个标志位调用函数Showwindow来设置主窗口的显示状态;(7)SW_SHOWMAXIMIZED激活这个窗口,并最大化地显示;(8)SW_SHOWMINIMIZED激活这个窗口,并最小化地显示;(9)SW_SHOWMINNOACTIVE最小化地显示这个窗口,原来激活的窗口仍然激活;(10)SW_SHOWNA以当前的状态来显示这个窗口,原来激活的窗口仍然激活; 1(11) SW_SHOWNOACTIVATE以最近的位置和大小来显示这个窗口,原来激活的窗口仍然激活;(12) SW_SHOWNORMAL激活并显示这个窗口,当这个窗口是最小化或者最大地.Windows将存储它的原来的位置和大小,应用程序应在初始化的时候指定这个标志让。

C++程序启动外部程序的方法总结

C++程序启动外部程序的方法总结

使用WinExec命令⑴函数原型:UINT Win Exec(LPCSTR lpCmdLine, UINT uCmdShow);⑵参数:lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数)。

uCmdShow:定义Windows应用程序的窗口如何显示,并为CreateProcess函数提供STARTUPINFO参数的wShowWindow成员的值。

⑶返回值:若函数调用成功,则返回值大于31。

若函数调用失败,则返回值为下列之一:①0:系统内存或资源已耗尽。

②ERROR_BAD_FORMAT:EXE文件无效(非或.EXE影像错误)。

③ERROR_FILE_NOT_FOUND:指定的文件未找到。

④ERROR_PATH_NOT_FOUND:指定的路径未找到。

虽然Microsoft认为WinExec已过时,但是在许多时候,简单的WinExec函数仍是运行新程序的最好方式。

简单地传送作为第一个参数的命令行,还需要决定如何显示程序(该程序也许会忽视它)的第二个参数。

通常,将其设置为SW_SHOW,也可尝试SW_MINIMIZED或SW_MAXIMIZED。

WinExec不允许用CreateProcess获得的所有选项,而它的确简单。

使用ShellExecute命令⑴函数原型:HINSTANCE ShellExecute(HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nSh owCmd);⑵参数:hwnd:指向父窗口的窗口句柄。

此窗口接收应用程序产生的任何信息框。

lpOperation:一个空结束的字符串地址,此字符串指定要执行的操作。

下面的操作字符串是有效的:"open " 此函数打开由参数lpFile指定的文件,此文件可以是一个可执行文件或文档文件,也可是一个文件夹。

WindowsShell编程_第八章

WindowsShell编程_第八章

第八章程序执行器在Windows95以后,文档的概念得到了进一步增强。

这隐含地说,文档不仅仅是ASCII文档,也不仅仅是Word或Excel文件,‘文档’在这里的意思是更广泛的对象,它是系统命名空间的一部分,并且有(或可能有)程序来‘打开’,‘打印’,‘探索’或‘查询’这些文档对象,换句话说,文档是一个程序可以在其上执行操作(命令串,如‘打开’,‘打印’,‘探索’)的项。

这种被执行的能力不再是具有扩展名如.exe,.com,.pif,.bat这一小类文件的特权。

自Windows95以后,所有具有关连动词的文件都变得可以执行了。

因此,单独的执行程序现在不多了。

程序就是一个文件,运行它们只是你在一个文件上执行的活动。

在寻找一种触发外部程序的方法时,我们现在有了一个选择,正确的选择显然是重要的。

这些选择经过两个中间阶段已经有了一定的进化,但是基本上还是从一个函数—WinExec()—到另一个函数—ShellExecuteEx()—的迁移。

在这一章中我们将说明启动应用的各种选择。

建立进程,打开文档等,特别,我们还解释:WinExec()和CreateProcess()之间的差异怎样用ShellExecute()和ShellExecuteEx()取代其它函数动词,文档和策略怎样用钩子客户化执行进程我们还给出代码的示例说明:怎样探测默认浏览器怎样运行程序和等待它们终止怎样显示一个文件的‘属性’对话框怎样显示‘查找’对话框怎样防止用户访问某些文件夹或运行某些应用开始先让我们看一看CreateProcess()比老的WinExec()有多先进。

从WinExec()到CreateProcess()在Windows3.1下,WinExec()是运行外部程序唯一的方法。

它有一个全世界最简单的原型—只要需要瞥一眼就能飞快地记住它。

如果想要启动程序,只需要指定它的名字和新窗口属性就可以了:UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow);lpCmdLine参数是一个NULL终止的串指针,指向包含要启动应用的命令行:程序名和它所接受的变量。

API函数ShellExecute的使用

API函数ShellExecute的使用

API函数ShellExecute的使用ShellExecute说明Shellexecute 函数用于对文件执行一个动词(verb). 它通常用于启动一个与特定文件类相关联的应用程序. 例如, 要启动Word 来读一个 .doc 文件, 或启动记事本来编辑一个 .txt 文件. 用于第二个参数中的最常用的动词是"Open", 但其它可用的动词是"edit","print","explore" 和"properties". 有趣的是, 使用"mailto:" 或"http://" 前缀, ShellExecute 函数也可用于以一个给定的邮件地址启动默认的邮件阅读器或给定的URL 启动默认的浏览器.缩主文件Shell32.dll在VFP 中的定义DECLARE INTEGER ShellExecute IN "Shell32.dll" ;INTEGER hwnd, ;STRING lpVerb, ;STRING lpFile, ;STRING lpParam eters, ;STRING lpDirectory, ;LONG nShowCmdVisual FoxPro 应用示例* 打开Word 来编辑文件 "c:\mywordfile.doc"=Shellexecute(0,"Open","c:\mywordfile.doc","","",0)* 打开默认的浏览器并定位到天堂论坛=Shellexecute(0,"Open","/bbs/index.asp?boardID=1&page=1","","",0)* 打开默认的邮件阅读器来发一封信给天堂版主=Shellexecute(0,"Open","mailto:njjane@","","",0)* 打印文本文件"c:\mytextfile.txt"=Shellexecute(0,"Print","c:\mytextfile.txt","","",0)。

ShellExecute的使用

ShellExecute的使用

深入浅出ShellExecute译者:徐景周(原作:Nishant S)Q: 如何打开一个应用程序?ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW ); 或ShellExecute(this->m_hWnd,"open","notepad.exe","c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。

Q: 如何打开一个同系统程序相关连的文档?ShellExecute(this->m_hWnd,"open","c:\\abc.txt","","",SW_SHOW );Q: 如何打开一个网页?ShellExecute(this->m_hWnd,"open","","","", SW_SHOW );Q: 如何激活相关程序,发送EMAIL?ShellExecute(this->m_hWnd,"open","mailto:nishinapp@","","", SW_SHOW );Q: 如何用系统打印机打印文档?ShellExecute(this->m_hWnd,"print","c:\\abc.txt","","", SW_HIDE);Q: 如何用系统查找功能来查找指定文件?ShellExecute(m_hWnd,"find","d:\\nish",NULL,NULL,SW_SHOW);Q: 如何启动一个程序,直到它运行结束?SHELLEXECUTEINFO ShExecInfo = {0};ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = NULL;ShExecInfo.lpFile = "c:\\MyProgram.exe";ShExecInfo.lpParameters = "";ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);WaitForSingleObject(ShExecInfo.hProcess,INFINITE);或:PROCESS_INFORMATION ProcessInfo;STARTUPINFO StartupInfo; //This is an [in] parameter ZeroMemory(&StartupInfo, sizeof(StartupInfo));StartupInfo.cb = sizeof StartupInfo ; //Only compulsory field if(CreateProcess("c:\\winnt\\notepad.exe", NULL,NULL,NULL,FALSE,0,NULL,NULL,&StartupInfo,&ProcessInfo)){WaitForSingleObject(ProcessInfo.hProcess,INFINITE);CloseHandle(ProcessInfo.hThread);CloseHandle(ProcessInfo.hProcess);}else{MessageBox("The process could not be started...");}Q: 如何显示文件或文件夹的属性?SHELLEXECUTEINFO ShExecInfo ={0};ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_INVOKEIDLIST ;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = "properties";ShExecInfo.lpFile = "c:\\"; //can be a file as well ShExecInfo.lpParameters = "";ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);最新评论[发表评论][文章投稿]查看所有评论推荐给好友打印不错,只是,打开后的文件怎么自动关闭呢( fjhong102 发表于2005-3-13 10:06:00)SHELLEXECUTEINFO ShExecInfo = {0};ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;ShExecInfo.hwnd = NULL;ShExecInfo.lpVerb = NULL;ShExecInfo.lpFile = "c:\\doc.doc";ShExecInfo.lpParameters = "";ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);WaitForSingleObject(ShExecInfo.hProcess,INFINITE);基本功能是调用一个外部程序,等待返回时再继续运行。

VC调用CMD命令

VC调用CMD命令

VC调用CMD命令(2009-02-03 12:10:26)标签:vc it 分类:VC有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。

CreateProcess因为使用复杂,比较少用。

WinExec主要运行EXE文件。

如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。

首先必须引用shellapi.pas单元:uses ShellAPI;1、使用CreateProcess(好像不执行)BOOL CMSChartuseDlg::RunCMD(LPCTSTR pszCommand){// TCHAR szAppName[_MAX_PATH] = TEXT("fexplore.exe");//资源管理器程序TCHAR szAppName[60] = TEXT("c:\\windows\\system32\\cmd.exe");//资源管理器程序PROCESS_INFORMATION pi;STARTUPINFO si;ZeroMemory(&si,sizeof(si));ZeroMemory(&pi,sizeof(pi));si.cb=sizeof(si);si.dwFlags=STARTF_USESHOWWINDOW;si.wShowWindow=SW_HIDE;if(CreateProcess(szAppName,(char*)pszCommand,NULL,NULL,NULL,0,NULL,NULL,&si,&pi)==0){LPVOID lpMsgBuf;FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM,NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT), // Default langua ge(LPTSTR)&lpMsgBuf,0,NULL);CString strMsg;strMsg.Format("执行软件时出错:%s",(char*)lpMsgBuf);LocalFree(lpMsgBuf);MessageBox(strMsg);return FALSE;}else{// system(pszCommand);CloseHandle( pi.hProcess );CloseHandle( pi.hThread );// WaitForSingleObject(pi.hProcess,INFINITE);return TRUE;}}2、深入浅出ShellExecuteQ: 如何打开一个应用程序? ShellExecute(this->m_hWnd,"open","calc.exe","","", SW_SHOW );或 ShellExecute(this->m_hWnd,"open","notepad.exe","c:\\MyLog.log","",SW_SHOW );正如您所看到的,我并没有传递程序的完整路径。

C++快速编写简单windows服务程序调用程序 (示例)

C++快速编写简单windows服务程序调用程序 (示例)

C++快速编写windows服务程序调用程序/lostinwinner/item/a24e9b3e3feb89ae124b143c2012-07-19 23:42:22| 分类:C/C++ | 标签:windows服务程序 c++ 快速简单|字号订阅前不久,为完成项目中某个功能,需要写个windows服务程序, 定时来调用另外的一个exe程序, 完成过程遇到颇多问题,作为初学者,分享一下我的整个过程. 参考了多位大神的文章.资料来自网上, 最后给出链接.表示感谢以下是一些基本知识, 不得不耐下心去理解,这对程序理解和编写非常用帮助.首先Microsoft Windows 服务(即,以前的 NT 服务)使您能够创建在它们自己的Windows 会话中可长时间运行的可执行应用程序。

这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何用户界面。

这使服务非常适合在服务器上使用,或任何时候,为了不影响在同一台计算机上工作的其他用户,需要长时间运行功能时使用。

还可以在不同于登录用户的特定用户帐户或默认计算机帐户的安全上下文中运行服务。

服务是有状态的,当我们使用windows自带的服务管理程序sc.exe 查看服务状态时可以显示服务的当前状态,这个状态是由我们在程序代码中进行控制的。

你最好在服务初始化的时候将服务设置为SERVICE_START_PENDING,当初始化完毕时设为SERVICE_RUNNING,这些状态是系统自定义的状态,可通过msdn查看其他状态。

这个状态信息你会在sc.exe中看到。

在编写windows服务程序过程中你需要关注的函数有:1.首先是main函数,由于windows服务不需要界面,所以大部分程序为win32控制台应用程序,所以程序主函数为main 而不是WinMain()。

在主函数要做的主要工作就是初始化一个SERVICE_TABLE_ENTRY 分派表结构体,然后调用StartServiceCtrlDispatcher();这将把调用进程的主线程转换为控制分派器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
若ShellExecute函数调用成功,则返回值为被执行程序的实例句柄。若返回值小于32,则表示出现错误。
上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。
2.特殊用法
如果将FileName参数设置为“http”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。若用户机器中安装了多个浏览器,则该函数将根据Windows 9xNT注册表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。
如果将FileName参数设置为“mailto”协议格式,那么该函数将启动默认邮件客户程序,如Microsoft Outlook(也包括Microsoft Outlook Express)或Netscape Messanger。若用户机器中安装了多个邮件客户程序,则该函数将根据Windows 9xNT注册表中mailto协议处理程序的设置确定启动哪个邮件客户程序。
格式一:mailto
如:ShellExecute(handle,‘open’, ‘mailto’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口。
格式二:mailto用户账号@邮件服务器地址
如:ShellExecute(handle, ‘open’,‘ mailtowho@’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址。若指定多个收件人地址,则收件人地址之间必须用分号或逗号分隔开(下同)。
SW_SHOWMINIMIZED 最小化窗口,并将其激活
SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口
SW_SHOWNA 用当前的大小和位置显CTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口
格式一:http网站域名。
如:ShellExecute(handle, ‘open’, http ; ’, nil, nil, SW_SHOWNORMAL);
格式二:http网站域名网页文件名。
如:ShellExecute(handle, ‘open’, http ; default.htm’,nil,nil, SW_SHOWNORMAL);
首先必须引用shellapi.pas单元:uses ShellAPI;
1.标准用法
ShellExecute函数原型及参数含义如下:
function ShellExecute(hWnd HWND; Operation, FileName, Parameters,Directory PChar; ShowCmd Integer) HINST; stdcall;
SW_HIDE 隐藏窗口,活动状态给令一个窗口
SW_MINIMIZE 最小化窗口,活动状态给令一个窗口
SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态
SW_SHOWMAXIMIZED 最大化窗口,并将其激活
var iinteger;
begin
for i=1 to paramcount do
if ParamStr(i)〈〉’’ then showmessage(ParamStr(i));
end;
最后的那个参数,为窗口指定可视性方面的一个命令。
请用下述任何一个常数
●FileName:用于指定要打开的文件名、要执行的程序文件名或要浏览的文件夹名。
●Parameters:若FileName参数是一个可执行程序,则此参数指定命令行参数,否则此参数应为nil或PChar(0)。
●Directory:用于指定默认目录。
●ShowCmd:若FileName参数是一个可执行程序,则此参数指定程序窗口的初始显示方式,否则此参数应设置为0。
例子(delphi)
在一个应用程序调用cProject1.exe;
ShellExecute(handle, ’open’,’cProject1.exe’,’字串内容’,nil, SW_SHOWNORMAL);
在Project1.exe里可以调用
procedure TForm1.FormCreate(Sender TObject);
格式三:mailto用户账号@邮件服务器地址subject=邮件主题&body=邮件正文
如:ShellExecute(handle, ‘open’, ‘ mailtowho@?subject=Hello&Body=This is a test’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址、邮件主题和邮件正文。若邮件正文包括多行文本,则必须在每行文本之间加入换行转义字符%0a。
有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。CreateProcess因为使用复杂,比较少用。
WinExec主要运行EXE文件。如:WinExec(’Notepad.exe Readme.txt’, SW_SHOW);
ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
SW_SHOWNORMAL 与SW_RESTORE相同
●hWnd:用于指定父窗口句柄。当函数调用过程出现错误时,它将作为Windows消息窗口的父窗口。例如,可以将其设置为应用程序主窗口句柄,即Application.Handle,也可以将其设置为桌面窗口句柄(用GetDesktopWindow函数获得)。
●Operation:用于指定要进行的操作。其中“open”操作表示执行由FileName参数指定的程序,或打开由FileName参数指定的文件或文件夹;“print”操作表示打印由FileName参数指定的文件;“explore”操作表示浏览由FileName参数指定的文件夹。当参数设为nil时,表示执行默认操作“open”。
相关文档
最新文档