如何得知程序的一个实例正在运行?
我想在程序启动时判断如果已经有它的一个实例在运行,就向该实例发送一个消息,请问,如何得知它已经运行了? 问题点数:99、回复次数:15Top
1 楼hense(Hense)回复于 2001-11-27 15:09:59 得分 10
方法一:
FindWindow()
方法二:
CreateEvent() / OpenEvent();//named event
方法三:
共享内存,计数器变量判断
Top
2 楼Cowboy22(西部牛仔)回复于 2001-11-27 15:11:48 得分 5
EnumWindows和FindWindow把它找出来。Top
3 楼pinel()回复于 2001-11-27 16:02:14 得分 3
进程间通信的文章看看Top
4 楼flagfly(我也不知道要去哪里)回复于 2001-11-27 16:02:58 得分 0
是用FindWindow的哪个参数,请再说得详细一些。
我用过FindWindow(NULL, "test");//"test"为窗口名
这样用可以吗,如果要用第一个参数怎么用,有劳各位,回答者均有分。Top
5 楼Cowboy22(西部牛仔)回复于 2001-11-27 16:17:47 得分 5
有没有用过SPY++?它的FindWindow窗口里面的Class和Caption就是对应于这两个参数。Top
6 楼ysdesigned(清泉)回复于 2001-11-27 16:18:13 得分 5
第一个参数位窗口类名
FindWindow("SciCalc","计算器");Top
7 楼eggplant(拉拉)回复于 2001-11-27 16:21:55 得分 10
创建一个原子,程序启动后查找她,如果在,就退出,否则创建一个,然后启动。Top
8 楼alphagx(alpha)回复于 2001-11-27 16:30:55 得分 10
原子不好,如果程序非法退出的话就这个原子不能被Delete会一直存在于系统中则启动不了程序
你可以使用Mutex对象,即使程序非法退出Mutex对象也能被系统自动删除
程序启动去Create一个Mutex对象如果成功并且GetLastError()!=ERROR_ALREADY_EXISTS
启动程序,否则说明已有实例在运行,则退出Top
9 楼superdreamer(只懂一点点!)回复于 2001-11-27 17:01:28 得分 20
我的是启动NETMEETING的程序,其他只需改char lpszStr[64]="NetMeeting";为你的东西即可
char lpszStr[64]="NetMeeting";
char m_strWinText[254];
CWnd *pPrevHwnd=NULL;
pPrevHwnd=CWnd::GetDesktopWindow ()->GetWindow (GW_CHILD);
while(*pPrevHwnd)
{
pPrevHwnd->GetWindowText (m_strWinText,254);
if(strstr(m_strWinText,lpszStr)!=NULL)
{
MessageBox(m_ihWnd,"NetMeeting 已启动","提示",MB_OK);
if(pPrevHwnd->IsIconic())
pPrevHwnd->ShowWindow (SW_RESTORE);
pPrevHwnd->SetForegroundWindow ();
return;
}
pPrevHwnd=pPrevHwnd->GetWindow(GW_HWNDNEXT);
}
ShellExecute(m_ihWnd,"open","conf.exe",NULL,"C:\\Program Files\\NetMeeting",SW_SHOWNORMAL);
Top
10 楼NowCan(城市浪人)回复于 2001-11-27 19:12:24 得分 10
用Mutex的话怎么发消息?Top
11 楼XDZXG()回复于 2001-11-27 19:13:14 得分 10
以下代码中m_hAppFlag是一个应用程序对象指针,通过下面方法就可以
m_hAppFlag=CreateEvent(NULL,true,false,"m_pszExeName");
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
ResetEvent(m_hAppFlag);
AfxMessageBox("系统正在运行",MB_ICONSTOP);
return false;
}Top
12 楼yheysj(vc_help)回复于 2001-11-27 19:31:47 得分 5
楼上的兄弟太详细了!!我就不用了!!Top
13 楼loop000(木牛流马)回复于 2001-11-27 19:44:13 得分 3
enTop
14 楼flagfly(我也不知道要去哪里)回复于 2001-11-28 12:06:15 得分 0
各位的方法都很好,只不过针对我需要的情况,有些方法不适用,正如NowCan所说,用Mutex的话怎么发消息?
我想知道如果只知道应用程序名称,而不是窗口名,能否得到该应用程序的句柄。高手请再出手。Top
15 楼amoroso(鼠标)回复于 2001-11-28 12:15:01 得分 3
学习Top




