首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在c ++中调用:: CreateProcess来启动Windows可执行文件?

在C++中,调用::CreateProcess来启动Windows可执行文件需要以下步骤:

  1. 包含必要的头文件:#include<windows.h> #include <tchar.h> #include<iostream>
  2. 定义主函数并初始化参数:int main() { STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi));
  3. 设置要启动的可执行文件的路径和命令行参数: TCHAR szCmdline[] = _T("C:\\path\\to\\executable.exe arg1 arg2");
  4. 设置进程的安全属性: si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW;
  5. 调用::CreateProcess函数来启动进程: if (!::CreateProcess(NULL, szCmdline, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { std::cout << "CreateProcess failed (" << ::GetLastError() << ")."<< std::endl; return 0; }
  6. 等待进程完成并关闭句柄: ::WaitForSingleObject(pi.hProcess, INFINITE); DWORD dwExitCode = 0; ::GetExitCodeProcess(pi.hProcess, &dwExitCode); ::CloseHandle(pi.hProcess); ::CloseHandle(pi.hThread); std::cout << "Process exited with code " << dwExitCode << "."<< std::endl; return 0; }

这样,你就可以在C++中使用::CreateProcess函数来启动Windows可执行文件了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • CreateProcess时不显示或者不创建窗口 (或用虚拟桌面实现后台调用外部程序)

    【方法一:】 将 CreateProcess()的参数dwCreationFlags指定为CREATE_NO_WINDOW,即以不创建窗口方式创建DOS进程。 【参考代码:】 if (!CreateProcess(NULL, szCommand, NULL, NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, &si, &pi)) 【方法二:】 指定STARTUPINFO结构中WORD wShowWindow为SW_HIDE(但是一定要有这一句: si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESHOWWINDOW; ),即以不显示窗口方式创建DOS进程。 【参考代码:】 STARTUPINFO si; PROCESS_INFORMATION pi; ::ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; ::ZeroMemory(&pi, sizeof(pi)); if (!CreateProcess(NULL, szCommand, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) 【方法三:】 将这个DOS窗口放到另外一个桌面上,实现隐藏。 【参考代码:】 si.lpDesktop="NewDesktop"; if (!CreateProcess(NULL, szCommand, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi)) 方法三的详细原理: 参考http://blog.163.com/madengyao_super/blog/static/2859822020093249493150/ 。 =============================================================================== 【用虚拟桌面实现后台调用外部程序】 最近需要实现一个无线通信的功能,X他XX的,该死的硬件厂商竟然不提供接口函数,只提供一个EXE可执行文件-_-! 这样就需要我在程序里调用他的这个EXE可执行文件。 调用EXE文件,可以用WINEXEC()、SHELLEXECUTE()和CreateProcess()等函数来实现,我这里就用CreateProcess()来调用。 但是一个软件,两个EXE文件,这叫什么??实在没办法,我想在打开的时候不让用户看到这个执行文件:首先调用FINDWINDOW来查找窗口的句柄,之后再用SendMessage()来隐藏窗口,但是还是会有一瞬主窗口被显示出来的,或许你会说我BT吧,但是我实在是不忍心看到…… 那么怎么解决这个问题呢,首先我当然在CreateProcess()上面寻找方法,可惜,它只有一个参数可以设置窗口的默认显示方式,但是一旦这个窗口自己重设了显示方式,它就没有任何作用了。 继续查找文档,这时我看到CreateProcess()的一个参数TStartupInfo中有 lpDesktop这么一个属性,按照MSDN的说法,如果该指针为NULL,那么新建的Process将在当前Desktop上启动,而如果对其赋了一个Desktop的名称后,Process将在指定的Desktop上启动,恩,看来不错,就从它入手了; 首先,建立一个虚拟的Desktop。 const DesktopName: PChar = 'NewDesktop'; FDesktop:= CreateDesktop(DesktopName, nil, nil, 0, GENERIC_ALL, nil); 然后,在CreateProcess的时候,指定程序在我新生成的Desktop上运行: var SI: TStartupInfo; begin FillChar(SI, SizeOf(SI), 0); SI.cb:= SizeOf(SI); SI.lpDesktop:= DesktopName; SI.wShowWindow:= SW_HIDE; SI.dwFlags:= STARTF_USESHOWWINDOW; SI.hStdError:= 0; SI.hStdInput:= 0; SI.hStdOutput:= 0; if not CreateProcess(PChar('……'), nil, nil, nil, True, CREATE_NEW_C

    03

    ShellExecute使用详解

    有三个API函数可以运行可执行文件WinExec、ShellExecute和CreateProcess。 1.CreateProcess因为使用复杂,比较少用。 2.WinExec主要运行EXE文件。如:WinExec(‘Notepad.exe Readme.txt’, SW_SHOW); 3.ShellExecute不仅可以运行EXE文件,也可以运行已经关联的文件。 首先必须引用shellapi.pas单元:uses ShellAPI; 1).标准用法   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://www.neu.edu.cn’, nil, nil, SW_SHOWNORMAL);   格式二:http://网站域名/网页文件名。   如:ShellExecute(handle, ‘open’, http://www.neu.edu.cn/default.htm’,nil,nil,SW_SHOWNORMAL);

    01
    领券