0
点赞
收藏
分享

微信扫一扫

[笔记]Windows 代码执行命令行



文章目录

  • ​​WinExec​​
  • ​​作用​​
  • ​​实例​​
  • ​​CreateProcess​​
  • ​​作用​​
  • ​​实例​​
  • ​​System​​
  • ​​ShellExecute和ShellExecuteEx​​
  • ​​ShellExecute​​
  • ​​ShellExecuteEx​​
  • ​​区别​​


WinExec

​​微软文档 WinExec​​

作用

运行指定应用程序。

UINT WinExec(
[in] LPCSTR lpCmdLine,
[in] UINT uCmdShow
);

​lpCmdLine​​:命令行(文件名+可选参数)为应用程序执行。

如果没有包含文件路径将会从以下目录按顺序搜索:

  1. 目录的应用程序加载。
  2. 当前目录。
  3. Windows系统目录。
  4. GetSystemDirectory函数检索该目录的路径。
  5. Windows目录。
  6. GetWindowsDirectory函数检索该目录的路径。
  7. 环境变量中列出的目录路径。

​uCmdShow​​:显示选项。可接受的值的列表,请参阅nCmdShow的描述参数的显示窗口函数。

​​具体值列表地址​​

SW_HIDE、SW_NORMAL、SW_SHOWMINIMIZED、SW_SHOWMAXIMIZED等

实例

隐藏控制台弹窗 执行vb弹窗脚本

WinExec("mshta vbscript:msgbox(\"提示内容\",64,\"提示框Title\")(window.close)", SW_HIDE);


注意:
这个函数只提供是为了与16位Windows兼容。
应用程序应该使用CreateProcess函数。


CreateProcess

作用

实例

LPCSTR lpCmdLine = "mshta vbscript:msgbox(\"提示内容\",64,\"提示框Title\")(window.close)";
UINT uCmdShow = 0;

PROCESS_INFORMATION pi;

STARTUPINFO si;

// 建立新进程

ZeroMemory(&si, sizeof(STARTUPINFO));

BOOL b = CreateProcess(NULL, const_cast<LPTSTR>(lpCmdLine), NULL,NULL, TRUE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);

if (!b) {
return FALSE;
}

// 阻塞调用者线程

WaitForSingleObject(pi.hProcess, INFINITE);

return TRUE;

System

System C++自带的 会阻塞

ShellExecute和ShellExecuteEx

ShellExecute的功能是运行一个外部程序(或者是打开一个已注册的文件、打开一个目录、打印一个文件等等),并对外部程序有一定的控制。

ShellExecute

ShellExecute(NULL, "mshta", "vbscript:msgbox(\"提示内容\",64,\"提示框Title\")(window.close)", NULL, NULL, SW_SHOW);

ShellExecuteEx

管理员运行

SHELLEXECUTEINFO shExecInfo;
shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
shExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shExecInfo.hwnd = NULL;
shExecInfo.lpVerb = L"runas";
shExecInfo.lpFile = L"mshta.exe";
shExecInfo.lpDirectory = L"";
shExecInfo.lpParameters = L"vbscript:msgbox(\"提示内容\",64,\"提示框Title\")(window.close)";
shExecInfo.lpClass = NULL;
shExecInfo.nShow = SW_HIDE;
shExecInfo.hInstApp = NULL;

DWORD err = ERROR_SUCCESS;
if (!ShellExecuteEx(&shExecInfo)) {
return GetLastError();
}

区别

c++ system()和WinExec()的区别

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

2.WinExec主要运行EXE文件。如:WinExec(‘Notepad.exe Readme.txt’, SW_SHOW);

3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。

winExec是不同步的进程调用,就是调用起来了就返回了,不会等调用起来的程序结束

system是同步调用进程,调用进程不结束,它就不返回,它可以获取调用进程所返回的值



举报

相关推荐

0 条评论