導航:首頁 > 軟體知識 > 如何應用程序單實例運行

如何應用程序單實例運行

發布時間:2022-11-28 03:13:02

1. 易語言單一實例如何使用(用於只允許運行一個程序)

設置一個全局信號量,字串取長一些,
程序開頭就用這個,,-如果能設置成功,表明當前只有一個實例,不成功表示程序運行過,當前實例結束

2. 怎樣讓Android應用程序只運行一個實例

這個倒是沒聽說過
給你列出Activity的四種啟動模式吧:

1. standard
模式啟動模式,每次激活Activity時都會創建Activity,並放入任務棧中。
2. singleTop
如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建實例)。
3. singleTask
如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。
4. singleInstance
在一個新棧中創建該Activity實例,並讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在於某個棧中,任何應用再激活改Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同一個應用中。

另外:

設置Activity的啟動模式,要在AndroidManifest.xml里對應的標簽設置android:launchMode屬性
android:name=".MyActivity"
android:launchMode="standard" />

3. 如何用Qt寫一個同一時間只能運行一個實例的應用程序

為了使一個應用程序在同一時間只運行一個實例,需要用某種方法在程序啟動時,檢測是否已有正在運行的實例,如果有,則將本次啟動的參數傳遞給前一個實例(例如需要打開的文檔的路徑),如果沒有,則正常啟動。
實現的方法有多種:
1. 用Windows API創建一個互斥量:
#include <windows.h>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);

HANDLE hMutex = CreateMutex(NULL, TRUE, L"YourApp"); // 創建一個互斥量來保證只運行一個實例
if(hMutex != NULL)
{
if(GetLastError() == ERROR_ALREADY_EXISTS)
{

QMessageBox::critical(qApp->activeWindow(),
QObject::tr("An instance of this application has been run!"),
QObject::tr("Only one instance can be run at a time!"));
return 1;
}
}

... // 以下是正常啟動代碼
}
註:如果保險起見,CreateMutex()中的字元串應該用一個GUID來保證其唯一性,Visual Studio中有一個生成GUID的工具,菜單「工具」->「創建GUID」,選擇合適的定義形式,創建並拷貝到剪貼板即可。

此方法的缺點:1.使用了Windows API,不能跨平台;2.不能自動激活前一個實例的窗口。
2. 每次啟動時用Windows API枚舉進程,同時在第一次運行時用SetProp()函數給當前窗口設置屬性,這樣下次啟動時,在枚舉的進程中查找具有這個屬性的窗口,若找到,說明已有實例在運行,將該實例的窗口激活;若未找到則正常啟動。
此方法客服了前一方法的第2個缺點,但過於依賴Windows API函數(似乎還是MFC函數,對Qt程序好像不可行)。有興趣的可以照這個鏈接里的代碼試試
3. 利用QLocalSocket和QLocalServer,基本的思路是:

用程序啟動時首先嘗試去連接一個QLocalServer,如果連接失敗,說明自己是第一個實例,於是創建這么一個QLocalServer,否則將啟動
參數發送給QLocalServer然後退出。第一個實例的QLocalServer在收到後面啟動的實例發來的參數時可以進行處理(例如激活第一個實例
的窗口)。這個鏈接里有詳細的示例代碼供參考。
註:使用QLocalSocket和QLocalServer時,需要把QtNetwork庫包含在項目文件中;
4. 用Qt Solutions里提供的QtSingleApplication類(最簡單的方法,推薦)
從ftp://ftp.qt.nokia.com/qt/solutions/lgpl/

下載QtSingleApplication的源碼包,解壓縮後按照INSTALL.TXT里的說明進行配置和編譯,我選擇編譯成動態庫,這樣下次再用,
只需引用頭文件和lib文件即可,比較方便。
用法很簡單,只需把原來main()里的QApplication對象換成QtSingleApplication對象,調用一下isRunning()方法進行判斷即可。
// 原來的代碼
int main(int argc, char **argv)
{
QApplication app(argc, argv);

MyMainWidget mmw;

mmw.show();
return app.exec();
}

