PDA

View Full Version : ارتباط با تکست باکس یه برنامه دیگه



سید حمید حق پرست
پنج شنبه 25 اسفند 1390, 22:10 عصر
سلام دوستان
یه سوال داشتم ، ممنون میشم جواب بدید :
فرض کنید ما یه پروژه جدید باز کردیم که یه تکست باکس و یه دکمه داریم حالا میخوام با زدن دکمه هرچی تو تکست باکس نوشتیم مثلا در تکست باکس پنجره چت یاهو مسنجر کپی بشه
عکس پنجره :
84243

ممنون میشم راهنماییم کنید


یا علی (ع)

Veteran
پنج شنبه 25 اسفند 1390, 22:27 عصر
[VB]Private 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

MohammadGh2011
پنج شنبه 25 اسفند 1390, 22:32 عصر
سلام عليکم

تاپيک زير و سورس زير رو بررسي فرماييد
http://barnamenevis.org/showthread.php?263098-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A2%DB%8C%D8%AF%DB%8C-%D9%88-%D9%BE%D8%B3%D9%88%D8%B1%D8%AF-%D8%A7%D8%B2-%D9%81%D8%B1%D9%85-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%A8%D9%87-%DB%8C%D8%A7%D9%87%D9%88-%D9%88-%DA%A9%D9%84%DB%8C%DA%A9-%D8%B1%D9%88%DB%8C-%D9%84%D8%A7%DA%AF%DB%8C%D9%86
و در پست 2 هم جناب xxxxx_xxxxx توضيح دادن که چگونه بايد کار کنيد.


موفق باشيد

سید حمید حق پرست
پنج شنبه 25 اسفند 1390, 22:39 عصر
ممنون از شما به خاطر راهنمایی خوبتون
حالا اگه بخوام با یه برنامه این ارتباطرو برقرار کنم باید کحای کدی که قرار دادید رو ویرایش کنم .؟
و باید چه چیزی از برنامه ای که میخوام باهاش ارتباط برقرار کنم بدست بیارم؟

بازم ممون


یا علی (ع)

سید حمید حق پرست
پنج شنبه 25 اسفند 1390, 22:44 عصر
سلام عليکم

تاپيک زير و سورس زير رو بررسي فرماييد
http://barnamenevis.org/showthread.php?263098-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A2%DB%8C%D8%AF%DB%8C-%D9%88-%D9%BE%D8%B3%D9%88%D8%B1%D8%AF-%D8%A7%D8%B2-%D9%81%D8%B1%D9%85-%D9%88%DB%8C%DA%98%D9%88%D8%A7%D9%84-%D8%A8%D9%87-%DB%8C%D8%A7%D9%87%D9%88-%D9%88-%DA%A9%D9%84%DB%8C%DA%A9-%D8%B1%D9%88%DB%8C-%D9%84%D8%A7%DA%AF%DB%8C%D9%86
و در پست 2 هم جناب xxxxx_xxxxx توضيح دادن که چگونه بايد کار کنيد.


موفق باشيد

ممنون دوست عزیز
ولی من بعنوان مثال یاهو مسنجر رو قید میکردم . من میخوام با یه برنامه دیگه ارتباط برقرار کنم

Veteran
پنج شنبه 25 اسفند 1390, 22:56 عصر
این چیزایی که میگن رو بنده تئوری نخوندم از روی مقاله ای چیزی فقط یکم باهاشون کار کردم دیگه میدونم چجوری هست تجربی یاد گرفتم. شاید توضیحاتم یکم اشتباه باشه و یا مبهم اگر مشکلی چیزی بود ببخشین و دوستان تصحیح کنین


باید اسم کلاس های اون قسمت هایی که میخواین کار کنین رو بدونین که با برنامه ای ه پیوست کردم میتونین این کارو انجام بدین
lMainHwnd = FindWindow("cconvwndbase", vbNullString)
برای پیدا کردن پنجره هست که میتونین نام کلاس پنجره و یا اگر اشتباه نکنم اسم اون پنجره رو بنویسید اینو ادیت کنید
"cconvwndbase"
این
FindWindowEx(lMainHwnd, 0&, "YIMInputWindow", vbNullString)
واسه پیدا کردن اجزای داخلی اون پنجره ایی هست که در قسمت اول پیدا کردین و شماره یا همون هندل پنجره که در متغیر lMainHwnd قرار داره
این قسمت رو ادیت کنین "YIMInputWindow"
و این قسمت هم lMainHwnd هندل اون پنجره ای هست که شما میخواین باهاش کار کنین
این
SendMessage lEdit1, WM_SETTEXT, 0&, Text1.Text
برای ارسال یک دستور هست و WM_SETTEXT یک ثابت هست برای ارسال متن من چند تای دیگه میزام


Public Const VK_END = &H23

Public Const VK_HOME = &H24

Public Const VK_SHIFT = &H10

Public Const WM_SETTEXT = &HC

Public Const WM_GETTEXT = &HD

Private Const EM_SETPASSWORDCHAR = &HCC

Private Const EM_GETPASSWORDCHAR = &HD2

Private Const GW_HWNDNEXT = 2

Public Const WM_GETTEXTLENGTH = &HE

یک برنامه از اقا بهنام گل هم میزارم که شما موس رو هر کجا ببری اسم کلاس اون پنجره رو بهتون بگه
برنامه رو اجرا کنین موس رو ببرین روی پنجره پی ام یاهو بعد در برنامه اسم کلاس اون پنجره رو میزنه که همون
cconvwndbase هست یا ببرید روی تکست باکسش میبینید که در برنامه اسم کلاس رو به ما نشون میده
YIMInputWindow
===========
برای نودپد

