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

Qt C++ Windowa.h klawiatura

Ostatnio zmodyfikowano 2016-04-17 09:35
Autor Wiadomość
Kefirek
Temat założony przez niniejszego użytkownika
Qt C++ Windowa.h klawiatura
» 2016-04-14 20:09:04
Poniższy kod jest sczytaniem naciśniętych klawiszy klawiatury(pochodzi z toutoriala).
Wynik działania: wyświetlenie naciśniętych znaków na klawiaturze.
Znaki wyświetlają się podwójnie to znaczy raz przy naciśnięciu i drugi przy puszczeniu klawisza.
I tu moje pytanko jak zrobić aby tylko raz znak się pojawiał na wyjściu konsoli przy naciśnięciu klawisza.
Poza tym felerem jest  brak polskich znaków.
C/C++
#include <QCoreApplication>
#include <QDebug>
#include <QTime>
#include <QChar>
#include <iostream>
#include <windows.h>
#include <QSettings>
#pragma comment(lib, "user32.lib")

HHOOK hHook = NULL;

using namespace std;
void UpdateKeyState( BYTE * keystate, int keycode )
{
    keystate[ keycode ] = GetKeyState( keycode );
}

LRESULT CALLBACK MyLowLevelKeyBoardProc( int nCode, WPARAM wParam, LPARAM lParam )
{
    //WPARAM is WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP
    //LARAM is the key information
   
    //Get the key information
    KBDLLHOOKSTRUCT cKey = *(( KBDLLHOOKSTRUCT * ) lParam );
    wchar_t buffer[ 5 ];
   
    //Get the keyboard state
    BYTE keyboard_state[ 256 ];
    GetKeyboardState( keyboard_state );
    UpdateKeyState( keyboard_state, VK_SHIFT );
    UpdateKeyState( keyboard_state, VK_CAPITAL );
    UpdateKeyState( keyboard_state, VK_CONTROL );
    UpdateKeyState( keyboard_state, VK_MENU );
   
   
    //Get keyboard layout
    HKL keyboard_layout = GetKeyboardLayout( 0 );
   
    //Get keyboard layout
    char lpszName[ 0x100 ] = { 0 };
   
    DWORD dwMsg = 1;
    dwMsg += cKey.scanCode << 16;
    dwMsg += cKey.flags << 24;
   
    int i = GetKeyNameText( dwMsg,( LPTSTR ) lpszName, 255 );
   
    //Try to convert the key info
    int result = ToUnicodeEx( cKey.vkCode, cKey.scanCode, keyboard_state, buffer, 4, 0, keyboard_layout );
    buffer[ 4 ] = L'\0';
   
    //Print the output
    qDebug() << "key: " << cKey.vkCode << " " << QString::fromUtf16(( ushort * ) buffer ) << " " << QString::fromUtf16(( ushort * ) lpszName );
    return CallNextHookEx( hHook, nCode, wParam, lParam );
}

int main( int argc, char * argv[] )
{
    QCoreApplication a( argc, argv );
   
    hHook = SetWindowsHookEx( WH_KEYBOARD_LL, MyLowLevelKeyBoardProc, NULL, 0 );
    if( hHook == NULL )
    {
        qDebug() << "Hook failed";
    }
   
    return a.exec();
}
Pozdrawiam i czekam na podpowiedzi
P-147271
Kefirek
Temat założony przez niniejszego użytkownika
» 2016-04-17 09:35:08
Zamykam temat.
P-147339
« 1 »
  Strona 1 z 1