PDA

View Full Version : قرار دادن برنامه در Start Up



nasim bahari
دوشنبه 25 مرداد 1389, 10:17 صبح
سلام دوستان.........

من توی تالار جستجو کردم و برای قرار دادن برنامه در Start UP ویندوز، این روال رو پیدا کردم........

اما جواب نمیده.......

مشکل از کجاست.............

دوستان لطف می کنند، یه نمونه برنامه برام بزارن............

متشکرم.....



Public Function RunInStartup()
regkey = Registry.LocalMachine.CreateSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run")
regkey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", True)
regkey.SetValue("1", Application.StartupPath & "\Phone_Book.exe")
regkey.Close()
End Function

Saman_12
دوشنبه 25 مرداد 1389, 10:41 صبح
اینو امتحان کن جواب میده :


Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
key.SetValue(My.Application.Info.AssemblyName, Application.StartupPath & "\" & My.Application.Info.AssemblyName & ".exe", RegistryValueKind.String)

Saman_12
دوشنبه 25 مرداد 1389, 11:30 صبح
اینم یه روش دیگه که توی vb6 کار میکرد توی دات نت نمی دونم شاید کار کرد(این کد تبدیل شده به دات نت می باشد.) اینا زیر Public Class :


Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByVal Reserved As Integer, ByVal lpClass As String, ByVal dwOptions As Integer, ByVal samDesired As Integer, ByRef lpSecurityAttributes As SECURITY_ATTRIBUTES, ByRef phkResult As Integer, ByRef lpdwDisposition As Integer) As Integer
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal Reserved As Integer, ByVal dwType As Integer, ByRef lpData As IntPtr, ByVal cbData As Integer) As Integer
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal ByValhKey As Integer, ByVal lpSubKey As String, ByVal ByValulOptions As Integer, ByVal samDesired As Integer, ByVal phkResult As Integer) As Integer

Const REG_OPTION_VOLATILE As Short = 1 ' Key is not preserved when system is rebooted
Const REG_OPTION_NON_VOLATILE As Short = 0 ' Key is preserved when system is rebooted

Const HKEY_CURRENT_USER As Integer = &H80000001
Const HKEY_CLASSES_ROOT As Integer = &H80000000
Const HKEY_DYN_DATA As Integer = &H80000006
Const HKEY_LOCAL_MACHINE As Integer = &H80000002
Const HKEY_USERS As Integer = &H80000003

Const KEY_WRITE As Integer = &H20006
Const REG_SZ As Short = 1
Const KEY_ALL_ACCESS As Integer = &HF003F
Const REG_BINARY As Short = 3
Const REG_DWORD As Short = 4
Const KEY_READ As Integer = &H20019

Private Structure SECURITY_ATTRIBUTES
Dim nLength As Integer
Dim lpSecurityDescriptor As Integer
Dim bInheritHandle As Integer
End Structure

اینا رو هم توی هر رویدادی که دوست داشتید :


On Error Resume Next
Dim hKey As Integer
Dim secattr As SECURITY_ATTRIBUTES
Dim subkey As String
Dim neworused As Integer
Dim stringbuffer1 As String
Dim Retval As Integer

subkey = "Software\Microsoft\Windows\CurrentVersion\Run"
secattr.nLength = Len(secattr)
secattr.lpSecurityDescriptor = 0
secattr.bInheritHandle = 1
Retval = RegCreateKeyEx(HKEY_CURRENT_USER, subkey, 0, "", 0, KEY_WRITE, secattr, hKey, neworused)

If Retval <> 0 Then
Exit Sub
End If

stringbuffer1 = My.Application.Info.DirectoryPath & "\" & My.Application.Info.AssemblyName & ".exe" & vbNullChar

Retval = RegSetValueEx(hKey, My.Application.Info.AssemblyName, 0, REG_SZ, stringbuffer1, Len(stringbuffer1))
Retval = RegCloseKey(hKey)

nasim bahari
دوشنبه 25 مرداد 1389, 11:36 صبح
ممنونم.......سامان جان

همون کد اول کارم رو انجام میده........البته کد دوم رو امتحان نکردم.....فکر می کنم استفاده از کد اول بهینه تر باشه..........

به هر حال ، حال دادی......( نلسون ماندلا )

بازم ممنون

nasim bahari
چهارشنبه 27 مرداد 1389, 15:24 عصر
سلام سامان جان.......

کد اولی که گذاشتی برای بار اول کار کرد..........یعنی با لود دوباره ویندوز برنامه اجرا شد......در ریجیستری ، کلید مورد نظر رو به صورت دستی حذف کردم.......حالا دیگه اون قطعه کد کار نمی کنه و کلید رو دوباره نمی سازه...چرا ؟

Saman_12
پنج شنبه 28 مرداد 1389, 02:08 صبح
خوب خیلی واضح هست توی تعریف key آدرس رو Run دادی خوب وقتی این آدرس وجود نداشته باشه چه جوری میشه توی اون مقداری نوشت ؟ شما به یک کلید قبل برگردید و اونجا یه کلید به نام Run بسازید.تازه گیریم اون آدرس وجود داشته باشه شما با اون کد داری یک مقدار داده توی اون کی ذخیره میکنی نه یک کلید.


Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion", True)
key.CreateSubKey("Run")

کسی نمی تونه کلید CurrentVersion رو پاک کنه چون تنظیمات اکسپلورر و خیلی چیزایه دیگه اونجا هست.