Private 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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&
lMainHwnd = FindWindow("Notepad", vbNullString)
lEdit1 = FindWindowEx(lMainHwnd, 0&, "Edit", vbNullString)
SendMessage lEdit1, WM_SETTEXT, 0&, Text1
End Sub

MohammadGh2011
پنج شنبه 25 اسفند 1390, 23:09 عصر
Private 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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&
lMainHwnd = FindWindow("Notepad", vbNullString)
lEdit1 = FindWindowEx(lMainHwnd, 0&, "Edit", vbNullString)
SendMessage lEdit1, WM_SETTEXT, 0&, Text1
End Sub
خيلي خوب بود،ممنون
فقط چند تا سوال:
برای پیدا کردن پنجره بايد عنوان اون رو بنويسيم يا چگونه ميتونيم پنجره برنامه رو پيدا کنيم؟
و چه طور ميتونيم کادرهاي متني و دکمه ها رو تو اون برنامه پيدا کنيم و توشون چيزي وارد کنيم و يا روشون کليک کنيم؟و يا چگونه يک متن رو تو تکست باکس برنامه ي ديگه منتقل کنيم؟

اگه دوستان ديگه اي بلد هستند لطفا راهنمايي کنند.

ممنون

setroyd
پنج شنبه 25 اسفند 1390, 23:10 عصر
شما باید از پایه یاد بگیری که موضوع رو درک کنی findwindow کارش پیدا کردن پنجره ی مورد نظر هست . sendmessage پیغام رو ارسال میکنه و......

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private 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


بدون این 2 api هم میشه این کارو انجام داد .

Veteran
پنج شنبه 25 اسفند 1390, 23:13 عصر
بله حق با جناب setroyd هست.
بنده یک سورس داشتم برای کار شخصی خودم قبلا نوشتم که این api ها توش بود سری اومدم ادیت کردم گذاشتم . این api ها هم توی سورس بود.
با اون برنامه ای که پیوست کردم میتونین اسم کلاس های پنجره هارو به دست بیارین
برنامه رو اجرا کنین موس رو ببرین روی اون پنجره بالا پنجره در قسما close minimize maximize اونجا بعد اسم کلاس رو به دست بیارین بزارین

اینجا به حای cconvwndbase
lMainHwnd = FindWindow("cconvwndbase", vbNullString)
بعد اسم مثلا تکست باکس رو خواستین موس رو ببرین روش بعد اسم کلاس رو به دست بیارین بزارین اینجا به جای YIMInputWindow بزارین

lEdit1 = FindWindowEx(lMainHwnd, 0&, "YIMInputWindow", vbNullString)
بعدش با این ارسال کنید
SendMessage lEdit1, WM_SETTEXT, 0&, Text1.Text
کار های مختلفی میشه باهاش کرد

MohammadGh2011
پنج شنبه 25 اسفند 1390, 23:21 عصر
دوستان منظورم API ها نبود،منظورم اين کد ها بود
lMainHwnd = FindWindow("Notepad", vbNullString)
lEdit1 = FindWindowEx(lMainHwnd, 0&, "Edit", vbNullString)
SendMessage lEdit1, WM_SETTEXT, 0&, Text1
لطف کن اين رو توضيح بده مخصوصا رنگ قرمزها رو
و از کجا پيداشون کرديد؟

سید حمید حق پرست
پنج شنبه 25 اسفند 1390, 23:23 عصر
واقعا توضیح خوب و کاملی بود . خیلی خیلی ممنون هم بابت توضیحات خوبتون هم برنامه ای که گذاشتید
یه سوال و یه درخواست :
سوال :
اگه بخوایم از ثابتهای دیگه استفاده کنیم از همین دستور استفاده کنیم و تغیری بجز تغیر اسم ثابت در کد زیر نمیدهیم؟:
SendMessage lEdit1, WM_SETTEXT, 0&, Text1.Text

درخواست :
از کجا میتونم تمام ثابتهارو گیر بیارم؟ آیا شما همشونو میدونید؟


Public Const VK_END = &H23

Public Const VK_HOME = &H24

Public Const VK_SHIFT = &H10

Public Const WM_SETTEXT = &HC

Public Const WM_GETTEXT = &HD

Private Const EM_SETPASSWORDCHAR = &HCC

Private Const EM_GETPASSWORDCHAR = &HD2

Private Const GW_HWNDNEXT = 2

Public Const WM_GETTEXTLENGTH = &HE



بازم تشکر میکنم


یا علی (ع)

setroyd
پنج شنبه 25 اسفند 1390, 23:34 عصر
از API Text Viewer در قسمت constants اونجا همه اینها هست .

Veteran
پنج شنبه 25 اسفند 1390, 23:42 عصر
این ی فیلم گرفتم با صدا. ماله نودپد و یاهو رو توضیح دادم سری :لبخند:
اینکه lMainHwnd هندل پنجره نودپد توش قرار میگیره ی متغیره هست.


لطف کن اين رو توضيح بده مخصوصا رنگ قرمزها رو
و از کجا پيداشون کرديد؟
=================

اگه بخوایم از ثابتهای دیگه استفاده کنیم از همین دستور استفاده کنیم و تغیری بجز تغیر اسم ثابت در کد زیر نمیدهیم؟حقیقتش منم نمیدونم :لبخند:
دوستان کسی توضیح میده ؟