// 修改後的代碼
int main(int argc, char **argv)
{
QtSingleApplication app(argc, argv);

if (app.isRunning())
return 0;

MyMainWidget mmw;
mmw.show();
return app.exec();
}
注1:QtSingleApplication的實現方法基本上也是利用QLocalServer和QLocalSocket,所以同樣依賴於QtNetwork庫;
注2:以上代碼只展示了QtSingleApplication最簡單的用法,這個類還有更多用法,請參考源碼包中帶的範例和文檔。
QtSingleApplication的幾種用法(直接使用源碼,編譯成動態庫等)可以參考這個鏈接:Qt程序只運行一個實例

4. VC中只允許一個程序實例運行的幾種簡單實現方式 詳細�0�3

在許多的應用程序中,有時候只能允許一個程序實例運行,當發現一個程序
實例已經運行給出提示或者激活前面運行的實例,下面針對以上情況,給出
幾種簡單實現方式。
// 方法一:API
if ( ::FindWindow(NULL,」您主窗口的標題」) ){::MessageBox(NULL,"程序已經運行!",
g_strTitleText,MB_OK | MB_ICONEXCLAMATION);
return FALSE;}
// 方法二:互斥對象
HANDLE handle = NULL;
CString strtemp = _T("");
strtemp += g_strTitleText;// g_strTitleText 窗口的標題
strtemp += _T("_HOMIVIS");// 再加一些自己的信息以免沖突,這樣更加安全
handle = CreateMutex(NULL,TRUE,(LPCSTR)strtemp);
if (handle != NULL){if (::GetLastError() == ERROR_ALREADY_EXISTS ){::MessageBox(NULL,"程序已經運行!",g_strTitleText,
MB_OK | MB_ICONEXCLAMATION);
return FALSE;}}
其實方法還有很多,以上兩種是比較簡單的,只是起到拋磚引玉的作用。在VC++ 中實現如下:

5. linux桌面應用怎麼啟動單實例

本文主要講述的是linux中如何給應用程序創建一個快速啟動圖標,話不多說,我們來看實際的操作步驟:
本文的實例是給celipse創建一個啟動圖標
1、我們需要通過下列命令,來創建一個啟動的腳本:
gedit /usr/share/applications/eclipse.desktop

2、將下列內容復制到文件中
[Desktop Entry]
Encoding=UTF-8
Name=Eclipse
Comment=Eclipse IDE
Exec=/usr/local/android/eclipse/eclipse
Icon=/usr/local/android/eclipse/icon.xpm
Terminal=false
StartupNotify=true
Type=Application
Categories=Application;Development;
說明部分:
Exec :這個是應用程序可執行文件的目錄
Icon :這個是圖標的目錄
3、然後在applications -> programming 菜單中就可以找到你所創建的圖標了,然後再右鍵創建一個桌面圖標即可

6. 應用程序只運行一個實例怎麼簡單設置,比如火狐不藉助擴展實現單實例運行,怎麼設置

您好,感謝您對火狐的支持

因為火狐瀏覽器本身沒有限定進程數的功能,因此目前暫時也沒有辦法鎖定系統中只有一個火狐瀏覽器實例存在,請知曉!
您可以在火狐官方網站下載火狐瀏覽器,在火狐社區了解更多內容。希望我的回答對您有所幫助,如有疑問,歡迎繼續在本平台咨詢。

7. 運行一個應用程序的操作方法有哪幾種

1.雙擊快捷方式圖標(快捷方式圖標可能在桌面、開始菜單欄、快速啟動欄或其它文件夾中)。
2.找到啟動程序所在的文件夾,雙擊啟動圖標。
3.在開始菜單中找開運行,對話框中輸入啟動程序完整的路徑及文件名。
4.在開始--程序--啟動中加入程序,可以在開機時自動運行。
5.打開開始--程序--附件--命令提示符,在提示符後輸入運行文件名回車即可運行。

8. C/C++中 如何只允許運行一個程序實例多列一些方法。

一般來說的辦法就是怎麼想讓第二次運行知道已經有程序在運行了,或者說怎麼能通知第二個程序已經有文件在運行了

例如程序運行後如果程序運行目錄沒有文件a.txt,就在程序運行目錄新建一個文件a.txt,關閉的時候刪除,這樣第二次運行發現已存在了這個文件,說明程序已經在運行,故第二次運行直接退出

例如第一個運行程序用系統函數在本地監聽一個socket埠,第二次運行程序發現這個埠已經被佔用或者能連接,就知道已經有程序在運行了(例如smplayer就這樣搞的)

