如何得知程序的一个实例正在运行?

flagfly 2001-11-27 02:50:06
我想在程序启动时判断如果已经有它的一个实例在运行,就向该实例发送一个消息,请问,如何得知它已经运行了?
...全文
161 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
amoroso 2001-11-28
  • 打赏
  • 举报
回复
学习
flagfly 2001-11-28
  • 打赏
  • 举报
回复
各位的方法都很好,只不过针对我需要的情况,有些方法不适用,正如NowCan所说,用Mutex的话怎么发消息?

我想知道如果只知道应用程序名称,而不是窗口名,能否得到该应用程序的句柄。高手请再出手。
loop000 2001-11-27
  • 打赏
  • 举报
回复
en
yheysj 2001-11-27
  • 打赏
  • 举报
回复
楼上的兄弟太详细了!!我就不用了!!
XDZXG 2001-11-27
  • 打赏
  • 举报
回复
以下代码中m_hAppFlag是一个应用程序对象指针,通过下面方法就可以
m_hAppFlag=CreateEvent(NULL,true,false,"m_pszExeName");
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
ResetEvent(m_hAppFlag);
AfxMessageBox("系统正在运行",MB_ICONSTOP);
return false;
}
NowCan 2001-11-27
  • 打赏
  • 举报
回复
用Mutex的话怎么发消息?
superdreamer 2001-11-27
  • 打赏
  • 举报
回复
我的是启动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);
alphagx 2001-11-27
  • 打赏
  • 举报
回复
原子不好,如果程序非法退出的话就这个原子不能被Delete会一直存在于系统中则启动不了程序
你可以使用Mutex对象,即使程序非法退出Mutex对象也能被系统自动删除

程序启动去Create一个Mutex对象如果成功并且GetLastError()!=ERROR_ALREADY_EXISTS
启动程序,否则说明已有实例在运行,则退出
eggplant 2001-11-27
  • 打赏
  • 举报
回复
创建一个原子,程序启动后查找她,如果在,就退出,否则创建一个,然后启动。
清泉ys 2001-11-27
  • 打赏
  • 举报
回复
第一个参数位窗口类名
FindWindow("SciCalc","计算器");
Cowboy22 2001-11-27
  • 打赏
  • 举报
回复
有没有用过SPY++?它的FindWindow窗口里面的Class和Caption就是对应于这两个参数。
flagfly 2001-11-27
  • 打赏
  • 举报
回复
是用FindWindow的哪个参数,请再说得详细一些。
我用过FindWindow(NULL, "test");//"test"为窗口名
这样用可以吗,如果要用第一个参数怎么用,有劳各位,回答者均有分。
pinel 2001-11-27
  • 打赏
  • 举报
回复
进程间通信的文章看看
Cowboy22 2001-11-27
  • 打赏
  • 举报
回复
EnumWindows和FindWindow把它找出来。
hense 2001-11-27
  • 打赏
  • 举报
回复
方法一:
FindWindow()
方法二:
CreateEvent() / OpenEvent();//named event
方法三:
共享内存,计数器变量判断

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