PDA

View Full Version : SendKeys و Ctrl+Shift



jk
پنج شنبه 08 مرداد 1388, 19:00 عصر
عبارت ctrl+shift را با استفاده از دستور sendkeys به کار میبرم ولی در همه حال ctrl+shift سمت چپ عمل می کند. می خواستم بدونم به چه شکل می تونم ctrl+shift سمت راست را مورد استفاده قرار دهم؟

mmssoft
پنج شنبه 08 مرداد 1388, 19:11 عصر
اگر Ctrl و Shift سمت چپ را بزنیم به شکل چپ چین عمل می کنه و اگر Ctrl و Shift سمت راست را بزنیم به شکل راست چین عمل می کند.

jk
پنج شنبه 08 مرداد 1388, 22:55 عصر
حالا با sendkeys چه پارامتری رو باید بفرستم تا ctrl+shift سمت راستی عمل بکند؟

vbhamed
جمعه 09 مرداد 1388, 04:57 صبح
سلام

اگر منظورت فارسي و انگليسي كردن صفحه كليد براي تايپ هست اين راه اصولي نيست، از برنامه زير استفاده كن
اما اگر فقط مي خواي متن موجود رو رو به راست به چپ يا چپ به راست كني مي توني خاصيت RightToLeft و Alignment رو تنظيم كني

jk
جمعه 09 مرداد 1388, 09:56 صبح
بنده از کامپونت Microsoft Rich TextBox control استفاده می کنم این کامپوننت خاصیت RightToLeft ندارد و عباراتی به مانند سلام :1: که در برنامه فوق درست نشان داده می شود در این کامپوننت به شکل :سلام :1 نشان داده میشود برای اصلاح این مورد کلیدهای ctrl+shift سمت راستی را انتخاب می کنم و عبارت درست نشان داده می شود. حال بنده می خوام ctrl+shift سمت راستی را با استفاده از دستور sendkeys ارسال بکنم.


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

sohrab o
جمعه 09 مرداد 1388, 11:09 صبح
RichTextBox1.SelAlignment = 1
این کدو بنویس همون کار Right2Left میکنه!

sohrab o
جمعه 09 مرداد 1388, 11:13 صبح
http://barnamenevis.org/forum/showthread.php?t=37168&page=13
اینجا هم یک برنامه گذاشتم واسه کار با RichEdit ، دانلود کنی ضرر نداره

jk
جمعه 09 مرداد 1388, 12:14 عصر
RichTextBox1.SelAlignment = 1
این کدو بنویس همون کار Right2Left میکنه!

برای اینکه متن رو درست نشون بده علاوه بر مورد فوق باید یک ctrl+shift سمت راست رو هم فشار بدهی

حال سوالم اینکه چطوری باید این ctrl+shift سمت راست رو از طریق برنامه اعمال کرد. روش نرمالش همان استفاده از دستور sendkey است و موقعی این دستور رو اجرا می کنی ctrl+shift سمت چپ اجرا می شه! سمت راستش رو موندم؟

sohrab o
جمعه 09 مرداد 1388, 13:08 عصر
مگه متنو چطوری نشون میشه؟میشه نمونه بزاری واست درستش کنیم

jk
جمعه 09 مرداد 1388, 15:13 عصر
شما دو آبجکت TextBox معمولی و RichTextbox را در نظر بگیرید. در textbox عبارت سلام :1: را می نویسید و بعد این عبارت را از طریق برنامه به richtext انتقال میدهید. در richtext عبارت به شکل :سلام :1 ظاهر می گردد. این حالت زمانی اصلاح می گردد که Ctrl+Shift سمت راست را فشار بدهید. و به غیر این حالت بنده روشی دیگری برای اصلاح پیدا نکردم.

بنده می خواهم از طریق خود برنامه ctrl+shift سمت راست رو ارسال بکنم به جای فشار دستی Ctrl+shift


مثال عینی:

jk
شنبه 10 مرداد 1388, 17:42 عصر
ارسال Ctrl+Shift سمت راست از طریق کدنویسی



Option Explicit

Private Const VK_RSHIFT = &HA1
Private Const VK_RCONTROL = &HA3
Private Const KEYEVENTF_KEYUP = &H2

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Sub Command2_Click()

