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

[ تمت الإجابة ]كيف يتم غلق ملف تنفيذي بواسطة ملف تنفيذي آخر في نفس المسار

مغلق
بدأه يوسف دايت في 24 يونيو 2008 · 20 رد · 4,121 مشاهدة · في أرشيف قسم Windows APIs
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

أرجو منكم مساعدة بسيطة واتمني أن تجيبوني

لدي ملف تنفيذي وليكن ahmed.exe

يقوم هذا الملف الاول بفتح ملف تنفيذي آخر وهو yousef.exe

والمطلوب هو كيف اجعل الملف التنفيذي الاول ahmed.exe

ان يقوم بغلق الملف yousef.exe

الفتح سهل ويتم ب shell

لكن المشكلة هي غلق الملف ولقد بحثت في المنتدي وحصلت علي نتائج 13 صفحة ولم اجد الجواب لآن الملف المطلوب كان معطوبا ولم اتمكن من تنزيلة

فأرجو منكم الرد وآسف لني لا أقدر علي إرفاق الملفلين حيث اتصل من جهاز موبايل وليس لدي إمكانية تحميل أو رفع ملفات

الموضوع بئس أنا آسف بس ياريت حد يجيب علي بسرعة وبدون تعقيدات دوال api

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

#2

1-على ما أذكر فـ Shell ستعود لك بالـ Process id الذى يمكن أستخدامه لاحقا لغلق البرنامج.

2-من أسم النموذج أحصل على المقبض (Handle) و أستعمله.

الأمر يحتاج الى بعض دوال API فعليك بالبحث.

#3

أشكرك جزيلا استاذ محمد بالفعل حصلت علي إجابة لحضرتك عل سوال خاص بالملفات وتعتمد علي processid

لكني لم استطيع فهم الدالة وأتمني منك لو تعطيني مثال بسيط بها يغلق ملف تنفيذي مفتوح

وطبعا مشكور جدا

(المصيبة في سرعة البحث أنا مستعمل موبايل نظرا لتواجدي في منطقة أشبة بالصومال والحمد لله علي ما بيفتح صفحة بكون خدت تعسيلة بسيط والموضوع كله بؤس وآسف)

جزاك الله خير

#4

بحثت تاني عن دوال التعامل مع الملفات فلم أحصل علي نتيجة

وبحثت عن دوال فيجوال بيسيك وبعد البحث اوصلني لهذه المشاركة يعني لنفس السؤال

واعتقد كده تاكدت أن الوضع فعلا بؤس مثل واقعنا العربي

ونحمد الله علي كل حال

اتمني ان يساعدني احدكم

#5

في general قم بوضع الاتي :

Private Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" ( _
     ByVal lpApplicationName As String, _
     ByVal lpCommandLine As Long, _
     ByVal lpProcessAttributes As Long, _
     ByVal lpThreadAttributes As Long, _
     ByVal bInheritHandles As Long, _
     ByVal dwCreationFlags As Long, _
     ByVal lpEnvironment As Long, _
     ByVal lpCurrentDriectory As Long, _
     ByRef lpStartupInfo As STARTUPINFO, _
     ByRef lpProcessInformation As PROCESS_INFORMATION) As Long

Private Type STARTUPINFO
    cb As Long
    lpReserved As Long
    lpDesktop As Long
    lpTitle As Long
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type

Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type

Private Declare Function TerminateProcess Lib "kernel32.dll" ( _
     ByVal hProcess As Long, _
     ByVal uExitCode As Long) As Long

هذا في الحدث (مثل Click) :

Private Sub Command1_Click()
	Dim rc As Long
	Dim sinfo As STARTUPINFO
	Dim pinfo As PROCESS_INFORMATION

	rc = CreateProcess("d:\windows\system32\calc.exe", 0, 0, 0, 0, 0, 0, 0, sinfo, pinfo)

	If rc <> 0 Then
		MsgBox "Click OK to close calculator.exe"
		TerminateProcess pinfo.hProcess, 0
	Else
		MsgBox "Failed to run calculator.exe !!!"
	End If
End Sub

ولو بحثت لوجدت مثله كود هنا .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#6

الأخ الفاضل GamingMaster شاكر افضالك جدا والشكر موصول للأخ محمد السيد كذلك

سوف اقوم بعمل المثال وموافاتك بالنتيجة

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

#7

الاخ الفاضل GamingMaster

نزلت المثال ويعمل جيدا ولكن المشكلة هي

أنني لا اريد فتح الملف فقط أريد إغلاق الملف التنفيذي الثاني test.exe الموجود في مسار البرنامج

ألا توجد طريقة بدون إستخدام createprocess

فالملف فعليا يحمل بواسطة سكريبت من خانة نص في الملف الاول وأريد فقط ان اغلقة عندما اغلق الملف التنفيذي الاول

rc = CreateProcess(App.Path & "\test.exe", 0, 0, 0, 0, 0, 0, 0, sinfo, pinfo)

فهل يمكن تطبيق الأمر terminate فقط علي الملف التنفيذي التالي بنفس المسار (App.Path & "\test.exe", 0, 0, 0, 0, 0, 0, 0, sinfo, pinfo)

