MSN中的互斥量是怎么用的

developing_T 2007-02-13 03:06:24
象MSN那样,只能启动一个,如果MSN已经启动,你再到程序里点MSN,则已经启动的MSN窗口会显示出来,这个是怎么做到的。
...全文
312 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
roger_77 2007-02-15
  • 打赏
  • 举报
回复
检查进程

用FindWindow
fullhappy 2007-02-15
  • 打赏
  • 举报
回复
楼主的意思好像是针对进程只开一个问题,你自己程序写一下不就可以啦,跟具体MSN里面内核没关系。
BeRoy 2007-02-15
  • 打赏
  • 举报
回复
这是BCB的,懂这意思就可以

void __fastcall TYZClient::FormCreate(TObject *Sender)
{
//use mutex
Application->Title=MUTEX_NAME;
HANDLE PrevInstHandle;
HANDLE Mutex = OpenMutex(SYNCHRONIZE,false,Application->Title.c_str());
if (Mutex != NULL)//已经存在
{
MessageBox(NULL,"程序已经处于运行中","信息",MB_OK);
String AppTitle=Application->Title;
SetWindowText(Application->Handle,NULL);
PrevInstHandle = FindWindow("TApplication", AppTitle.c_str());//找到句柄
if(PrevInstHandle != 0)
{
if (IsIconic(PrevInstHandle))//如果是最小化
ShowWindow(PrevInstHandle, SW_RESTORE);
else
BringWindowToTop(PrevInstHandle);
SetForegroundWindow(PrevInstHandle);
}
Application->ShowMainForm = false;
Application->Terminate();
return;
}
else CreateMutex(NULL, false, Application->Title.c_str());
......
}
linuxpgy 2007-02-14
  • 打赏
  • 举报
回复
楼上正解
xharry 2007-02-14
  • 打赏
  • 举报
回复
如果该程序是始终有窗口的, 我们可以通过查找它的窗口的句柄, 激活它
用FindWindow

如果它缩小到了Tray上了, 我们可定义一个消息, 程序收到该消息就显示窗口
  • 打赏
  • 举报
回复
MSN不是用互斥量的
MSN是基于COM的,只要类厂维持一个msn对象就可以了。
无忧石头 2007-02-13
  • 打赏
  • 举报
回复
HANDLE hMutex = CreateMutex(NULL, TRUE , str); //str -- mutex name
if (hMutex == NULL || GetLastError() == ERROR_ALREADY_EXISTS )
{
//get prev window and popu code
}
askppp 2007-02-13
  • 打赏
  • 举报
回复
不好意思,打错了:

“除非可以通过HWND获得PID”
askppp 2007-02-13
  • 打赏
  • 举报
回复
to xharry(charry):

如何激活?人家楼主问是这个。

to icr_mio(Logos):

这种方法不好,因为可能有重名窗口,除非可以通过HWND或者PID,但我不知道能不能实现。
icr_mio 2007-02-13
  • 打赏
  • 举报
回复
FindWindow然后ShowWindow啊
kangji 2007-02-13
  • 打赏
  • 举报
回复
Semaphore也行
xharry 2007-02-13
  • 打赏
  • 举报
回复
查找是否有msn的Mutex, 如果有, 再查找msn的进程,然后,激活它,

这个也可以吧
askppp 2007-02-13
  • 打赏
  • 举报
回复
很多办法,用mutex也可以实现。

比如两个mutex就可以解决了,不过需要多一个线程来处理。程序将mutex1锁住,等待mutex2,程序再运行发现mutex1已经锁住,则释放mutex2,原来运行的程序mutex2受信,则调出主窗口,然后继续等待再次受信。



developing_T 2007-02-13
  • 打赏
  • 举报
回复
我是说如果有MSN的进程存在,则把现有的窗口显示出来,这个是怎么做的。
oyljerry 2007-02-13
  • 打赏
  • 举报
回复
Mutex

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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