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;
}

/*-----------------------------------------------------------------------------*/

posted @ 2010-08-31 12:28  牧羊的小牧童  阅读(305)  评论(0编辑  收藏  举报