MohammadGh2011
پنج شنبه 25 اسفند 1390, 23:43 عصر
از API Text Viewer در قسمت constants اونجا همه اینها هست .
يه توضيحي درباره کار با اين برنامه ميديد؟+يه مثال
من برنامه رو باز کردم ولي به خاطر اينکه اولين بار بود اين برنامه رو ميديدم نتونستم باهاش کار کنم

ASedJavad
پنج شنبه 25 اسفند 1390, 23:49 عصر
شما بعد از باز کردن برنامه از منوی فایل گزینه Load text file رو بزن و فایل WIN32API.TXT رو لود کن تو برنامه.
فکر کنم بقیش معلومه

البته همش رو از اونجا نمیتونی گیر بیاری ولی کلا چیز خوبیه.
خیلیاش با تجربه بدست میان!
البته برای کار با توابع api میتونی از نرم افزار api-Guide استفاده کنی که برای هر تابع چند تا مثال و توضیحاتو ... داره.
همچنین یه نرم افزاری بود به اسم Apia که شاید بتونی پیداش کنی. اگر چه خیلی ناقصه ولی خوبیش اینه که فارسیه

setroyd
پنج شنبه 25 اسفند 1390, 23:54 عصر
هر ثابتی یک پارامتر خاصی برای ارسال داره که باید در sendmessage به دقت تعریف بشه برای استفاده از پارامترها اینو بدون که یک دستور کلی براش نیست شما باید اون هارو حفظ کنی که با یه سرچ تو اینجا یا google میتونی به منابع خوبی برسی .

سید حمید حق پرست
جمعه 26 اسفند 1390, 00:05 صبح
اگه بخوایم از ثابتهای دیگه استفاده کنیم از همین دستور استفاده کنیم و تغیری بجز تغیر اسم ثابت در کد زیر نمیدهیم؟:

SendMessage lEdit1, WM_SETTEXT, 0&, Text1.Text




یا علی (ع)

setroyd
جمعه 26 اسفند 1390, 00:14 صبح
نه عزیز گفتم هر ثابت یک پارامتر خواصی داره مثلا برای set کردن password char
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
Private Const EM_SETPASSWORDCHAR = &HCC
Private Sub Command1_Click()
SendMessage Text1.hwnd, EM_SETPASSWORDCHAR, Asc("*"), 0
Text1.Refresh
End Sub

این کد استفاده میشه اگه دقت کنی میبینی پارامترهای دیگه هم پر شدند مثل بالا نیست .

سید حمید حق پرست
جمعه 26 اسفند 1390, 01:08 صبح
پارامتر همه ی ثابتها . یا فقط اونایی که کاربرد زیادی دارن و برنامه نویسها زیاد بکار میبرن رو از کجا گیر بیارم؟

ممنونم که جواب دادید


یا علی (ع)

M.T.P
جمعه 26 اسفند 1390, 01:31 صبح
بخش عمدش تو API Viewer خود vb6 در قسمت Constants هست و بخش دیگه رو باید جستجو کرد ، البته توابع API و نحوه استفاده از اونها خودش یه موضوع مفصله جداست.

setroyd
جمعه 26 اسفند 1390, 01:33 صبح
از همه جا خورد خورد باید گیر بیاریی منبع کاملی من ندیدم متاسفانه !!! من خودم برای خودم کلاس نویسی کردم و به این گونه استفاده میکنم شما هم بگرد پیدا کن و کلاس کن برای خودت .

سید حمید حق پرست
جمعه 26 اسفند 1390, 02:39 صبح
ولی روی بعضی برنامه ها جواب نمیده مثل ورد و تکست باکس اتوران مجموعه لورد و تکست باکس یوزر و پسورد پنجره لوگین یاهو مسنجر و ...:متعجب:

دوستان مشکل از چیه؟

یا علی (ع)

Veteran
جمعه 26 اسفند 1390, 17:22 عصر
بعضی اوغات پیش میاد که ابجکت مورد نظر مسنقیم روی فرم نیست .
مثلا ممکنه روی یک فریم باشه.
شما باید قبل از به دست اوردن هندل ابجکت .هندل این فریم رو به دست اورده و بعد هندل ابجکت رو به دست بیارین
به فرض یاهو. تکست باکس های اون مثل اینکه مسقیم روی فرم نیستن شما اگر برنامه ای که داده بودم رو اجرا کنین و روی یاهو ببرین ی اسم کلاسی به صورت عددی به شما نشون میده. برای منکه اینجوری بود. اومدم هندل رو به دست اوردم بعد ندل تکست باکس رو به دست اوردم درست شد.
3 مرحله. هندل پنجره
هندلاون لایه ایی که روی فرمش بود
هندل تست باکس
======

Private 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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()
Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&
lMainHwnd = FindWindow("YahooBuddyMain", vbNullString)
lEdit1 = FindWindowEx(lMainHwnd, 0&, "#32770", vbNullString)
lEdit1 = FindWindowEx(lEdit1, 0&, "Edit", vbNullString)
SendMessage lEdit1, WM_SETTEXT, 0&, "ID"
End Sub

سید حمید حق پرست
جمعه 26 اسفند 1390, 17:59 عصر
ممنونم از توضیح کاملتون واقعا عالی بود
از کجا میتونم مقاله ای یا فیلمی یا هرچیز برای یاد گرفتن پیدا کنم؟

بازم ازتون هم برای توضیح خوب و واضحتون و هم وقتی که برامون گذاشتید تشکر میکنم


یا علی (ع)