'Object.SetFocus

Dim intScanRCtrl As Integer
Dim intScanRShift As Integer

intScanRCtrl = MapVirtualKey(VK_RCONTROL, 0)
intScanRShift = MapVirtualKey(VK_RSHIFT, 0)

keybd_event VK_RCONTROL, intScanRCtrl, 0, 0 ' Right CTRL down
keybd_event VK_RSHIFT, intScanRShift, 0, 0 ' Right Shift down

keybd_event VK_RCONTROL, intScanRCtrl, KEYEVENTF_KEYUP, 0
keybd_event VK_RSHIFT, intScanRShift, KEYEVENTF_KEYUP, 0
End Sub

Alirezanet
سه شنبه 25 مرداد 1390, 02:43 صبح
ارسال Ctrl+Shift سمت راست از طریق کدنویسی



Option Explicit

Private Const VK_RSHIFT = &HA1
Private Const VK_RCONTROL = &HA3
Private Const KEYEVENTF_KEYUP = &H2

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Sub Command2_Click()

'Object.SetFocus

Dim intScanRCtrl As Integer
Dim intScanRShift As Integer

intScanRCtrl = MapVirtualKey(VK_RCONTROL, 0)
intScanRShift = MapVirtualKey(VK_RSHIFT, 0)

keybd_event VK_RCONTROL, intScanRCtrl, 0, 0 ' Right CTRL down
keybd_event VK_RSHIFT, intScanRShift, 0, 0 ' Right Shift down

keybd_event VK_RCONTROL, intScanRCtrl, KEYEVENTF_KEYUP, 0
keybd_event VK_RSHIFT, intScanRShift, KEYEVENTF_KEYUP, 0
End Sub


متاسفانه این API تو ویندوز 7 کار نمیکنه ! :گریه:
توی VB6 یادمه میتونستیم با SendKeys عباراتی مثل {RSHIFT} رو هم ارسال کنیم ولی متاسفانه .Net این رو Support نمیکنه !! :متعجب:
باز اگه کسی راهه دیگه ای برای اینکار به غیر از استفاده از API ها سراغ داشت بگه ممنون میشم !
(البته منظورم دات نت کارهای عزیزه)

setroyd
سه شنبه 25 مرداد 1390, 15:34 عصر
Option Explicit
Private Const VK_RSHIFT = &HA1 ' Right Shift
Private Const VK_RCONTROL = &HA3 ' Right Control
Private Const KEYEVENTF_KEYUP = &H2
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long

Private Sub r_GotFocus()

Dim intScanRCtrl As Integer
Dim intScanRShift As Integer
intScanRCtrl = MapVirtualKey(VK_RCONTROL, 0)
intScanRShift = MapVirtualKey(VK_RSHIFT, 0)

keybd_event VK_RCONTROL, intScanRCtrl, 0, 0 ' Right CTRL down
keybd_event VK_RSHIFT, intScanRShift, 0, 0 ' Right Shift down
keybd_event VK_RCONTROL, intScanRCtrl, KEYEVENTF_KEYUP, 0
keybd_event VK_RSHIFT, intScanRShift, KEYEVENTF_KEYUP, 0

End Sub

Alirezanet
چهارشنبه 26 مرداد 1390, 05:19 صبح
دوستان عزیز 1 راه عالیییییییییییییییییییییی ییییییییییییی به صورت کاملا تصادفی پیدا کردم ! بعد از 6 ماه سرچ !!!!! :گیج:
این Right to Left
SendKey(^+)
این هم Left To Right
SendKey(+^)

ramzdar
چهارشنبه 26 مرداد 1390, 11:09 صبح
اما انگار این روش جدیدتون به درد RichTextBox نمیخوره.
فقط روی TextBox جواب میده.
من که هر کار کردم جواب نداد.

Alirezanet
چهارشنبه 26 مرداد 1390, 13:03 عصر
روی هر چیزی که با زدن کلید های Shift+Ctrl . راست به چپ بشه این جواب میده چون همین کلید هارو فشار میده!

setroyd
چهارشنبه 26 مرداد 1390, 15:23 عصر
شما سعی کن خودت یه user control بسازی اینجوری فکنم بهتر باشه .