اريد كود يعرفني ان البرنامج مثبت بالجهاز ام لا
يعني اريد عمل برنامج يعرفني هل برنامج مثل الأكسيس مثبت بالجهاز ام لا او الفيجول مثلا او الورد او برنامج النورتن مثلا
ارجو التوضيح مع شرح الكود ان امكن
اريد كود يعرفني ان البرنامج مثبت بالجهاز ام لا
يعني اريد عمل برنامج يعرفني هل برنامج مثل الأكسيس مثبت بالجهاز ام لا او الفيجول مثلا او الورد او برنامج النورتن مثلا
ارجو التوضيح مع شرح الكود ان امكن
أنت تحتاج الي WMI.. يمكن أن يتفضل أحد الأخوة ويزدوك بمثال ,,,
yasserstars كتب:اريد كود يعرفني ان البرنامج مثبت بالجهاز ام لايعني اريد عمل برنامج يعرفني هل برنامج مثل الأكسيس مثبت بالجهاز ام لا او الفيجول مثلا او الورد او برنامج النورتن مثلا
ارجو التوضيح مع شرح الكود ان امكن
hazzoom كتب:أنت تحتاج الي WMI.. يمكن أن يتفضل أحد الأخوة ويزدوك بمثال ,,,
أتمني أن يفيدني أحد
الأخ الفاضل ...
بالإضافة إلى ماذكره الأخ hazzoom يمكنك فحص الـ Registry فى العنوان التالى
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall]
فغالباً عند تثبيت برنامج يقوم برنامج التثبيت بوضع Key (يحتوى بيانات "مثل الأسم - الإصدار - تاريخ التثبيت - المسار ... الخ" ليمكن إزالت Uninstall البرنامج فيما بعد إذا تطلب ذلك)، ويقوم بإزالت هذا الـ Key عند إزالت البرنامج، فيمكنك فحص بيانات هذا الـ Key من مسجل النظام Registry وفحص قيمة DisplayName مثلاً
فمثلاً :
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 2000]
"DisplayName"="Microsoft SQL Server 2000"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Microsoft SQL Server 2005]
"DisplayName"="Microsoft SQL Server 2005"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Visual Studio 6.0 Enterprise Edition]
"DisplayName"="Microsoft Visual Studio 6.0 Enterprise Edition"
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90110409-6000-11D3-8CFE-0150048383C9}]
"DisplayName"="Microsoft Office Professional Edition 2003"
"DisplayVersion"="11.0.7969.0"شكراً
تم تعديل هذه المشاركة بواسطة Eng. Usama El-Mokadem في 1 يناير 2008 في 11:27
Nothing is impossible, the word impossible itself says that: I M - Possible
أشكرك أخي أسامة
وارجو منك ان توضحها ببرنامج لان الكود مش عارف أوظفة
السلام عليكم
افتح مشروع جديد واضف Command1 & List1
هذا هو ترجمة ما قاله الأخ أسامة الى كود
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" ( _ ByVal hKey As Long, _ ByVal lpSubKey As String, _ phkResult As Long) As Long Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" ( _ ByVal hKey As Long, _ ByVal dwIndex As Long, _ ByVal lpName As String, _ ByRef lpcbName As Long, _ ByVal lpReserved As Long, _ ByVal lpClass As String, _ ByRef lpcbClass As Long, _ ByRef lpftLastWriteTime As Long) As Long Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" ( _ ByVal hKey As Long, _ ByVal lpValueName As String, _ ByVal lpReserved As Long, _ ByRef lpType As Long, _ ByRef lpData As Any, _ ByRef lpcbData As Long) As Long Const HKEY_LOCAL_MACHINE = &H80000002 Const ERROR_NO_MORE_ITEMS = 259& Private Sub Command1_Click() Dim hKey As Long, Cnt As Long, Ret As Long, lpName As String Dim ChildKey As Long, lpData As String, strValueName As String, iRet As Long strValueName = "DisplayName" If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", hKey) = 0 Then List1.Clear lpName = Space(255) Ret = 255 While RegEnumKeyEx(hKey, Cnt, lpName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & Left$(lpName, Ret), ChildKey lpData = Space(255) iRet = 255 RegQueryValueEx ChildKey, strValueName, 0, 0, ByVal lpData, iRet RegCloseKey ChildKey If iRet <> 255 Then List1.AddItem Left$(lpData, iRet), 0 Else List1.AddItem Left$(lpName, Ret), 0 End If Cnt = Cnt + 1 Ret = 255 lpName = Space(255) Wend End If RegCloseKey hKey End Sub Private Sub List1_DblClick() MsgBox List1.Text End Sub
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
فقط أردت أن أضيف نقطة هنا مهمة
في معظم الأحيان عند تثبيت الMS Office قد لا أثبت الأكسس معه لذلك هذا لا يعني أن الأكسس موجود بالضرورة أو الباوربونت
يمكننا أن نبحث عن البرنامج الذي يقوم بفتح هذا النوع من الملفات مثلا الmdb للأكسس باستعمال الريجيستري دائما. نبحث في المسار
HKEY_CLASSES_ROOT\.mdb اذا وجدنا OpenWithList يعني أنه يوجد برنامج يفتح هذا الامتداد نتأكد من أنه يوجد مجلد تحته هو ميكروسفت أكسس
بالتوفيق للجميع
أشكركم جميعا أخواني الكرام وارجو من الأخ GamingMasteR توضيح شرح الكود
فالكود نجح بالفعل ولكني اريد أفهم الكود ان أمكن ذلك
والف شكر مرة أخري
السلام عليكم
If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall", hKey) = 0 Then
نقوم بانشاء مقبض لمفتاح الرجستري SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall ونخزن المقبض في hKey كي نستخدمه لاحقا
lpName = Space(255) Ret = 255
نقوم بانشاء بفر كي نقرأ فيه اسماء المفاتيح المتفرعة من SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall بحجم 255 بايت
Ret تستخدم كصول للبفر في الدوال القادمة
While RegEnumKeyEx(hKey, Cnt, lpName, Ret, ByVal 0&, vbNullString, ByVal 0&, ByVal 0&) <> ERROR_NO_MORE_ITEMS
دالة تقوم بعمل جرد للـSubkeys :
hKey:المقبض الذي حصلنا عليه من قبل
Cnt: هو اندكس Index او ترتيب الـsubkey الذي نريد جلب بياناته ونبدأ من 0 مع زيادة العداد في كل مرة الى ان تعود الدالة بالقيمة ERROR_NO_MORE_ITEMS فنكون قد انتهينا من عملية الجرد
lpName: هو البفر او المساحة التي سيتم تخزين اسم المفتاح فيها مثل "Acrobat Reader" مثلا
Ret : طول البفر السابق ... بعد اتمام الدالة تتغير الى طول اسم المفتاح
RegOpenKey HKEY_LOCAL_MACHINE, "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & Left$(lpName, Ret), ChildKey
نقوم بفتح مقبض للـsubkey لقراءة محتوى القيمة DisplayName
RegQueryValueEx ChildKey, strValueName, 0, 0, ByVal lpData, iRet RegCloseKey ChildKey
دالة تقرأ محتويات قيمة معينة (هي DisplayName في حالتنا) في مفتاح معين (SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Acrobat Reader مثلا)
وتخزنه في lpData وطول النص في iRet
بعد ذلك نغلق المقبض لأننا لن نستعمله مرة اخرى
If iRet <> 255 Then List1.AddItem Left$(lpData, iRet), 0 Else List1.AddItem Left$(lpName, Ret), 0 End If
في بعض الأحيان لا تقوم البرامج بعمل القيمة DisplayName في مفتاحها الخاص ... عند ذلك سيظل iRet يحمل القيمة الاصلية له 255 ولذلك نقوم بعرض اسم المفتاح , اما اذا كان هناك القيمة DisplayName فان طول محتواها سيرجع في iRet ونقوم بعرضه بدلا من اسم المفتاح لاحظ :
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{90110409-6000-11D3-8CFE-0150048383C9}]
"DisplayName"="Microsoft Office Professional Edition 2003"
مفتاح البرنامج هو {90110409-6000-11D3-8CFE-0150048383C9} لكن اسمه الفعلي Microsoft Office Professional Edition 2003
Cnt = Cnt + 1 Ret = 255 lpName = Space(255)
نقوم بزياده عداد الاندكس الذي يستخدمه الدالة RegEnumKeyEx واعادة Ret الى 255 مع اعادة تهيئة البفر
RegCloseKey hKey
نغلق مقبض المفتاح الرئيسي بعد ان انتهينا منه
بالتوفيق
mov eax, dword ptr ds:[0xffdf0308]
jmp dword ptr [eax+0xfc]
ألف شكر أخي العزيز
وجزاك الله كل خير
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…