1. 程式人生 > >如何讓程式開機自動啟動

如何讓程式開機自動啟動

當我們在window下編寫自己的程式時,也可以讓自己編寫的程式在電腦開機時自動執行,這主要是修改windows裡的登錄檔資訊,所有開機自動啟動的程式的一些資訊都放在登錄檔中的某一資料夾下。我們只需在特定的資料夾下寫入我們的程式資訊即可。

關於登錄檔  我們可以在鍵盤上同時按下 win+r 鍵,在執行串列埠中輸regedit  回車即可看到登錄檔(可以理解為一個大樹,記錄著系統中的資訊),我們點選左邊資料夾,點選順序為:Software\\Microsoft\\Windows\\CurrentVersion\\Run,在這個資料夾中存放的便是隨機啟動的 程式的資訊。舉個例子:當我們使用某個電腦優化軟體進行電腦優化時,他會檢測到需要開機優化的專案,即有些軟體不必要開機就啟動,修改的就是這個檔案中的一些資訊。

首先我們解釋下所用到的函式的含義:

一 

RegOpenKeyEx()

函式功能描述:開啟一個指定的登錄檔鍵

原型

LONG RegOpenKeyEx(

    HKEY hKey, // 需要開啟的主鍵的名稱

    LPCTSTR lpSubKey, //需要開啟的子鍵的名稱

    DWORD ulOptions, // 保留,設為0

    REGSAM samDesired, // 安全訪問標記,也就是許可權

    PHKEY phkResult // 得到的將要開啟鍵的控制代碼

)

Parameters

引數:

hKey

入參,標識當前被 RegCreateKeyEx 或RegOpenKeyEx開啟的登錄檔鍵的控制代碼,或者是以下預定義的控制代碼

HKEY_CLASSES_ROOT

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

lpSubKey

入參,該引數指向一個字串,該字串用來儲存將要開啟的登錄檔名稱。如果這個引數是空,或者是一個指向空串的指標,該函式將會開啟一個由hKey所定義的鍵,在此種情況下,該函式不會關閉舷牆已經開啟的控制代碼。

ulOptions

入參,保留,設定為0

samDesired

入參。標識開啟登錄檔的權力,如果該引數的安全描述符不容許當前程序訪問登錄檔,則該函式會返回失敗。此程式中我們使用寫入引數即:KEY_WRITE (0x20006)。

phkResult

出參,指向一個變數的指標,該變數用來儲存開啟登錄檔鍵的控制代碼。如果不再使用返回的控制代碼,則呼叫RegCloseKey來關閉它。

返回值:

ERROR_SUCCESS表示該函式執行成功,非零值表示該函式執行失敗。想要獲得錯誤描述,呼叫FormatMessage函式,並傳入FORMAT_MESSAGE_FROM_SYSTEM引數。

二:

GetModuleFileName(NULL,pFileName, MAX_PATH); 

函式原型獲取當前程序已載入模組的檔案的完整路徑,該模組必須由當前程序載入。

1

2

3

4

5

DWORDGetModuleFileName(

HMODULE  hModule,

LPTSTR  lpFilename,

DWORD  nSize

);

HMODULE hModule: 裝載一個程式例項的控制代碼。如果該引數為NULL,該函式返回該當前應用程式的全路徑。

lpFileName: 是你存放返回的名字的記憶體塊的指標,是一個輸出引數。

DWORD nSize:裝載到緩衝區lpFileName的最大值。

注意:如果想獲得某個正在執行的EXE或者DLL的全路徑可以這樣寫程式碼

GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//注意下緩衝區就行了。


三:

RegSetValueEx():想要設定的登錄檔項下不是預設值,即有名稱值的資料和型別時,可以呼叫RegSetValueEx函式,該函式將在登錄檔項下設定指定值的資料和型別。

LONG RegSetValueEx(

    HKEY hKey,

    LPCTSTR lpValueName,

    DWORD Reserved,

    DWORD dwType,

    CONST BYTE *lpData,

    DWORD cbData

);

hKey: 一個已開啟項的控制代碼

