我是靠谱客的博主 美丽眼睛,最近开发中收集的这篇文章主要介绍Windows客户端开发--只允许有一个实例运行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

没有人会漫无目的地旅行,那些迷路者是希望迷路。
                    --------《岛上书店》

一个pc可以同时运行几个qq,但是只允许运行一个微信。

所以,今天就跟大家分享一下,如何确保你开发的windows客户端只能同时运行一个实例,或是叫进程。

使用mutex
OpenMutex函数为现有的一个已命名互斥体对象创建一个新句柄。
即在main函数中创建一个互斥量:

WINAPI WinMain(
  HINSTANCE, HINSTANCE, LPSTR, int)
{
  try {
    // Try to open the mutex.
    HANDLE hMutex = OpenMutex(
      MUTEX_ALL_ACCESS, 0, "MyApp1.0");

    if (!hMutex)
      // Mutex doesn’t exist. This is
      // the first instance so create
      // the mutex.
      hMutex = a
        CreateMutex(0, 0, "MyApp1.0");
    else
      // The mutex exists so this is the
      // the second instance so return.
      return 0;

    Application->Initialize();
    Application->CreateForm(
      __classid(TForm1), &Form1);
    Application->Run();

    // The app is closing so release
    // the mutex.
    ReleaseMutex(hMutex);
  }
  catch (Exception &exception) {
    Application->
      ShowException(&exception);
  }
  return 0;
}

使用CreateEvent
CreateEvent是一个Windows API函数。它用来创建或打开一个命名的或无名的事件对象。

bool CheckOneInstance()
{

    HANDLE  m_hStartEvent = CreateEventW( NULL, FALSE, FALSE, L"Global\CSAPP" );

    if(m_hStartEvent == NULL)
    {
    CloseHandle( m_hStartEvent ); 
        return false;
    }


    if ( GetLastError() == ERROR_ALREADY_EXISTS ) {

        CloseHandle( m_hStartEvent ); 
        m_hStartEvent = NULL;
        // already exist
        // send message from here to existing copy of the application
        return false;
    }
    // the only instance, start in a usual way
    return true;
}

使用FindWindow
FindWindow这个函数检索处理顶级窗口的类名和窗口名称匹配指定的字符串。

HWND hWnd = ::FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName);
if (hWnd != null)
{
  ShowWindow(hWnd, SW_NORMAL);
  return (1);
}

使用CreateSemaphore
创建一个新的信号量

CreateSemaphore(NULL, TRUE, TRUE, "MYSEMAPHORE");
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
  return FALSE
}

最后

以上就是美丽眼睛为你收集整理的Windows客户端开发--只允许有一个实例运行的全部内容,希望文章能够帮你解决Windows客户端开发--只允许有一个实例运行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部