Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WinAPI] GetCurrentConsoleFont wyparowało?

Ostatnio zmodyfikowano 2011-10-20 14:07
Autor Wiadomość
pekfos
Temat założony przez niniejszego użytkownika
[WinAPI] GetCurrentConsoleFont wyparowało?
» 2011-10-19 21:28:41
C/C++
GetCurrentConsoleFont( hwnd, FALSE, & cfi );

error: 'GetCurrentConsoleFont' was not declared in this scope

postępowałem zgodnie z MSDN:
C/C++
#define _WIN32_WINNT 0x0500
ale mimo to nie mogę skompilować mojego programu. W googlach dużo o tym nie ma i na dodatek tej funkcji nie ma w pliku nagłówkowym w którym powinna być wg MSDN.
Jak to naprawić? (GCC 4.6.1)
P-42339
DejaVu
» 2011-10-19 22:21:45
C/C++
#define _WIN32_WINNT 0x500
#include <windows.h>
Jeżeli nie działa i dalej otrzymujesz ten komunikat to znaczy, że biblioteki, które posiadasz są stare. Jeżeli piszesz pod Windowsa sugeruję używanie Visual C++. Oczywiście problem możesz rozwiązać sobie poprzez dynamiczne pobranie adresu funkcji z biblioteki Kernel32.dll za pomocą funkcji » WinAPIGetProcAddress.
P-42342
pekfos
Temat założony przez niniejszego użytkownika
» 2011-10-20 09:23:02
C/C++
BOOL WINAPI GetCurrentConsoleFont( HWND hwnd, BOOL b, PCONSOLE_FONT_INFO lpcfi ) {
    typedef BOOL WINAPI( * gccf )( HWND, BOOL, PCONSOLE_FONT_INFO );
    HMODULE kernel32 = LoadLibrary( "kernel32" );
    if( !kernel32 ) return FALSE;
   
    gccf fun =( gccf ) GetProcAddress( kernel32, "GetCurrentConsoleFont" );
    if( !fun ) return FALSE;
   
    BOOL ret = fun( hwnd, b, lpcfi );
    FreeLibrary( kernel32 );
    return ret;
}

nie działa a debugger mówi:
fun = 0x768ea8f4 <KERNEL32!GetCurrentConsoleFontEx>
czyli jeżeli dobrze rozumiem ładuje się nie ta funkcja. Jak załadować GetCurrentConsoleFont()? uruchomić pod XP gdzie nie ma GetCurrentConsoleFontEx()?
P-42346
DejaVu
» 2011-10-20 09:32:21
C/C++
#include <windows.h>

BOOL WINAPI MyGetCurrentConsoleFont( HWND hwnd, BOOL b, PCONSOLE_FONT_INFO lpcfi )
{
   
    typedef BOOL( WINAPI * gccf )( HWND, BOOL, PCONSOLE_FONT_INFO );
    HMODULE kernel32 = LoadLibraryA( "kernel32" );
    if( !kernel32 ) return FALSE;
   
    gccf fun =( gccf ) GetProcAddress( kernel32, "GetCurrentConsoleFont" );
    if( !fun ) return FALSE;
   
    BOOL ret = fun( hwnd, b, lpcfi );
    FreeLibrary( kernel32 );
    return ret;
}

int main()
{
    CONSOLE_FONT_INFO fi;
    MyGetCurrentConsoleFont( NULL, FALSE, & fi );
    return 0;
}
P-42347
pekfos
Temat założony przez niniejszego użytkownika
» 2011-10-20 14:07:01
W szkole wpadłem na to że GetCurrentConsoleFont nie bierze HWND tylko HANDLE a zatem inne wartości trzeba podać.
Ale wciąż ładuje się GetCurrentConsoleFontEx(). Uruchomię na XP i zobaczę co się stanie :)

//edit: na XP ładuje się GetCurrentConsoleFont() ale w polu dwFontSize nie ma wtedy rozmiaru znaku (powinno być 8,12) tylko rozmiar okna konsoli w znakach (80,25 to na znak za dużo :P). Spróbuje z GetConsoleFontSize()

//edit2: GetConsoleFontSize() też wyparowało, ehh..

//edit3: Na Viście ładuje się GetCurrentConsoleFontEx() a na XP GetCurrentConsoleFont() a wraz z GetConsoleFontSize() program działa i tu i tu.

close.
P-42348
« 1 »
  Strona 1 z 1