Veteran
جمعه 26 اسفند 1390, 19:15 عصر
سرچ کردم اما به چیزه خاصی نرسیدم.
اما میتونین نمونه سورس دانلود کنید. و از روی سورس نکاتی یاد بگیرید.
برای کار با پنجره و هندل این دسته از عملیات ها باید کار با
SendMessage
Sendmessagebynum
SendMessageByString
FindWindow
FindWindowEx
بلد باشید.

ASedJavad
جمعه 26 اسفند 1390, 20:10 عصر
میشه یه برنامه بنویسین که یه تکست باکس داشته باشه ... بعد با ی برنامه دیگه متنشو عوض کنید ؟
جالبه
اینجوری، من هیچ جوره نتونستم هندل تکست باکس رو بدست بیارم.

اینجوری یه هندل بدست میاد که با هندل واقعی تکست باکس کلی فرق میکنه.
حتی اسم کلاساش هم فرق میکنن (اگر چه یه جورایی اسمش شبیه اسم کلاس تکست باکسه)
چرا؟:متفکر:

Veteran
جمعه 26 اسفند 1390, 20:39 عصر
میدونی چرا نتونستی عوض کنی ؟ چون با وی بی میخوای متن تکست باکس یک برنامه ی دیگه ای به زبان وی بی رو عوض کنی
اسم کلاس ها اره یکی هست.
شما وقتی میخوای میخوای هندل پنجره اون یکی برنامه رو به دست بیاری چون اسم کلاس ها یکی هست میاد هندل همین برنامه ای که میخوای ازش به اون یکی برنامه متن ارسال کنی رو بر میگردنه
و موقعه ارسال متنی به اون یکی برنامه ارسال نمیشه

سید حمید حق پرست
جمعه 26 اسفند 1390, 21:17 عصر
میدونی چرا نتونستی عوض کنی ؟ چون با وی بی میخوای متن تکست باکس یک برنامه ی دیگه ای به زبان وی بی رو عوض کنی
اسم کلاس ها اره یکی هست.
شما وقتی میخوای میخوای هندل پنجره اون یکی برنامه رو به دست بیاری چون اسم کلاس ها یکی هست میاد هندل همین برنامه ای که میخوای ازش به اون یکی برنامه متن ارسال کنی رو بر میگردنه
و موقعه ارسال متنی به اون یکی برنامه ارسال نمیشه
هنگام اجرای پروژه ارسال میکنه اما هنگام کمپایل ارسال نمیکنه
مشکل حل نمیشه؟


یا علی (ع)

ASedJavad
جمعه 26 اسفند 1390, 21:30 عصر
میدونی چرا نتونستی عوض کنی ؟ چون با وی بی میخوای متن تکست باکس یک برنامه ی دیگه ای به زبان وی بی رو عوض کنی
اسم کلاس ها اره یکی هست.
شما وقتی میخوای میخوای هندل پنجره اون یکی برنامه رو به دست بیاری چون اسم کلاس ها یکی هست میاد هندل همین برنامه ای که میخوای ازش به اون یکی برنامه متن ارسال کنی رو بر میگردنه
و موقعه ارسال متنی به اون یکی برنامه ارسال نمیشه


چی شد؟!
اتفاقا نکتش اینه که اسم کلاسا یکی نیست.

Veteran
جمعه 26 اسفند 1390, 21:56 عصر
وی بی به وی بی گفتم.
ی پروزه باز کن ی تکست باکس بزار روی فرم
خب حالا میخوایم با ی برنامه دیگه به تکست باکس پروزه اولی متن ارسال کنیم
ی پروزه دیگه بزارید و فقط یک دکمه روش باشه
====
کدش
Private 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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()

Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&

lMainHwnd = FindWindow("ThunderFormDC", vbNullString)
Print lMainHwnd
lEdit1 = FindWindowEx(lMainHwnd, 0&, "ThunderTextBox", vbNullString)
Print lEdit1
SendMessage lEdit1, WM_SETTEXT, 0&, "New text string"
End Sub



خب ما روی دکمه کلیک میکنیم.
این اجرا میشه
lMainHwnd = FindWindow("ThunderFormDC", vbNullString)
Print lMainHwnd اجرا میشه
و هندل پنجره که مقدار اون تویlMainHwnd قرار داره رو چاپ میکنه
خب ما پیش خودمون فکر میکنیم پنجره پروزه اولی پیدا شد
بعد این اجرا میشه

lEdit1 = FindWindowEx(lMainHwnd, 0&, "ThunderTextBox", vbNullString)
میاد بر اساس مقدار هندلی که توی lMainHwnd قرار داره میخواد تکست باکس ر. پیدا کنه
بعد این Print lEdit1 مقدار بالایی lEdit1 رو چاپ میکنه اما 0 هست.دیگه چون 0 هست چیزی ارسال نمیشه به تکست باکس پروزه اولی
چرا ؟ مگه میشه ؟ ماکه توی پروزه اولی ی تکست باکس داشتیم چرا 0 ؟ چرا پیدا نکرد ؟
خب علت اینجاس که اسم کلاس های 2 تا پنجره یکی هست ThunderFormDC
و فوکس روی پروزه دومی که میخواستیم با اون متن ارسال کنیم هست
در نتیجه هندل همین فرم برگردونده میشه. و مقدار دوم 0 هست چرا که ما روی پروزه دومی فقط یک دکمه داشتیم. خبری از تکست باکس نبود به همین دلیل 0 هست حالا روی همین پروزه دومی ی تست باکس بزارید و برنامه رو اجرا و روی دکمه کلیک کنید میبینید که دیگه خبری از 0 نیست و مقدار جدید هست و متن ما توی تکست باکس قرار میگیره

