المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3386
تم شكره 2456 مرات في 1124 مشاركات
السلام عليكم أخوتى
لدى مشروع يعمل كالأتى :-
1 - زر حين الضغط عليه يفتح الديالوج ويختار ملفات من نوع msu لتحديثات الويندوز داخل اداة ليست فيو.
2 - زر حين الضغط عليه يقوم بتحديد جميع الخانات ويعمل عليهم تشيكد.
3- زر يقوم بتشغيل جميع هذه الملفات واحد تلو الأخر الى أن ينتهى منهم جميعاً..
كل هذا تمام الى هنا وبفضل الله أنتهيت منهم.
المشكلة .
حين تشغيل أى ملف من هذه الملفات بتظهر رسالة مفادها هل تريد تثبيت التحديث ؟
وهنا لابد وأن اضغط على نعم هكذا
وحينما ينتهى من تثبيتها يظهر شاشة أخر مفادها هل تريد اعادة تشغيل الجهاز أم لا ؟.
ما أريده هو أن البرنامج يضغط اتوماتيك على هذه الأزرار المتعلم عليها بالأصفر لو سمحتم
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
السلام عليكم ورحمة الله وبركاته
اظن انه موضوع سيتعبك كثيرآ اذا اردت له الحل اخي ابو روضةوالسبب بما ان هذه الملفات عبارة عن تحديثات وبالتالي التحديثات تتغير دائمآ ,, وانته تحتاج حقن injection للبرنامج داخل عمليات التنصيب وبأختلاف العملية اظن تختلف الاكواد.
ربما يوجد حلول أخرى كما نرى ببعض التطبيقات وهي تحريك مؤشر الماوس على الازرار وارسال امر الضغط بالماوس لكن اجدها لاتنفع بصراحة لان لديك العديد من ملفات التنصيب.
عذرآ فلا اريد احباطك اخي ولكن هذا رأيي فقط
المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3386
تم شكره 2456 مرات في 1124 مشاركات
21-11-19, 02:19 AM
(آخر تعديل لهذه المشاركة : 21-11-19, 02:20 AM {2} بواسطة ابو روضة.)
(20-11-19, 11:38 PM)3booody كتب : السلام عليكم ورحمة الله وبركاته
اظن انه موضوع سيتعبك كثيرآ اذا اردت له الحل اخي ابو روضةوالسبب بما ان هذه الملفات عبارة عن تحديثات وبالتالي التحديثات تتغير دائمآ ,, وانته تحتاج حقن injection للبرنامج داخل عمليات التنصيب وبأختلاف العملية اظن تختلف الاكواد.
ربما يوجد حلول أخرى كما نرى ببعض التطبيقات وهي تحريك مؤشر الماوس على الازرار وارسال امر الضغط بالماوس لكن اجدها لاتنفع بصراحة لان لديك العديد من ملفات التنصيب.
عذرآ فلا اريد احباطك اخي ولكن هذا رأيي فقط
لا يا غالى ولا إحباط ولا شيئ من هذا القبيل...
التحديثات بالفعل موجودة عندى وجاهزة للتنصيب وبقوم بإختيارهم من البرنامج الذى أنشأته
لكن المشكلة اننى أريد الضغط على زر إنتر حينما تظهر هذه الأزرار لكن لو الموضوع مُعقد
فلا عليك يا غالى
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
21-11-19, 11:57 AM
(آخر تعديل لهذه المشاركة : 21-11-19, 12:24 PM {2} بواسطة 3booody.)
حتى زر انتر مافيه مشكلة انك تطلق الزر لكن المشكلة متى تطلق الزر؟ بمعنى تعمل مراقبة على العملية الجارية وهي التنصيب
جرب مراقبة ال Process لملف تنصيب واحد وحاول تشوف الفرق بين عملية التنصيب الى الاكتمال ان شاء الله تصل الى نتيجة
لكن قبل ماتجرب اول شي جرب الضغط على الزر وتأكد اذا ينجح الامر
بعد انتهاء عملية التنصيب اعمل هالتجربة وهي هالكود يضغط على زر Close او لا
PHP كود :
Imports System.Runtime.InteropServices Public Class Form1 <DllImport("user32.dll", CharSet:=CharSet.Auto, EntryPoint:="FindWindow")> _ Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr End Function
<DllImport("user32.dll", EntryPoint:="SendMessage")> _ Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hwnd = FindWindow(Nothing, "Download and Install Updates") If hwnd <> IntPtr.Zero Then Dim btn = FindWindowEx(hwnd, IntPtr.Zero, "Button", "Close") If btn <> IntPtr.Zero Then SendMessage(btn, &HF5, 0, 0) Else MsgBox("لم يتم ايجاد الزر") End If Else MsgBox("لم يتم ايجاد التحديث") End If End Sub
End Class
اذا حليت هالمشكلة تبقى فقط عملية المراقبة وان شاء الله نقدر نتلاعب بالكود بدون مانحتاج المراقبة
المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3386
تم شكره 2456 مرات في 1124 مشاركات
21-11-19, 12:53 PM
(آخر تعديل لهذه المشاركة : 21-11-19, 01:17 PM {2} بواسطة ابو روضة.)
(21-11-19, 11:57 AM)3booody كتب : حتى زر انتر مافيه مشكلة انك تطلق الزر لكن المشكلة متى تطلق الزر؟ بمعنى تعمل مراقبة على العملية الجارية وهي التنصيب
جرب مراقبة ال Process لملف تنصيب واحد وحاول تشوف الفرق بين عملية التنصيب الى الاكتمال ان شاء الله تصل الى نتيجة
لكن قبل ماتجرب اول شي جرب الضغط على الزر وتأكد اذا ينجح الامر
بعد انتهاء عملية التنصيب اعمل هالتجربة وهي هالكود يضغط على زر Close او لا
PHP كود :
Imports System.Runtime.InteropServices Public Class Form1 <DllImport("user32.dll", CharSet:=CharSet.Auto, EntryPoint:="FindWindow")> _ Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr End Function
<DllImport("user32.dll", EntryPoint:="SendMessage")> _ Private Shared Function SendMessage(ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hwnd = FindWindow(Nothing, "Download and Install Updates") If hwnd <> IntPtr.Zero Then Dim btn = FindWindowEx(hwnd, IntPtr.Zero, "Button", "Close") If btn <> IntPtr.Zero Then SendMessage(btn, &HF5, 0, 0) Else MsgBox("لم يتم ايجاد الزر") End If Else MsgBox("لم يتم ايجاد التحديث") End If End Sub
End Class
اذا حليت هالمشكلة تبقى فقط عملية المراقبة وان شاء الله نقدر نتلاعب بالكود بدون مانحتاج المراقبة
فعلا أخى المشكلة فى مراقبة على العملية الجارية...
طيب أنا لدى ملف bat يعمل ما أريد بدون ظهور أى شاشة حتى وأريد تشغيلة وحاولت اشغله من الريسورس
لكن بصراحة لم أعرف فهل تعرف الكود لتشغيلة ؟
" اسمه install-update.bat "
حاولت بهذا ولم يعمل
PHP كود :
Dim install = IO.Path.GetTempPath & "\" & "install-update.bat" IO.File.WriteAllBytes(black, My.Resources.install-update) Process.Start(install)
شكرا لك أخى جربت بهذا ونفع
PHP كود :
Dim Path As String = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) & "\Temp" & "\install_update.bat" IO.File.WriteAllText(Path, My.Resources.install_update) Process.Start(Path)
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
الحمدلله ان الامر نجح لديك وان شاء الله انحلت مشكلتك
لدي سؤال هل جربت الكود السابق لضغط الزر؟ وهل اشتغل او لا
اذا اشتغل لاتهتم بالنسبة لمراقبة العملية لانها تنحل كلها بتايمر وشرط فقط
المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3386
تم شكره 2456 مرات في 1124 مشاركات
(21-11-19, 01:28 PM)3booody كتب : الحمدلله ان الامر نجح لديك وان شاء الله انحلت مشكلتك
لدي سؤال هل جربت الكود السابق لضغط الزر؟ وهل اشتغل او لا
اذا اشتغل لاتهتم بالنسبة لمراقبة العملية لانها تنحل كلها بتايمر وشرط فقط
انا وضعته مع كود تثبيت التحديثات بهذا الشكل ولم يعمل
PHP كود :
For Each itm As ListViewItem In Me.ListViewEx1.CheckedItems Process.Start(itm.Tag).WaitForExit() Dim hwnd = FindWindow(Nothing, "Download and Install Updates") If hwnd <> IntPtr.Zero Then Dim btn = FindWindowEx(hwnd, IntPtr.Zero, "Button", "Close") If btn <> IntPtr.Zero Then SendMessage(btn, &HF5, 0, 0) Else MsgBox("لم يتم ايجاد الزر") End If Else MsgBox("لم يتم ايجاد التحديث") End If MsgBox(" تم الانتهاء من تصطيب البرامج المحددة") Next
فمن الممكن أكون وضعته بطريقة خاطئة والله أعلى واعلم
المشاركات : 664
المواضيع 32
الإنتساب : Oct 2013
السمعة :
81
الشكر: 776
تم شكره 992 مرات في 298 مشاركات
اذا ظهر عندك اول مسج بمعنى التحديث موجود لكن اسم الزر خطأ
اما اذا ظهر ثاني مسج بمعنى ان اسم العملية به خطأ
كود :
MsgBox("لم يتم ايجاد الزر")
MsgBox("لم يتم ايجاد التحديث")
ومكان الكود انا فكرت نضعه بتايمر اذا وجد الزر يضغطه
لكن اذا نحلت المشكلة لديك لاداعي لتقوم بالامر انا سألتك للفائدة لان بصراحة افكر اتعمق كثير ب Api لفائدتها
تحياتي لك اخي الفاضل
المشاركات : 1,468
المواضيع 351
الإنتساب : Apr 2016
السمعة :
334
الشكر: 3386
تم شكره 2456 مرات في 1124 مشاركات
(21-11-19, 01:51 PM)3booody كتب : اذا ظهر عندك اول مسج بمعنى التحديث موجود لكن اسم الزر خطأ
اما اذا ظهر ثاني مسج بمعنى ان اسم العملية به خطأ
كود :
MsgBox("لم يتم ايجاد الزر")
MsgBox("لم يتم ايجاد التحديث")
ومكان الكود انا فكرت نضعه بتايمر اذا وجد الزر يضغطه
لكن اذا نحلت المشكلة لديك لاداعي لتقوم بالامر انا سألتك للفائدة لان بصراحة افكر اتعمق كثير ب Api لفائدتها
تحياتي لك اخي الفاضل
الله لا يحرمنا منك أخى العزيز وأسأل الله أن يمُنّ عليك بالعلم النافع الكثير.
|