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

كيف يمكنني التحك من خلال برنامجي ببرامج اخرى

مغلق
بدأه .S.T.A.L.K.E.R في 26 أغسطس 2007 · 10 رد · 1,371 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم اشقائي في منتدى فيجوال بيسك

اريد السؤال حول عن برنامج يمكنه التحكم في برامج اخرى او برنامج معين

لتوضيح الفكرة

اريد صنع برنامج يقوم باستدعاء البرنامحج on-screen keyboard

الموجود في الويندوز

حيث من خلال برنامجي اقوم بالنقر على command معين و يقوم باستخدام البرنامج on-screen keyboard و كاني نقرت على البرنامج نفسه و الحرف a مثلا

و للتوضيح اكثر من خلال برنامجي اقوم بتفعيل event معين في برنامج اخر

و شكرا

#2

ربما تفيدك SendKeys

لكن فقط عندما تكون متأكد أن نافذة البرنامج مفعلة

كما يمكن استعمال دوال الapi لاستخراج المقبض لنافذة البرنامج بالبحث عن نافذة البرنامج

باستعمال FindWindow و GetWindow ومن ثم نقوم بربط الثريد للبرنامج الذي حصلنا على مقبضه بالثريد الحالي لبرنامجنا

باستعمال AttachThreadInput

والله أعلم

تعديل : لم أجرب الطريقة بعد

تم تعديل هذه المشاركة بواسطة DreamNet في 26 أغسطس 2007 في 10:45

#3

قد يكون خطف الرسائل هو الأفضل Hook

تحيااااااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#4

و أسهل من ذلك الطريقة المباشرة ارسل المفاتيح باستخدام الAPI و قبلها استعمل SetForegroundWindowوFindWindow لكى يكون البرنامج المراد هو المستقبل لضربات المفاتيح

و أرجو أن أكون أفدت

#5

تستطيع التحكم بالنافذة عن بعد لكن لا أدري إذا كنت تستطيع التحكم بزر داخل نافذة !!

أنا حاولت كثرا ولكن للأسف لم استطع عمل ذلك

لذلك أتيتك بكود من محاولاتي وهذا الكود يغلق برنامج الماسنجر لايف

في الموديول

Public Declare Function SetWindowsHook Lib "user32" Alias "SetWindowsHookA" (ByVal nFilterType As Long, ByVal pfnFilterProc As Long) As Long

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

Public Const WM_MOVE = &H3

Public Const WM_CLOSE = &H10

Public Const WM_ACTIVATE = &H6

Const SWP_HIDEWINDOW = &H80
Const SWP_SHOWWINDOW = &H40
Const GW_CHILD = 5
Const GW_HWNDNEXT = 2


Public Const GWL_WNDPROC = (-4)

Public lpPrevWndProc  As Long

Public gHW As Long

Public Const WM_CTLCOLORMSGBOX = &H132

Public Const WM_CHAR = &H102
Public Const GW_MAX = 5









Public Sub Hook()

	lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)


		SendMessage gHW, WM_CLOSE, 0, 0

End Sub

Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
End Function

  Debug.Print "Message: "; hwnd, uMsg, wParam, lParam

 WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)

 If uMsg = WM_MOVE Then
Debug.Print "Window Move "
End If

End Function

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

في الفورم

Private Sub Form_Load()
gHW = FindWindow("MSBLWindowClass", "Windows Live Messenger")
Hook
End Sub

أتمنى اللي يعرف الحل يظعه هنا

تحياااااتي

تم تعديل هذه المشاركة بواسطة أبو فهيد في 27 أغسطس 2007 في 20:39

للصداقة البرمجية

pro-vb6@hotmail.com

#6

للرفع ...

إخواني أريد أن أعرف كيف يتم التحكم بزر داخل نافذة برنامج خارجي من برنامجي

أعرف أن الأمر لا يتعدى خطف الرسائل ولكن كيف !!

أنا أستطيع التحكم بالنافذة بأخذ مقبض النافذة ولكن كيف أعرف مقبض زر داخل نافذة !! وتحكم فيها

تحيااااااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#8

لا يا أخي

أنا أريد مثالا :

افتح الحاسب حق الويندوز وأريد أن أضغط على زر الضرب من برنامجي يعني أضغط زر في برنامجي يرسل الأمر إلى الحاسبة بأن تضغط زر الضرب عندها ...

هذا هو الذي أريده

تحياااااااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#9

أبو فهيد تقدر تستخدم دالة زى EnumChildWindows لغرضك , مثال :

'In a Form named Form1 with a List-Box named lstHWNDs :
Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Private Sub cmdCollectHandles_Click()
Dim lngCalcHandle As Long

clBlGo:
lngCalcHandle = FindWindow(vbNullString, "Calculator")
If lngCalcHandle = 0 Then
		Shell "calc", vbNormalNoFocus
		GoTo clBlGo
	Else
		EnumChildWindows lngCalcHandle, AddressOf EnumChildProc, ByVal 0&
End If
End Sub

'In a Module :
Option Explicit

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
	Form1.lstHWNDs.AddItem hwnd
	EnumChildProc = 1
End Function
#10

شكرا لك أخي msayed 2004

يعطيك العافية

تحيااااتي

للصداقة البرمجية

pro-vb6@hotmail.com

#11

شكرا جميعا

لكني شفت كود شغال يستخدم ال getwindow

??

بصراحة انا مش عارف شي

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

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

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

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

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

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