رافعی مهدی
شنبه 02 آذر 1387, 11:39 صبح
موضوعي كه در اين پست مطرح شده پاسخي است به اين مشكل كه چگونه مي توان با كيبورد ارتباط مناسبي برقرار كرد؟ راستش اين موضوع وقت زيادي از من گرفت، اين بود كه تصميم گرفتم نتايج رو يكجا در اختيار دوستان قرار بدهم.
__________________________________________________ __________________
برقراري ارتباط با كيبورد شامل دو مبحث زير ميشود:
1- دريافت صحيح كليد فشرده شده (يا تركيبي از چند كليد)
2- ارسال فرماني در جهت شبيه سازي فشردن هر كليد دلخواه (يا تركيبي از كليدها)
1- چگونه بفهميم كه چه كليدي از كيبورد فشرده شده است؟
طبيعتاً پيش از هر كار ديگري به سراغ رويداد KeyDown ميرويم. بياييد اين رويداد را مشخصاً در مورد كليدهاي شيفت بررسي كنيم. چراكه در مورد كليدهاي مربوط به اعداد يا حروف مشكل خاصي وجود ندارد.
private void SomeControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Shift) // 1
{
// Some codes
}
if (e.KeyCode == Keys.ShiftKey) // 2
{
// Some codes
}
if (e.KeyCode == Keys.LShiftKey) // 3
{
// Some codes
}
if (e.KeyCode == Keys.RShiftKey) // 4
{
// Some codes
}
}
اكنون با اجراي كد فوق دكمه هاي شيفت چپ و راست را بطور جداگانه فشار مي دهيم. از ميان عبارات شرطي نوشته شده در كد فوق تنها شرط دوم درست و ما بقي نادرستند، در حالي كه انتظار مي رفت عبارات شرطي 3 و 4 به ترتيب با فشرده شدن كليدهاي شيفت چپ و راست درست باشند.
براي حل اين مشكل پاسخهايي در سايت هاي مختلف ارائه شده است. راه حلهاي ارائه شده به دو دستهي اصلي تقسيم بندي ميشوند:
الف- در دست گرفتن كنترل صفحه كليد (Keyboard Hooking)
ب- استفاده از توابع API
__________________________________________________ __________________
برقراري ارتباط با كيبورد شامل دو مبحث زير ميشود:
1- دريافت صحيح كليد فشرده شده (يا تركيبي از چند كليد)
2- ارسال فرماني در جهت شبيه سازي فشردن هر كليد دلخواه (يا تركيبي از كليدها)
1- چگونه بفهميم كه چه كليدي از كيبورد فشرده شده است؟
طبيعتاً پيش از هر كار ديگري به سراغ رويداد KeyDown ميرويم. بياييد اين رويداد را مشخصاً در مورد كليدهاي شيفت بررسي كنيم. چراكه در مورد كليدهاي مربوط به اعداد يا حروف مشكل خاصي وجود ندارد.
private void SomeControl_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Shift) // 1
{
// Some codes
}
if (e.KeyCode == Keys.ShiftKey) // 2
{
// Some codes
}
if (e.KeyCode == Keys.LShiftKey) // 3
{
// Some codes
}
if (e.KeyCode == Keys.RShiftKey) // 4
{
// Some codes
}
}
اكنون با اجراي كد فوق دكمه هاي شيفت چپ و راست را بطور جداگانه فشار مي دهيم. از ميان عبارات شرطي نوشته شده در كد فوق تنها شرط دوم درست و ما بقي نادرستند، در حالي كه انتظار مي رفت عبارات شرطي 3 و 4 به ترتيب با فشرده شدن كليدهاي شيفت چپ و راست درست باشند.
براي حل اين مشكل پاسخهايي در سايت هاي مختلف ارائه شده است. راه حلهاي ارائه شده به دو دستهي اصلي تقسيم بندي ميشوند:
الف- در دست گرفتن كنترل صفحه كليد (Keyboard Hooking)
ب- استفاده از توابع API