TerminateProcess pinfo.hProcess, 0

آسف جدا علي الإزعاج وأرجو المساعدة

#8

أولا اجعل pinfo متغير عام أي ضعه في General , بعدين في حدث terminate للفورم اضف كود الاغلاق :

Private Sub Command1_Click()
	Dim rc As Long
	Dim sinfo As STARTUPINFO
	rc = CreateProcess("d:\windows\system32\calc.exe", 0, 0, 0, 0, 0, 0, 0, sinfo, pinfo)
End Sub

Private Sub Form_Terminate()
	TerminateProcess pinfo.hProcess, 0
End Sub

لا اعرف الكثير(ولا القليل حتى) في VB , ربما وجدت أخطاء .

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#9

مجرد متابعتك للموضوع يكفي وجزاك الله كل خير

وبعدين لو حضرتك مش عارف الكثير ولا القليل يبقي عليه العوض في وانا كده في خبر كان

ربنا يزيدك علما نافعا

وشكرا

#10

أخل الكريمـ ,,, إذا كنت أنت من تقوم بتشغيل البرنامج الثاني ,, فلا تستخدم Shell بل إستخدم طريقة الأخ GM لكي تقوم بتخزين الـ PID لوقت إغلاق البرنامج ,..

أما إذا كان البرنامج الثاني يعمل بطريقة مسبقة لبرنامجك أو لست أنت من قام بتشغيله ,,فعليك المرور بالعمليات جميعها مأخوذة بـ SnapShot

وإذا كان مسار العملية = مسار برنامجك المستهدف ,, تحصل على الـ PID

إذا في أي إستفسار ,, الإخوة ما رح يقصروا ,,

#11

الأخ الفاضل syntax_er

وجميع من تكرموا بالمرور والرد أشكركم جميعا

معلش انا تعبتكم معايا بس الفكرة كالآتي

البرنامج الثاني وهو test1.exe يعمل من داخل البرنامج الاول

بمجرد تشغيل البرنامج الأول يتم تحديد مسار الملف التنفيذي الثاني من داخل خانة نص

Text.text = (App.Path & "\test1.exe")

ثم افتح الملف التنفيذي الثاني بطريقة ال Binary بواسطة

Open text1.Text For Binary As #1

أقوم بالتاكد من عدة امور ويتم بعدها إصلاح الملف المطلوب فتحه وهو test1.exe ليأخذ شكلة الطبيعي

وحتي الآن الملف موجود في مسار البرنامج ولم يتم فتحة

ويمكن فتحة بواسطة shell وهذا سهل لي كمبتدئ فيجوال

المشكلة هي عند الخروج من البرنامج الام فإن الملف الثاني est1.exe

يكون مفتوحا ولا يمكن فتحة مرة ثانية بطريقة ال Binary لعمل تعديلات علية مرة ثانية قبل الإغلاق

والسبب انه مفتوح أصلا

وانا أريد ان يقوم البرنامج الاول بإغلاق البرنامج الثاني عند الخروج من الأول

آسف جدا الملفين كبار وليس لدي إمكانية تحميل نهائي او رفع وإلا كنت ارفقتهم هنا وراح يكون الحل اسهل بالطبع

عموما هذا شرح المشكلة وأعلم انكم لن تقصروا ومشكورين جدا

وشكرا لرحابة صدركم وتحمل الصداع الذي يسببه المبتدؤن مثلي

#12

هل تقصد بالفتح أنك تقوم بتعديله ...؟؟ إذا جرب إستعمال Close #1 أو مهما كان رقم الملف عندما قمت بفتحه ,,,

إذا لم تنفع ,, سأقوم بالبحث عن طريقه لذلك ,,, المعذرة على عدمـ إفادتك الآن ,,,

#13

نعم اخي الفاضل

الملف يفتح اولا بصيغة binary لتعديله والتاكد من وجود كلمة معينة بداخلة وهذا بواسطة البرنامج الاول

ثم يتم تشغيلة بعد التعديل ليصبح ملف تنفيذي وايضا بواسطة البرنامج الأول

وعند الخروج من البرنامج الاول الأم اقوم بطلب الملف التنفيذي test1.exe مرة تانية لتشفيرة قبل الخروج من البرنامج الام

المشكلة ان هذا الملف test1.exe يكون مفتوح فعليا وبالتالي عند طلبه سوف نحصل علي رسالة خطأ premission denied

كل ما أرجوة ان يتم

إغلاق الملف التنفيذي التابع أولا كملف تنفيذي

ثم فتحة بصيغة البينري binary لتشفيرة ثم الخروج من البرنامج ككل

مشكور جدا اخي الكريم وسوف احاول واوافيك بالنتيجة

تعبتك معايا وزمانك محتاج 10 فنجان قهوة والله آسف بس محتاج الموضوع وبحاول

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

#14

ركّز قليلا :

Private Sub Form_Terminate()
	TerminateProcess pinfo.hProcess, 0
PUT YOUR ENCRYPTING CODE HERE !!
End Sub

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#15