setroyd
شنبه 27 اسفند 1390, 00:43 صبح
هر کدوم از دوستان مشکلی داره سورسش رو بزاره براش درست کنم اینجوری فکنم بهتر بفهمه .

سید حمید حق پرست
شنبه 27 اسفند 1390, 01:36 صبح
دوستان هیج راهی نیست با ویبی دو تا برنامه نوشت که از یکی متن به تکست باکس برنامه دیگر بفرستیم؟


یا علی (ع)

Veteran
شنبه 27 اسفند 1390, 01:42 صبح
چرا میشه.
با سورس برنامه توی پوشه 2 به سورس برنامه ای که توش پوشه 1 قرار داره متن ارسال کن

سید حمید حق پرست
شنبه 27 اسفند 1390, 01:57 صبح
ممنون ولی ارسال نمیکنه

مشکل از کجاست؟


یا علی (ع)

سید حمید حق پرست
شنبه 27 اسفند 1390, 02:00 صبح
با این کد تونستم ارسال کنم :
Private 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
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

Private Const WM_SETTEXT As Long = &HC

Private Sub Command1_Click()
Dim tWnd&, bWnd&
Dim lMainHwnd&
Dim lEdit1&
lMainHwnd = FindWindow("ThunderRT6FormDC", "form1")

lEdit1 = FindWindowEx(lMainHwnd, 0&, "ThunderRT6TextBox", vbNullString)

SendMessage lEdit1, WM_SETTEXT, 0&, Text1
End Sub

دلیلش چیه که کلاسها در سیستم من ThunderRT6FormDC و ThunderRT6TextBox هست ولی در سیستم شما ThunderFormDC و ThunderTextBox هست؟:گیج:
ممنونم


یا علی (ع)

محسن واژدی
شنبه 27 اسفند 1390, 08:29 صبح
دلیلش چیه که کلاسها در سیستم من ThunderRT6FormDC و ThunderRT6TextBox هست ولی در سیستم شما ThunderFormDC و ThunderTextBox هست؟:گیج:
سلام
کلاس اشیاء استاندارد در زمان طراحی با پیشوند Thunder و در برنامه کمپایل شده با ThunderRT6 شروع میشوند

موفق باشید

setroyd
شنبه 27 اسفند 1390, 11:01 صبح
شما با postmessage امتحان کن جای sendmessage با همون پارامترها شاید بشه نشد بگو برات مینویسم میزارم .

محسن واژدی
شنبه 27 اسفند 1390, 18:03 عصر
شما با postmessage امتحان کن جای sendmessage با همون پارامترها شاید بشه نشد بگو برات مینویسم میزارم . سلام
فکر نکنم فرقی مابین این دو تابع وجود داشته باشد، و تنها فرق این دو در زمان دریافت نتیجه است، یعنی در تابع Sendmessage تا قبل از پردازش پیام نتیجه ای برگشت داده نمیشود منتها در PostMessage نتیجه بلافاصله پس از ارسال پیام دریافت میشود که در هر دو صورت برنامه هدف پیام را به یک صورت دریافت میکند

موفق باشید

setroyd
یک شنبه 28 اسفند 1390, 10:55 صبح
در بعضی جاها Postmessage جواب میده تا sendmessage بخاطر همین که اون وایمیسته تا پیغام به پنجره ی مورد نظر برسه ولی اون یکی فقط پیغام رو میفرسته حتی بدون نتیجه !! شما این برنامه که نوشتم نگاه کن فرقش رو میبینی هم با post نوشتم هم با send ولی sendmeesage نمیتونه password char رو ور داره yahoo تو باز کن و قسمت password رو نگاه کن
ghalat رو با sendmessage نوشتم و dorost رو با post نوشتم . حتی برای پیغام WM_CLOSE هم post بهتر جواب میده اختلافی ندارن ولی در خیلی جاها یه اختلاف کوچیک میتونه برنامه رو خراب کنه !
و این همیشه یادمون باشه اگه sendmessage فرقی با post نداشت هیچ وقت 2 تا api برای انتقال message نوشته نمیشد یه هر توابعی دیگه .

محسن واژدی
یک شنبه 28 اسفند 1390, 11:29 صبح
در بعضی جاها Postmessage جواب میده تا sendmessage بخاطر همین که اون وایمیسته تا پیغام به پنجره ی مورد نظر برسه ولی اون یکی فقط پیغام رو میفرسته حتی بدون نتیجه !! شما این برنامه که نوشتم نگاه کن فرقش رو میبینی هم با post نوشتم هم با send ولی sendmeesage نمیتونه password char رو ور داره yahoo تو باز کن و قسمت password رو نگاه کن
ghalat رو با sendmessage نوشتم و dorost رو با post نوشتم . حتی برای پیغام WM_CLOSE هم post بهتر جواب میده اختلافی ندارن ولی در خیلی جاها یه اختلاف کوچیک میتونه برنامه رو خراب کنه !سلام
البته چون آقای حق پرست فقط میخواهند پیامی را به برنامه هدف ارسال کنند (نه اینکه نتیجه ای را دریافت کنند) فرقی نمیکند از کدام یک از این دو تابع استفاده شود


و این همیشه یادمون باشه اگه sendmessage فرقی با post نداشت هیچ وقت 2 تا api برای انتقال message نوشته نمیشد یه هر توابعی دیگه . البته بنده هم نگفتم هیچ فرقی با هم ندارند، همانطور که در پست شماره 39 هم عرض شد این دو تابع در ارسال پیام فرقی ندارند، تنها فرف آنها در دریافت نتیجه است:


