evc 程序只运行一次
/*-----------------------------------------------------------------------------
*函数功能: 判断程序是否已运行
*参数说明: lpClassName: 类名
lpWindowName: 窗口名称
*返回值 : TRUE->已运行 FALSE->未运行
*Write By Ardy 2009-02-14
-----------------------------------------------------------------------------*/
BOOL IsRunning(LPCTSTR lpClassName, LPCTSTR lpWindowName)
{
//如果它已经在运行,则将焦点置于窗口上
HWND hWnd = FindWindow(lpClassName, lpWindowName);
if (IsWindow(hWnd))
{
// 将焦点置于最前面的子窗口
// “| 0x00000001”用于将所有附属窗口置于前台并
// 激活这些窗口。
SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
return TRUE;
}
return FALSE;
}
win32 mfc都可以用,IsRunning要加在WinMain
//显示窗体的WIN32程序
/*-----------------------------------------------------------------------------*/
const TCHAR AppName[] = TEXT("ArdyHelper");
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
{
if (IsRunning(NULL, AppName))
{
return FALSE;
}
g_hInst = hInstance;
DialogBox (hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, (DLGPROC)WndProc);
return 0;
}
/*-----------------------------------------------------------------------------*/
//在后台运行的WIN32程序 HOTKEY
/*-----------------------------------------------------------------------------*/
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
//定义窗口类
////////////////////////////////////////////////////////////////////////////////////////
//HWND hWnd;
if (IsRunning(_T("Hotkey"), _T("HotKey")))// 如果有显示窗体这里可以写成 if (IsRunning(_T("Hotkey"), _T("窗体名")))//第一个参数是类名
{
::MessageBox(g_hMainWnd,_T("程序已经运行."),_T("Hotkey"),NULL);
return FALSE;
}
MSG msg;
m_hInst = hInstance;
MyRegisterClass(hInstance, _T("Hotkey"));//注册类名
g_hMainWnd = CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, _T("HotKey"), _T("HotKey"),
WS_VISIBLE,
0, 0, 0, 0,
NULL, NULL, hInstance, NULL);
if (!g_hMainWnd)
{
::MessageBox(g_hMainWnd,_T("Hotkey"),_T("Hotkey"),NULL);
return FALSE;
}
ShowWindow(g_hMainWnd, nCmdShow);
UpdateWindow(g_hMainWnd);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
/*-----------------------------------------------------------------------------*/