C#のプログラムの実行開始または前面表示するかどうかを判断します

     #regionの表示プログラム
        [DLLIMPORT(" User32.dllの"、エントリーポイント= " のFindWindow " )]
         パブリック 静的 にextern  int型のFindWindow(文字 lpClassName、ストリングlpWindowName);
         ///  <まとめ>  
        /// 異なるスレッドによって生成されるこの機能セットこれは、ステータスウィンドウが表示されます。 
        ///  </要約>  
        ///  <PARAM NAME = "のhWnd"> ウィンドウハンドル</ param>の 
        ///  <PARAM NAME = "ncmdshowのために">は、どのように表示ウィンドウを指定します。許可された値の一覧を表示するには、説明セクションShowWlndow機能を参照してください。</ param>の 
        ///  <戻り値></戻り値>  
        [DLLIMPORT(" User32.dllの" )]
         プライベート 静的 にextern  BOOL(hWndを、のIntPtr ShowWindowAsync int型ncmdshow用);
         ///  <要約>  
        /// この関数は、スレッドがフォアグラウンドに指定したウィンドウを設定して作成し、活動化ウィンドウ。キーボード入力ウィンドウをステアリング、そしてユーザーのために、様々な視覚的なマークを変更します。フォアグラウンドウィンドウシステムは、他のスレッドよりわずかに高いスレッド割り当てられた権限を作成します。 
        ///  </要約>  
        ///  <PARAM NAME =「hWndは」> 最前面ウィンドウのハンドルに活性化して転送されます。</ PARAM>  
        ///  <戻り値> ウィンドウが前面に設定されている場合、戻り値はゼロであり、フロントウィンドウが設定されていない場合、戻り値はゼロです。</戻り値>  
        [DLLIMPORT(" User32.dllの"  EXTERN  ブールSetForegroundWindow(のIntPtrのhWnd)。
        民間 のconst  int型 WS_SHOWNORMAL = 1 ; 

        プロセス工程 = NULL ; 
        IntPtr appWin; 

        [DLLIMPORT(" user32.dllの"、SetLastError = )]
         プライベート 静的 にextern  長いSetParent関数(のIntPtr hWndChild、のIntPtr hWndNewParent)。


        [DLLIMPORT(" user32.dllの"、SetLastError = )]
         プライベート 静的 にexternの ブール値MoveWindow(HWNDのIntPtr、int型のx、int型の Y、INT CX、INT CY、ブール再描画)。
        #endregion 
        プライベート ボイド ToolStripMenuItem1_Click(オブジェクト送信者、のEventArgs電子)
        { 
            foreachの(コントロールC pnlMain.Controls)
            { 
                場合(c.GetType()。BaseType == typeof演算(様式))
                { 
                    ((フォーム)C).Close() ; 
                } 
            } 

            試みる
            { 
                ストリング[] arrStr = IniData.VideoUrl.pathvalue.Split(' ' ); 
                arrStr = arrStr [ 0 ] .Split(' \\ ' )。
                ストリング winName = arrStr [arrStr.Length - 1 ]。
                もし(!文字列.IsNullOrEmpty(winName))
                { int型のhWnd = FindWindowを(winName、ヌル);
                    場合(hWndをする== 0 
                    { // 不存在試みは
                        { // プロセスを開始します

                    
                        
                        
                            
                            プロセス= System.Diagnostics.Process.Start(IniData.VideoUrl.pathvalue)。
                            // プロセスが作成されるのを待ち、アイドル状態の入力
                            )(process.WaitForInputIdleを。

                            // メインハンドルを取得 
                            appWin = process.MainWindowHandleを。
                        } 
                        キャッチ(例外例)
                        { 
                            MessageBox.Show(この、ex.Message、" エラー" )。
                        } 
                    } 
                    
                    {
                        PのIntPtr = 新しい新規のIntPtr(のhWnd);
                         // の存在
                        SetForegroundWindow(P); 

                        ShowWindowAsync(P、WS_SHOWNORMAL); // 表示 
                        SetForegroundWindow(P)を;             // 遠位置く

                    } 
                } 
                
                { 
                    AbstractPlugin.APluginDevice.ExportLog(ビデオ監視:プログラムパスの設定エラー" ); 
                } 
            } 
            キャッチ
            { 
                AbstractPlugin.APluginDevice.ExportLog(カメラ監視:プログラムパスの設定が正しくありません。); 
            } 
}

 

おすすめ

転載: www.cnblogs.com/z45281625/p/10937464.html