the basic difference between PostMessage and SendMessage is that SendMessage sends a message to another window immediately by calling that window's procedure and waiting for it to return, whereas PostMessage queues the message in an MSG structure and returns immediatelyâ€"without waiting.

http://i.msdn.microsoft.com/Cc301431.cfig120001%28en-us,MSDN.10%29.gif

Reference: http://msdn.microsoft.com/en-us/magazine/cc301431.aspx
موفق باشید

Veteran
دوشنبه 29 اسفند 1390, 16:05 عصر
یک پروزه باز کنید و 3 تا تکست باکس بزارید روی فرم.
یک پروزه دیگه باز کنید و دوباره 3 تا تکست باکس بزارید و یک کامند باتن.
حالا میخوایم با پروزه دومی متنی رو در تکست باکس ها 1 و 2 و 3 وارد کنیم. و روی دکمه کلیک کنیم. متن وارد شده در تکست باکس ها 1 و 2 و 3 پروزه اولی قرار بگیره به صورت درست
میشه راهنمایی بفرمائین ؟
من هرکاری کردم نشد.نام کلاس ها یکی هست !

Veteran
دوشنبه 29 اسفند 1390, 22:31 عصر
دوستان گرامی میشه مارو راهنمایی کنید ؟

setroyd
سه شنبه 01 فروردین 1391, 01:15 صبح
چه راهنمایی !! کد رو براتون گذاشتم دیگه بجاش hwnd تکس باکس رو بزار .

Veteran
سه شنبه 01 فروردین 1391, 07:21 صبح
میخوام خودش hwnd تکست باکس هارو پیدا کنه!

setroyd
سه شنبه 01 فروردین 1391, 11:38 صبح
اینو به for each هم میتونی بگیری همه ی hwnd هاش رو تو برنامه بدون api Dim n As TextBox For Each n In Me.Controls MsgBox n.hWnd Next

Veteran
سه شنبه 01 فروردین 1391, 12:10 عصر
فکر نکنم!
من میخوایم به صورت اتوماتیک هندل مثلا 5 تا تکست باکس در یک برنامه دیگه با اسم کلاس های یکسان رو به دست بیارم.
مثلا اسم همه کلاس ها Tedit هست.در یک برنامه ای که اصلا با vb نوشته نشده.

سید حمید حق پرست
سه شنبه 02 خرداد 1391, 22:12 عصر
با عرض سلام
دوستان این روش رو رو یاهو مسنجر ورژن 11.5.0.192 امتحان کردم اما جواب نداد
به نظر شما مشکل کجاست؟

یا علی (ع)

Veteran
چهارشنبه 03 خرداد 1391, 10:14 صبح
کدوم روش ؟

سید حمید حق پرست
چهارشنبه 03 خرداد 1391, 18:37 عصر
همین روشی که شما لطف کردید و توضیح دادید


یا علی (ع)

Veteran
چهارشنبه 03 خرداد 1391, 21:03 عصر
به علت اپدیت یاهو,
یکم کد باید دست خوش تغییرات قرار میگرفت.

سید حمید حق پرست
شنبه 06 خرداد 1391, 12:49 عصر
سلام
خیلی ممنون از راهنمایهاتون . از روی کد فهمیدم که CTabbedIMHost به برنامه اضافه شده بود
یک سوال دیگه داشتم . یک نرم افزار شکلکهای یاهو رو دیدم که خیلی جالب بود . طرز کارش اینگونه بود که هرجا که میخواستی با کلیک روی شکلکها متن شکلک جای مورد نظر کپی بشه باید اول روی تکست باکس مورد نظر (مثل این ورژن جدید یاهو و ورژن قبلی و قبلی تر ، مثل نوتپد . مثل ورد ، و ...) کلیک کرده و با زدن کلیدهای Ctrl و F او تکست انتخاب میشد و با کلیک روی شکلک ها متن در تکستی که انتخاب کردیم کپی میشد
. به نظرم خیلی جالب اومد . برنامه با دلفی نوشته شده بود . ایرانی هم بود . هالا سوالم اینه که ایا با وی بی هم امکان هست؟ (امکان همه چیز هست) . بنده هرچی فکرکردم و کد نویسی کردم نتونستم . فکر کنم اگه هم با وی بی بشه سخت باشه

بازم ممنونم از راهنمایهاتون:قلب:

یا علی (ع)

Veteran
شنبه 06 خرداد 1391, 13:40 عصر
نوشتمش/
اونقدرا هم سخت نبود/:لبخند:

شما اول هرکجا که خواستین مثلا تکست باکس پنجره پی ام یاهو. فوکس رو روی اون میندازید.یعنی به حالت انتخاب در میارید و وقتی فوکس روی پنجره یاهو و یا هر پنجره دیگه ای بود کلید F3 بزنید. بعد در برنامه با توجه به ایکن ها که به صورت option button هستند.
یکی رو انتخاب کنید و روی کامند باتن کلیک کنید.

Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const WM_SETTEXT As Long = &HC
Dim Myhwnd As Double
Dim Opt As Integer
Private Sub Command1_Click()
SendMessage Myhwnd, WM_SETTEXT, 0&, Option1(Opt).Caption
End Sub
Private Sub Option1_Click(Index As Integer)
Opt = Index
End Sub
Private Sub Timer1_Timer()
Dim Mus As POINTAPI
GetCursorPos Mus
If GetAsyncKeyState(vbKeyF3) Then
Myhwnd = WindowFromPoint(Mus.X, Mus.Y)
End If
End Sub