例如第一個運行的程序在注冊表某個地方寫入一個1,退出時寫入0,第二次運行的程序發現注冊表這個地方是1就退出,如果是0就可以繼續運行了,也就是其實是第一次運行

反正無論什麼辦法,具體要看你覺得怎麼樣合適才行的呢。還可以去找系統的進程列表,還可以測試某些環境變數啊,反正方法是很多的是死的,人是活的。

9. C# WinForm 程序如何只允許運行一個實例

C#禁止應用程序同時運行的方法
using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace SingleProcessStart
{
static class Program
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
//
//使用STAThread屬性將程序的默認線程模型指定為單線程模型。
//注意,線程模型隻影響使用COM interop的應用程序,將這個屬性應用於不使用COM interop的程序將不會產生任何效果。
[STAThread]
//[MTAThreadAttribute]
static void Main()
{
////原始
//Application.EnableVisualStyles();
//Application.(false);
//Application.Run(new Form1());

//方法一,使用線程互斥
//bool createdNew = false;
//System.Threading.Mutex mutex = new System.Threading.Mutex(true, "OnlyOnceTime", out createdNew);
//if (createdNew)
//{
// Application.EnableVisualStyles();
// Application.(false);
// Application.Run(new Form1());
//}
//else
//{
// MessageBox.Show("程序已經運行!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
//}

//方法二,使用API實現
/*
* 關於方法二的調試,需要注意的是要將項目--屬性--調試,選擇啟用外部程序,選擇到你的EXE文件,然後先開啟你的EXE文件
* 否則在調試時.NET默認會使用vshost.exe的宿主進程(宿主進程隨.NET啟動而啟動),而此宿主進程在外部無法啟用,因此永遠是唯一的
*/
System.Diagnostics.Process p = GetRunningInstance();
if (p != null) //已經有應用程序副本執行
{
HandleRunningInstance(p);
}
else //啟動第一個應用程序
{
Application.EnableVisualStyles();
Application.(false);
Application.Run(new Form1());
}
}

//以下為方法二調用API代碼
private const int WS_HIDE = 0;//窗口隱藏
private const int WS_SHOWNORMAL = 1;//窗口處於正常狀態
private const int WS_SHOWMIN = 2;//窗口處於最小化狀態
private const int WS_SHOWMAX = 3;//窗口處於最大化狀態

/// <summary>
/// 顯示窗口
/// </summary>
/// <param name="hWnd">句柄</param>
/// <param name="cmdShow">顯示模式</param>
/// <returns></returns>
[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);

[System.Runtime.InteropServices.DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);

/// <summary>
/// 查找窗口的句柄
/// </summary>
/// <param name="className">指向包含了窗口類名的空中止(C語言)字串的指針;或設為零,表示接收任何類</param>
/// <param name="titleName">指向包含了窗口文本(或標簽)的空中止(C語言)字串的指針;或設為零,表示接收任何窗口標題</param>
/// <returns>句柄</returns>
[System.Runtime.InteropServices.DllImport("User32.dll", EntryPoint = "FindWindow")]
public static extern int FindWindow(string className, string titleName);

/// <summary>
/// 獲取應用程序進程實例,如果沒有匹配進程,返回Null
/// </summary>
/// <returns>返回當前Process實例</returns>
public static System.Diagnostics.Process GetRunningInstance()
{
//獲取當前進程
System.Diagnostics.Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();

//獲取當前運行程序完全限定名
string currentFileName = currentProcess.MainMole.FileName;

//獲取進程名為ProcessName的Process數組。
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName(currentProcess.ProcessName);

//遍歷有相同進程名稱正在運行的進程
foreach (System.Diagnostics.Process process in processes)
{
if (process.MainMole.FileName == currentFileName)
{
if (process.Id != currentProcess.Id)//根據進程ID排除當前進程
return process;//返回已運行的進程實例
}
}
return null;
}

/// <summary>
/// 獲取應用程序句柄,設置應用程序前台運行,並返回bool值
/// </summary>
public static bool HandleRunningInstance(System.Diagnostics.Process instance)
{
IntPtr intPtr = new IntPtr(instance.MainWindowHandle.ToInt32() == 0 ?
FindWindow(null, "Form1") : instance.MainWindowHandle.ToInt32());

//使窗口最大化
ShowWindowAsync(intPtr, WS_SHOWMAX);

//設置前台進程為已運行的進程,而現有進程繼續執行至進程結束(在這里跑完MAIN函數就結束掉了)
return SetForegroundWindow(instance.MainWindowHandle);
}

/// <summary>
/// 獲取窗口句柄,設置應用程序前台運行,並返回bool值,重載方法
/// </summary>
/// <returns></returns>
public static bool HandleRunningInstance()
{
System.Diagnostics.Process p = GetRunningInstance();
if (p != null)
{
HandleRunningInstance(p);
return true;
}
return false;
}
}
}

