vc中winexec使用?

vc中winexec使用?,第1张

函数只提供对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)

定时程序如果要用timer控件的纤渗话,怎么也得在前台执行吧,哪怕是你打开这个界面是个空的(当镇竖轿然timer是看不见的)你把这个界面最小化不就行了

如果是个纯后台程御肆序,恐怕你要写成服务,装过一次之后把这个服务设为自动启动,以后就不用手动开了。

终腊谈止指定进程轮弊碰

#include "tlhelp32.h"

void KillExe(const char* szExeName)

{

if (szExeName == NULL)

return 0

int lsr = lstrlen(szExeName)

if (lsr == 0)

return 0

PROCESSENTRY32 my

HANDLE l = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)

if (((int)l) != -1)

{

my.dwSize = sizeof(my)

if (Process32First(l, &my))

{

do

{

if (lstrcmpi(szExeName, my.szExeFile + lstrlen(my.szExeFile) - lsr) == 0)

{

HANDLE hProcessHandle

hProcessHandle = OpenProcess(0x1F0FFF, true, my.th32ProcessID)

if (hProcessHandle != NULL)

{

if (TerminateProcess(hProcessHandle, 0) != NULL)

{

CloseHandle(hProcessHandle)

}

}

CloseHandle(l)

return

}

}while (Process32Next(l, &my))

}

CloseHandle(l)

}

}

调用方式

KillExe("c:\\windows\\notepad.exe")

完整卜扒或部分路径名,不区分大小写


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

原文地址:https://54852.com/yw/12386024.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存