只允许一个实例

时间:2022-08-29 19:30:43

思路:
1.找到这个实例的窗口句柄
2.如果找到就发送一个自定义的消息,如果没有就建立这个实例
eg.

只允许一个实例#include  < windows.h >
只允许一个实例#include 
< WindowsX.h >
只允许一个实例#include 
< tchar.h > // _ttoi
只允许一个实例
#include  " Resource.h "
只允许一个实例#include 
" CmnHdr/CmnHdr.h "
只允许一个实例
只允许一个实例
只允许一个实例
#define  ESM_POKECODEANDLOOKUP    (WM_USER + 100)
只允许一个实例
只允许一个实例
只允许一个实例只允许一个实例
void  Main_OnCommand(HWND hwnd,  int  id, HWND hwndCtl, UINT codeNotify)  ... {
只允许一个实例    
只允许一个实例只允许一个实例    
switch (id) ...{
只允许一个实例        
只允许一个实例    
case IDCANCEL:
只允许一个实例        EndDialog(hwnd, id);
只允许一个实例        
break;
只允许一个实例    }

只允许一个实例}

只允许一个实例只允许一个实例
/**/ //////////////////////////////////////////////////////////////////////////
只允许一个实例
只允许一个实例只允许一个实例BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) 
... {
只允许一个实例    
只允许一个实例    chSETDLGICONS(hwnd, IDI_MAIN);
只允许一个实例    
只允许一个实例    
// Look up the command-line passed error number
只允许一个实例
    SendMessage(hwnd, ESM_POKECODEANDLOOKUP, lParam, 0);
只允许一个实例    
return(TRUE);
只允许一个实例}

只允许一个实例只允许一个实例
/**/ ///////////////////////////////////////////////////////////////////////////////
只允许一个实例
只允许一个实例
只允许一个实例只允许一个实例INT_PTR WINAPI Main_DlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 
... {
只允许一个实例    
只允许一个实例只允许一个实例    
switch (uMsg) ...{
只允许一个实例        chHANDLE_DLGMSG(hwnd, WM_INITDIALOG, Main_OnInitDialog);
只允许一个实例        chHANDLE_DLGMSG(hwnd, WM_COMMAND,    Main_OnCommand);
只允许一个实例        
只允许一个实例    
case ESM_POKECODEANDLOOKUP:
只允许一个实例        SetForegroundWindow(hwnd);
只允许一个实例        
break;
只允许一个实例    }

只允许一个实例    
只允许一个实例    
return(FALSE);
只允许一个实例}

只允许一个实例只允许一个实例
/**/ //////////////////////////////////////////////////////////////////////////
只允许一个实例
只允许一个实例只允许一个实例
int  WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine,  int ... {
只允许一个实例
只允许一个实例   HWND hwnd 
= FindWindow(TEXT("#32770"), TEXT("pc2pc"));
只允许一个实例只允许一个实例   
if (IsWindow(hwnd)) ...{
只允许一个实例      
// An instance is already running, activate it and send it the new #
只允许一个实例
      SendMessage(hwnd, ESM_POKECODEANDLOOKUP, _ttoi(pszCmdLine), 0);
只允许一个实例只允许一个实例   }
 else ...{
只允许一个实例      DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_MAINDLG), 
只允许一个实例         NULL, Main_DlgProc, _ttoi(pszCmdLine));
只允许一个实例   }

只允许一个实例   
return(0);
只允许一个实例}