PDA

View Full Version : مبتدی: تشخیص زبان ویندوز



Collector
دوشنبه 14 اسفند 1391, 19:58 عصر
سلام
من چطوری میتونم زبان فعال ویندوز را تشخیص بدم(مثلا فارسی یا انگلیسی) توی api چیز خاصی پیدا نکردم.

developing
چهارشنبه 16 اسفند 1391, 11:34 صبح
با سلام

با استفاده از تابع زیر می توانید زبان ویندوز در برنامه ی خودتان را تشخیص دهید.

GetKeyboardLayout(0)

مقدار برگشتی یک عدد است

در ضمن این تابع در سرآیند windows می باشد

برای اطلاعات بیشتر به لینک زیر مراجعه نمایید.

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646296%28v=vs.85%29.aspx

Collector
چهارشنبه 16 اسفند 1391, 12:42 عصر
با سلام

با استفاده از تابع زیر می توانید زبان ویندوز در برنامه ی خودتان را تشخیص دهید.

GetKeyboardLayout(0)

مقدار برگشتی یک عدد است



از این تابع قبلا استفاده کردم
وقتی زبان را تغییر میدم همواره تابع عدد ثابتی را برمیگرداند.
کد زیر را نگاه کنید

void main()
{
HKL hl;
while(1)
{
system("cls");
hl = GetKeyboardLayout(0);
std::cout<<hl;
}

system("pause");
}

Collector
سه شنبه 22 اسفند 1391, 21:35 عصر
این کد ظاهرا باید بتونه این کار را انجام بده اما تابع GetUserPreferredUILanguages را در Kernel32 نمیشناسه.مشکل کجاست

ULONG numLanguages = 0;
DWORD cchLanguagesBuffer = 0;
BOOL hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLanguages, NULL, &cchLanguagesBuffer);

if (hr) {
WCHAR* pwszLanguagesBuffer = new WCHAR[cchLanguagesBuffer];
hr = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, &numLanguages, pwszLanguagesBuffer, &cchLanguagesBuffer);
if (hr) {
if (wcsncmp(pwszLanguagesBuffer, L"en-", 3) == 0) { // any English: en-*
cout<<"EN"<<endl;
} else if (wcscmp(pwszLanguagesBuffer, L"pt-BR") == 0) { // Brazilian dialect of Portuguese
cout<<"BR"<<endl;
}
delete pwszLanguagesBuffer;
}
}