PDA

View Full Version : سوال: چگونگي ايجاد تمايز بين Shift چپ و راست در SendKeys



رافعی مهدی
دوشنبه 20 آبان 1387, 10:06 صبح
با عرض سلام خدمت دوستان عزيز

توضيح:
در متد Send از كلاس SendKeys براي دكمه هاي Shift و Control بترتيب كدهاي + و ^ در نظر گرفته شده ولي بين دكمه هاي Shift چپ و راست تفاوتي قائل نشده است. در حالي كه در Keys enum اين تفاوت منظور شده و بين Keys.LShiftKey و Keys.RShiftKey تمايز وجود دارد.

سؤال:
آيا ميشه دكمه هاي Shift چپ يا راست را بطور مشخص Send كرد؟



.

رافعی مهدی
سه شنبه 21 آبان 1387, 08:34 صبح
براي اين كار از تابع keybd_event (از توابع API) به شكل زير استفاده كردم.



keybd_event(VK_RSHIFT, 0, KEYEVENTF_KEYDOWN, 0);

keybd_event(VK_LSHIFT, 0, KEYEVENTF_KEYDOWN, 0);

ولي باز هم بين Shift چپ و راست تفاوتي بوجود نيامد! :متفکر:

pars.engineer
سه شنبه 21 آبان 1387, 18:03 عصر
سلام
به لينكهاي زير نگاهي بياندازيد، البته من خودم وقت نداشتم چك كنم كه جواب مي دهد يا خير، ولي شما لطف كنيد اگر جواب گرفتيد اينجا بگذاريد تا ديگران هم استفاده نمايند.
http://www.codeguru.com/forum/showthread.php?t=181352
http://www.gamedev.net/community/forums/topic.asp?topic_id=333780

موفق باشيد.

رافعی مهدی
پنج شنبه 23 آبان 1387, 12:35 عصر
به روي چشم!
از پاسختان ممنونم ولي ...
در هيچ كدام از لينكهايي كه معرفي كرديد جواب روشني به اين سوال داده نشده بود.

SMRAH1
جمعه 24 آبان 1387, 17:57 عصر
سلام


براي اين كار از تابع keybd_event (از توابع API) به شكل زير استفاده كردم.

احتمالا چون hardware scan code (پارامتر دوم) رو صفر قرار دادی اینطوری شده.درضمن چطوری تست می کنی که تفاوت قائل میشه یا نمیشه!شاید راه آزمایش خطا باشه!
در ضمن یک نگاهی هم به SendInput (از توابع API ویندوز) بنداز (من فرصت تست رو فعلا ندارم!)

موفق باشید

رافعی مهدی
شنبه 25 آبان 1387, 11:57 صبح
سلام SMRAH
خب امتحان كردنش كار سختي نبود. من يه كنترل دارم كه با فشرده شدن دكمه هاي شيفت چپ و راست عكس العمل متفاوتي از خودش نشون ميده. و با بكار گيري keybd_event فقط انگار شيفت چپ (يا راست الان درست خاطرم نيست) فشرده ميشه.
اينجا (http://msdn.microsoft.com/en-us/library/ms646304(VS.85).aspx) راجع به keybd_event نوشته:



Windows NT/2000/XP/Vista:This function has been superseded. Use SendInput (http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx) instead.


ولي وقتي از SendInput هم استفاده كردم متوجه شدم كه تفاوتي قائل نميشه! بعدش يه جمله‌ي جالبتر اينجا (http://www.pinvoke.net/default.aspx/user32.SendInput) پيدا كردم:


* VK_L* & VK_R* - left and right Alt, Ctrl and Shift virtual keys. * Used only as parameters to GetAsyncKeyState() and GetKeyState(). * No other API or message will distinguish left and right keys in this way. */

حالا نميدونم ميتونم اين توابع رو يه جوري به كاري كه مي خواهم بكنم ربط بدم يا نه؟!!!

رافعی مهدی
شنبه 02 آذر 1387, 09:57 صبح
جواب اين سوال رو پيدا كردم :لبخند: هرچند كه هنوز مشكل اصلي‌ام حل نشده :ناراحت:
بعد از مدتي تاپيك گذاشتن توي فرومهاي مختلف بالاخره در فروم MSDN به جواب سوالم رسيدم:

HowToSendLeft/RightShiftKey (http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/dd6406e8-b6bf-4166-82a0-6d533def38a5)
راستي، اگر كسي جواب سوالي كه در اون تاپيك پرسيدم رو ميدونه، لطف كنه بگه!


__________________
الان كه اين پست رو ميگذارم آخرين پست در اون تاپيك با اين جملات شروع ميشه


Dear Guo Surfer,
I heed your help.
Although my initial question is replied ...