الاخ الكريم gamingMaster وجميع الاخوة الافاضل اللذين ساعدوني

جزاكم الله خيرا علي متابعتكم للموضوع وصبركم الجيد علي

أرفقت لكم المثال

وأرجو ألا يعتبر الموضوع مكرر ويتم غلقة

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

حاولت بكل الطرق ولم افلح

وهذا مثال بسيط لكود الاخ gamingMaster وهو يقوم بفتح الآلة الحاسبة

وارجو ان يتم إغلاقها إما بحدث form terminate

او بالمفتاح command2

وشكرا لكم

__________________.rar

#16

ألم أقل لك ان تركز قليلا :

GamingMasteR كتب:
أولا اجعل pinfo متغير عام أي ضعه في General , بعدين في حدث terminate للفورم اضف كود الاغلاق

هذا هو الكود بعد التعديل الذي تجاهلت انت عمله , ارجوا ان تحل المشكلة :

Private Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" ( _
     ByVal lpApplicationName As String, _
     ByVal lpCommandLine As Long, _
     ByVal lpProcessAttributes As Long, _
     ByVal lpThreadAttributes As Long, _
     ByVal bInheritHandles As Long, _
     ByVal dwCreationFlags As Long, _
     ByVal lpEnvironment As Long, _
     ByVal lpCurrentDriectory As Long, _
     ByRef lpStartupInfo As STARTUPINFO, _
     ByRef lpProcessInformation As PROCESS_INFORMATION) As Long

Private Type STARTUPINFO
    cb As Long
    lpReserved As Long
    lpDesktop As Long
    lpTitle As Long
    dwX As Long
    dwY As Long
    dwXSize As Long
    dwYSize As Long
    dwXCountChars As Long
    dwYCountChars As Long
    dwFillAttribute As Long
    dwFlags As Long
    wShowWindow As Integer
    cbReserved2 As Integer
    lpReserved2 As Byte
    hStdInput As Long
    hStdOutput As Long
    hStdError As Long
End Type
Private Type PROCESS_INFORMATION
    hProcess As Long
    hThread As Long
    dwProcessId As Long
    dwThreadId As Long
End Type

Private Declare Function TerminateProcess Lib "kernel32.dll" ( _
     ByVal hProcess As Long, _
     ByVal uExitCode As Long) As Long

Dim pinfo As PROCESS_INFORMATION

Private Sub Command1_Click()
        Dim rc As Long
    Dim sinfo As STARTUPINFO

        rc = CreateProcess("c:\windows\system32\calc.exe", 0, 0, 0, 0, 0, 0, 0, sinfo, pinfo)

      End Sub

Private Sub Command2_Click()
TerminateProcess pinfo.hProcess, 0
End Sub

Private Sub Form_Terminate()
TerminateProcess pinfo.hProcess, 0
End Sub

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#17

الاخ الكريم GamingMaster وجميع الالاخوة الافاضل اللذين ساعدوني أو حتي ردوا علي الموضوع

أشكركم جزيل الشكر

تم حل المشكلة بكود الاخ الكريم GamingMaster

اكرر شكري للجميع

ودمتم في رقي وتقدم بإذن الله

#18

السلام عليكم جميعا

آسف الوقت متأخر بس بالكاد انتهيت من العمل

سؤالي هو بالنسبة للمثال السابق الذي تفضل الاخ GamingMaster بتصحيحة

والمثال يقوم بفتح الآلة الحاسبة من الويندوز كمثال لملف تنفيذي ويقوم بإغلاقة من البرنامج الآخر بالمفتاح أو بحدث form terminate

سؤالي هو كيف يمكن تطبيق المثال المرفق بالاعلي وعلي ملف تنفيذي موجود في مسار البرنامج الاصلي وليكن إسم الملف المطلوب فتحة وغلقة هو test1.exe

الموجود في مسار MYPROGRAM

أرجو المساعدة لاني جربت app path

لكن الموضوع مختلف بدوال api تماما

وشكرا لكم

#19

للرفع

#20

غريب ::: يعمل عندي بالطريقة التي ذكرتها أنت !

جرب المرفقات .

vb.rar

mov eax, dword ptr ds:[0xffdf0308]

jmp dword ptr [eax+0xfc]

#21

الاخ الرائع Gaming Master

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

الخطأ كان في صياغة الجملة عندي ومثال رائع وبسيط وحل المشكلة

أشكرك جدا والشكر موصول لكل من قدم المساعدة

وبالتوفيق دائما

لو تكرمت فيه مشاركة لي عن ماهية الدالة crc32 وبعت مثال عنها والكل حاول المساعدة بس الغموض واضح في وظيفة الدالة

المشاركة في منتدي ال vb

ياريت لو تكرمت تمر ويهمني رأيك جدا في الموضوع لآن هناك الاخ محمد سيد نصحني بالتوجه الي هنا وخايف ارفق الؤال هنا ويعتبر مكرر ويتم غلق الموضوع

لو تكرمت تمر وأكون شاكر جدا لك

عنوان المشاركة ماهية الدالتين crc13 &crc32

وشكرا لك

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…