C# では WinFrom プロセスを開始する方法は 2 つだけ許可されています

黄舟
リリース: 2016-12-21 14:43:44
オリジナル
1826 人が閲覧しました

方法 1: 複数のプロセスの実行のみを禁止します

クリップボードへの plaincopy を表示PRint?
· · · · · · · 10 · · · · · · 20 · · · · · · 30 · ·・・・40・・・50・・・60・・・70・・・80・・・・90・・・100・・・110・・・120・・・130・・・140・・・·150
[STAThread]
public static void Main()
{
bool ret;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, application.ProductName, out ret);
{
System .Windows.Forms.Application.EnableVisualStyles(); //これらの 2 行は XP のビジュアル スタイルを実装します
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Main ()) ; A // メインはプログラムのメイン ウィンドウです。プログラムはすでに実行されています。複数のプログラムを同時に実行しないでください。このプログラムは終了します。
Application.Exit();//プログラムを終了
}
}
[STAThread]
public static void Main()
{
bool ret;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application .ProductName, out ret);
if (ret)
{
System.Windows.Forms.Application.EnableVisualStyles() //これらの 2 行は XP のビジュアル スタイルを実装します
System.Windows.Forms.Application.DoEvents();
System.Windows.Forms.Application.Run(new Main());
// ' Main ' がプログラムのメイン形式である場合は、この文を使用しないでください {
MessageBox.Show( null、「このプログラムと同じアプリケーションが既に実行されています。複数のプログラムを同時に実行しないでください。NNThisプログラムは終了しようとしています。」、Application.ProductName、MessageBoxButtons.ok、MessageBoxicon.Warning);削除することができます。
Application.Exit();//プログラムを終了します
}
}


方法 2: 複数のプロセスの実行を無効にし、繰り返し実行する場合は前のプロセスをアクティブ化します

view plaincopy to Clipboardprint?
·····・・・10・・・20・・・30・・・40・・・50・・・・60・・・70・・・80・・・90・・・100・・・110・・・··· 120 · · · · · · · 130 · · · · · · 140 · · · · · · 150
[STAThread]
public static void Main()
{
//取得実行中のインスタンス
プロセス インスタンス = RunningInstance();
if (instance == null)
{ System.Windows.Forms.Application.EnableVisualStyles(); //これらの 2 行は XP のビジュアル スタイルを実装します。        System.Windows.Forms.Application.DoEvents();   
//別の インスタンスは ありません。フォームを 見せてください。      
Application.Run(new Main());   
}
else
{
//このプロセスには、別のインスタンスがあります。      
HandleRunningInstance(インスタンス);   
}
}
public static Process RunningInstance()
{
現在のプロセス = Process.GetCurrentProcess();   
Process[] プロセス = Process.GetProcessesByName(current.ProcessName);   
//同じ 名前を持つ で実行中の プロセスをループします foreach (プロセス内のプロセス)
{
//現在のプロセスを無視する
if (process.Id != current.Id)
{
//必ず確認してくださいプロセスは、exe ファイルから実行されています。      
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
{
//Return 他の プロセスアンス。      
返品プロセス;   
}
}
}
//他の インスタンスは 見つかりませんでした。 null を返します。    
null を返します。   
}
public static void HandleRunningInstance(プロセス インスタンス)
{
//ウィンドウが最小化または最大化されていないことを確認します
ShowWindowAsync(instance.MainWindowHandle, WS _SHOWNORMAL);   
//実際の インスタンスを フォアグラウンド ウィンドウ に設定します
SetForegroundWindow(instance.MainWindowHandle);   
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);   
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);   
プライベート const int WS_SHOWNORMAL = 1;  
[STAThread]
public static void Main()
{
//実行中の インスタンスを取得します。   
プロセス インスタンス = RunningInstance();
if (instance == null)
    {
System.Windows.Forms.Application.EnableVisualStyles();   //これ两行实现 XP 可視风格
System.Windows.Forms.Application.DoEvents();
//別の インスタンスはありません。フォームを表示してください。   
Application.Run(new Main());
}
else
{
//このプロセスの別のインスタンスがあります。   
HandleRunningInstance(instance);
}
}
public static Process RunningInstance()
{
現在のプロセス = Process.GetCurrentProcess();
Process[] プロセス = Process.GetProcessesByName(current.ProcessName);
//ループを通じて同じ 名前 で でプロセスを実行しています
foreach (プロセス内のプロセスプロセス)
{
//現在の プロセスを無視します
if (process.Id != current.Id)
{
// プロセス が から 実行されていることを 確認してくださいexe ファイル。   
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\") == current.MainModule.FileName)
{
//他のプロセス インスタンスを返します。   
return process;
}
}
}
//他のインスタンスは見つかりませんでした。null を返します。 
return null;
}
public static void HandleRunningInstance(プロセス インスタンス)
{
//ウィンドウが最小化されていないこと、または最大化されていないことを確認してください
ShowWindowAsync(instance.MainWindowHandle, SHOWNORMAL);
//実際のインスタンスを前景ウィンドウに設定します
SetForegroundWindow(instance.MainWindowHandle);
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
private const int WS_SHOWNORMAL = 1; 

以上は C# だけ允许启动一 WinFrom进程の 2 つのメソッドの内容、より多くの相关内容请关注 PHP中文网(www.php.cn)!


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!