1. C# / Говнокод #18487

    +131

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    private static string GetKeyCode()
            {
                string ret = null;
                while (true)
                {
                    //sleeping for while, this will reduce load on cpu
                    Thread.Sleep(1);
                  
                    for (Int32 i = 0; i < 255; i++)
                    {
                        int keyState = GetAsyncKeyState(i);
                        if (keyState == 1 || keyState == -32767)
                        {
                            if ((WinApi.Keys) i == WinApi.Keys.VkReturn)
                            {
                                return ret;
                            }
                            var s = KeyToChar((WinApi.Keys)i);
                            ret = ret + s;
                        }
                    }
                }
            }
    
            private static char KeyToChar(WinApi.Keys key)
            {
                return unchecked((char)MapVirtualKeyW((uint)key, MAPVK_VK_TO_CHAR)); // Ignore high word.  
            }
    
            private const uint MAPVK_VK_TO_CHAR = 2;
            [System.Runtime.InteropServices.DllImportAttribute("user32.dll")]
            public static extern uint MapVirtualKeyW(uint uCode, uint uMapType);
            [DllImport("user32.dll")]
            public static extern int GetAsyncKeyState(Int32 i);

    И вот такое бывает - аутсорсеры плагинов к нашему продукту так слушают клавиатурный ввод... (facepalm)

    !!! Thread.Sleep(1);
    !!! for (Int32 i = 0; i < 255; i++) - проверяют, не нажимали ли что-то

    Запостил: babasya, 16 Июля 2015

    Комментарии (10) RSS

    • а никакого эвента типа OnKeyPressed нет?
      Ответить
    • > Sleep(1)
      Ахуеть отзывчивость будет у приложения...

      P.S. А, это всё-таки 1мс, а не 1с.
      Ответить
    • хорошо хоть без override WndProc
      Ответить
    • > GetAsyncKeyState(i);

      и это говно некрософт в шарпе оставил?!!
      Ответить
    • Велосипед знатный. Парни были в криосне?
      Ответить
      • Спали они долго, но сон их был крайне неспокоен. Не успевали моргнуть, как просыпались. Лишь только руки их доставали до клавиатуры и ощущали осенний шелест кнопок, как засыпали они, чтобы проснуться, не успев и моргнуть.
        Ответить
    • System.Runtime.InteropServices.DllImport Attribute("user32.dll") - нахер так жить?
      Ответить

    Добавить комментарий