就像Media Player一样?
解决方案 »
- 500分求救!socket 多线程小问题(之三)
- vc与ADO连接的问题
- 怎么让WEBBROWSER2中显示的网页链接点击后在新窗口中打开,不管TARGET是不是_blank都如此
- 关于 MSN 7.0 窗口焦点 的问题
- VC6.0如何循环读取所有的存储过程,触发器,视图,用户函数等?
- ******************怎样从 332 颜色转换到 888 颜色.
- 请问怎样响应DCOM的事件?
- 极easy问题,如何同时产生四个不同的随机数,个位数。
- C/C++如何处理时间
- 写了一个工具,需要用到多线程中的事件对象类通讯。大家进来讨论下。
- 怎样把程序做成window服务(后台运行),100分马上出贴
- 急问,关于MSFlexGrid控件及其设置焦点的问题
CWnd *pOtherWnd = CWnd::FindWindow(NULL, "A2");//A2是主框架的标题
if(pOtherWnd!=NULL)
{
AfxMessageBox("Program already running!");
return FALSE;
}
if(GetLastError()==ERROR_ALREADY_EXISTS)
{
HWND hWnd=::FindWindow(NULL,m_pAppName);
if(hWnd)
{
if(::IsIconic(hWnd))
::ShowWindow(hWnd,SW_RESTORE);
::SetForegroundWindow(hWnd);
::SetForegroundWindow(::GetLastActivePopup(hWnd));
}
else
MessageBox(NULL,"您的程序已经运行了","提示信息",MB_ICONINFORMATION);
return FALSE;
} //在 InitInstance 中,创建信号量:
HANDLE hSem = CreateSemaphore(NULL,1,1,m_pszAppName);
//信号量已存在?
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
//关闭信号量句柄
CloseHandle(hSem);
//寻找先前实例的主窗口
HWND hWndPrevious = ::GetWindow(::GetDesktopWindow(),GW_CHILD);
while(::IsWindow(hWndPrevious))
{
//检查窗口是否有预设的标记?
//有,则是我们寻找的主窗口
if(::GetProp(hWndPrevious,m_pszAppName))
{
//主窗口已经最小化,则恢复其大小
if(::IsIconic(hWndPrevious))
::ShowWindow(hWndPrevious,SW_RESTORE);
//将主窗口激活
::SetForegroundWindow(hWndPrevious);
//将主窗口对话框激活
::SetForegroundWindow(::GetLastActivePopup(hWndPrevious));
//退出本实例
reture FALSE;
}
else
//继续寻找下一个窗口
hWndPrevious = ::GetWindow(hWndPrevious,GW_HWNDNEXT); }
//前一实例已存在,但找不到其主窗口
//可能出错了
//退出本实例
return FALSE;
}
2.使用Prop参加API函数SetProp就懂了
一个程序只能拥用一个Mutex~
比如,已经运行了一个Pro.exe,其中有一个int,我运行第二个Pro.exe时,希望第二个Pro.exe在检测到已经有一个实例在运行以后,把那个实例中的int加一,然后第二个实例结束。
再不用外部文件的前提下,能不能作到。
谢谢。
if(GetLastError() == ERROR_ALREADY_EXISTS) { return FALSE; }
if(GetLastError() == ERROR_ALREADY_EXISTS) { return FALSE; }