Visual Studio a Code Blocks

0

Witam mam mały problem z Visual studio mianowicie:

Tą funkcje dodajemy w Visual Studio i Code Blocks:

BOOL CALLBACK EnumWindowWnd(HWND hwnd,LPARAM lParam){
char buffer[10];
char *message2 = "hello";
sprintf(buffer, "say %s", message2);
SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)buffer);
return true;
}

Wywyłujemy ją zaraz po otworzeniu się okna czyli zaraz za SowWindow() poprzez:

EnumWindows(&EnumWindowWnd,0)

Cały czas mówię o czystych projektach dodanych w visualu i code blocks jako aplikacje windows.
Funkcja ta miała wykrywać wszystkie okna otwarte w windows i zmienia im nagłówek na belce.

Ale efekt jest taki ze to działa tylko w Code Block bo w Visualu to tez działa ale robi jakieś chińskie kwadraciki zamiast napisu.

Proszę o radę czemu tak się dzieje. Dzięki.

0

Visual domyślnie używa unicode, a CodeBlocks nie. Twój kod nie jest do końca poprawny. Można go przedstawić w 3 odmianach:
Z narzuconym kodowaniem ansi:

BOOL CALLBACK EnumWindowWnd(HWND hwnd,LPARAM lParam){
    char buffer[10];
    char *message2 = "hello";
    sprintf(buffer, "say %s", message2);
    SendMessageA(hwnd, WM_SETTEXT, 0, (LPARAM)buffer);
    return true;
}

Z narzuconym kodowaniem unicode:

BOOL CALLBACK EnumWindowWnd(HWND hwnd,LPARAM lParam){
    wchar_t buffer[10];
    wchar_t *message2 = L"hello";
    wsprintfW(buffer, L"say %s", message2);
    SendMessageW(hwnd, WM_SETTEXT, 0, (LPARAM)buffer);
    return true;
}

Bez narzuconego kodowania (kodowanie zgodne z ustawionym):

BOOL CALLBACK EnumWindowWnd(HWND hwnd,LPARAM lParam){
    TCHAR buffer[10];
    LPTSTR message2 = TEXT("hello");
    wsprintf(buffer, TEXT("say %s"), message2);
    SendMessage(hwnd, WM_SETTEXT, 0, (LPARAM)buffer);
    return true;
}

Jak nie wiesz co wybrać, wybierz trzecią wersje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1