PDA

View Full Version : سوال: مشکل با تغيير زبان کيبورد در ويندوز 7



sds1920
سه شنبه 02 اسفند 1390, 18:31 عصر
سلام.
من توي ويندوز XP براي تغيير زبان کيبورد از کد زير استفاده مي کنم و مشکلي هم ندارم.

InputLanguage.CurrentInputLanguage = InputLanguage.FromCulture(CultureInfo.CreateSpecif icCulture("fa-IR"));


ولي اين کد توي ويندوز 7 کار نمي ده و زبان کيبورد تغيير نمي کنه.
اگه از دوستان کسي نظري داره ممنون ميشم.

bizhanbirya
سه شنبه 02 اسفند 1390, 18:36 عصر
من تو یکی از برنامه هام از این کد استفاده کردم، اول فابل خارجی رو فراخوانی کردم و بعد دو تا تابع نوشتم و هر جا نیاز داستم از توابع استفاده میکردم

public class win32
{
[DllImport("user32.dll", SetLastError = true)]
public static extern int LoadKeyboardLayoutA(string pwszKLID, int flags);
}
public void farsi_convert()
{
System.PlatformID platform = Environment.OSVersion.Platform;
System.String windowstype = platform.ToString();
if (windowstype == "Win32NT")
win32.LoadKeyboardLayoutA("00000429", 1);
}
public void english_convert()
{
win32.LoadKeyboardLayoutA("00000409", 1);
}

sds1920
سه شنبه 02 اسفند 1390, 18:55 عصر
ميشه يه کمي بيشتهر توضيح بديد؟

bizhanbirya
سه شنبه 02 اسفند 1390, 20:30 عصر
توی فرمی که میخوای این حالت ایجاد بشه، قسمت using باید این دستور رو بنویسی


using System.Runtime.InteropServices;


بعد باید بعد از کلاس فرم یه کلاسی ایجاد کنی تا فایل dll موجود در خود ویندوز رو فرا خونی کنه و به وسیله ی اون زبان کیبورد رو فارسی یا انگلیسی بکنه، دقیقا همون فایل dll که وقتی shift+alt رو میگیری عمل میکنه


public class win32
{
[DllImport("user32.dll", SetLastError = true)]
public static extern int LoadKeyboardLayoutA(string pwszKLID, int flags);
}


بعد از این حالا میتونی دو تا تابع معرفی کنی، یکی برای فارسی کردن کیبورد و یکی هم برای انگلیسی کردنش

تابع فارسی


public void farsi_convert()
{
System.PlatformID platform = Environment.OSVersion.Platform;
System.String windowstype = platform.ToString();
if (windowstype == "Win32NT")
win32.LoadKeyboardLayoutA("00000429", 1);
}

تابع بالا میگه اگه ویندوز از نوع win32nt بود که شامل ویندوز 7 هم میشه با استفاده از فابل dll اینو فارسی کن



تابع انگلیسی


public void english_convert()
{
win32.LoadKeyboardLayoutA("00000409", 1);
}


حالا یه مثال واست میزنم
به عنوان مثال تو یه فرمی داری که میخوای وقتی کاربر با کلید تب روی تکس باکسی از اون فوکوس کرد زبان کیبورد به صورت اتومات فارسی یا انگلیسی بشه

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


if (e.KeyData == Keys.Tab)
{
farsi_convert();
}


تابع رو هر جا که نیاز داری فراخوانی میکنی، این طوری زبان کیبوردت تغییر میکنه، بازم اگه توضیح بیشتر میخوای بگو تا بیشتر واست باز کنم

sds1920
سه شنبه 02 اسفند 1390, 21:23 عصر
ممنون.مشکلم using System.Runtime.InteropServices; بود که حل شد.