CreateProcess的使用

1. 通过CreateProcess启动进程时,如何传递参数?

  

   http://blog.csdn.net/hityct1/archive/2009/03/08/3968296.aspx

   

   使用编译器vs2008。

第一、第二个参数的用法:

例子:

使用ie打开指定的网页。

注意第二个参数是 可执行文件+命令行参数

view plaincopy to clipboardprint?
#include "stdafx.h"  
#include <windows.h>   
#include <stdio.h>   
 
int main(int argc, char* argv[])   
{   
    STARTUPINFO si = { sizeof(si) };   
    PROCESS_INFORMATION pi;   
 
    si.dwFlags = STARTF_USESHOWWINDOW;   
    si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口  
    TCHAR cmdline[] =TEXT("c://program files//internet explorer//iexplore.exe http://community.csdn.net/");  
    BOOL bRet = ::CreateProcess (   
        NULL,  
        cmdline, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改    
        NULL,   
        NULL,   
        FALSE,   
        CREATE_NEW_CONSOLE,   
        NULL,   
        NULL,   
        &si,   
        &pi);   
 
    int error = GetLastError();  
    if(bRet)   
    {   
        ::CloseHandle (pi.hThread);   
        ::CloseHandle (pi.hProcess);   
 
        printf(" 新进程的进程ID号:%d /n", pi.dwProcessId);   
        printf(" 新进程的主线程ID号:%d /n", pi.dwThreadId);   
    }   
    else 
    {  
        printf("error code:%d/n",error );  
    }  
    return 0;   
}  
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
 STARTUPINFO si = { sizeof(si) };
 PROCESS_INFORMATION pi;

 si.dwFlags = STARTF_USESHOWWINDOW;
 si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口
 TCHAR cmdline[] =TEXT("c://program files//internet explorer//iexplore.exe http://community.csdn.net/");
 BOOL bRet = ::CreateProcess (
  NULL,
  cmdline, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改 
  NULL,
  NULL,
  FALSE,
  CREATE_NEW_CONSOLE,
  NULL,
  NULL,
  &si,
  &pi);

 int error = GetLastError();
 if(bRet)
 {
  ::CloseHandle (pi.hThread);
  ::CloseHandle (pi.hProcess);

  printf(" 新进程的进程ID号:%d /n", pi.dwProcessId);
  printf(" 新进程的主线程ID号:%d /n", pi.dwThreadId);
 }
 else
 {
  printf("error code:%d/n",error );
 }
 return 0;

也可如此:

第一个参数是 可执行文件;第二个参数是 命令行参数

view plaincopy to clipboardprint?
#include "stdafx.h"  
#include <windows.h>   
#include <stdio.h>   
 
int main(int argc, char* argv[])   
{   
    STARTUPINFO si = { sizeof(si) };   
    PROCESS_INFORMATION pi;   
 
    si.dwFlags = STARTF_USESHOWWINDOW;   
    si.wShowWindow = TRUE; //TRUE表示显示创建的进程的窗口  
    TCHAR cmdline[] =TEXT(" http://community.csdn.net/"); //注意前面有空格,否则打开的是主页。  
    BOOL bRet = ::CreateProcess (   
        TEXT("c://program files//internet explorer//iexplore.exe"),  
        cmdline, //在Unicode版本中此参数不能为常量字符串,因为此参数会被修改    
        NULL,   
        NULL,   
        FALSE,   
        CREATE_NEW_CONSOLE,   
        NULL,   
        NULL,   
        &si,   
        &pi);   
 
    int error = GetLastError();  
    if(bRet)   
    {   
        ::CloseHandle (pi.hThread);   
        ::CloseHandle (pi.hProcess);   
 
        printf(" 新进程的进程ID号:%d /n", pi.dwProcessId);   
        printf(" 新进程的主线程ID号:%d /n", pi.dwThreadId);   
    }   
    else 
    {  
        printf("error code:%d/n",error );  
    }  
 
 
    return 0;   
}  

 

2. 启动进程如何获取命令行的参数?

    

        http://qingfengju.com/default.asp?tag=__argv

在MFC程序中,可以用以下几种方法来获取命令行参数。
为方便说明,我们假设执行了命令:
C:/test/app.exe -1 -2

方法一
::GetCommandLine();
将获取到 "C:/test/app.exe"  -1 -2

方法二
for (int i=0;i<__argc;i++)
{
__argv[i];
将依次得到C:/test/app.exe  -1  -2
}

方法三
AfxGetApp()->m_lpCmdLine;
将获取到
-1 -2

其他方法
如果希望支持MFC应用程序的标准命令行,还可以使用MFC中的CCommandLineInfo类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值