PDA

View Full Version : خواندن صفحه کلید در سرور و اجرای آن در کلاینت



iman_Delphi7
یک شنبه 12 خرداد 1387, 09:12 صبح
با سلام و خسته نباشید.

من داشتم یه برنامه کلاینت - سرور می نوشتم که در سمت سرور هر کلیدی زده بشه ، برای کلاینت فرستاده می شه و کلاینت با تابع Keybd_Event که از توابع API هست همون کلید و شبیه سازی می کنه. انگار که دقیقا همون کلید زده شده.

ولی من نمی دونم چطور کد کلیدهای ترکیبی رو بدست بیارم. فرضا اگه در سمت سرور Alt+Ctrl+Del زده شد باید کد ترکیبی این کلیدها فرستاده بشه و در کامپیوتر کلاینت پنجره Task Manager باز بشه.

حالا اگه کد ترکیبی هم نشد ، اگه بشه کد همه کلیدها رو بدست آورد هم بد نیست.
منظورم از همه کلیدها کلیدهای Arrow ، Alt ، Ctrl ، F1 ... F12 ، Caps Lock و ... هست.
چون اینجوری میشه کلیدها رو جدا فرستاد. یعنی به جای اینکه کد ترکیبی Alt+Ctrl+Del رو بفرستیم ، می تونیم اول کد Alt ، بعد کد Ctrl و آخر هم کد Del رو فرستاد.
البته باید KeyDown یا KeyUp را بفرستیم تا درست کار کنه.

می خواستم بدونم چطور می شه زده شدن این کلیدها رو تشخیص بدیم و کدشون رو بدست بیاریم و اینکه چطور می شه با تابع Keybd_Event این کلیدها رو شبیه سازی کرد.

آخه تو KeyPress فقط فشرده شدن یه سری کلید خاص تشخیص داده می شه.

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

taha
یک شنبه 12 خرداد 1387, 09:36 صبح
سلام
اول یه نگاهی به http://barnamenevis.org/forum/showthread.php?t=60326 بکن.

iman_Delphi7
شنبه 18 خرداد 1387, 07:56 صبح
با سلام
ممنون از راهنماییتون
مشکل من تا حد زیادی حل شد
فقط 2 تا سوال دیگه داشتم.
یکی اینکه وقتی فرضا کلید CapsLock رو شبیه سازی می کنم چراغ CapsLock روشن میشه ولی وقتی دوباره همین کارو می کنم خاموش نمیشه. جالب اینجاست که وقتی می خوام از رو کیبورد خاموشش کنم باید 2 بار این کلید رو فشار بدم در صورتی که چون الان کلید روشنه باید با یک بار فشردن کلید چراغش خاموش شه. البته این مشکل فقط در مورد این کلید نیست. مثلا کلید Windows یا کلید Ctrl هم همینطوره. می خواستم بدونم چطوری می تونم این مشکل رو حلش کنم. برای شبیه سازی هر کلید هم 2 بار تابع Keybd_Event رو صدا می زنم. یک بار بصورت (Keybd_Event(Key_Code,1,0,0 و یک بار هم بجای پارامتر "1" ثابت KEYEVENTF_KEYUP قرار می دم. یعنی یک بار KeyDown و یک بارم Up .

سوال دوم هم اینه که چطور می تونم جلوی اجرا شدن بعضی کلیدها رو بگیرم.مثلا وقتی Server تو پنجره کنترل هست نباید فرضا Alt+Ctrl+Del رو که زد TaskManager خودشم باز بشه. یعنی می خوام تا وقتی که تو پنجره کنترل هستیم کلیدها کاری نکنن و فقط اونا رو برای کلاینت بفرستم . اگه راهنماییم کنین ممنون می شم.
با تشکر فراوان