ホームページ バックエンド開発 C#.Net チュートリアル C# では WinFrom プロセスを開始する方法は 2 つだけ許可されています

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

Dec 21, 2016 pm 02:43 PM

方法 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)!


このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# を使用した Active Directory C# を使用した Active Directory Sep 03, 2024 pm 03:33 PM

C# を使用した Active Directory のガイド。ここでは、Active Directory の概要と、C# での動作方法について、構文と例とともに説明します。

C# のアクセス修飾子 C# のアクセス修飾子 Sep 03, 2024 pm 03:24 PM

C# のアクセス修飾子のガイド。 C# のアクセス修飾子の種類について、例と出力とともに説明しました。

C# の乱数ジェネレーター C# の乱数ジェネレーター Sep 03, 2024 pm 03:34 PM

C# の乱数ジェネレーターのガイド。ここでは、乱数ジェネレーターの仕組み、擬似乱数の概念、安全な数値について説明します。

C# データ グリッド ビュー C# データ グリッド ビュー Sep 03, 2024 pm 03:32 PM

C# データ グリッド ビューのガイド。ここでは、SQL データベースまたは Excel ファイルからデータ グリッド ビューをロードおよびエクスポートする方法の例について説明します。

C# のパターン C# のパターン Sep 03, 2024 pm 03:33 PM

C# のパターンのガイド。ここでは、C# のパターンの概要と上位 3 種類について、その例とコード実装とともに説明します。

C# シリアル化 C# シリアル化 Sep 03, 2024 pm 03:30 PM

C# シリアル化のガイド。ここでは、C# シリアル化オブジェクトの導入、手順、作業、例についてそれぞれ説明します。

C# での Web サービス C# での Web サービス Sep 03, 2024 pm 03:32 PM

C# での Web サービスのガイド。ここでは、C# での Web サービスの概要について、テクノロジの使用、制限、例を交えて説明します。

C# の素数 C# の素数 Sep 03, 2024 pm 03:35 PM

C# の素数ガイド。ここでは、C# における素数の導入と例を、コードの実装とともに説明します。

See all articles