PDA

View Full Version : مبتدی: مشکل GetWindowText با حروف فارسی



Collector
چهارشنبه 23 اسفند 1391, 09:31 صبح
سلام
من با تابع GetWindowText تایتل پنجره ای که میخوام را در میارم اما با حروف فارسی مشکل دارم
وقتی توی فایل مینویسم مشکل ایجاد میشه
چکار کنم که یونیکد را هم ساپورت کنه؟

AliAskari1375
چهارشنبه 23 اسفند 1391, 11:23 صبح
به جای GetWindowText بنویس GetWindowTextW .

Collector
چهارشنبه 23 اسفند 1391, 15:41 عصر
به جای GetWindowText بنویس GetWindowTextW .

بازم درست نشد
AppnedToFile تابع با فارسی مشکل نداره
hwnd هندل پنجره قبلی را نگه میداره (ربطی به این فارسی نداره)


void Get_Window()
{
wchar_t buffer[3000];
wchar_t buff[3000];
int len;
int ArrLen = 3000;
null=0; k=0;

if(hwnd != GetForegroundWindow())
{
hwnd = GetForegroundWindow();
len = GetWindowTextLength(hwnd) + 1;

if(len<ArrLen)
{
GetWindowTextW(hwnd, (LPWSTR)buffer, len);

for(int i=0 ; i<ArrLen; i++)
buff[i] = L'\0';

buff[k] = L'\n'; k++;
buff[k] = L'\n'; k++;
buff[k] = L'='; k++;
buff[k] = L'='; k++;
buff[k] = L'='; k++;
buff[k] = L'='; k++;
buff[k] = L'='; k++;
buff[k] = L'='; k++;
buff[k] = L'='; k++;
buff[k] = L' '; k++;

for(int i=0; i<len; i++)
if((int)buffer[i] == 0)
null++;

for(int i=0; i<(len + (null))*2; i++)
if((int)buffer[i] > 0 && (int)buffer[i] < 222 && (int)buffer[i] != 171)
{
buff[k] = buffer[i];
k++;
}

buff[k] = L'\n';
AppnedToFile(buff);
}
}
}

AliAskari1375
چهارشنبه 23 اسفند 1391, 20:18 عصر
داداش وقتی داری از یونیکد استفاده می کنی باید از نوع کاراکتر گسترده استفاده کنی . توی دو خط سوم و چهارم به جای char بنویس wchar_t .
قبل از هر کارکتر هم یه L بذار :
L'\n'

Collector
چهارشنبه 23 اسفند 1391, 21:22 عصر
داداش وقتی داری از یونیکد استفاده می کنی باید از نوع کاراکتر گسترده استفاده کنی . توی دو خط سوم و چهارم به جای char بنویس wchar_t .
قبل از هر کارکتر هم یه L بذار :
L'\n'

تابع ذخیره در فایل را به این صورت است و پست 3 را اصلاح کردم اما این دفعه اصلا هیچ کاراکتری به جای حروف فارسی ذخیره نمیکنه.

void AppnedToFile(wchar_t *str)
{
FILE *in;
in = fopen((const char *)Path_Key().c_str(), "a+");
fputws(str, in);
fclose(in);
}

AliAskari1375
پنج شنبه 24 اسفند 1391, 09:31 صبح
باز هم همون مشکل قبل :



void AppnedToFile(wchar_t *str)
{
FILE *in;
in = _wfopen((const wchar_t *)Path_Key().c_str(), L"a+");
fputws(str, in);
fclose(in);
}

Collector
پنج شنبه 24 اسفند 1391, 09:55 صبح
باز هم همون مشکل قبل :



void AppnedToFile(wchar_t *str)
{
FILE *in;
in = _wfopen((const wchar_t *)Path_Key().c_str(), L"a+");
fputws(str, in);
fclose(in);
}

الان با این تغییر در تابع نوشتن در فایل دیگه داخل فایل نمینویسه
اینجا یک سوال پیش آمده اینکه نام فایل چه ربطی به محتوا داره؟

AliAskari1375
پنج شنبه 24 اسفند 1391, 11:30 صبح
ببخشید درست میگی . تنها جایی که باید تغییر میدادی اینجاست :


in = fopen((const char *)Path_Key().c_str(), "a+, ccs=UTF-8");

منبع :

http://msdn.microsoft.com/en-us/library/vstudio/yeby3zcb.aspx