PDA

View Full Version : طريقه ارتباط با برنامه ديگه



fadakplus
یک شنبه 23 مرداد 1390, 14:11 عصر
باسلام خدمت دوستان:
دوستان چه طوري ميشه ازطريق vbمثلا درماشين حساب ويندوزداده هاي واردشده درtextbox ماشين حساب
راطريقvbخوانديانوشت:تشویق:: شویق::تشویق::تشویق::تشویق::ت ویق:

باتشكر

IamOverlord
یک شنبه 23 مرداد 1390, 15:22 عصر
سلام دوست عزیز،
برای خواندن داده های TextBox :
اولا که باید hWnd مربوط به TextBox مورد نظر رو پیدا کنی، بعد از طریق این تابعی که در زیر نوشتم، می تونی hWnd رو بدی Text رو بگیری :

Private Const WM_GETTEXTLENGTH = &HE
Private Const WM_GETTEXT = &HD

Private 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 Function GetObjectText(hwnd As Long) As String
Dim I As Long
Dim S As String
I = SendMessage(hwnd, WM_GETTEXTLENGTH, ByVal 0&, ByVal 0&)
S = Space$(I + 1)
SendMessage hwnd, WM_GETTEXT, ByVal I + 1, ByVal S
GetObjectText = S
End Function

محسن واژدی
یک شنبه 23 مرداد 1390, 16:06 عصر
سلام علیکم
به روش زیر نیز میتوانید به calc ویندوز دسترسی پیدا کنید:

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Me.Caption = "Result of 20*20 in calculator..."
Shell "calc", vbNormalFocus

DoEvents: Sleep 1000

SendKeys "20", True

DoEvents

SendKeys "*", True

DoEvents

SendKeys "20", True

DoEvents

SendKeys "{Enter}", True

SendKeys "^{C}", True
SendKeys "%{F4}", True
MsgBox "Result 20*20=" & Clipboard.GetText
End Sub

دستور بالا ضرب 20*20 را توسط calc محاسبه سپس نتیجه را کپی میکند
ابتدا یک دکمه بر روی فرم قرار دهید سپس کد بالا را در ماژول فرم کپی کنید

موفق باشید

quiet_programmer
یک شنبه 23 مرداد 1390, 18:39 عصر
با سلام.


اولا که باید hWnd مربوط به TextBox مورد نظر رو پیدا کنیحالا لطف کنین بگین این چه جوری بدست میاد.

در ضمن جناب mohsenvj (http://barnamenevis.org/member.php?104729-mohsenvj) کد شما هم جالب بود:تشویق:(با برنامه هایی که توش از کلک ر.ش.ت.ی استفاده میشه،خیلی حال میکنم.) ولی این راه حل کلی نیست. اولا برای اجرای این برنامه شرایط مختلفی بایستی محیا باشه.(بحث فوکوس دادن به پنجره ماشین حساب و داشتن فوکوس تا اتمام و ...) هرچند میشه این شرایط رو محیا کرد ولی راه حلی کلی به حساب نمیاد. شما فرض کنید شما میخواین فیلدهای یه صفحه رو بخونین که تعداد فیلدها مشخص نیست. از دوستان تقاضا دارم اگه کسی در این زمینه اطلاعات داره به اشتراک بزاره.

با تشکر

محسن واژدی
یک شنبه 23 مرداد 1390, 19:08 عصر
.
.
.
ولی این راه حل کلی نیست. اولا برای اجرای این برنامه شرایط مختلفی بایستی محیا باشه.(بحث فوکوس دادن به پنجره ماشین حساب و داشتن فوکوس تا اتمام و ...) هرچند میشه این شرایط رو محیا کرد ولی راه حلی کلی به حساب نمیاد. شما فرض کنید شما میخواین فیلدهای یه صفحه رو بخونین که تعداد فیلدها مشخص نیست. از دوستان تقاضا دارم اگه کسی در این زمینه اطلاعات داره به اشتراک بزاره.

با تشکر
سلام علیکم
بله این کدی که بنده گذاشتم ساده ترین راهیست که فردی میتواند برای برقراری ارتباط با برنامه ای نظیر calc استفاده کند، البته برای تایپ یک متن همانگونه که خودتان هم گفتین از معایب این روش، حتما" بایستی برنامه مورد نظر فعال باشد، همچنین مکان هدف نیز از قبل تعریف شده باشد که در calc ویندوز فوکوس توسط برنامه خودمون و مکان هدف هم قبلا توسط calc تعیین شده است و تنها کاری که باقی میماند ارسال مقادیر و ضرب و جمع آنها توسط SendKeys است

اما در حالت های پیشرفته تر برای تایپ متن در یک textbox یا هر عمل دیگری ارتباط توسط هندل شی صورت میگیرد، سپس توسط توابعی نظیر SendMessage متن مورد نظر را به شی هدف ارسال یا مقدار و یا هر خصوصیت دیگر را دریافت میکنیم

موفق باشید