GetKeyState()



  • hi leute
    Kann mir jmd folgenden funktion ( hab ich von einem keyloger ) erklähren:

    std::string GetKey(int Key)
    {
        std::string KeyString = "";
    
        if (Key == 8)
            KeyString = "[delete]";
        else if (Key == 13)
            KeyString = "\n";
        else if (Key == 32)
            KeyString = " ";
        else if (Key == VK_PAUSE)
            KeyString = "[PAUSE]";
        else if (Key == VK_CAPITAL)
            KeyString = "[CAPITAL]";
        else if (Key == VK_SHIFT)
            KeyString = "[SHIFT]";
        else if (Key == VK_TAB)
            KeyString = "[TABULATOR]";
        else if (Key == VK_CONTROL)
            KeyString = "[CTRL]";
        else if (Key == VK_ESCAPE)
            KeyString = "[ESCAPE]";
        else if (Key == VK_END)
            KeyString = "[END]";
        else if (Key == VK_HOME)
            KeyString = "[HOME]";
        else if (Key == VK_LEFT)
            KeyString = "[LEFT]";
        else if (Key == VK_RIGHT)
            KeyString = "[RIGHT]";
        else if (Key == VK_UP)
            KeyString = "[UP]";
        else if (Key == VK_DOWN)
            KeyString = "[DOWN]";
        else if (Key == VK_SNAPSHOT)
            KeyString = "[SNAPSHOT]";
        else if (Key == VK_NUMLOCK)
            KeyString = "[NUMLOCK]";
        else if (Key == 190 || Key == 110)
            KeyString = ".";
        //Char klein machen
    	// Für buchstaben??? wahrscheinlich
        else if (Key >=96 && Key <= 105)
            KeyString = Key-48;
        else if (Key > 47 && Key < 60)
            KeyString = Key;
        if (Key != VK_LBUTTON || Key != VK_RBUTTON)
        {
            if (Key > 64 && Key < 91)
            {
                if (GetKeyState(VK_CAPITAL))
                    KeyString = Key;
                else
                {
                    Key = Key + 32;
                    KeyString = Key;
                }
            }
        }
    
        return KeyString;
    }
    

    also ich kapier das scho mit if und else... aber mit diesen zahlen und VK_... nicht



  • Es geht da eigentlich nur darum, dass je nach Taste (VK_... sind auch Tasten) ein String in die Variable KeyString geschrieben wird, und ddiese Variable dann als return-Wert fungiert.

    Mfg Ominion



  • else if (Key >=96 && Key <= 105)
            KeyString = Key-48;
        else if (Key > 47 && Key < 60)
            KeyString = Key;
        if (Key != VK_LBUTTON || Key != VK_RBUTTON)
        {
            if (Key > 64 && Key < 91)
            {
                if (GetKeyState(VK_CAPITAL))
                    KeyString = Key;
                else
                {
                    Key = Key + 32;
                    KeyString = Key;
                }
            }
        }
    

    entspricht jede dieser zahlen einer taste der tastatur? (ansi???) wenn ja gibt es irgendwo eine auflistung aller zeichen mit entsprechender zahl?



  • Ja und bestimmt. Bloß wo...einfach mal ein bisschen googeln...oder im Tafelwerk (falls du sowas hast) im Informatikteil.

    Mfg Ominion



  • Wäre da nicht MapVirtualKey einfacher 😉 ?



  • und was macht dieses MapVirtualKey genau aus dem artikel von msdn werd ich nicht wirklich schlau
    gibt es irgendwo einen kurzen bsp code?



  • albertk13 schrieb:

    und was macht dieses MapVirtualKey genau aus dem artikel von msdn werd ich nicht wirklich schlau
    gibt es irgendwo einen kurzen bsp code?

    Guck mal hier.
    PS: Statt der else-if-Kette empfielt sich auch ein switch 😉 .



  • VK_* sind Virtual key codes von Windows. Diese Werte sind in winuser.h definiert. Wobei die Wert '0' bis '9' und 'A' bis 'Z' mit den Ascii-Werten übereinstimmen.

    #include <windows.h>
    #include <stdio.h>
    
    struct tVK_Keys
    { char *name;
      int value;
    };
    
    struct tVK_Keys VK_Keys[] =
    { { "VK_LBUTTON",        0x01 },
      { "VK_RBUTTON",        0x02 },
      { "VK_CANCEL",         0x03 },
      { "VK_MBUTTON",        0x04 },
      { "VK_XBUTTON1",       0x05 },
      { "VK_XBUTTON2",       0x06 },
      { "VK_BACK",	         0x08 },
      { "VK_TAB",            0x09 },
      { "VK_CLEAR",	         0x0C },
      { "VK_RETURN",         0x0D },
      { "VK_SHIFT",	         0x10 },
      { "VK_CONTROL",        0x11 },
      { "VK_MENU",	         0x12 },
      { "VK_PAUSE",	         0x13 },
      { "VK_CAPITAL",        0x14 },
      { "VK_KANA",	         0x15 },
      { "VK_JUNJA",	         0x17 },
      { "VK_FINAL",	         0x18 },
      { "VK_KANJI",	         0x19 },
      { "VK_ESCAPE",         0x1B },
      { "VK_CONVERT",        0x1C },
      { "VK_NONCONVERT",     0x1D },
      { "VK_ACCEPT",         0x1E },
      { "VK_MODECHANGE",     0x1F },
      { "VK_SPACE",	         0x20 },
      { "VK_PRIOR",	         0x21 },
      { "VK_NEXT",	         0x22 },
      { "VK_END",	         0x23 },
      { "VK_HOME",	         0x24 },
      { "VK_LEFT",	         0x25 },
      { "VK_UP",	         0x26 },
      { "VK_RIGHT",	         0x27 },
      { "VK_DOWN",	         0x28 },
      { "VK_SELECT",         0x29 },
      { "VK_PRINT",	         0x2A },
      { "VK_EXECUTE",        0x2B },
      { "VK_SNAPSHOT",       0x2C },
      { "VK_INSERT",         0x2D },
      { "VK_DELETE",         0x2E },
      { "VK_HELP",	         0x2F },
    
      { "VK_LWIN",	         0x5B },
      { "VK_RWIN",	         0x5C },
      { "VK_APPS",	         0x5D },
      { "VK_SLEEP",	         0x5F },
      { "VK_NUMPAD0",        0x60 },
      { "VK_NUMPAD1",        0x61 },
      { "VK_NUMPAD2",        0x62 },
      { "VK_NUMPAD3",        0x63 },
      { "VK_NUMPAD4",        0x64 },
      { "VK_NUMPAD5",        0x65 },
      { "VK_NUMPAD6",        0x66 },
      { "VK_NUMPAD7",        0x67 },
      { "VK_NUMPAD8",        0x68 },
      { "VK_NUMPAD9",        0x69 },
      { "VK_MULTIPLY",       0x6A },
      { "VK_ADD",	         0x6B },
      { "VK_SEPARATOR",      0x6C },
      { "VK_SUBTRACT",       0x6D },
      { "VK_DECIMAL",        0x6E },
      { "VK_DIVIDE",         0x6F },
      { "VK_F1",	         0x70 },
      { "VK_F2",             0x71 },
      { "VK_F3",             0x72 },
      { "VK_F4",             0x73 },
      { "VK_F5",             0x74 },
      { "VK_F6",             0x75 },
      { "VK_F7",             0x76 },
      { "VK_F8",             0x77 },
      { "VK_F9",             0x78 },
      { "VK_F10",            0x79 },
      { "VK_F11",            0x7A },
      { "VK_F12",            0x7B },
      { "VK_F13",            0x7C },
      { "VK_F14",            0x7D },
      { "VK_F15",            0x7E },
      { "VK_F16",            0x7F },
      { "VK_F17",            0x80 },
      { "VK_F18",            0x81 },
      { "VK_F19",            0x82 },
      { "VK_F20",            0x83 },
      { "VK_F21",            0x84 },
      { "VK_F22",            0x85 },
      { "VK_F23",            0x86 },
      { "VK_F24",            0x87 },
      { "VK_NUMLOCK",        0x90 },
      { "VK_SCROLL",         0x91 },
      { "VK_OEM_NEC_EQUAL",  0x92 },
      { "VK_OEM_FJ_JISHO",   0x92 },
      { "VK_OEM_FJ_MASSHOU", 0x93 },
      { "VK_OEM_FJ_TOUROKU", 0x94 },
      { "VK_OEM_FJ_LOYA",    0x95 },
      { "VK_OEM_FJ_ROYA",    0x96 },
      { "VK_LSHIFT",         0xA0 },
      { "VK_RSHIFT",         0xA1 },
      { "VK_LCONTROL",       0xA2 },
      { "VK_RCONTROL",       0xA3 },
      { "VK_LMENU",	              0xA4 },
      { "VK_RMENU",	              0xA5 },
      { "VK_BROWSER_BACK",        0xA6 },
      { "VK_BROWSER_FORWARD",     0xA7 },
      { "VK_BROWSER_REFRESH",     0xA8 },
      { "VK_BROWSER_STOP",	      0xA9 },
      { "VK_BROWSER_SEARCH",      0xAA },
      { "VK_BROWSER_FAVORITES",   0xAB },
      { "VK_BROWSER_HOME",	      0xAC },
      { "VK_VOLUME_MUTE",	      0xAD },
      { "VK_VOLUME_DOWN",	      0xAE },
      { "VK_VOLUME_UP",	      0xAF },
      { "VK_MEDIA_NEXT_TRACK",    0xB0 },
      { "VK_MEDIA_PREV_TRACK",    0xB1 },
      { "VK_MEDIA_STOP",	      0xB2 },
      { "VK_MEDIA_PLAY_PAUSE",    0xB3 },
      { "VK_LAUNCH_MAIL",	      0xB4 },
      { "VK_LAUNCH_MEDIA_SELECT", 0xB5 },
      { "VK_LAUNCH_APP1",	 0xB6 },
      { "VK_LAUNCH_APP2",	 0xB7 },
      { "VK_OEM_1",	         0xBA },
      { "VK_OEM_PLUS",       0xBB },
      { "VK_OEM_COMMA",      0xBC },
      { "VK_OEM_MINUS",      0xBD },
      { "VK_OEM_PERIOD",     0xBE },
      { "VK_OEM_2",	         0xBF },
      { "VK_OEM_3",	         0xC0 },
      { "VK_OEM_4",	         0xDB },
      { "VK_OEM_5",	         0xDC },
      { "VK_OEM_6",	         0xDD },
      { "VK_OEM_7",	         0xDE },
      { "VK_OEM_8",	         0xDF },
      { "VK_OEM_AX",         0xE1 },
      { "VK_OEM_102",        0xE2 },
      { "VK_ICO_HELP",       0xE3 },
      { "VK_ICO_00",         0xE4 },
      { "VK_PROCESSKEY",     0xE5 },
      { "VK_ICO_CLEAR",      0xE6 },
      { "VK_PACKET",         0xE7 },
      { "VK_OEM_RESET",      0xE9 },
      { "VK_OEM_JUMP",       0xEA },
      { "VK_OEM_PA1",        0xEB },
      { "VK_OEM_PA2",        0xEC },
      { "VK_OEM_PA3",        0xED },
      { "VK_OEM_WSCTRL",     0xEE },
      { "VK_OEM_CUSEL",      0xEF },
      { "VK_OEM_ATTN",       0xF0 },
      { "VK_OEM_FINISH",     0xF1 },
      { "VK_OEM_COPY",       0xF2 },
      { "VK_OEM_AUTO",       0xF3 },
      { "VK_OEM_ENLW",       0xF4 },
      { "VK_OEM_BACKTAB",    0xF5 },
      { "VK_ATTN",	         0xF6 },
      { "VK_CRSEL",	         0xF7 },
      { "VK_EXSEL",	         0xF8 },
      { "VK_EREOF",	         0xF9 },
      { "VK_PLAY",	         0xFA },
      { "VK_ZOOM",	         0xFB },
      { "VK_NONAME",	 0xFC },
      { "VK_PA1",	         0xFD },
      { "VK_OEM_CLEAR",      0xFE },
      { 0 }
    };
    
    int useparms(int a, ...)
    {
      return a;
    }
    
    char *fbprint(char *format, ...)
    {
      static char buf[160];
    
      vsprintf(buf, format, (&format)+1);
      return (char *)buf;
    }
    
    long TextOutStr(HDC hdc, int x, int y, char *s)
    {
      return TextOut(hdc, x, y, s, strlen(s));
    }
    
    char *GetVKName(int vk)
    {
      int i;
      static char buf[10]; 
    
      if (vk >= '0' && vk <= '9' ||
          vk >= 'A' && vk <= 'Z')
        { buf[0] = (char)vk;
          buf[1] = 0;
          return buf;
        }
      for (i = 0; VK_Keys[i].name; i++)
          if (VK_Keys[i].value == vk)
              return VK_Keys[i].name;
      return "";
    }
    
    static int shiftstate;
    static int lshiftstate;
    static int rshiftstate;
    static int controlstate;
    static int lcontrolstate;
    static int rcontrolstate;
    static int menustate;
    static int lmenustate;
    static int rmenustate;
    static int Astate;
    
    static int shiftastate;
    static int lshiftastate;
    static int rshiftastate;
    static int controlastate;
    static int lcontrolastate;
    static int rcontrolastate;
    static int menuastate;
    static int lmenuastate;
    static int rmenuastate;
    static int Aastate;
    static unsigned char lpKeyState[256];
    
    void GetStates(void)
    {
      shiftstate = GetKeyState(VK_SHIFT);
      lshiftstate = GetKeyState(VK_LSHIFT);
      rshiftstate = GetKeyState(VK_RSHIFT);
      controlstate = GetKeyState(VK_CONTROL);
      lcontrolstate = GetKeyState(VK_LCONTROL);
      rcontrolstate = GetKeyState(VK_RCONTROL);
      menustate = GetKeyState(VK_MENU);
      lmenustate = GetKeyState(VK_LMENU);
      rmenustate = GetKeyState(VK_RMENU);
      Astate = GetKeyState('A');
      shiftastate = GetKeyState(VK_SHIFT);
      lshiftastate = GetKeyState(VK_LSHIFT);
      rshiftastate = GetKeyState(VK_RSHIFT);
      controlastate = GetKeyState(VK_CONTROL);
      lcontrolastate = GetKeyState(VK_LCONTROL);
      rcontrolastate = GetKeyState(VK_RCONTROL);
      menuastate = GetKeyState(VK_MENU);
      lmenuastate = GetKeyState(VK_LMENU);
      rmenuastate = GetKeyState(VK_RMENU);
      Aastate = GetKeyState('A');
      GetKeyboardState((unsigned char *)&lpKeyState);
    }
    
    long _stdcall WndProc(HWND hwnd, unsigned int message,
                                                   unsigned int wParam, long lParam)
    {
      HDC hdc;
      PAINTSTRUCT ps;
      static TEXTMETRIC tm;
      static unsigned int KEYDOWN_nVirtKey;
      static long         KEYDOWN_lKeyData; 
      static unsigned int KEYUP_nVirtKey;
      static long         KEYUP_lKeyData;
      static unsigned int CHAR_chCharCode;
      static long         CHAR_lKeyData;
    
      static unsigned int SYSKEYDOWN_nVirtKey;
      static long         SYSKEYDOWN_lKeyData; 
      static unsigned int SYSKEYUP_nVirtKey;
      static long         SYSKEYUP_lKeyData; 
      static unsigned int SYSCHAR_chCharCode;
      static long         SYSCHAR_lKeyData;
      static unsigned int SYSDEADCHAR_chCharCode;
      static long         SYSDEADCHAR_lKeyData;
    
      int x, y;
      static char kbuf[80];
    
      switch(message)
        { case WM_CREATE:
              hdc = GetDC(hwnd);
              GetTextMetrics(hdc, &tm);
              ReleaseDC(hwnd, hdc);
              ZeroMemory(&lpKeyState, 256);
    
              shiftstate = lshiftstate = rshiftstate = 0;
              controlstate = lcontrolstate = rcontrolstate = 0;
              menustate = lmenustate = rmenustate = 0;
              Astate = 0;
    
              shiftastate = lshiftastate = rshiftastate = 0;
              controlastate = lcontrolastate = rcontrolastate = 0;
              menuastate = lmenuastate = rmenuastate = 0;
              Astate = 0;
              return 0;
          case WM_PAINT:
              hdc = BeginPaint(hwnd, &ps);
              *kbuf = 0;
              GetKeyNameText(KEYDOWN_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 20,  10,
                   fbprint("KEYDOWN_nVirtKey 0x%02X %s", KEYDOWN_nVirtKey,
                   GetVKName(KEYDOWN_nVirtKey)));
              TextOutStr(hdc, 20,  30,
                   fbprint("KEYDOWN_lKeyData 0x%08X %s", KEYDOWN_lKeyData, kbuf));
              *kbuf = 0;
              GetKeyNameText(KEYUP_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 20,  50,
                   fbprint("KEYUP_nVirtKey 0x%02X %s", KEYUP_nVirtKey,
                   GetVKName(KEYUP_nVirtKey)));
              TextOutStr(hdc, 20,  70,
                   fbprint("KEYUP_lKeyData 0x%08X %s", KEYUP_lKeyData, kbuf));
              *kbuf = 0;
              GetKeyNameText(CHAR_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 20,  90,
                   fbprint("CHAR_chCharCode 0x%02X %c", CHAR_chCharCode,
                   CHAR_chCharCode));
              TextOutStr(hdc, 20, 110, 
                   fbprint("CHAR_lKeyData 0x%08X %s", CHAR_lKeyData, kbuf));
    
              *kbuf = 0;
              GetKeyNameText(SYSKEYDOWN_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 380,  10,
                   fbprint("SYSKEYDOWN_nVirtKey 0x%02X %s", SYSKEYDOWN_nVirtKey,
                   GetVKName(SYSKEYDOWN_nVirtKey)));
              TextOutStr(hdc, 380,  30,
                   fbprint("SYSKEYDOWN_lKeyData 0x%08X %s", SYSKEYDOWN_lKeyData,
                   kbuf));
              *kbuf = 0;
              GetKeyNameText(SYSKEYUP_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 380,  50,
                   fbprint("SYSKEYUP_nVirtKey 0x%02X %s", SYSKEYUP_nVirtKey,
                   GetVKName(SYSKEYUP_nVirtKey)));
              TextOutStr(hdc, 380,  70,
                   fbprint("SYSKEYUP_lKeyData 0x%08X %s", SYSKEYUP_lKeyData, kbuf));
              *kbuf = 0;
              GetKeyNameText(SYSCHAR_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 380,  90,
                   fbprint("SYSCHAR_chCharCode 0x%02X %c", SYSCHAR_chCharCode,
                   SYSCHAR_chCharCode));
              TextOutStr(hdc, 380, 110,
                   fbprint("SYSCHAR_lKeyData 0x%08X %s", SYSCHAR_lKeyData, kbuf));
              *kbuf = 0;
              GetKeyNameText(SYSDEADCHAR_lKeyData, kbuf, sizeof(kbuf));
              TextOutStr(hdc, 380, 130,
                   fbprint("SYSDEADCHAR_chCharCode 0x%02X %c",
                   SYSDEADCHAR_chCharCode, SYSDEADCHAR_chCharCode));
              TextOutStr(hdc, 380, 150,
                  fbprint("SYSDEADCHAR_lKeyData 0x%08X %s", SYSDEADCHAR_lKeyData,
                  kbuf));
    
              TextOutStr(hdc, 790,  10,
                  fbprint("shiftstate %02X %02X", shiftstate&0xFF,
                  shiftastate&0xFF));
              TextOutStr(hdc, 790,  30,
                  fbprint("lshiftstate %02X %02X", lshiftstate&0xFF,
                  lshiftastate&0xFF));
              TextOutStr(hdc, 790,  50,
                  fbprint("rshiftstate %02X %02X", rshiftstate&0xFF,
                  rshiftastate&0xFF));
              TextOutStr(hdc, 790,  70,
                  fbprint("controlstate %02X %02X", controlstate&0xFF,
                  controlastate&0xFF));
              TextOutStr(hdc, 790,  90,
                  fbprint("lcontrolstate %02X %02X", lcontrolstate&0xFF,
                  lcontrolastate&0xFF));
              TextOutStr(hdc, 790, 110,
                  fbprint("rcontrolstate %02X %02X", rcontrolstate&0xFF,
                  rcontrolastate&0xFF));
    
              TextOutStr(hdc, 950,  10,
                  fbprint("menustate %02X %02X", menustate&0xFF, menuastate&0xFF));
              TextOutStr(hdc, 950,  30,
                  fbprint("lmenustate %02X %02X", lmenustate&0xFF,
                  lmenuastate&0xFF));
              TextOutStr(hdc, 950,  50,
                  fbprint("rmenustate %02X %02X", rmenustate&0xFF,
                  rmenuastate&0xFF));
              TextOutStr(hdc, 950,  70,
                  fbprint("'A'state %02X %02X", Astate&0xFF, Aastate&0xFF));
    
              for (y = 0; y < 16; y++)
                  for (x = 0; x < 16; x++)
                    { char *vkname;
                      vkname = GetVKName(y*16+x);
                      if (vkname)
                        { if (strlen(vkname) > 3 && strncmp(vkname, "VK_", 3) == 0)
                              vkname += 3;
                          TextOutStr(hdc, 10+x*70, 200+y*40, fbprint("%s", vkname));
                        }
                    }
              for (y = 0; y < 16; y++)
                  for (x = 0; x < 16; x++)
                      TextOutStr(hdc, 10+x*70, 180+y*40, fbprint("%X",
                      lpKeyState[y*16+x]));
              EndPaint(hwnd, &ps);
              return 0;
          case WM_KEYDOWN:
              KEYUP_nVirtKey = 0;
              KEYUP_lKeyData = 0;
              KEYDOWN_nVirtKey = wParam;
              KEYDOWN_lKeyData = lParam;
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_KEYUP:
              KEYDOWN_nVirtKey = 0;
              KEYDOWN_lKeyData = 0;
              CHAR_chCharCode = 0;
              CHAR_lKeyData = 0;
              KEYUP_nVirtKey = wParam;
              KEYUP_lKeyData = lParam;
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_CHAR:
              CHAR_chCharCode = wParam;
              CHAR_lKeyData = lParam;
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_SYSKEYDOWN:
              SYSKEYUP_nVirtKey = 0;
              SYSKEYUP_lKeyData = 0;
              SYSKEYDOWN_nVirtKey = wParam;
              SYSKEYDOWN_lKeyData = lParam;
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_SYSKEYUP:
              SYSCHAR_chCharCode = 0;
              SYSCHAR_lKeyData = 0;
              SYSDEADCHAR_chCharCode = 0;
              SYSDEADCHAR_lKeyData = 0;
              SYSKEYDOWN_nVirtKey = 0;
              SYSKEYDOWN_lKeyData = 0;
              SYSKEYUP_nVirtKey = wParam;
              SYSKEYUP_lKeyData = lParam;
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_SYSCHAR:
              SYSCHAR_chCharCode = wParam;
              SYSCHAR_lKeyData = lParam;
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_SYSDEADCHAR:
              SYSDEADCHAR_chCharCode = wParam;
              SYSDEADCHAR_lKeyData = lParam;
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_LBUTTONDOWN:
          case WM_LBUTTONUP:
          case WM_RBUTTONDOWN:
          case WM_RBUTTONUP:
          case WM_MBUTTONDOWN:
          case WM_MBUTTONUP:
              GetStates();
              InvalidateRect(hwnd, 0, TRUE);
              UpdateWindow(hwnd);
              return 0;
          case WM_DESTROY:
              PostQuitMessage(0);
              return 0;
        }
      return DefWindowProc(hwnd, message, wParam, lParam);
    }
    
    int _stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                                                      char *szCmdLine, int iCmdShow)
    {
      HWND hwnd;
      MSG msg;
      WNDCLASS wc;
      char *cln = "mbclass";
    
      memset(&wc, 0, sizeof(WNDCLASS));
      wc.style         = CS_HREDRAW | CS_VREDRAW;
      wc.lpfnWndProc   = WndProc;
      wc.hInstance     = hInstance;
      wc.hIcon         = LoadIcon(0, IDI_INFORMATION);
      wc.hCursor       = LoadCursor(0, IDC_ARROW);
      wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
      wc.lpszClassName = cln;
    
      RegisterClass(&wc);
      hwnd = CreateWindow(cln, "Titel", WS_OVERLAPPEDWINDOW,
                                             CW_USEDEFAULT, CW_USEDEFAULT,
                                             CW_USEDEFAULT, CW_USEDEFAULT,
                                             0, 0, hInstance, 0);
      ShowWindow(hwnd, iCmdShow);
      UpdateWindow(hwnd);
    
      useparms(0, hPrevInstance, szCmdLine);
      while(GetMessage(&msg, 0, 0, 0))
        { TranslateMessage(&msg);
          DispatchMessage(&msg);
        }
    
      return msg.wParam;
    }
    


  • Ist das nicht ein bisschen übertrieben für ein KeyLogger ? Es reicht doch die relevanten Tasten anzuzeigen und bei Steuertasten eine entsprechende Trennung einzubauen (Beispiel: Bei einem VK_RETURN wird wirklich eine neue Zeile in die Log-Datei geschreiben 😉 ), dann würde nämlich reichen:

    inline TCHAR ConvertVirtualKey(UINT uiVirtKey)
    {
    #ifndef MAPVK_VK_TO_CHAR
      #define MAPVK_VK_TO_CHAR 0x02
    #endif // MAPVK_VK_TO_CHAR
    
    	return (MapVirtualKey(uiVirtKey, MAPVK_VK_TO_CHAR));
    }
    

    PS: @keksekekse: Der Return-Wert der Funktion 'GetVKName' sollte const char* sein.



  • Und UNICODE-Support, falls überhaupt relevant, sollte auch berücksichtigt werden.



  • Ok super danke vll check ichs ja lol



  • Mir fällt gerade so auf, dass meine Funktion irgendwie auch überflüssiger Balast ist^^. Man kann den Aufruf von MapVirtualKey auch direkt einsetzen 😉 .


Anmelden zum Antworten