1. 程式人生 > >C# 實現程式只啟動一次(多次執行啟用第一個例項,使其獲得焦點,並在最前端顯示)

C# 實現程式只啟動一次(多次執行啟用第一個例項,使其獲得焦點,並在最前端顯示)

直接上程式碼

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace dongri
{
    static class Program
    {
        /// <summary>
        ///
該函式設定由不同執行緒產生的視窗的顯示狀態。
/// </summary> /// <param name="hWnd">視窗控制代碼</param> /// <param name="cmdShow">指定視窗如何顯示。檢視允許值列表,請查閱ShowWlndow函式的說明部分。</param> /// <returns>如果函式原來可見,返回值為非零;如果函式原來被隱藏,返回值為零。</returns> [DllImport("User32.dll")] private
static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow); /// <summary> /// 該函式將建立指定視窗的執行緒設定到前臺,並且啟用該視窗。鍵盤輸入轉向該視窗,併為使用者改各種可視的記號。系統給建立前臺視窗的執行緒分配的許可權稍高於其他執行緒。 /// </summary> /// <param name="hWnd">將被啟用並被調入前臺的視窗控制代碼。</param> /// <returns>如果視窗設入了前臺,返回值為非零;如果視窗未被設入前臺,返回值為零。</returns>
[DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int WS_SHOWNORMAL = 1; /// <summary> /// 應用程式的主入口點。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Process instance = RunningInstance(); if (instance == null) { Application.Run(new MainForm()); } else { HandleRunningInstance(instance); } } /// <summary> /// 獲取正在執行的例項,沒有執行的例項返回null; /// </summary> public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName(current.ProcessName); foreach (Process process in processes) { if (process.Id != current.Id) { if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName) { return process; } } } return null; } /// <summary> /// 顯示已執行的程式。 /// </summary> public static void HandleRunningInstance(Process instance) { ShowWindowAsync(instance.MainWindowHandle, WS_SHOWNORMAL); //顯示,可以註釋掉 SetForegroundWindow(instance.MainWindowHandle); //放到前端 } } }

相關推薦

C# 實現程式啟動執行啟用第一例項,使獲得焦點,前端顯示

直接上程式碼 using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq;

c# 程式只能執行(執行只能開啟同一個程式) 激活第一例項,使獲得焦點,前端顯示.

防止程式執行多個例項的方法有多種,如:通過使用互斥量和程序名等.而我想要實現的是:在程式執行多個例項時啟用的是第一個例項,使其獲得焦點,並在前端顯示. 主要用到兩個API 函式: ShowWindowAsync 該函式設定由不同執行緒產生的視窗的顯示狀態。SetFore

winform 應用程式 啟動

winform 應用程式只啟動一次 思路:捕獲系統程序,是否和當前程序有一致的 引用程式集:using System.Diagnostics; static class Program { /// <summary>

C#實現例項類訪問呼叫

C#簡單寫法如下: public  class  Singleton {      private  static  Singleton _instance =  n

C# 避免程式重複啟動啟動

{bool requestInitialOwnership =true;bool mutexWasCreated;Mutex m =new Mutex(requestInitialOwnership,"MyMutex",out mutexWasCreated);if(!mutexWasCreated)    

用異或實現查詢出現的數字

C語言中我對按位異或這種運算不太懂,通過這道題熟悉了一些相關的運算以及基本性質。 題目如下: 一個數組中只有兩個數字是出現一次,其他所有數字都出現了兩次,請找出這兩個數字。 首先對於這樣一道題我是具

【leetcode】Python實現-136.出現的數字

136.只出現一次的數字 描述 給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。 說明: 你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎? 示例 1:

C++實現程式開機自啟動

可以採用以下方式實現自啟動: //拷貝到系統目錄 TCHAR TempPath[MAX_PATH]; CString temp; ::GetSystemDirectory(TempPath ,MAX_PATH); temp = TempPath; temp = temp

C#應用程式允許執行一個例項執行的時候啟用當前例項顯示介面

  很多時候,我們開發的程式,需要單例執行的的功能,即整個應用程式只允許同時執行最多一個例項,重複執行的時候,啟用當前實力,顯示其介面。   在C#程式中,其解決方案有多重,可以參照Charles Chen 的C#程式只允許執行一個例項的解決方案一文。   

Java+Selenium3框架設計篇6-如何解決條類下用例執行啟動瀏覽器的問題

       前面我們實現了在setUp方法中新增登入的用例。今天,還是為了解決我們遺留的問題,如果執行多條測試用例,這些用例在不同類檔案下,我們只需要啟動一次瀏覽器,登入一次,然後根據順序去執行多個

c#實現ofd檔案轉圖片功能 執行程式

前言 ofd檔案的作用就是保證資訊能如實的儲存、傳遞、顯示。保證ofd檔案的真實性靠的是簽名;ofd 的顯示需要專用軟體。ofd標準是新的國家標準,應用範圍遠不如pdf;現有瀏覽器不能解析ofd、支援ofd顯示的軟體也寥寥無幾。ofd轉圖片程式下載。     專用軟體讀取ofd過程包括對o

c#實現圖片二值化例子黑白效果

rec con devel 圖片 round amp bsp 操作 spl C#將圖片2值化示例代碼,原圖及二值化後的圖片如下: 原圖: 二值化後的圖像: 實現代碼:using System; using System.Drawing; namespace BMP2G

分離式編譯時 鏈接器工具錯誤 一個變量被定義

效果 include private 可讀性 con lnk2005 可能 ring 生成 在編寫程序時,將類中的函數成員的聲明和定義分開,在頭文件(.h)中進行聲明,在源文件(.cpp)中進行定義 以及具體功能的實現。達到分離式編譯的效果,提高代碼的可讀性。 自己在編寫是

C++ 實現matlab資料歸化函式mapminmax

matlab驗證了我的資料處理方法,今天換成了c++版,實現matlab的mapminmax()函式。程式碼如下: void normalize(float *data) { int datamax = 1; //設定歸一化的範圍 int datamin = 0;

Linux下用C實現域名到IP的轉換域名解析

只需呼叫一個函式即可gethostbyname(),gethostbyname()返回對應於給定主機名的包含主機名字和地址資訊的hostent結構指標。結構的宣告與gethostaddr()中一致。下面是函式原型: Windows平臺下 #include <winsock2.h>

微信下程式返回上執行重新整理一下

  微信小程式提交後返回上一頁,重新整理當前頁面 setTimeout(() => { var pages = getCurrentPages(); // 當前頁面 var beforePage = pages[pages.

C語言程式的模組化——繼承2

在C語言程式的模組化——封裝中,介紹瞭如何使用C語言的結構體來實現一個類的封裝,並通過掩碼結構體的方式實 現了類成員的保護,使公有屬性和私有屬性共存。 現在再談談面向物件的另一個基本特性——繼承。 繼承表示類與類之間的層次關係,這種關係使得某類物件可以繼承另外一類物件的

c++鞏固練習】c++實現日期計算器、日期萬年曆日期類

<pre class="cpp" name="code">#include "Date.h" bool Date::operator==(const Date& d) { return _year==d._year && _month==d._month &&a

Unity3D 利用C#實現簡單的代理模式Delegate委託

Ref: http://www.cnblogs.com/shadow7/p/5892641.html 1、Delegate是什麼? Delegate中文翻譯為“委託”。 C#語言是支援代理的,

表中重複資料去重保留id較小的

查詢店員表w_other_empl中身份證號ss_id重複的數量 select t.ss_id,count(t.ss_id) from w_other_empl t group by ss_id having count(t.ss_id)>1 order by ss_id;