View Full Version : تست وجود صفحه کلید فارسی و فعال کردنش
saffari2005
چهارشنبه 25 بهمن 1385, 10:58 صبح
سلام
این موضوع رو من تو سایت سرچ کردم و تو VB به اون جواب داده بودن البته قسمت دومشو .حالا اینجا می پزسم تا هر دو قسمتشو بدونم و همچنین تو c++ جواب داشته باشم.البته می دونم از loadkeyboarlayout واسه اون استفاده می کنن اما اگه میشه یه نفر کامل جواب منو بده.من می خوام کارای زیر انجام بشه:
1) تست وجود (نصب) صفحه کلید فارسی و نصب اون در صورت عدم وجود
2) فعال کردن صفحه کلید فارسی در لحظه ی مورد نیاز ( مثلا فوکاس شدن edit )
saffari2005
چهارشنبه 25 بهمن 1385, 11:21 صبح
روشی که به نظر من می رسه اینه که با GetKeyboardLayoutList موجودی ها رو بگیرم و یکی یکی چک کنم که آیا فارسی هست یا نه و اگه نبود با LoadKeybpardLayout نصبش کنم.این روش درسته؟
sasan_vm
یک شنبه 29 بهمن 1385, 15:37 عصر
:لبخندساده:
AnsiString __fastcall GetLanguageName()
{
char str[10];
AnsiString lName;
GetKeyboardLayoutName(str);
lName = str;
return lName;
}
//---------------------------------------------------------------------------
bool __fastcall IsArabic()
{
return (GetLanguageName() == "00000401");
}
//---------------------------------------------------------------------------
bool __fastcall IsEnglish()
{
return (GetLanguageName() == "00000409");
}
//---------------------------------------------------------------------------
bool __fastcall IsFarsi()
{
return (GetLanguageName() == "00000429");
}
//---------------------------------------------------------------------------
bool __fastcall SetFarsi()
{
HKL hKL;
bool bResult;
// Try to set Farsi
hKL = LoadKeyboardLayout("00000429", KLF_ACTIVATE);
ActivateKeyboardLayout(hKL, KLF_REORDER);
bResult = IsFarsi();
// If failed try to set arabic
if (!bResult)
{
hKL = LoadKeyboardLayout("00000401", KLF_ACTIVATE);
ActivateKeyboardLayout(hKL, KLF_REORDER);
bResult = IsArabic();
}
return bResult;
}
//---------------------------------------------------------------------------
bool __fastcall SetEnglish()
{
HKL hKL;
// Try to set English
hKL = LoadKeyboardLayout("00000409", KLF_ACTIVATE);
ActivateKeyboardLayout(hKL, KLF_REORDER);
return IsEnglish();
}
//---------------------------------------------------------------------------
void __fastcall SetLanguage(const AnsiString Str)
{
HKL hKL;
// Try to set Language
hKL = LoadKeyboardLayout(Str.c_str(), KLF_ACTIVATE);
ActivateKeyboardLayout(hKL, KLF_REORDER);
}
//---------------------------------------------------------------------------
به جای AnsiString در BCB می توانید از معادل آن string در VC استفاه کنید.
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.