الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في بدء تشغيل البرنامج مع الويندوز

مغلق
بدأه rcweb في 14 ديسمبر 2007 · 5 رد · 739 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اخواني الاعزاء لدي مشكلة وارجو ان اجد الحل لديكم.

اريد ان يعمل برنامجي مع بدء تشغيل الويندوز

استخدمت الكود التالي في موديول وهو من برمجة الاخ رغيد الطيب :

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 عند بدء تشغيل الويندوز مع ان مسار برنامجي متواجد بشكل صحيح وكامل في الريجستري ؟؟؟

يعني تقدروا تقولوا انه بيشيك على الكلمة الاولى من اسم المجلد ولا يطابق الاسم كاملا هذا حسب مافهمت؟؟

فهل يوجد حل ؟

تم تعديل هذه المشاركة بواسطة rcweb في 14 ديسمبر 2007 في 13:26

#2

الأخ الفاضل ...

استبدل

RunWhenStartup App.EXEName, App.Path & "\" & App.EXEName & ".exe"

بالتالى:

RunWhenStartup App.EXEName, Chr$(34) & App.Path & "\" & App.EXEName & ".exe" & Chr$(34)

راجع أيضاً: تشغيل البرنامج كـ System Service

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#3

شكرا

تم تعديل هذه المشاركة بواسطة anossof في 14 ديسمبر 2007 في 15:29

MV10CGB0.GIF
#4

فعلا عمل الكود الذي كتبته اخي بشكل صحيح

جزاك الله خيرا اخي المهندس اسامه

بودي لو شرحت لي سبب عدم عمل الكود الذي كتبته والتعديل الذي اضافه الكود الذي تكرمت في كتابته حيث يهمني ان اعرف طريقة عمل الكود.

شكرا جزيلا

#5

الاخ الفاضل ...

اضفت علمتى تنصيص "..." حول الكود، بمعنى انه بدلا من ان يكون السطر

C:\Program Files\MSN Gaming Zone

اصبح

"C:\Program Files\MSN Gaming Zone"

وعلامتى التنصيص لتجنب استخدام المسافة كفاصل.

وحيث ان علامتى التنصيص من الرموز المستخدمة فى VB لتحديد النصوص، فلن تستطيع استخدامها داخل النص بطريقة مباشرة.

كود ASCII الخاص بها = 34، لذا استخدمت الدالة Chr لتظهرها

شكراً

Eng. Usama El-Mokadem

Nothing is impossible, the word impossible itself says that: I M - Possible

#6

شكرا اخي الكريم على التوضيح

تصدق انا اتوقعت هالشيء لاني في مفتاح Run في الريجستري حيث قائمة بدأ التشغيل وجدت بعض البرامج تضع علامة تنصيص وحاولت ادخال علامة التنصيص بطرق كثيرة للمسار لكن لم انجح في ذلك.

والكود الذي تفضلت بكتابته حل هذه المشكلة.

جزاك الله خيرا

هذا الموضوع مغلق.

مواضيع مشابهة