Спасибо, покурил, работает, но местами
:
- Код: Выделить всё
public static string TranslateKey(int lng, int vkCode, bool shift)
{
System.Text.StringBuilder sbString = new System.Text.StringBuilder(10);
IntPtr lngPtr = new IntPtr(lng);
byte[] bKeyState = new byte[255];
uint KeyValue = MapVirtualKeyEx((uint)vkCode, (uint)2, lngPtr);
uint lScanCode = MapVirtualKeyEx((uint)vkCode, (uint)0, lngPtr);
bool bKeyStateStatus = GetKeyboardState(bKeyState);
ToUnicodeEx(KeyValue, lScanCode, bKeyState, sbString, sbString.Capacity, 0, lngPtr);
Console.WriteLine ("HookCode {0},(Keys)Code {1}, KeyCode {2}, ScanCode {3}, ToUnicodeEx {4}",vkCode,(Keys)vkCode,
KeyValue,lScanCode,sbString.ToString());
return sbString.ToString();
}
Извините за шарп, но сути не меняет - одни апишки. Параметры: хендл раскладки, код клавиши из хука.
Что в результате? Пропускает спецсимволы, навроде точки, запятой, квадратных и фигурных скобок, тильду, слеши и т.п.
Причем для подобных символов возвращается 0.
Возможно, по логу скажете, в чем дело?