0 / 0 / 0
Регистрация: 15.01.2017
Сообщений: 4
|
|
1
|
Программный Ввод символа по юникоду
16.01.2017, 18:47. Показов 609. Ответов 0
Добрый день! Вопрос следующий: Как в текстовый документ ввести символ '<'. Пробовал C++ | 1
| keybd_event('<', 0, 0, 0); |
|
- не помогает. Реализовал через
C++ | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
INPUT inputs[1];
inputs[0].type = INPUT_KEYBOARD;
inputs[0].ki.wScan = 0;
inputs[0].ki.dwFlags = 0;
inputs[0].ki.time = 0;
inputs[0].ki.dwExtraInfo = 0;
//Переключаю раскладку на английский
int lang = (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) & 0xFFFF;
int OldLayout = lang;
while (!(lang == 0x409) && !CycleRepeats)
{
PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, 2, 0);
NewLayout = (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) & 0xFFFF;
while (NewLayout == lang)
{
NewLayout = (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) & 0xFFFF;
}
lang = NewLayout;
CycleRepeats = (lang == OldLayout);
}
//Зажимаю Shift
inputs[0].ki.wVk = VK_SHIFT;
inputs[0].ki.dwFlags = 0;
ret = SendInput(1, inputs, sizeof(INPUT));
//Ввожу символ ','
inputs[0].ki.wVk = 188;
ret = SendInput(1, inputs, sizeof(INPUT));
inputs[0].ki.dwFlags = KEYEVENTF_KEYUP;
ret = SendInput(1, inputs, sizeof(INPUT));
//Отпускаю Shift
inputs[0].ki.wVk = VK_SHIFT;
inputs[0].ki.dwFlags = KEYEVENTF_KEYUP;
ret = SendInput(1, inputs, sizeof(INPUT));
//переключаю раскладку в начальное положение
while (!(lang == OldLayout) && !CycleRepeats)
{
PostMessage(GetForegroundWindow(), WM_INPUTLANGCHANGEREQUEST, 2, 0);
NewLayout = (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) & 0xFFFF;
while (NewLayout == lang)
{
NewLayout = (int)GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)) & 0xFFFF;
}
lang = NewLayout;
CycleRepeats = (lang == OldLayout);
} |
|
- Переключаю раскладку на английский, Зажимаю Shift, Ввожу символ ',' затем Отпускаю Shift и переключаю раскладку в начальное положение. Может есть способ оптимальней? Нужно ввести символ зная его номер в Юникоде: "U+003C"
Добавлено через 2 часа 16 минут
Разобрался. Сделал так:
C++ | 1
2
3
4
| inputs[0].ki.wVk = 0;
inputs[0].ki.dwFlags = KEYEVENTF_UNICODE;
inputs[0].ki.wScan = 0x003E; //>
ret = SendInput(1, inputs, sizeof(INPUT)); |
|
0
|