三个调用其他进程的函数
- 格式:doc
- 大小:36.50 KB
- 文档页数:4
用VB调用或者结束外部程序我们编写程序时,有时会遇到在一个程序中调用并控制另一个程序执行的情况,在一些编程语言中实现起来较为繁琐,但如果用VB编写时,则可轻松实现。
下面我就以在程序中调用“计算器”为例,总结了以下几种方法:一、以异步方式来执行其他程序Shell 函数是以异步方式来调用其他程序的。
也就是说,用Shell 启动的程序可能还没有完成执行过程,就已经执行到 Shell 函数之后的语句。
语法:Shell(pathname[,windowstyle])说明:pathname:必要参数。
Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。
例如:RetVal = Shell(″C:\WINDOWS\CALC.EXE″, 1) ′ 调用计算器。
二、以同步方式来执行其他程序有时候,我们需要让VB在执行完外部程序后再执行下一语句,这就需要使用API函数。
我们可通过OpenProcess和CloseHandle函数来检测调用软件的运行情况。
这两个函数的声明如下:Declare Function OpenProcess Lib ″kernel32″ Alias ″OpenProcess″ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongDeclare Function CloseHandle Lib ″kernel32″ Alias ″CloseHandle″ (ByVal hObject As Long) As Lo ng建立下面函数,用以判断程序是否在运行,如果是,则在运行时返回True。
Function IsRunning(ByVal ProgramID) As Boolean ′传入进程标识IDDim hProgram As Long ′被检测的程序进程句柄hProgram=OpenProcess(0,False,ProgramID)If Not hProgram=0 ThenIsRunning=TrueElseIsRunning=FalseEnd IfCloseHandle hProgramEnd Function例如要调用计算器(CALC.EXE)并等到它运行完成后再执行下一语句,可以使用以下代码:Dim RetValMsgBox ″开始运行″RetVal = Shell(″C:\WINDOWS\CALC.EXE″, 1)While IsRunning(RetVal)DoEventsWendMsgBox ″结束运行″三、关闭正在运行中的其他软件如果要在程序中关闭正在运行中的其他程序,可以先使用FindWindow函数找出相应的程序句柄,然后调用PostMessage函数关闭该程序即可。
linux 调用schedule函数例子Linux 调用 schedule 函数的例子在 Linux 内核中,schedule 函数是用于进行进程调度的重要函数。
它负责决定下一个要运行的进程,并切换到该进程的上下文。
下面是一个调用 schedule 函数的简单例子:```c#include <linux/sched.h>int main(void) {struct task_struct *next_task;// 调用 schedule 函数,选择下一个要运行的进程next_task = schedule();// 打印进程的 PIDprintk("Next scheduled task's PID: %d\n", next_task->pid);return 0;}```在上述例子中,我们首先包含了 `<linux/sched.h>` 头文件,该头文件包含了schedule 函数的声明。
然后,我们声明了一个指向 `task_struct` 结构体的指针`next_task`,它将用于保存调度函数返回的下一个进程。
接下来,我们调用了 schedule 函数,并将返回值赋给 `next_task`。
由于这是一个简单的示例,我们并没有传递任何参数给 schedule 函数,实际上,在实际的进程调度中,schedule 函数会根据一系列的调度策略和优先级来选择下一个要运行的进程。
最后,我们使用 printk 函数打印了下一个调度的进程的 PID。
需要注意的是,上述代码只是一个示例,无法在用户空间中直接运行。
在Linux 内核中调用 schedule 函数需要在合适的上下文中进行,通常在内核模块或调度程序的其他部分中执行。
通过了解 schedule 函数的用法及其在进程调度中的作用,我们可以更好地理解Linux 内核中的调度机制,并更好地进行系统性能优化和调试。
三个SDK函数: WinExec,ShellExecute,CreateProcess可以实现调用其他程序的要求,其中以WinExec最为简单,ShellExecute比WinExec灵活一些,CreateProcess最为复杂。
WinExec两个参数,前一个指定路径,后一个指定显示方式。
ShellExecute可以指定工作目录,并且还可以寻找文件的关联直接打开不用加载与文件关联的应用程序,ShellExecute还可以打开网页,启动相应的邮件关联发送邮件等等。
CreateProcess一共有十个参数,不过大部分都可以用NULL代替,它可以指定进程的安全属性,继承信息,类的优先级等等。
如果我们要得到足够多的关于新的进程的信息,控制新的进程的细节属性,若要达到这些目的,我们就需要使用CreateProcess函数了。
三个SDK函数( WinExec、ShellExec、CrateProcess )的语法:○a 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 等等,就不会出现正常的窗体,但是已经被加到任务列表里了。
○b 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", "",NULL, NULL, SW_SHOWNORMAL); // 打开网页ShellExecute(NULL,"explore", "D:\\C++",NULL,NULL,SW_SHOWNORMAL); // 打开目录D:\C++ShellExecute(NULL,"print","C:\\Test.txt",NULL,NULL, SW_HIDE); // 打印文件C:\Test.txtShellExecute不支持定向输出。
c++中实现调用外部程序的方法linux 概述及解释说明1. 引言1.1 概述本篇文章旨在探讨在C++语言中如何调用外部程序,并着重介绍在Linux环境下的具体方法。
调用外部程序是在软件开发中常见的需求,通过调用外部程序可以实现更多功能和交互方式。
本文将从基本原理以及注意事项开始阐述,然后详细介绍在C++中实现调用外部程序的方法,并给出示例代码进行解析。
1.2 文章结构本文将按照以下结构组织内容:首先,在引言部分进行概述和明确目的;然后在第2节中,详细讲解在C++中调用外部程序的方法,包括基本原理和Linux环境下的注意事项;紧接着,在第3节中,将通过示例及代码解析展示具体的调用外部程序的实现过程;最后,在第4节中,介绍使用第三方库实现更复杂交互方式的方法,并给出相关示例;最后一节为结论与总结。
1.3 目的本文旨在提供读者关于C++语言中如何通过调用外部程序来扩展功能和实现更灵活交互方式方面的详尽解释。
通过了解基本原理以及学习具体实践案例,读者可获得掌握在C++中调用外部程序的能力。
另外,引入第三方库实现更复杂交互方式的方法也将拓宽读者的知识面和技能应用范围。
最终,通过全面而清晰地阐述调用外部程序的方法,本文旨在提供有关调用外部程序的详尽指南,并启示读者对未来可能发展方向的展望。
以上是关于文章“1. 引言”部分内容的详细说明。
2. 调用外部程序的方法:在C++中,调用外部程序是一种常见的需求,可以通过多种方式实现。
本节将介绍C++中调用外部程序的基本原理、在Linux环境下调用外部程序时需要注意的事项以及具体的实现方法介绍。
2.1 C++中调用外部程序的基本原理:在C++中,调用外部程序可以借助操作系统提供的系统调用或库函数来实现。
常见的方法包括使用system函数、使用fork和exec函数族以及使用popen 函数等。
2.2 Linux环境下调用外部程序的注意事项:在Linux环境下调用外部程序时,需要注意以下几个方面:- 文件路径:确保正确地指定待执行的外部程序文件路径,在使用相对路径时要考虑当前工作目录。
函数调用的方法函数的调用是指在程序中调用已经定义好的函数来执行特定的操作。
函数的调用方式有多种,下面会详细介绍几种常用的函数调用方法。
1.直接调用函数:直接调用函数是最常见的函数调用方式。
在程序中调用函数时,可以直接写出函数的名称并使用括号括起来,用来传递实参,并执行函数内的代码。
例如:```def greet():print("Hello, World!")greet() #输出:Hello, World!```2.通过变量调用函数:函数也可以通过将其赋值给一个变量来调用。
这样做可以将函数看作一个对象,可以在程序中像其他对象一样使用它。
例如:```def greet():print("Hello, World!")greeting = greet #将函数greet赋值给变量greetinggreeting() #输出:Hello, World!```3.作为参数传递的方式调用函数:在Python中,函数可以作为另一个函数的参数进行传递。
这种调用方式通常用于回调函数或高阶函数中。
例如:```def greet():print("Hello, World!")def call_func(func):func() #调用传入的函数call_func(greet) #输出:Hello, World!```4.通过关键字参数调用函数:在函数调用时,可以使用关键字参数来指定参数的值。
这样可以提高函数调用的可读性和灵活性。
例如:```def multiply(x, y):return x * yresult = multiply(x=3, y=4) #使用关键字参数调用函数print(result) #输出:12```5.使用默认参数调用函数:在定义函数时,可以设置参数的默认值,这样在调用函数时可以省略传递对应的实参。
如果不传递实参,则使用默认值。
linux exec函数的实现-回复Linux exec函数的实现在Linux系统中,exec函数是一个非常重要的系统调用函数,它用于执行一个新的程序替换当前进程的内存空间,从而实现进程的自我替换。
exec 函数非常常见,常用的exec函数包括execl、execv、execle、execve 等。
本文将详细介绍Linux系统中exec函数的实现原理以及一步一步回答与其相关的问题。
1. exec函数的作用exec函数是用来执行一个新的程序的系统调用函数。
通过调用exec函数,操作系统会将新程序的代码替换当前进程的代码,从而启动一个新的进程。
exec函数通常被用来在一个进程中启动另一个不同的程序。
这样做的好处是可以复用已经加载到内存中的库函数和数据结构,同时能够提高系统的资源利用率。
2. exec函数的原理当调用exec函数时,系统通过搜索可执行文件的路径,找到对应的可执行文件,并将其加载到内存中。
然后,操作系统会将新程序的代码、数据和堆栈等替换当前进程的相应部分,从而启动一个新的进程。
下面是exec函数的大致流程:1) 创建一个新的页表,将其映射到进程的用户空间;2) 关闭或者重定向标准输入、标准输出和标准错误等文件描述符;3) 加载新的可执行文件到内存;4) 解析并设置程序的命令行参数;5) 重新初始化堆栈和全局变量;6) 启动新的程序。
3. exec函数的调用方式在Linux系统下,常见的exec函数有以下几种调用方式:- execl:execl函数通过参数列表的方式传递给被执行的程序;- execv:execv函数通过参数数组的方式传递给被执行的程序;- execle:execle函数通过参数列表的方式传递给被执行的程序,并且可以传递额外的环境变量;- execve:execve函数通过参数数组的方式传递给被执行的程序,并且可以传递额外的环境变量。
不同的调用方式提供了不同的参数传递方式,开发者可以根据具体的需求选择适合的调用方式。
关于三个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同样的使用简单,同用是使用命令行型式。
c语言函数调用的三种方式
1、内联函数(Inline Function):
内联函数是一种特殊的函数,它与普通函数的最大区别就是:当编译器执行内联函数时,不是执行函数的入口地址,而是将函数的代码直接插入调用函数的位置,从而减少函数调用和返回的调用开销,从而提高程序的效率。
内联函数的定义可以使用关键字 inline,如:
inline int max(int a, int b)
{
return a > b ? a : b;
}
2、普通函数调用(Normal Function Call):
普通函数调用(即非内联函数),是把函数的入口地址放到栈上,然后跳转到函数地址去执行,调用完毕返回,而在函数调用和返回时,需要改变程序的运行状态,这就需要一定的时间和空间成本,因此普通函数的效率比内联函数要低。
3、类成员函数调用(Class Member Function Call):
类成员函数是针对类这种数据结构定义的函数,它们的调用和普通函数一样,也是通过函数的入口地址跳转来完成的,但是它们特殊之处在于:类成员函数有一个隐藏的 this 指针,它指向调用该函数的对象。
- 1 -。
VFP中调用其他应用程序的方法在VFP (Visual FoxPro) 中,要调用其他应用程序,可以通过以下几种方法实现:1. 使用 Shell 函数调用外部可执行文件:Shell 函数用于在 Windows 中启动一个新的进程,并执行指定的可执行文件。
可以使用 Shell 函数调用其他应用程序,然后传递需要的参数。
例如,要启动记事本程序(notepad.exe),可以使用以下代码:```foxShell("notepad.exe")```要在调用外部应用程序时传递参数,可以将参数作为字符串拼接到可执行文件路径的后面。
例如,要启动记事本程序并打开一个指定的文本文件,可以使用以下代码:```foxShell("notepad.exe C:\path\to\file.txt")```2. 使用 CreateObject 函数创建并操作外部应用程序的 COM 对象:CreateObject 函数用于创建和操作 COM 对象。
可以使用CreateObject 函数创建其他应用程序的 COM 对象,然后调用其方法和属性。
要使用该方法,需要知道外部应用程序的 ProgID 或 ClassID,来创建对应的 COM 对象。
例如,要创建并操作 Microsoft Excel 应用程序的COM 对象,可以使用以下代码:```foxoExcel = CreateObject("Excel.Application")oExcel.Visible = .T.```在通过COM对象调用其他应用程序时,可以使用COM对象的方法和属性来实现所需的功能。
3. 使用 ShellExecute 函数调用外部应用程序:ShellExecute 函数用于在 Windows 中执行一个外部应用程序,类似于 Shell 函数。
不同之处在于,ShellExecute 函数支持更多的参数选项,包括打开方式、工作目录、参数等。
C语⾔常见的函数调⽤C语⾔常见的函数调⽤isatty,函数名,主要功能是检查设备类型,判断⽂件描述词是否为终端机。
函数名: isatty⽤法: int isatty(int desc);返回值:如果参数desc所代表的⽂件描述词为⼀终端机则返回1,否则返回0。
程序例:#include <stdio.h>#include <io.h>int main(void){int handle;handle = fileno(stdout);if (isatty(handle))printf("Handle %d is a device type\n", handle);elseprintf("Handle %d isn't a device type\n", handle);re函数名称:fileno(在VC++6.0下为_fileno)函数原型:int _fileno( FILE *stream );函数功能:fileno()⽤来取得参数stream指定的⽂件流所使⽤的返回值:某个数据流的⽂件描述符头⽂件:相关函数:open,fopen,fclosevoid *memset(void *s, int ch, n);函数解释:将s中当前位置后⾯的n个字节(typedef unsigned int size_t )⽤ ch 替换并返回 s 。
memset:作⽤是在⼀段内存块中填充某个给定的值,它是对较⼤的或进⾏清零操作的⼀种最快⽅法函数原型char *fgets(char *buf, int bufsize, FILE *stream);参数*buf: 字符型指针,指向⽤来存储所得数据的地址。
bufsize: 整型数据,指明存储数据的⼤⼩。
*stream: ⽂件结构体指针,将要读取的⽂件流。
返回值1. 成功,则返回第⼀个参数buf;2. 在读字符时遇到end-of-file,则eof指⽰器被设置,如果还没读⼊任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;3. 如果发⽣读⼊错误,error指⽰器被设置,返回NULL,buf的值可能被改变。
WinExec、ShellExecute和CreateProcess有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。
CreateProcess因为使用复杂,比较少用。
WinExec主要运行EXE文件。
如:WinExec(’Notepad.exe Readme.txt’,SW_SHOW);ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。
ShellExcute1.标准用法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函数调用成功,则返回值为被执行程序的实例句柄。
若返回值小于32,则表示出现错误。
上述仅仅是ShellExecute函数的标准用法,下面将介绍它的特殊用法。
2.特殊用法如果将FileName参数设置为“http:”协议格式,那么该函数将打开默认浏览器并链接到指定的URL地址。
若用户机器中安装了多个浏览器,则该函数将根据Windows 9x/NT注册表中http协议处理程序(Protocols Handler)的设置确定启动哪个浏览器。
格式一:http://网站域名。
如:ShellExecute(handle, ‘open’, http:// ;.c n’, nil, nil, SW_SHOWNORMAL);格式二:http://网站域名/网页文件名。
如:ShellExecute(handle, ‘open’,http:// ; /default.htm’,nil,nil, SW_SHOWNORMAL) ;如果将FileName参数设置为“mailto:”协议格式,那么该函数将启动默认邮件客户程序,如Microsoft Outlook(也包括Microsoft Outlook Express)或Netscape Messanger。
若用户机器中安装了多个邮件客户程序,则该函数将根据Windows 9x/NT注册表中mailto协议处理程序的设置确定启动哪个邮件客户程序。
格式一:mailto:如:ShellExecute(handle,‘open’, ‘mailto:’, nil, nil,SW_SHOWNORMAL);打开新邮件窗口。
格式二:mailto:用户账号@邮件服务器地址如:ShellExecute(handle, ‘open’,‘ mailto:who@’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址。
若指定多个收件人地址,则收件人地址之间必须用分号或逗号分隔开(下同)如:ShellExecute(this->m_hWnd,"open","mailto:nishinapp@","","", SW_SHOW );这个可以激活Outlook Express。
格式三:mailto:用户账号@邮件服务器地址?subject=邮件主题&body=邮件正文如:ShellExecute(handle, ‘open’, ‘ mailto:who@?subject=Hello&Body=This is a test’, nil, nil, SW_SHOWNORMAL);打开新邮件窗口,并自动填入收件人地址、邮件主题和邮件正文。
若邮件正文包括多行文本,则必须在每行文本之间加入换行转义字符%0a。
例子(delphi):在一个应用程序调用c:Project1.exe;ShellExecute(handle, ’open’,’c:Project1.exe’,’字串内容’,nil, SW_SHOWNORMAL);在Project1.exe里可以调用:procedure TForm1.FormCreate(Sender: TObject);var i:integer;beginfor i:=1 to paramcount doif ParamStr(i)〈〉’’ then showmessage(ParamStr(i));end;最后的那个参数,为窗口指定可视性方面的一个命令。
请用下述任何一个常数SW_HIDE 隐藏窗口,活动状态给令一个窗口SW_MINIMIZE 最小化窗口,活动状态给令一个窗口SW_RESTORE 用原来的大小和位置显示一个窗口,同时令其进入活动状态SW_SHOW 用当前的大小和位置显示一个窗口,同时令其进入活动状态SW_SHOWMAXIMIZED 最大化窗口,并将其激活SW_SHOWMINIMIZED 最小化窗口,并将其激活SW_SHOWMINNOACTIVE 最小化一个窗口,同时不改变活动窗口SW_SHOWNA 用当前的大小和位置显示一个窗口,不改变活动窗口SW_SHOWNOACTIVATE 用最近的大小和位置显示一个窗口,同时不改变活动窗口SW_SHOWNORMAL 与SW_RESTORE相同深入浅出ShellExecute译者:徐景周(原作:Nishant S)Q: 怎么打开一个应用程序?ShellExecute(this->m_hWnd,"open","calc.exe",NULL,NULL, 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] parameterZeroMemory(&StartupInfo, sizeof(StartupInfo));StartupInfo.cb = sizeof StartupInfo ; //Only compulsory fieldif(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 wellShExecInfo.lpParameters = "";ShExecInfo.lpDirectory = NULL;ShExecInfo.nShow = SW_SHOW;ShExecInfo.hInstApp = NULL;ShellExecuteEx(&ShExecInfo);。