1

私はQApplicationカスタムを持っていますQDialog。ダイアログはユーザーに一連のオプションを提供し、 を介してプロセスを開始しますQProcess。起動されたプロセスは引き続き実行されますが、閉じられたアプリは引き続き実行する必要があります。これを実現するために、プロセスが起動されたかどうかに基づいて、 closeEventofを再実装し、イベントQWidgetaccept()編集または編集しました。ignore()

関数ではcloseEvent()、私は自分のQDialog. これにより、ユーザーのアプリケーションは閉じられます (ただし、タスク マネージャーで実行されます)。ユーザーがプログラムを再度実行して、アプリケーションを再起動することを期待しています。この時点で、別のインスタンスが既に実行中であり、そのインスタンスがフォアグラウンドになることを確認する必要があります。

これを達成する方法を教えてくれる人はいますか?

4

2 に答える 2

2

名前付きミューテックスを使用して解決できます。

この記事は役に立ちます。

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 = 
        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;
}
于 2014-03-14T04:44:49.513 に答える