スタートアップにEXEを登録 <TOP>
Windows起動時に起動させるEXEをレジストリに登録します。
RegCreateKeyEx レジストリキーを作成
RegSetValueEx レジストリキーの値を設定
RegCloseKey レジストリのハンドルを解放
FormatMessage メッセージの文字列を指定の書式で取得
「開く」で、スタートアップに登録するEXEを選択し、「登録実行」でレジストリに書き込みます。
レジストリエディタで確認をしています。
'================================================================ '= スタートアップにEXEを登録
'= (SetStartup.bas) '================================================================ #include "Windows.bi" Type SECURITY_ATTRIBUTES nLength As Long lpSecurityDescriptor As Long bInheritHandle As Long End Type ' レジストリキーを作成 Declare Function Api_RegCreateKeyEx& Lib "advapi32" Alias "RegCreateKeyExA" (ByVal hKey&, ByVal lpSubKey$, ByVal Reserved&, ByVal lpClass$, ByVal dwOptions&, ByVal samDesired&, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult&, lpdwDisposition&) ' レジストリキーの値を設定 Declare Function Api_RegSetValueEx& Lib "advapi32" Alias "RegSetValueExA" (ByVal hKey&, ByVal lpValueName$, ByVal Reserved&, ByVal dwType&, lpData As Any, ByVal cbData&) ' レジストリのハンドルを解放 Declare Function Api_RegCloseKey& Lib "advapi32" Alias "RegCloseKey" (ByVal hKey&) ' メッセージの文字列を指定の書式で取得 Declare Function Api_FormatMessage& Lib "Kernel32" Alias "FormatMessageA" (ByVal dwFlags&, lpSource As Any, ByVal dwMessageId&, ByVal dwLanguageId&, ByVal lpBuffer$, ByVal nSize&, Arguments&) #define ERROR_SUCCESS &H0 '正常終了の戻り値を示す #define HKEY_CURRENT_USER -2147483647 '現在Windowsにログインしているユーザーの情報 #define REG_OPTION_NON_VOLATILE 0 '設定内容をレジストリに保存 #define REG_BINARY 3 'バイナリデータ #define REG_DWORD 4 '32ビットの数値 #define REG_DWORD_BIG_ENDIAN 5 'ビッグエンディアン形式の32ビット数値 #define REG_DWORD_LITTLE_ENDIAN 4 'リトルエンディアン形式の32ビット数値(REG_DWORDと同等) #define REG_EXPAND_SZ 2 '展開前の環境変数への参照が入ったヌル終端文字列 #define REG_LINK 6 'Unicodeシンボリックリンク #define REG_MULTI_SZ 7 'ヌル終端文字列の配列 #define REG_QWORD 11 '64ビット数値 #define REG_QWORD_LITTLE_ENDIAN 11 'リトルエンディアン形式の64ビット数値(REG_QWORDと同等) #define REG_RESOURCE_LIST 8 'デバイスドライバのリソースリスト #define REG_SZ 1 'ヌル終端文字列 #define KEY_SET_VALUE &H2 'レジストリの値を設定する #define FORMAT_MESSAGE_FROM_SYSTEM &H1000 'システムメッセージリソースを検索する Var Shared Edit1 As Object Var Shared Button1 As Object Var Shared Button2 As Object Edit1.Attach GetDlgItem("Edit1") : Edit1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 Var Shared FileName As String '================================================================ '= Startupに設定するファイル名 '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() FileName = WinOpenDlg("ファイルのオープン", "*.exe", "アプリケーション(*.exe)", 0) If FileName <> Chr$(&H1B) Then Edit1.SetWindowText FileName End If End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var sa As SECURITY_ATTRIBUTES Var SubKey As String Var MSG As String Var sError As String Var Result As Long Var Disposition As Long Var Ret As Long SubKey = "Software\Microsoft\Windows\CurrentVersion\Run" 'レジストリにキーを作成 Ret = Api_RegCreateKeyEx(HKEY_CURRENT_USER, SubKey, 0, ByVal 0, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE, sa, Result, Disposition) If Ret = ERROR_SUCCESS Then FileName = Edit1.GetWindowText If FileName = "" Then EXit Sub a = 0 For b = 1 To Len(FileName) c = Asc(Mid$(FileName, b, 1)) If c > &H39 Or c < &H30 Then a = 1 : Exit For Next If a = 1 Then Ret = Api_RegSetValueEx(Result, "Startup", 0, REG_SZ, FileName, Len(FileName) + 1) End If If Ret <> 0 Then 'エラーコードからエラーメッセージを取得 sError = String$(260, Chr$(0)) Ret = Api_FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0, Ret, 0, sError, Len(sError), 0) A% = MessageBox(GetWindowText, "エラー!", 0, 2) Else MSG = MSG & "「" & SubKey & "」に" & Chr$(13, 10) & Chr$(13, 10) MSG = MSG & FileName & " を登録しました!" A% = MessageBox(GetWindowText, MSG, 0, 2) End If Else 'エラーコードからエラーメッセージを取得 sError = String$(260, Chr$(0)) Ret = Api_FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, ByVal 0, hKey, 0, sError, Len(sError), 0) A% = MessageBox(GetWindowText, sError, 0, 2) End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End