lpValueName:指向一個字串的指標,該字串包含了欲設定值的名稱。若擁有該值名稱的值並不存在於指定的登錄檔項中,則此函式將其加入到該項。

Reserved:保留值,必須強制為0

dwType: 指定將被儲存的資料型別

lpData: 指向一個緩衝區,該緩衝區包含了欲為指定值名稱儲存的資料。

cbData:指定由lpData引數所指向的資料的大小,單位是位元組。

  以下程式碼時實現讓本程式開機自啟的方法.

我們建立個對話方塊程式,在對話方塊上放一個button,然後在其訊息響應函式中寫如下程式碼:

void CSetAutoRunDlg::OnBnClickedButton1()
{
	// TODO: 在此新增控制元件通知處理程式程式碼
	
	HKEY hKey;   //可以理解為操作登錄檔的控制代碼
   
	//找到系統的啟動項   ,長指標型別是const char * 型別
   LPCTSTR lpRun = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";   
    
   //開啟啟動項Key   
    long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);   
    
	if(lRet == ERROR_SUCCESS)   //開啟成功
    {   
        char pFileName[MAX_PATH] = {0};    //定義陣列存放路徑
        //得到程式自身的全路徑   
        DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);   
        //新增一個子Key,並設定值 // 下面的"test"是應用程式名字(不加字尾.exe)  
        lRet = RegSetValueEx(hKey, "SetAutoRun", 0, REG_SZ, (BYTE *)pFileName, dwRet);   
        //關閉登錄檔   
        RegCloseKey(hKey);   
        if(lRet != ERROR_SUCCESS)   
        {   
            MessageBox("系統引數錯誤,不能完成開機啟動設定");   
        }   
        else  
        {  
            MessageBox("開啟開機啟動成功");   
        }  
       // isrun = 1;  
    }   
}
點選執行後,出現"啟動成功"對話方塊,重啟電腦後,軟體開機啟動(當執行程式時,有的防毒軟體可能會發出注冊表修改的警告,那正是我們的程式在修改登錄檔)

相關推薦

如何程式開機自動啟動

當我們在window下編寫自己的程式時,也可以讓自己編寫的程式在電腦開機時自動執行,這主要是修改windows裡的登錄檔資訊,所有開機自動啟動的程式的一些資訊都放在登錄檔中的某一資料夾下。我們只需在特定的資料夾下寫入我們的程式資訊即可。 關於登錄檔  我們可以在鍵盤上同時按

Inno Setup 打包exe設定程式開機自動啟動

第一種方法:不修改登錄檔 原理是將程式的快捷方式新增到計算機"啟動"資料夾,win7可以 win10沒試過 [Tasks] Name: "startupicon"; Description: "開機啟動"; GroupDescription: "{cm:AdditionalI

Openwrt下設定程式開機自動啟動

轉自http://www.cnyubin.com/?p=364 今天在使用Openwrt時,需要將scp到上面的程式設定為開機自動啟動。按照Linux下設定自動啟動的方法並不有效。後來在官方wiki下發現了介紹文章,具體可見Openwrt下http://wiki.ope

如何VMware Workstation 開機自動啟動虛擬機

vmware workstation首先,進入VMware Workstation的安裝目錄,一般為C:\Program Files (x86)\VMware\VMware Workstation在vmware.exe程序上點右鍵,發送快捷方式到桌面在桌面快捷方式上點右鍵,選屬性,在“目標位置”加入 -x "

Ubuntu新增開機自動啟動程式的方法

1. 開機啟動時自動執行程式 Linux載入後, 它將初始化硬體和裝置驅動, 然後執行第一個程序init。init根據配置檔案繼續引導過程,啟動其它程序。通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的指令碼檔案,可以使init自動啟動其它程式。例如:

C#/WPF程式實現軟體開機自動啟動的兩種方法

C#/WPF程式實現軟體開機自動啟動的兩種方法 方法一:將軟體的快捷方式建立到計算機的自動啟動目錄下(不需要管理員許可權) 1.必要引用 using System; using System.Collections.Generic; using System.Linq; using Sy

C#/WPF程式實現軟體開機自動啟動的兩種常用方法

