السلام عليكم ورحمة الله وبركاته
اخواني الاعزاء لدي مشكلة وارجو ان اجد الحل لديكم.
اريد ان يعمل برنامجي مع بدء تشغيل الويندوز
استخدمت الكود التالي في موديول وهو من برمجة الاخ رغيد الطيب :
Option Explicit Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long Private Const READ_CONTROL = &H20000 Private Const KEY_QUERY_VALUE = &H1 Private Const KEY_SET_VALUE = &H2 Private Const KEY_CREATE_SUB_KEY = &H4 Private Const KEY_ENUMERATE_SUB_KEYS = &H8 Private Const KEY_NOTIFY = &H10 Private Const KEY_CREATE_LINK = &H20 Private Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL Private Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL Private Const KEY_EXECUTE = KEY_READ Private Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL Private Const RunPath = "Software\Microsoft\Windows\CurrentVersion\Run\" Private Const HKLM = &H80000002 Public Sub DoNotRun(ProgramName As String) Dim hKey As Long Dim Ret As Long Ret = RegOpenKeyEx(HKLM, RunPath, 0, KEY_ALL_ACCESS, hKey) Ret = RegDeleteValue(hKey, ProgramName) RegCloseKey hKey End Sub Public Sub RunWhenStartup(ProgramName As String, ProgramPath As String) Dim hKey As Long Dim Ret As Long Ret = RegOpenKeyEx(HKLM, RunPath, 0, KEY_ALL_ACCESS, hKey) Ret = RegSetValueEx(hKey, ProgramName, 0&, 1, ProgramPath, Len(ProgramPath)) 'LenB(StrConv(TheData, vbFromUnicode)) + 1) RegCloseKey hKey End Sub
واستخدمت التالي في الفورم
RunWhenStartup App.EXEName, App.Path & "\" & App.EXEName & ".exe"
الان يتم تسجيل مسار البرنامج بشكل صحيح في ال Run في الريجستري لكن الغريب في الامر انه مثلا اذا كان اسم مجلد البرنامج في مجلد Program Files مشابه لاسم اي مجلد آخر في مجلد Program Files لا يعمل البرنامج ويقوم بفتح المجلد الآخر بالاكسبلورر. اما عند تغيير اسم المجلد الى اسم غير مشابه يعمل بشكل ممتاز.
اشرح لكم اكثر .. عندي في مجلد Program Files مجلد آخر اسمه Messenger فمثلا لو سميت مجلد برنامجي باسم Messenger Tools فهو لين يعمل وراح يفتح لي مجلد Messenger عند بدء تشغيل الويندوز مع ان مسار برنامجي متواجد بشكل صحيح وكامل في الريجستري ؟؟؟
يعني تقدروا تقولوا انه بيشيك على الكلمة الاولى من اسم المجلد ولا يطابق الاسم كاملا هذا حسب مافهمت؟؟
فهل يوجد حل ؟