پروزه رو دانلود کنید.

سید حمید حق پرست
جمعه 26 خرداد 1391, 22:58 عصر
با عرض سلام
این کد فقط در یاهو مسنجر جواب میده
برای برنامه های دیگه مثل نوتپد باید چکار کنم؟
با سپاس
مشکل حل شد . اشتباه از خودم بود . درست کار میکنه:قهقهه: ممنون:قلب:

یا علی (ع)

MohammadGh2011
جمعه 26 خرداد 1391, 23:38 عصر
با عرض سلام
این کد فقط در یاهو مسنجر جواب میده
برای برنامه های دیگه مثل نوتپد باید چکار کنم؟
با سپاس

یا علی (ع)

سلام عليکم
اقاي حق پرست پست 6 همين تاپيک رو نگاهي بندازيد براي نودپده.
فقط من پست هاي قبل رو نخوندم تا ببينم منظور شما دقيقا چيه ولي تو پست 6 هم ميشه متن به نودپد ارسال کرد.



موفق باشيد

سید حمید حق پرست
جمعه 26 خرداد 1391, 23:40 عصر
یه سوال دیگه داشتم
ایا میشه نام کلید روی اون پنجره رو بدست اورد؟
مثلا فکر کنید سه تا مسنجر داریم . و میخوایم این برنامه رو هرسه کار کنه به طوری که کلید سند هم بزنه . باید اول نام کلید رو بدست بیاریم . ایا این کار میشه و اگه اره یه راهنمایی بکنید

با سپاس


یا علی(ع)

Veteran
شنبه 27 خرداد 1391, 00:05 صبح
سلام.
مشکلی پیش اومده ؟

سید حمید حق پرست
شنبه 27 خرداد 1391, 00:26 صبح
سلام
نه مشکل حل شد
مونده بودم که چطور کلید سند رو بدست بیارم برای ارسال خودکار (یعنی خود برنامه کلید سند رو بدست بیاره) که الان کلید اینتر به فکرم اومد برای اینکار
تنها مشکل اینه که اگه فوکوس موس روی تکست یاهو یا برنامه های دیگه که مد نظر کاربر هست نباشه برنامه کار نمیکنه .ایا بدون دخالت موس اینکار رو انجام داد؟ . فکر کنم نشه چون برنامه وابسته به موس هست

یا علی (ع)

سید حمید حق پرست
شنبه 27 خرداد 1391, 00:43 صبح
سلام عليکم
اقاي حق پرست پست 6 همين تاپيک رو نگاهي بندازيد براي نودپده.
فقط من پست هاي قبل رو نخوندم تا ببينم منظور شما دقيقا چيه ولي تو پست 6 هم ميشه متن به نودپد ارسال کرد.

