PDA

View Full Version : سوال: در اختيار گرفتن كيبورد كلاينت از طريق برنامه سرور و با سوكت پروگرمينگ



mah.yar
چهارشنبه 08 خرداد 1387, 14:14 عصر
من يه برنامه كلاينت سرور دارم كه ميخوام وقتي كه از سمت سرور هر كليدي رو فشار داديم همون كليدو سمت كلاينت فشار بدم.
براي اين كار من تو رويداد Key_down پيكچرباكس تعيين كردم كه كداسكي كليد فشار داده شده رو براي كلاينت بفرسته و تو كلاينت با تابع key-event اون كد اسكي رو اجرا كنه:




Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)
winsock1.SendData KeyCode
End Sub


اما مشكل اينجاست كه اين روش براي كليدهاي تركيبي جواب نميده مثلا ALT+Tab يا ALT+Ctrl+Del يا Shift+F3 و ... بزنم نميدونم چي بفرستم.
اگه كسي پيشنهادي در ابن رابطه داره ممنون ميشم.
چه جوري ميتونم تمام حالتهاي فشرده شده كيبورد رو بر روي كلاينت اجرا كنم.

vbhamed
چهارشنبه 08 خرداد 1387, 15:57 عصر
سلام
كاراكترهاي معادل كليد ها :

كليد Shift : +
كليد Ctrl : ^
كليد Alt : %

ASKaffash
چهارشنبه 08 خرداد 1387, 16:00 عصر
سلام
هردو را بفرستید مثل :

Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)
winsock1.SendData KeyCode & "," & Shift
End Sub

بعد هردو مقدار را دریافت کنید(با جداسازی ویرگول)

مهران رسا
چهارشنبه 08 خرداد 1387, 19:38 عصر
سلام .

مثلاً اگه خواستی Alt+F4 بفرستی می تونی اینطوری عمل کنی :




SendKeys "%{F4}"

mah.yar
چهارشنبه 08 خرداد 1387, 23:37 عصر
ضمن تشكر از دوستان
حالا كه shift و Keycode رو فرستاديم با چه تابعي برعكسشو انجام بديم يعني با داشتن اين دو مقدار كليدهاي فشار داده شده رو شبيه ساري كنيم.
ميتونيم keycode رو با تابع keybd_event اجرا كنيم


keybd_event keycode, 0, 0, 0

ولي خوب shift رو چي جوري اعمال كنيم?

vbhamed
پنج شنبه 09 خرداد 1387, 00:36 صبح
سلام
اينم راهش
اين كدها رو تو فرم بنويس و بعد از اجرا روي فرم كليك كن، براي نمونه Ctrl + Escape فرستاده شده


Option Explicit
Const KEYEVENTF_EXTENDEDKEY = &H1
Const KEYEVENTF_KEYUP = &H2

Const VK_LBUTTON = 1
Const VK_RBUTTON = 2
Const VK_CANCEL = 3
Const VK_MBUTTON = 4

Const VK_BACK = 8
Const VK_TAB = 9

Const VK_CLEAR = 12
Const VK_RETURN = 13

Const VK_SHIFT = 16
Const VK_CONTROL = 17
Const VK_MENU = 18
Const VK_PAUSE = 19
Const VK_CAPITAL = 20

Const VK_ESCAPE = 27

Const VK_SPACE = 32
Const VK_PRIOR = 33
Const VK_NEXT = 34
Const VK_END = 35
Const VK_HOME = 36
Const VK_LEFT = 37
Const VK_UP = 38
Const VK_RIGHT = 39
Const VK_DOWN = 40
Const VK_SELECT = 21
Const VK_PRINT = 42
Const VK_EXECUTE = 43
Const VK_SNAPSHOT = 44
Const VK_INSERT = 45
Const VK_DELETE = 46
Const VK_HELP = 47

Const VK_LWIN = 91
Const VK_RWIN = 92
Const VK_APPS = 93

Const VK_NUMPAD0 = 96
Const VK_NUMPAD1 = 97
Const VK_NUMPAD2 = 97
Const VK_NUMPAD3 = 98
Const VK_NUMPAD4 = 99
Const VK_NUMPAD5 = 100
Const VK_NUMPAD6 = 101
Const VK_NUMPAD7 = 102
Const VK_NUMPAD8 = 103
Const VK_NUMPAD9 = 104
Const VK_MULTIPLY = 105
Const VK_ADD = 106
Const VK_SEPARATOR = 107
Const VK_SUBTRACT = 108
Const VK_DECIMAL = 109
Const VK_DIVIDE = 110
Const VK_F1 = 111
Const VK_F2 = 113
Const VK_F3 = 114
Const VK_F4 = 115
Const VK_F5 = 116
Const VK_F6 = 117
Const VK_F7 = 118
Const VK_F8 = 119
Const VK_F9 = 120
Const VK_F10 = 121
Const VK_F11 = 122
Const VK_F12 = 123
Const VK_F13 = 124
Const VK_F14 = 125
Const VK_F15 = 126
Const VK_F16 = 127
Const VK_F17 = 128
Const VK_F18 = 129
Const VK_F19 = 130
Const VK_F20 = 131
Const VK_F21 = 132
Const VK_F22 = 133
Const VK_F23 = 134
Const VK_F24 = 135

Const VK_NUMLOCK = 144
Const VK_SCROLL = 145

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Form_Click()

keybd_event VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY, 0
keybd_event VK_ESCAPE, 0, KEYEVENTF_EXTENDEDKEY, 0

DoEvents

keybd_event VK_ESCAPE, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0

DoEvents

End Sub