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

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

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

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

لدى مشكلة فى استخدام Api Spy لنقل محتويات تكست فى مشروع لى الى برنامج اخر والصورة تبين ماقصد

فالمطلوب فى هذا ان يتم نقل التكست الاول مثلا فى مشروع

my2

الى التكست الثانى فى مشروع my 1

كمان هو مبين وبعد النقل يتم النقر تلقائى على الزر command1

الذى يستدعى مسج بوكس

لقد قمت ببعض الخطوات ولكن لا اعرف هل هناك اى اخطاء بها ام لا فارجو من الاخوة المحترفين الرد على هذا الموضوع للاهمية

وتم ارفاق مثال للمشروع فى المرفقات

802987-2.png

ولقد استخدمت الكود الاتى

 

Option Explicit
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Declare Function UpdateLayeredWindow Lib "user32" (ByVal hwnd As Long, ByVal hdcDst As Long, pptDst As Any, psize As Any, ByVal hdcSrc As Long, pptSrc As Any, crKey As Long, ByVal pblend As Long, ByVal dwFlags As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
Private Const ULW_COLORKEY = &H1
Private Const ULW_ALPHA = &H2
Private Const ULW_OPAQUE = &H4
Private Const WS_EX_LAYERED = &H80000
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam 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 ReleaseCapture Lib "user32" () As Long

Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegEnumKey Lib "advapi32.dll" Alias "RegEnumKeyA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, ByVal cbName As Long) As Long
Public Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
Dim hCurKey As Long
Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Public Const WM_LBUTTONUP = &H202
Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HKEY_CURRENT_USER = &H80000001
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_SETTEXT = &HC
Public Const WM_COMMAND = &H111
Public Const REG_SZ = 1



Sub my1 ( mytext as string)
Dim thunderrtformdc As Long, thunderrttextbox As Long
thunderrtformdc = FindWindow("thunderrt6formdc", vbNullString)
thunderrttextbox = FindWindowEx(thunderrtformdc, 0&, "thunderrt6textbox", vbNullString)
Call SendMessageByString(thunderrttextbox, WM_SETTEXT, 0&, mytext )
end SUB

وهذا فى زر الاستدعاء 
call my (text1.text)

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

بارك الله فيكم على المجهود الوفير فى هذا الموقع وارجو الاجابة فى اسرع وقت لضيق الوقت فهذا مشروع اريد تصميمة فاذا كان هناك اى حل فارجو ان تقومو بتنبيهى له وجزاكم الله خيرا

اخوكم الحسن البصرى

apispy.rar

تم تعديل هذه المشاركة بواسطة الحسن البصرى في 8 مايو 2008 في 14:21

#2

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

فقط لدي تعليق على الكود الطويل العريض :)

بما أنك لم تستعمل سوى 3 دوال API و ثابت واحد فيمكنك الاستغناء عن كل الدوال المعرفة

فقط يمكننا الاحتفاظ اما بالدالة SendMessageLong أو SendMessage لارسال أمر للزر

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

المفروض عند جلب مقبض النافذة فاننا نحد عنوانها لانه اذا كانت نافذة أخرى في برنامج آخر تحتوي على تكست بوكس فان المثال سيقوم بتغيير التكست بغض النظر على عنوان النافذة

يمكننا التخصيص بتعديل بسيط

thunderrtformdc = FindWindow("thunderrt6formdc", "my1")

هذا المقبض يعبر عن النافذة التي عنوانها my1 فقط

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

الكلاس اسمها thunderrt6commandbutton

hwndBut = FindWindowEx(thunderrtformdc, 0&, "thunderrt6commandbutton", vbNullString)

طبعا علينا بتعريف المتغير hwndBut قبل السطر السابق

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

SendMessageLong hwndBut, &H203, 0&, 0&
SendMessageLong hwndBut, WM_NCLBUTTONDOWN, 0&, 0&
SendMessageLong hwndBut, WM_LBUTTONUP, 0&, 0&

والكود سيصبح كاملا وباختصار :)

Option Explicit
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Public Const WM_LBUTTONUP = &H202
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_SETTEXT = &HC
Sub my1(mytext As String)
Dim thunderrtformdc As Long, thunderrttextbox As Long, hwndBut As Long
thunderrtformdc = FindWindow("thunderrt6formdc", "my1")
thunderrttextbox = FindWindowEx(thunderrtformdc, 0&, "thunderrt6textbox", vbNullString)
hwndBut = FindWindowEx(thunderrtformdc, 0&, "thunderrt6commandbutton", vbNullString)
SendMessageByString thunderrttextbox, WM_SETTEXT, 0&, mytext
SendMessageLong hwndBut, &H203, 0&, 0&
SendMessageLong hwndBut, WM_LBUTTONDOWN, 0&, 0&
SendMessageLong hwndBut, WM_LBUTTONUP, 0&, 0&
End Sub

بالتوفيق للجميع

#3

بارك الله فيك ياغالى على المجهود العظيم وفعلا هذا الامر نجح مع مشروع من بيئة فيجول بيزك ولكن كمثال عند تطبيقة على مشروع كالياهو مسنجر مثلا

كتبت الكود التالى

yahoo.png


Dim x As Long, editx As Long
x = FindWindow("#32770", "Yahoo! Messenger")
editx = FindWindowEx(x, 0&, "edit", vbNullString)
editx = FindWindowEx(x, editx, "edit", vbNullString)
Call SendMessageByString(editx, WM_SETTEXT, 0&, mytext
end sub
sub my4 ( mytext by string)

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

#4

يمكن الوصول لتنفيذ الأمر على الياهو بنفس الطريقة لكن علينا معرفة الclassname للأدوات

فهي تختلف عن الموجودة في البرامج المعمولة على الvb6 أظن

على العموم يمكننا الاستفادة من دوال الAPI لبرنامج الياهو وقد وضعت مثال صغير في هذه المشاركة في السابق ربما يفيدك

#5

جزاكم الله خيرا ...ومبارك لك على هذة الموهبة فعلا الطريقة نجحت جدا ولكن لى سوال هل يوجد مثال مطبق على الهوت ميل او المسنجر الهوت ميل

حيث انى جربت على الهوت ميل بكونة احد الشات المعروف تعرف على شى يدعى

Messenger Client side plug-ins tybe libary

ولكن كيف التعامل مع هذا من اجل وضع الاسم والباسورد مثلا للمسنجر

وجزاكم الله خيرا على الرد والاهتمام

#6

أظنه يستحسن استعمال المرجع

Messenger API Type Library

post-23361-1210324227_thumb.jpg

ثم بعد ذلك يمكنك كتابة اليوزر والباسوورد بالطريقة التالية

Dim oMsn As MessengerAPI.Messenger
Set oMsn = New MessengerAPI.Messenger
oMsn.Signin 0, "كلمة المرور", "العنوان"

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

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

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

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

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