内核对象(3)之单实例程序的创建
2017-08-28 22:13
393 查看
前面讲过使用命名对象来跨进程共享内核对象
现在我们来讲讲单实例程序的创建
其实很简单,使用Create内核对象的函数,当第二次创建的时候,会提示ERROR_ALREADY_EXISTS ,这个时候我们要终止程序的运行
以下是一个例子,大家只需关注入口函数的前9行
现在我们来讲讲单实例程序的创建
其实很简单,使用Create内核对象的函数,当第二次创建的时候,会提示ERROR_ALREADY_EXISTS ,这个时候我们要终止程序的运行
以下是一个例子,大家只需关注入口函数的前9行
#include "stdafx.h" #include <Windows.h> #include <Psapi.h> #include <TlHelp32.h> #include <iostream> #include <stdlib.h> #pragma comment(lib,"Psapi.lib") using namespace std; int _tmain(int argc, _TCHAR* argv[]) { HANDLE hEvent; if (hEvent = CreateEvent(NULL, FALSE, TRUE, TEXT("hello"))) { if (GetLastError() == ERROR_ALREADY_EXISTS) { MessageBox(NULL, TEXT("已经存在一个运行的实例"), TEXT("error"), MB_OK); return 0; } } bool bRet = false; HANDLE hProcess; setlocale(LC_ALL, "chs"); HANDLE hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (INVALID_HANDLE_VALUE == hSnap) cout << "创建系统进程快照失败" << endl; PROCESSENTRY32 info = { 0 }; info.dwSize = sizeof(PROCESSENTRY32); bRet=Process32First(hSnap, &info); while (bRet) { cout << info.szExeFile << endl; bRet = Process32Next(hSnap, &info); } CloseHandle(hSnap); PROCESS_INFORMATION pi; STARTUPINFO stp = {0}; stp.cb = sizeof(STARTUPINFO); stp.wShowWindow = SW_SHOW; //WinExec("D:\\BaiduNetdiskDownload\\DrvCrt.exe", SW_SHOW); //ShellExecute(NULL, TEXT("open"), TEXT("D:\\BaiduNetdiskDownload\\DrvCrt.exe"), NULL, NULL, SW_SHOW); //HANDLE handle; //ShellExecute(NULL, TEXT("open"), TEXT("https://www.baidu.com"), NULL, NULL, SW_SHOWNORMAL); ShellExecute(NULL, TEXT("open"), TEXT("mailto:"), NULL, NULL, SW_SHOWNORMAL); //CreateProcess(TEXT("D:\\BaiduNetdiskDownload\\DrvCrt.exe"), NULL, NULL, NULL, false, NULL, NULL, NULL,&stp,&pi); int err=GetLastError(); //ResumeThread(pi.hThread); system("pause"); return 0; }
相关文章推荐
- 用命名内核对象判断程序是否有实例正在运行
- 使用内核对象使程序单实例运行:互斥信号量
- C# 反射创建对象,包括创建引用外部程序集类的实例
- 使用内核对象使程序单实例运行:事件对象
- 内核对象 互斥体 CreateMutex 跨进程边界共享内核对象 命名对象 程序单实例
- C++内核对象封装单实例启动程序的类
- java 程序加载过程---3--类中申明同时申明类的静态对象 创建类的实例 访问类的静态变量 调用类的静态方法 使用反射方法 初始化类的子类对象 直接使用java.exe 调用某个类
- php内核探索:创建对象实例
- java 程序加载过程---2-创建类实例对象
- PHP内核探索:创建对象实例
- mongo数据库在用MongoVUE创建表时提示“未将对象引用设置到对象的实例”的解决方案
- java程序中创建触发器、存储过程等对象
- CreateSemaphore 创建信号灯, 一种内核对象的同步方式
- 在开发iOS程序时,有时候需要将时间格式调整成自己希望的格式,这个时候我们可以用NSDateFormatter类来处理。 例如: //实例化一个NSDateFormatter对象 NSDateFor
- 一般处理程序里使用session对象为null,未将对象引用到实例化
- C# 根据对象类完整名称,创建对象实例
- 《JavaScript设计模式与开发实践》——JavaScript中使用new关键字创建对象实例
- JAVA对象实例是何时被创建的?
- PHP面向对象编程--类的创建和对象实例化(类、对象、模块化、抽象)
- 今天打开一个网站 FSO对象实例创建失败