PDA

View Full Version : Cut, copy, and paste using API functions



samiasoft
جمعه 08 آبان 1394, 16:03 عصر
سلام دوستان

همانطور که از عنوان مشخصه من به دنبال این API های برای استفاده در دستورات SEND MESSAGE هستم.

اینارو من از VB6 تبدیل کردم ایا اینا درسته ؟

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Object) As Long
Sub ControlCopy(ByVal hwnd As Long)
SendMessage(hwnd, WM_COPY, 0, 0&)
End Sub


' Cut the contents of a control into the Clipboard
Sub ControlCut(ByVal hwnd As Long)
SendMessage(hwnd, WM_CUT, 0, 0&)
End Sub


' Paste the contents of the Clipboard into a control
Sub ControlPaste(ByVal hwnd As Long)
SendMessage(hwnd, WM_PASTE, 0, 0&)
End Sub


' Delete the selected contents of a control
Sub ControlDelete(ByVal hwnd As Long)
SendMessage(hwnd, WM_CLEAR, 0, 0&)
End Sub


اگر صحیح هست متاسفانه در دستور زیر خاصیت hwnd برای ریچ تکست باکس رو نمیتونم اعمال کنم !
ControlCopy(rtb1.hwnd)

مشکل کار به نظرتون کجاست؟

در تاپیکی هم گفته شده که معادل hwnd بدین صورته :

Handle.ToInt32

اما متوجه نشدم چطوری اینو در دستور قبلی جایگزین کنم.ممنون میشم راهنمایی کنید

ژیار رحیمی
پنج شنبه 14 آبان 1394, 11:19 صبح
سلام دوست گرامی اگر منظور cut,copyو.. متن داخل تکست باکس هست چرا از کلاس clipboard دانت استفاده نمیکنی ؟
https://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard(v=vs.110).aspx

samiasoft
پنج شنبه 14 آبان 1394, 13:23 عصر
ممنون از توجه شما دوست عزیز

در واقع من با میخواستم با بهره گیری از تابع سندمسیج هندل اون ریچ تکست باکس یا شی مورد نظر روی فرمم رو بدست بیارم.


SendMessage(rtb1.hwnd, WM_COPY, 0, 0&)
در وی بی 6 برای بدست اوردن هندل شی مورد نظر از دستور زیر استفاده میکردیم اما الان در وی بی دات نت باید چطوری عمل کرد؟ اگر اینو راهنمایی کنید مشکلم حل میشه


بدست اوردن هندل ریچ تکست باکس موجود در فرم وی بی 6 :

text1.Text = RichTextBox1.hWnd

میبنید که در vb.net این خاصیت hWnd موجود نیست:ناراحت:

حالا من اومدم در vb.net اینطور نوشتم : (که به نظرم این دستور برای پیدا کردن هندل فرم هست نه اشیا)
RichTextBox1.IsHandleCreated.ToString()
TextBox1.Text = Handle.ToInt32
اما مقداری که بهم میده مقدار هندلی نیست که من دنبالشم.

برای مثال با برنامه Get Object ClassName Caption که هندل ریچ تکست باکس رو بدست میاریم 2 مقدار برای هندل میده همانند تصویر زیر :
با اون کد vb.net هم هندل مقدار 19926354 رو میده. درحالی که من به دنبال دستوری هستم که مقدار هندل 10684530 رو به من بده.



http://s6.picofile.com/file/8221091368/2015_11_05_143527.gif

همچنین موردی که برای من جالب هستش اینه که فقط این مشکل رو من در ریچ تکست باکس دارم وگرنه الان برای بدست اوردن هندل مثلا لیست باکس این دستور رو که در vb.net استفاده میکنم به راحتی مقدار هندلشو بهم میده :

TextBox1.Text = ListBox1.Handle.ToString()

حالا من نمیدونم چرا در ریچ تکست باکس این خاصیت هندل رو پیدا نمیکنم:لبخند:

samiasoft
پنج شنبه 14 آبان 1394, 14:31 عصر
دوستان بالاخره مشکل رو پیدا کردم:قهقهه:

چند روز پیش هم برام اینطوری شده بود! نگو مشکل از این بوده که من در خاصیت ها گزینه common رو انتخاب کرده بودم که در این حالت بقیه خاصیت ها رو نشون نمیداده و من فکر میکردم باید از دستورات جایگزین استفاده کنیم.
http://s6.picofile.com/file/8221099126/vb_net_cc.gif

با درج کد زیر مشکلم حل شد :

rtb1.Handle.ToString()