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 函数其他参数如何来使用!

时间: 2024-11-02 23:20:53

vc++基础班[26]---进程的相关操作的相关文章

vc++基础班[27]---实现一个简单的任务管理器

因为任务管理器中涉及到进程的枚举操作,所以把两节课的知识点合并到一起来讲! ①.设计界面.以及列表控件变量的绑定: ②.列表控件样式的指定: m_TaskList.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); m_TaskList.InsertColumn(0, _T(" 进程名称"), 0, 100); m_TaskList.InsertColumn(1, _T(" PID"), 0, 60)

python基础===【字符串】所有相关操作

#字符串的相关操作 #基本操作 #+ 字符串连接操作 str1 = '来是come走是go' str2 = '点头yes摇头no' result = str1 + str2 print(result) #* 字符串复制操作 str1 = '天地不仁以万物为刍狗' result = str1 * 3 print(result) #[] 索引操作 str1 = '柳暗花明又一村' print(str1[1]) print(str1[-2]) #[::]取片操作 str1 = '山重水复疑无路' #获

vc++基础班[24]---系统各种路径信息的获取

------------------------------------------ Begin ---------------------------------------- ①.Windows.System32.temp 等目录的获取: TCHAR szPath[MAX_PATH] = {0}; GetSystemDirectory(szPath, MAX_PATH); //C:\WINDOWS\system32 GetWindowsDirectory(szPath, MAX_PATH);

vc++基础班[23]---文件夹的基本操作

①.文件夹的创建:CreateDirectory ※※※ 注意:此函数只能创建一层目录,比如想在 C 盘下的 Temp 目录下创建新目录为:123 那么前提是 Temp 这个目录存在才可以! ②.文件夹的删除:RemoveDirectory ※※※ 注意:此函数只能删除一个空的目录,如果目录中有子目录或子文件的话会删除失败的! 解决的方法是用 递归的思想,调用上节课给大家讲解的文件删除函数将子文件删除,之后就可以调用此函数删除一个空的文件夹了: ③.文件夹属性信息的获取:GetFileAttri

vc++基础班[25]---系统信息的获取

--------------------------------------------------------------------------- VC 驿站 WwW.CcTry.CoM 多抽出一分钟时间来学习,让你的生命更加精彩! C.C++.VC++ 各种学习资源,免费教程,期待您的加入! 动画教程只是起到技术交流的作用,请大家不用利用此方法做非法用途. 由此动画造成的任何后果和动画作者及本站无关. --------------------------------------------

vc++基础班[21]---文件的基本操作之CFile

①.文件的创建.打开.关闭: 文件的创建.打开:CFile::Open 文件的关闭:CFile::Close CFile::modeCreate:以新建方式打开,如果文件不存在,则新建:如果文件已存在,把该文件长度置零,即清除文件原有内容: CFile::modeNoTruncate:以追加方式打开,如果文件存在,打开并且不将文件长度置零,如果文件不存在,会抛出异常. 一般与CFile::modeCreate一起使用,则文件不存在时,新建一个文件:存在就进行追加操作: CFile::modeRe

架构师养成记--26.vi/vim相关操作

vi/vim命令模式插入模式 aio编辑模式 : aio就是vi/vim的插入模式命令    作用a         在光标后附加文本A         在本行末附加文本i         在光标钱插入文本I         在本行开始插入文本o        在光标下插入行O        在光标上插入行 定位命令set number 设置行号(set nu)set nonu 取消行号如果想选择跳转到指定行.直接进入编辑模式,输入行号即可 命令         作用h.方向左键    移动一个

vc++基础班[28]---动态数组及动态链表的讲解

C++中也有相应的动态数组.动态链表.映射表的模板类,就是STL中的:vector.list.map 他们属于C++标准中的一部分,对于程序的移植性来说也是不错的,但是在MFC编程中使用 CArray.CList.CMap 会更方便一些! CArray.CList.CMap 的由来?…… ①.数组的基本说明: 数组是固定大小的,相同数据类型的元素的顺序集合,每个元素在数组中有一个固定的位置. 将10个数放入数组中,假设数组的名称为number,可以称数组中第一个元素为 number[0],第二个

vc++基础班[22]---文件的基本操作2

MFC 中的 CFile 及其派生类中没有提供直接进行文件的复制操作,因而要借助于SDK API: SDK中的文件相关函数常用的有CopyFile().CreateDirectory().DeleteFile().MoveFile() ①.文件的复制:CopyFile 若要复制文件夹,可以在目标位置新建一文件夹,然后将源文件夹里面的文件进行遍历,一个一个的复制到目标文件夹内即可! ②.文件的重命名或移动 [适用于文件夹]: static CFile::Rename 重命名文件: MoveFile