在VC中实现一次执行一个进程,如果同时打开两个,则报该程序已经运行
2007-10-02 17:43
726 查看
//找到当前已经打开的程序实例
HWND hWnd=NULL;
HANDLE h = GetProp(hWnd,"Your Program Name");
if(hWnd!=NULL)
{
AfxMessageBox("该程序已经运行了!");
::ShowWindow(hWnd,SW_SHOWNORMAL); //激活找到的前一个程序
::SetForegroundWindow(hWnd);
}
在
::Initinstance()
{
if(OpenMutes(MUTEX_ALL_ACCESS,TRUE,"ABCDEFGH"))
return false;//返回FALSE 直接推出程序自动
CreateMutex(NULL,TRUE,"ABCDEFGH"); //创建 别的程序就无法启动了
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=492172
例2:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HANDLE hMutex;
WNDCLASSEX wcex;
MSG msg;
long top, left;
char strmsg[256];
unsigned long BackupSerial;
//---------------------------------------------------------------
// 2重起動防止
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, DATA_GUARD_MUTEX);
if(hMutex)
{
//if(lpCmdLine)
// DebugOut("WinMain - lpCmdLine = %s", lpCmdLine);
EnumWindows(&FindWindowProc, (LPARAM)lpCmdLine);
CloseHandle(hMutex);
return FALSE;
}
hMutex = CreateMutex(NULL, TRUE, DATA_GUARD_MUTEX);
。。。。。。
}
BOOL CALLBACK FindWindowProc(HWND hWnd, LPARAM lParam)
{
if(GetProp(hWnd, DATA_GUARD_WND))
{
if(lParam)
{
COPYDATASTRUCT cds;
memset(&cds, 0, sizeof(COPYDATASTRUCT));
char * pCmd;
pCmd = (char*)lParam;
DebugOut("FindWindowProc - WM_COPYDATA = %s", pCmd);
cds.cbData = strlen(pCmd) + 1;
cds.lpData = (PVOID)pCmd;
SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);
}
SetForegroundWindow(hWnd);
ShowWindow(hWnd, SW_SHOW);
return FALSE;
}
return TRUE;
}
//---------------------------------------------------------------
// インスタンスの保存
g_hInst = hInstance;
HWND hWnd=NULL;
HANDLE h = GetProp(hWnd,"Your Program Name");
if(hWnd!=NULL)
{
AfxMessageBox("该程序已经运行了!");
::ShowWindow(hWnd,SW_SHOWNORMAL); //激活找到的前一个程序
::SetForegroundWindow(hWnd);
}
在
::Initinstance()
{
if(OpenMutes(MUTEX_ALL_ACCESS,TRUE,"ABCDEFGH"))
return false;//返回FALSE 直接推出程序自动
CreateMutex(NULL,TRUE,"ABCDEFGH"); //创建 别的程序就无法启动了
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=492172
例2:
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HANDLE hMutex;
WNDCLASSEX wcex;
MSG msg;
long top, left;
char strmsg[256];
unsigned long BackupSerial;
//---------------------------------------------------------------
// 2重起動防止
hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, DATA_GUARD_MUTEX);
if(hMutex)
{
//if(lpCmdLine)
// DebugOut("WinMain - lpCmdLine = %s", lpCmdLine);
EnumWindows(&FindWindowProc, (LPARAM)lpCmdLine);
CloseHandle(hMutex);
return FALSE;
}
hMutex = CreateMutex(NULL, TRUE, DATA_GUARD_MUTEX);
。。。。。。
}
BOOL CALLBACK FindWindowProc(HWND hWnd, LPARAM lParam)
{
if(GetProp(hWnd, DATA_GUARD_WND))
{
if(lParam)
{
COPYDATASTRUCT cds;
memset(&cds, 0, sizeof(COPYDATASTRUCT));
char * pCmd;
pCmd = (char*)lParam;
DebugOut("FindWindowProc - WM_COPYDATA = %s", pCmd);
cds.cbData = strlen(pCmd) + 1;
cds.lpData = (PVOID)pCmd;
SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);
}
SetForegroundWindow(hWnd);
ShowWindow(hWnd, SW_SHOW);
return FALSE;
}
return TRUE;
}
//---------------------------------------------------------------
// インスタンスの保存
g_hInst = hInstance;
相关文章推荐
- 用MASM写一个简单的实现递归操作的汇编程序,所谓递归,上课已经跟大家说清楚了,如果我们只考虑简单的只分一次的递
- Delphi 中实现判断某个外部程序是否运行(如果运行则执行一个命令否则执行一个命令)
- 技巧(5)- 如何让这个程序在系统里同时只运行一个(如果这个exe程序已经运行了,就不再运行)
- 通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件。
- 通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件
- 实现server程序,支持多个client同时连接,为每一个client分配一个进程
- 使用jquery当页面打开时,将一个事件绑定到控件(同时执行两个事件),并修改加载样式类中的样式
- 在同一个进程空间运行两个程序
- 在VC++中实现让程序只运行一个实例的方法
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 用Mutex或进程限制用户在一台电脑上同时打开两个程序
- tomcat项目重载 ,同一个项目初始化两次,同时执行两个进程
- 在窗体上放置一个标签、一个按钮、一个fontDialog控件。标签内容改为“烟台大学”。实现功能:1)程序运行时,单击打开字体对话框按钮,可选择字体,并以所选字体作为标签字体。
- VC++实现程序只运行一个实例
- 让程序同时只能运行一个C++ Builder实现(转)
- 如何打开 两个Editplus(窗口 进程),不想在一个窗口多标签打开程序,这样子很难对比程序
- c# 程序只能运行一次(多次运行只能打开同一个程序) 并激活第一个实例,使其获得焦点,并在最前端显示.
- 用Mutex或进程限制用户在一台电脑上同时打开两个程序
- 旧文重贴,悼念我的第一个电子邮箱:在同一个进程空间运行两个程序