10. 如何啟動、運行、打開一個應用程序

在電腦中所有的工作都是由一個個程序來完成的,不同的工作由不同的程序或軟體來完成;

Windows是一個窗口操作系統,運行一個程序就會打開一個相應的窗口,各項工作將會在這個窗口中進行,如何打開或者運行一個程序呢?

1、找到所要運行的應用程序,可以根據名稱(名字),或者圖標來找;

1)在桌面上的圖標里尋找,許多的程序安裝以後會將運行自己的快捷方式,放到桌面上,快捷方式是一個帶箭頭的小圖標,雙擊這個圖標就會打開它所對應的程序;

2)在“開始”菜單中尋找,單擊任務欄左邊的“開始”按鈕,就會彈出一個菜單,裡面有一項“所有程序”,

滑鼠移過去,會變藍同時出現下一級菜單,順著藍色平平的移過去就進入到程序菜單,裡面有許多的菜單項,每一項就代表一個應用程序,單擊一個菜單項,就會啟動相應的程序;

3)開始菜單中有許多項目,查找時注意名稱的意思以及圖標,並且單擊就可以運行,一般彩色的圖標代表了運行應用程序,而一個卸載的圖標則是刪除應用程序(千萬別亂點);

4)在文件夾中尋找,用戶的文件一般放在“我的文檔”文件夾中,也可以在“我最近的文檔”中尋找;

5)如果找不著自己的文件,可以使用開始菜單中的“搜索”命令,按提示一步一步操作就可以了;

2、常用程序的位置

1)“我的電腦”、“我的文檔”、“回收站”、上網的IE瀏覽器、“網上鄰居”在桌面上,雙擊就可以運行;

2)大多數應用程序都在開始菜單的所有程序里頭,有一個菜單選項,找彩色圖標點擊;

3)“記事本”、“畫圖”和“寫字板”都在“開始”菜單的“所有程序”的“附件”里,注意移動滑鼠時看著藍色,平平地移動,別亂點;

3、練習

1)最小化所有窗口,數一下桌面有多少個圖標,有多少是帶箭頭的快捷方式;

2)在桌面上找一個快捷方式,雙擊運行這個程序,成功後在關閉它,再試一個;

3)在開始菜單中找到“記事本”程序項,單擊運行,成功後關閉它,如果出現是否保存的提示,選“否”,同樣再運行“畫圖”;

4)在“附件”中打開再關閉寫字板、計算器;

5)在“開始”菜單中單擊“搜索”,看一下界面;

本節學習了如何啟動、運行、打開一個應用程序,想了解更多相關信息,請繼續關注本欄目。

閱讀全文

與如何應用程序單實例運行相關的資料

熱點內容
騰訊的程序員屬於什麼部門 瀏覽:751
微店的小程序授權後怎麼退出 瀏覽:615
手機怎麼排程序 瀏覽:304
程序中的ad值變化怎麼處理 瀏覽:661
駕駛技術哪個專業好 瀏覽:763
數控機床如何在mdi模式下刷新程序 瀏覽:667
緊辰產品怎麼樣 瀏覽:847
怎麼把產品推銷到海外 瀏覽:93
附近哪裡有花鳥市場圖片 瀏覽:584
南京小程序需要什麼證件 瀏覽:988
如何畫技術路線圖視頻 瀏覽:398
63680部隊有哪些技術工作 瀏覽:744
淘寶雙十一數據統計在哪裡看 瀏覽:506
半掛車二手車市場哪個最好 瀏覽:169
非私有化農貿市場怎麼改造 瀏覽:911
開什麼快遞代理點好 瀏覽:386
精確管理與信息融合有哪些缺點 瀏覽:698
數據集成平台干什麼 瀏覽:60
抖音上怎麼加西瓜小程序 瀏覽:228
本地交易手機注意什麼 瀏覽:925