ممنون از شما دوست عزیز
منظور بنده این هست برنامه طوری باشد که کاربر به دلخواه در هر تکست برنامه ای که خواست کد شکلک را با برنامه وارد کند که اقای Veteran (http://barnamenevis.org/member.php?160830-Veteran) عزیز زحمت کشیدن و کد رو گزاشتن
این برنامه ای که شما گذاشتید هم عالیه و خیلی ازش استفاده کردم:قلب:
یا علی (ع)

Veteran
شنبه 27 خرداد 1391, 01:00 صبح
تنها مشکل اینه که اگه فوکوس موس روی تکست یاهو یا برنامه های دیگه که مد نظر کاربر هست نباشه برنامه کار نمیکنه .ایا بدون دخالت موس اینکار رو انجام داد؟ . فکر کنم نشه چون برنامه وابسته به موس هست

بیشتر توضیح میدی ؟
درست متوجه نشدم

سید حمید حق پرست
شنبه 27 خرداد 1391, 01:15 صبح
منظورم اینه که هنگام زدن کلید f3 فرقی نمیکنه که پنجره پی ام یاهوو بالای برنامه های دیگه که اجرا هستن باشه یا نه . این . چون فقط هنگام زدن کلید f3 باید فوکوس موس روی تکست مورد نظر باشد تا تکست تو برنامه ست بشه و متن به تکست ارسال بشه
میخواستم بدونم میشه که فقط با بالا قرار دادن پنجره ای که تکست مورد نظر داخلش مثله پنجرا پی ام و کلیک داخل تکست و بعد زدن کلید f3 تکست باکس ست بشه و متن بهش ارسال بشه و فرقی نکنه که موس روی تکست فوکوس کرده باشه یا نه


یه مشکل دیگه هم داره فرض کنید در Option1 یکی از Caption عدد 1 رو نوشتیم و برنامه رو اجرا میکنیم ، حالا Caption که عدد یک برای سند هست انتخاب میکنیم حالا اگر پشت سر هم روی کامند باتن کلیک کنیم فقط عدد 1 هست در صورتی که من میخوام (یعنی اینجوری بهتره) مثلا اگه کاربر 4 بار پشت سر هم روی کامند باتن کلیک کرد در تکست پنجره یاهو به جای 1 به تعداد کلید زده شده یعنی : 1111 فرستاده بشه (در کل جاگزاری نکنه بلکه جمع کنه)

یا علی (ع)

Veteran
شنبه 27 خرداد 1391, 08:59 صبح
میخواستم بدونم میشه که فقط با بالا قرار دادن پنجره ای که تکست مورد نظر داخلش مثله پنجرا پی ام و کلیک داخل تکست و بعد زدن کلید f3 تکست باکس ست بشه و متن بهش ارسال بشه و فرقی نکنه که موس روی تکست فوکوس کرده باشه یا نه

از اول هم به همین شکل بود/
ما توی تکست باکس مورد نظر کلیک میکردیم f3 میزدیم.هندل سیو میشد بعد متن به همون هندل ارسال میشد.
اون نرم افزاری که با هندل تکست باکسشو رو ورداشتیم مهم نیست فوکس روش باشه یا نه.ما قبلا هندل رونو سیو کردیم
ما فقط یک بار باید روی تکست باکس بریم و f3 بزنیم.دیگه کاری به کارش نداریم.
If GetAsyncKeyState(vbKeyF3) Then
Myhwnd = WindowFromPoint(Mus.X, Mus.Y)
End If

اگه کاربر f3 زد
هندل شی با این مختصات x,y رو بریز توی متغیر
مثلا
در مختصات
1230,850
تکست باکس یاهو هست.
حالا بیا هندل اونو به وسیله WindowFromPoint به دست بیار
Myhwnd = WindowFromPoint(Mus.X, Mus.Y)

بعد که سیو شد دیگه مهم نیست که پنجره موس یا فوکس روش باشه یا نه ما هندل رو داریم.


یه مشکل دیگه هم داره فرض کنید در Option1 یکی از Caption عدد 1 رو نوشتیم و برنامه رو اجرا میکنیم ، حالا Caption که عدد یک برای سند هست انتخاب میکنیم حالا اگر پشت سر هم روی کامند باتن کلیک کنیم فقط عدد 1 هست در صورتی که من میخوام (یعنی اینجوری بهتره) مثلا اگه کاربر 4 بار پشت سر هم روی کامند باتن کلیک کرد در تکست پنجره یاهو به جای 1 به تعداد کلید زده شده یعنی : 1111 فرستاده بشه (در کل جاگزاری نکنه بلکه جمع کنه
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function Sendmessagebynum& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Private Declare Function SendMessageByString& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)
Private Const WM_SETTEXT As Long = &HC
Dim Myhwnd As Double
Dim Opt As Integer
Private Sub Command1_Click()
SendMessage Myhwnd, WM_SETTEXT, 0&, Gettxt(Myhwnd) & Option1(Opt).Caption
End Sub
Private Sub Option1_Click(Index As Integer)
Opt = Index
End Sub
Private Sub Timer1_Timer()
Dim Mus As POINTAPI
GetCursorPos Mus
If GetAsyncKeyState(vbKeyF3) Then
Myhwnd = WindowFromPoint(Mus.X, Mus.Y)
End If
End Sub
Function Gettxt(hwnd) As String
On Error Resume Next
GetTrim = Sendmessagebynum(hwnd, 14, 0&, 0&)
TrimSpace$ = Space$(GetTrim)
GetString = SendMessageByString(hwnd, 13, GetTrim + 1, TrimSpace$)
Gettxt = TrimSpace$
End Function

سید حمید حق پرست
شنبه 27 خرداد 1391, 10:42 صبح
خیلی ممنون از راهنماییهاتون
توضیح خیلی کاملی بود
ببخشید یک سوال دیگه داشتم (شرمنده سوالاتم زیاد شد:قلب:)
میخوام هنگام زدن کامند باتن بعد از ارسال متن به تکست باکس کلید اینتر زده بشه . خودم فکر کردم با کد زیر میشه که "" مانع کار میشه . کد :

Private Sub Command1_Click()
SendMessage Myhwnd, WM_SETTEXT, 0&, Gettxt(Myhwnd) & Option1(Opt).Caption
SendMessage Myhwnd, WM_SETTEXT, 0&, Gettxt(Myhwnd) & SendKeys "70"
End Sub

کد اسکی مثال بود (کلید f هستش)
بازم معزرت به خاطر زیاد شدن سوالاتم و ممنون از راهنماییهاتون و کمکهای بی نظیرتون :قلب:

یا علی (ع)

Veteran
شنبه 27 خرداد 1391, 11:03 صبح
میخوام هنگام زدن کامند باتن بعد از ارسال متن به تکست باکس کلید اینتر زده بشه
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function GetCursorPos Lib "user32.dll" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32.dll" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function Sendmessagebynum& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Private Declare Function SendMessageByString& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const WM_SETTEXT As Long = &HC
Const VK_ENTER = 13
Dim Myhwnd As Double
Dim Opt As Integer
Private Sub Command1_Click()
SendMessage Myhwnd, WM_SETTEXT, 0&, Gettxt(Myhwnd) & Option1(Opt).Caption
SetForegroundWindow Myhwnd
keybd_event VK_ENTER, 0, 0, 0
keybd_event VK_ENTER, 0, KEYEVENTF_KEYUP, 0
End Sub
Private Sub Option1_Click(Index As Integer)
Opt = Index
End Sub
Private Sub Timer1_Timer()
Dim Mus As POINTAPI
GetCursorPos Mus
If GetAsyncKeyState(vbKeyF3) Then
Myhwnd = WindowFromPoint(Mus.X, Mus.Y)
End If
End Sub
Function Gettxt(hwnd) As String
On Error Resume Next
GetTrim = Sendmessagebynum(hwnd, 14, 0&, 0&)
TrimSpace$ = Space$(GetTrim)
GetString = SendMessageByString(hwnd, 13, GetTrim + 1, TrimSpace$)
Gettxt = TrimSpace$
End Function