zoukankan      html  css  js  c++  java
  • vc++基础班[26]---进程的相关操作

     
    ①、ShellExecute 进行进程的创建,属于 shell api:
    //int iRet = (int)ShellExecute(m_hWnd, _T("open"), _T("NOTEPAD.EXE"), _T("C:\123.txt"), NULL, SW_SHOW);
    int iRet = (int)ShellExecute(m_hWnd, _T("open"), _T("C:\WINDOWS\NOTEPAD.EXE"), _T("C:\123.txt"), NULL, SW_SHOW);
    if (iRet > 32){
     MessageBox(_T("执行成功!"));
    }else{
     MessageBox(_T("执行失败!"));
    }
     
    备注:ShellExecute 函数不仅可以打开文件,还可以打开网址等东西!
    第三个文件参数可以不指定,这样系统会根据第三个参数传进来的文件类型找到关联的文件进行打开操作!
     
    ②、16位系统常用的 WinExec API 函数进行进程的创建,在32位系统中为了向下兼容,所以也是支持的!
    WinExec 使用起来也比较简单,只有两个参数!一定要注意第一个参数的类型是:LPCSTR
     
    int iRet = 0;
    char *szPath = "C:\WINDOWS\NOTEPAD.EXE";
    //char *szPath = "C:\123.txt";
    //char *szPath = "C:\WINDOWS\NOTEPAD.EXE C:\123.txt";
    iRet = WinExec(szPath, SW_SHOW);
    if (iRet > 31){
     MessageBox(_T("执行成功!"));
    }else{
     MessageBox(_T("执行失败!"));
    }
     
    ③、标准 API 函数 CreateProcess 进行进程的创建:
    虽然参数很多,但有很多参数都可以置成 NULL
    注意:第二个参数的类型是 LPTSTR,没有C,也就不是 const 类型,所以表示该参数是可读写的!
     
    TCHAR szPath[] = _T("C:\WINDOWS\NOTEPAD.EXE C:\123.txt");
     
    STARTUPINFO si = {0};
    si.cb = sizeof(si);
    PROCESS_INFORMATION pi = {0};
    CreateProcess(NULL, szPath, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
    //CreateProcess(NULL, _T("C:\WINDOWS\NOTEPAD.EXE C:\123.txt"), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); //执行错误
    CloseHandle(pi.hThread);
    CloseHandle(pi.hProcess);
     
    关于 CreateProcess 函数其他参数的详细解释,见:CreateProcess中文详解.txt
     
    ④、进程的结束之:ExitProcess
    结束自身进程:ExitProcess(0);
     
    ⑤、进程的结束之:TerminateProcess
    结束自身或者其他进程:TerminateProcess(GetCurrentProcess(), 0);
    结束其他进程时,要获得对方进程的进程句柄,同时有 PROCESS_TERMINATE 权限才可以!
    TerminateProcess 是用一种“很黄很暴力”的方法去结束指定的进程,目标进程的资源没有及时被释放,虽然操作系统会帮助我们释放,但不是一个好的做法!
     
     
    1、查找相关资料看看 ShellExecuteEx 函数的使用方法;
    2、参照《CreateProcess中文详解.txt》学会 CreateProcess 函数其他参数如何来使用!
     
  • 相关阅读:
    【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
    【Demo 0028】获取窗体信息
    【Demo 0021】窗体创建过程
    FLTK编译安装方法 (转)
    图形学名词解释2(转帖)
    五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) [网上整理]
    无法定位程序输入点XXXXX于动态链接库qtcore.dll
    图形学名词解释1(转贴)
    几何建模研究领域介绍(名词解释&& 转帖)
    C++ hash_map详细介绍[转]
  • 原文地址:https://www.cnblogs.com/liaocheng/p/4243359.html
Copyright © 2011-2022 走看看