コード例 #1
0
        public static void Main()
        {
            const string semaphoreName = "WndProcMutexNotificationWpf";

            // Semaphoreクラスのインスタンスを生成し、アプリケーション終了まで保持する
            using (new Semaphore(1, 1, semaphoreName,
                                 out var createdNew))
            {
                if (!createdNew)
                {
                    // 他のプロセスが先にセマフォを作っていた
                    foreach (var process in Process.GetProcesses()
                             .Where(p => p.ProcessName == Process.GetCurrentProcess().ProcessName))
                    {
                        WndProcManager.SendMessage(process.MainWindowHandle);
                    }

                    return; // プログラム終了
                }

                // アプリケーション起動
                App app = new App {
                    StartupUri = new Uri("MainWindow.xaml", UriKind.Relative)
                };
                app.InitializeComponent();
                app.Run();
            } // Semaphoreクラスのインスタンスを破棄
        }
コード例 #2
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var helper = new WindowInteropHelper(this);

            WndProcManager.SendMessage(helper.Handle);
        }