PDA

View Full Version : تغييركليد هاي صفحه كليد



mahboube
یک شنبه 26 دی 1389, 10:20 صبح
سلام
چطوري ميشه كليدهاي كيبورد رو عوض كرد؟مثلا كليد "ب" رو كرد "م"!
نمي خوام kbdfa.dll راكپي كنم يا از نرم افزار استفاده كنم.
ميخوام تو خود برنامه با كدنويسي اينكارو بكنم.

tooraj_azizi_1035
یک شنبه 26 دی 1389, 10:32 صبح
سلام،
وقتی یه کلید رو فشار می دی، به ترتیب رویداد های زیر اتفاق می افته:

KeyDown
KeyPress (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx)
KeyUp (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keyup.aspx)
این Signature یک متد هست که فشردن کلید رو Handle می کنه:

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{


شما باید مقدار e.KeyCode هر حرف رو معادل حرفی که می خوای قرار بدی. مثلاً A مساوی 65 هست اگه e.KeyCode رو مساوی 66 قرار بدی اونوقت به جای A حرف B تایپ می شه. اگه فرمولی داری که در مورد تمام حروف صادق هست از اون فرمول برای تبدیل استفاده کن اگه نه از switch استفاده کن. :قلب:

mahboube
یک شنبه 26 دی 1389, 10:54 صبح
می خوام تو کل برنامه کیبورد رو عوض کنم.
روی هیچ ایونتی نمی خوام بنویسم.
میوام کیبوردو عوض کنم.

tooraj_azizi_1035
یک شنبه 26 دی 1389, 11:13 صبح
از این لینک Microsoft Keyboard Layout Creator رو دانلود کن و Layout مورد نظر رو طراحی کن و بعد تو برنامه لود کن:

http://www.microsoft.com/downloads/en/details.aspx?FamilyId=8BE579AA-780D-4253-9E0A-E17E51DB2223&displaylang=en

لود Layout صفحه کلید:
http://www.csharphelp.com/2007/01/keyboardlayout-and-language-selector/

روش ساخت Layout:
http://www.ehow.com/how_6507836_microsoft-keyboard-layout-creator-tutorial.html

mahboube
یک شنبه 26 دی 1389, 11:41 صبح
تو این لینکه هیچی درمورد لود Layout (اونی که خودمون درست کردیم)صفحه کلید نیست.layout
چطوری میشه لایوتی که درست کردموازتو برنامه لود کنم؟؟؟

mahboube
یک شنبه 26 دی 1389, 12:57 عصر
بعدشم بااین نرم افزار نمیشه کیبورد فارسی درست کرد.

tooraj_azizi_1035
یک شنبه 26 دی 1389, 15:34 عصر
چرا نمی شه؟
شما Keyboard Layout فارسی رو باید سفرشی بکنی یعنی Edit کنی به وضعیت دلخواه بعد با استفاده از توابع user32.dll اونارو تو برنامه لود کنی. البته وقتی برنامه خارج شد باید Keyboard Layout رو Unload کنی:
http://ilgthegeek.livius.net/2010/05/31/editing-windows-custom-keyboard-layouts/
http://ilgthegeek.files.wordpress.com/2010/05/msklc-file2.png?w=630&h=312

http://ilgthegeek.files.wordpress.com/2010/05/msklc-edit.png?w=463&h=337
http://ilgthegeek.files.wordpress.com/2010/05/msklc-deadkey.png?w=548&h=519
http://ilgthegeek.files.wordpress.com/2010/05/msklc-project.png?w=630&h=312

mahboube
دوشنبه 27 دی 1389, 13:29 عصر
کیبورد فارسی نمیشه درست کرد:
ایخ خطاررو میده:

ERROR: 'VK_SPACE' in Shift State 'Shift' must be made up of white space character(s), but is defined as '‌' (U+200c) instead.

mahboube
دوشنبه 27 دی 1389, 13:53 عصر
اين نرم افزارهاي تصحيح حروف كيبورد بهچه صورت عمل ميكنند؟؟
دكمه هايي كه كاربر انتخاب ميكنه رو كجا مينويسن؟؟

mahboube
دوشنبه 27 دی 1389, 15:13 عصر
مثلا برنامه tray layout .
وقتی اجراش میکنی تازمانی که اجرا هست کلیدهای کیبورد رو استتاندارد میکنه و حتی میشه هر کلیدی رو که خواستی تغییر بده؟
این برنامه چطوری کار میکنه؟
توی رجیستری چیزی مینویسه یا توی فایل kbdfa.dll؟؟؟
آقا هیشکی نظری نداره؟؟این برنامه چطور کارمیکنه؟؟
65195

mahboube
سه شنبه 28 دی 1389, 09:10 صبح
اگه بخایم هر کلیدی که کاربر میزنه چک بشه و تغییر داده بشه باید از چه توابعی استفاده کرد؟
درواقع چطور می شه بافر صفحه کلید رو دستکاری کرد؟؟
میشه؟؟

mahboube
سه شنبه 28 دی 1389, 14:01 عصر
آقا من خفه کردم خودمو!!!!
این نرم افزار های که کیبورد رو تغییر میدن چطوری کار میکنن؟؟!!!!‍
مسپله به این مزخرفی تاحالا به تورم نخورده بود!!:عصبانی++:

mahboube
چهارشنبه 29 دی 1389, 09:39 صبح
فکر میکنم این نرم افزارها کیبورد رو هوک میکنن.هرکلیدی که زده میشه رو بررسی میکنن و اگه لازم بود تغییر میدن.
فقط نمی دونم بعداز تغییر چیکار میکنن که تو کلا ویندوز اعمال میشه(یعنی مثلا اگر کلیدa رو تبدیل به b کردن هرجای ویندوز که a رو بزنیم b چاپ میشه!
برای برنامه فعال میفرستنش؟؟

mahboube
چهارشنبه 29 دی 1389, 11:03 صبح
ایول به خودم.اصلا عاشق خودمم.
دقیقا با هوک انجام شد.
از کلاس این برنامه براهوک استفاده کردم:

http://www.codeproject.com/KB/cs/CSLLKeyboardHook.aspx

و بعد از هوک کردن کلید رو تغییر می دوم وبا دستورsendkey برای برنامه فعال میفرستتمش:


if (e.KeyCode == Keys.B)
System.Windows.Forms.SendKeys.Send(Keys.A.ToString ());


به سلامتی خودم...:تشویق:

tooraj_azizi_1035
چهارشنبه 29 دی 1389, 11:14 صبح
شما کد بالا رو تو کدوم قسمت از برنامتون نوشتید؟

mahboube
چهارشنبه 29 دی 1389, 11:24 صبح
ببین اون برنامه رو که بگیری خودت متوجه میشی.
یه کلاس ڄه اسم globalKeyboardHook.cs داره که به برنامت add ش کن. بعد توی form_load ت اینا رو بنویس:


gkh.HookedKeys.Add(Keys.D);
//gkh.HookedKeys.Add(Keys.B);
gkh.KeyDown += newKeyEventHandler(gkh_KeyDown);
gkh.KeyUp += newKeyEventHandler(gkh_KeyUp);

وقتی این کلیدا زده شه تابع های gkh_KeyDown وgkh_KeyUp که خودمون تعریف میکنیم اجرا میشن:



void gkh_KeyUp(object sender, KeyEventArgs e)
{}
void gkh_KeyDown(object sender, KeyEventArgs e)
{}


کد بالا رو هم تو این توابع مینویسیم.

mahboube
چهارشنبه 29 دی 1389, 11:27 صبح
حالا یه سوال تو این خط برای اینکه بخوام بگم یه کاراکتر فارسی مثلا کاراکتر 1740 که همون "ی" فارسی هست رو جایگزین کن.چطوری باید بگم:



if (e.KeyCode == Keys.B)
System.Windows.Forms.SendKeys.Send(؟؟؟؟؟؟()) ;

mahboube
چهارشنبه 29 دی 1389, 11:38 صبح
حالا یه سوال تو این خط برای اینکه بخوام بگم یه کاراکتر فارسی مثلا کاراکتر 1740 که همون "ی" فارسی هست رو جایگزین کن.چطوری باید بگم:



if (e.KeyCode == Keys.B)
System.Windows.Forms.SendKeys.Send(؟؟؟؟؟؟()) ;




این شکلی میشه:



Char ch = (Char)1740;
if (e.KeyCode == Keys.D)
System.Windows.Forms.SendKeys.Send(ch.ToString());

mahboube
چهارشنبه 29 دی 1389, 12:08 عصر
دوستان میشه بی زحمت این برنامه رو روسیستمتون اجرا کنید.بعد حرف "ک" و"ی" رو بزنید و نتیجشو بمن بگید؟
(توی همین برنامه یا هرجای سیستم حرفارو بزنید (word و...)فرق نداره.)ممنون میشم.

بعد یه سوال:وقتی داریم از توابع user32 مثل همین SetWindowsHookEx استفاده میکینم ممکنه رو بعضی سیستمها مشکلی به وجود بیاد؟؟

mahboube
چهارشنبه 29 دی 1389, 15:23 عصر
من واقعا سپاپگذارم!!یک نفر نبود یک فایل exe رو اجرا کنه؟؟؟؟!!!!
به من بگه درست کار میکنه یانه؟

ricky22
جمعه 01 بهمن 1389, 19:21 عصر
من واقعا سپاپگذارم!!یک نفر نبود یک فایل exe رو اجرا کنه؟؟؟؟!!!!
به من بگه درست کار میکنه یانه؟
سلام.
وقتی ک , ی را می زنم کلا 8 9 تا ک یا ی send میشه.
در ضمن چه زبان فارسی باشه چه انگلیسی نتیجه فرقی نداره.

ricky22
جمعه 01 بهمن 1389, 19:28 عصر
دوست عزیز من چند سال پیش با VB6 و با استفاده از این (http://msdn.microsoft.com/en-us/library/ms646293%28v=vs.85%29.aspx)API کاری که شما می خواستید انجام بدید شبیه اون رو انجام دادم.
GetAsyncKeyState


تستش کنید.

mahboube
شنبه 02 بهمن 1389, 08:46 صبح
سلام.
وقتی ک , ی را می زنم کلا 8 9 تا ک یا ی send میشه.
در ضمن چه زبان فارسی باشه چه انگلیسی نتیجه فرقی نداره.

مرسی که چک کردی.اون فاسی و انگلیسیشو و کلیدای ژ و پ رو درست کردم. فقط متوجه نشدم چرا چندبار میزنه.من زیاد اجراش کردم.
ببین لطفا اینم چک کن.
به اون لینکم سر میزم.مرسی

ricky22
شنبه 02 بهمن 1389, 14:55 عصر
مرسی که چک کردی.اون فاسی و انگلیسیشو و کلیدای ژ و پ رو درست کردم. فقط متوجه نشدم چرا چندبار میزنه.من زیاد اجراش کردم.
ببین لطفا اینم چک کن.
به اون لینکم سر میزم.مرسی
مثل قبل نتیجه داد.
فقط وقتی ژ می زنم هم ژ می زنه هم تقسیم.
هم این ورژن هم قبلی هم بار اول در win 7 قفل می کنه!
موفق باشی.

mahboube
شنبه 02 بهمن 1389, 16:00 عصر
شما رو سون تست کردی؟؟رو xp چطور؟
جالبه نمی دونم چرا چند بار میزنه؟!!!!
اون api که گفته بودیو نرسیدم چک کنم.کارش چیه؟

ricky22
شنبه 02 بهمن 1389, 16:50 عصر
شما رو سون تست کردی؟؟رو xp چطور؟
جالبه نمی دونم چرا چند بار میزنه؟!!!!
اون api که گفته بودیو نرسیدم چک کنم.کارش چیه؟
XP ندارم.
من سوال شما در صحفه اول نخوانده بودم.
اگر می خواید که KeyBoard را Hook کنید و به جای یک Key یک Key دیگر را Send کنید به نظرم از این (http://www.codeproject.com/KB/cs/globalhook.aspx)DLL استفاده کنید (همراه با مثاله).

mahboube
سه شنبه 12 بهمن 1389, 09:43 صبح
كدوم DLL??
براي هوك كردن كيبورد از همين توابعي استفاده ميشه كه تو اين برنامه هست.
ولي اگر يك كليد مثلا "ژ" پشت سرهم فشرده شه(يعني دستتو بزاري روش و برنداري)خطاي زيرو ميده:
كسي نظري نداره؟؟

A callback was made on a garbage collected delegate of type 'keyboardhook!Utilities.globalKeyboardHook+keyboar dHookProc::Invoke'. This may cause application crashes, corruption and data loss. When passing delegates to unmanaged code, they must be kept alive by the managed application until it is guaranteed that they will never be called.