只允许一个实例

思路:
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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值