C#/WPF/WinForm/.NET程式程式碼實現軟體程式開機自動啟動的兩種常用方法函式的示例與例項帶詳細註釋 方法一:將軟體的快捷方式建立到計算機的自動啟動目錄下(不需要管理員許可權) 1.必要引用 using System; using System.Collections.Gen

XenServer 6.2 虛擬機器開機自動啟動的方法

 XenServer 6.2中的虛擬機器預設是不會自動啟動的(據說是為了防止在HA環境中出現某些異常),所以如果母雞(宿主機)異常斷電恢復啟動後,所有的虛擬機器均為關機狀態。 但如果只是單臺XenServer跑若干獨立虛擬機器,還是有必要讓虛擬機器開機自動啟動的。 下面

Android apk程式設定開機自動啟動

1.      建立一個廣播接收器類,繼承BradcastReceiver類。 2.      在AndroidMainfest.xml檔案中註冊 ①  宣告許可權: <uses-permission android:name=”android.permission.

Ubuntu新增和設定開機自動啟動程式的方法

                2018-02-01  幸福人生h... &nb

開機自動啟動自己編寫的QT程式

建立好QT執行環境後,要執行自己編寫的基於QT/E的圖形介面程式,一般需要在終端輸入命令才能執行,並且第一個執行的QT程式要加上  -qws 引數。以下方法可以讓QT程式在開機的時候自動啟動,並作為守護程序在後臺執行。由於QT程式的執行環境需要配置tslib和qt相關的環境

SuSE 設定開機自動啟動程式

在/etc/init.d/boot.local檔案中新增命令。RedHat系統的對應檔案是/etc/rc.d/rc.local。對於Linux系統啟動時自動執行的命令或程式,在rh-basedlinux系統,一般常見是放在/etc/rc.d/rc.local中。但SuSEL

android上怎樣一個Service開機自動啟動

1.首先開機啟動後系統會發出一個Standard Broadcast Action,名字叫android.intent.action.BOOT_COMPLETED,這個Action只會發出一次。2.構造一個IntentReceiver類,重構其抽象方法onReceiveInt

linux驅動模組開機自動載入,以及應用程式開機啟動

第一種方法:相對來說簡單 將測試程式放在/bin底下,然後用vi編輯/etc/init.d/rcS,加上/bin/應用程式名 &,加上&表示後臺執行 這兩個功能的實現都是通過設定啟動指令碼來實現的。啟動指令碼的一般存放路徑是 /etc/init.d/rc

【轉載】如何電腦開機定時啟動某個應用程式

通過在電腦中設定任務計劃可以實現讓電腦在某一時間執行某一軟體,因此對於某些我們經常需要開啟執行的軟體可以設定為定時啟動。具體操作如下:1:按下鍵盤上的組全鍵盤Win+R開啟執行視窗,在開啟的執行視窗中輸

樹莓派開機自動啟動程式

國外的網站上看到有人說,rc.local不能保證每次都正常執行,比較穩妥的方法是在/etc/init.d裡面執行。這點也請後來的網友指點了。 於是把上面的指令碼挪到/etc/init.d/目錄下, sudo chmod 755/etc/init.d/programn

將一個php 程式 新增到linux開機自動啟動

最近遇到一個問題,有一個php的程式需要開機自動啟動,網上主要的有3種辦法,我試了2種 (1)編輯“/etc/rc.local”,把啟動程式的shell命令輸入進去即可(要輸入命令的全路徑),結果失

你的python程式開機啟動

前段時間寫的那個python桌面時鐘的小程式, 今天突發奇想, 能不能讓他開機自動啟動呢 開始選單啟動項實現 1 建立快捷方式 2 直接將快捷方式複製/貼上到開始選單啟動資料夾 開始選單-->

Qt Windows下開機自動啟動自己的程式

void Widget::Readregedit() { QString path; QDir dir; path=dir.currentPath();//在QtCreator中

ubuntu mate 開機自動啟動ssh服務

開機自動啟動 css top con runlevel clas ubun files init 在文件/etc/init/ssh.conf中,有一句 start on filesystem or runlevel [2345] 如果想關閉自動啟動的話,把這一局修改為sta