簡體   English   中英

如何從“啟動”文件夾快捷方式檢測啟動?

[英]How to detect launching from a “Startup”-folder shortcut?

我需要在程序CintaNotes中添加“ Windows啟動時運行”選項,但不想犧牲它的“簡潔性”:它是100%可移植的免費軟件,不應在系統中留下任何痕跡。 我想到了從啟動快捷方式自動檢測運行並自動最小化到系統托盤的想法。 有辦法嗎? 我正在使用C ++和原始Winapi。

因此:-不寫入注冊表-沒有命令行參數

謝謝!

UPD:問題不在於如何最小化系統托盤! 問題是程序如何在不使用注冊表和命令行參數的情況下區分正常運行和從啟動文件夾快捷方式運行。

即使您已經解決了問題,我也只想說可以檢測程序是否從快捷方式啟動。 獲得快捷方式路徑后,可以將其與啟動文件夾進行比較。

請參見未公開說明的CreateProcess中的 “檢測是否從快捷方式啟動了可執行文件”部分

您的“清潔度”似乎充其量是人造的。 如果您要告訴用戶在啟動文件夾中創建快捷方式,則說明您已經留下了足跡(老實說,“ myprog.exe”和“ myprog.exe -m”之間沒有什么區別) 。 在這種情況下,有一些比自動嘗試檢測運行位置更容易的方法。

我只需在程序中提供一個菜單選項(“安裝”),然后將軟件安裝到固定磁盤位置(與閃存驅動器相對),包括必需的“程序”條目(“開始”,“所有程序”,CintaNotes)。

作為該過程的一部分(甚至是在安裝之后),您可以讓他們指定“從Windows開始”,然后使用命令行選項為用戶創建啟動文件夾快捷方式,以便您的程序可以判斷它是否以此方式運行。 除非程序可用(即在固定磁盤上,而不是閃存驅動器上),否則不允許“從Windows啟動”是沒有意義的。

您的用戶根本不必擔心創建快捷方式,更不用說帶有參數的快捷方式了。 這使您的程序可以控制其運行方式-兩種模式,“安裝”(最小化啟動)或“不先安裝就運行”(正常啟動)。

諸如查找可執行文件的目錄之類的操作僅由於啟動程序的啟動文件夾項可能是它的快捷方式而無法使用,因此您將沒有該路徑。

我認為這是提出錯誤問題的經典案例。 在回答您的特定問題時,我說:不,沒有辦法說出您是從沒有一些命令行參數的啟動文件夾條目中啟動的。 但是,我以前錯了,只是問我的妻子:-)。 可能有人會知道一種方法。

由於評論不允許有足夠的空間,因此請進行編輯:

你問:

當程序檢測到正在從閃存驅動器中運行“僅當Windows啟動時啟動”選項時,您如何看待它呢? 我想有一種方法可以檢測到這一點。

這是一個好主意,因為在安裝前不允許自動運行是沒有意義的(因為可能沒有閃存驅動器)。 一種可能性:

1 /從Flash運行,您從“ myprog.exe”開始,因為您只需雙擊可執行文件並在正常窗口中運行。 這將選項顯示為“安裝到固定磁盤”,而不顯示為“從Windows啟動”。 在安裝過程中,您可以允許他們將已安裝的副本設置為“從Windows開始”,而不是當前運行的副本。

2 /您可以將已安裝的程序設置為以“ myprog.exe -i”運行,因為您是在“開始/所有程序”中創建該項目的。 這將禁用“安裝到固定磁盤”,但允許您切換“從Windows開始”。 您可以選擇是否要(由用戶)顯式運行以開始正常運行或最小化運行(請參閱(3))。

3 / StartUp中的快捷方式可以是“ myprog.exe -s”(同樣,您可以控制它,因為創建了它)。 這與(2)相同,但是開始最小化(如果(2)無論如何都開始最小化,則(2)和(3)之間沒有區別,也沒有理由使用不同的命令行選項)。

這樣,每個選項可以具有您認為合適的不同行為。

檢查注冊表中的此項。 HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Run並添加一個新的String鍵,並將應用程序的路徑作為值。 並使用NOTIFYICONDATA結構來最大程度地減少托盤上的應用程序。

為什么不使用參數來最小化啟動應用程序,例如:

YourProgram.exe -m

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM