Что нового

Не отжимаются клавиши Shift и Ctrl

vitaliy4us

Новичок
Сообщения
158
Репутация
3
После использования Send("{LSHIFT down}{LCTRL down}") .........., а затем Send("{LSHIFT up}{LCTRL up}") клавиши SHIFT и CTRL не отжимаются (по крайней мере какая-то из них), что не позволяет нормально продолжать работу скрипта. Как побороть?
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
3
По отдельности то же самое. Причем, зажатым, похоже, остается только CTRL.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
А обязательно зажимать?
Просто сколько использую эмуляции клавиатуры... всегда обходился "+!^"
Код:
send("+!{N}")


[box title=Модераторам]
Ошибка!
Нет прав на удаление благодарности с этого сообщения! [/box]
 

agikon

Знающий
Сообщения
789
Репутация
16
без всего кода никто вам не сможет помочь. олько весь код надо вылаживать. может вы не так чтото пишите.никто ж этого без всего кода не поймёт. например я делал зажим клавишь на несколько секунд и всё работало.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
3
Код:
;Чтение текста с участка экрана при помощи программы Kleptomania.
;Запускаем notepad, вставляем в него текст, зажимаем клавиши CTRL и SHIFT (комбинация для активации Kleptomania). При этой нажатой комбинации выделяем область текста, 	;которая с помощью программы Kleptomania читается и копируется в буфер обмена. После этого отпускаем клавиши CTRL и SHIFT, присваиваем значение буфера обмена 
;переменной $char и выводим его в окне сообщений.
	
Run("C:\WINDOWS\notepad.exe")
WinWaitActive("Безымянный - Блокнот")
Sleep(500)
WinSetState("Безымянный - Блокнот", "", @SW_MAXIMIZE)
Sleep(500)
Send("Это должно быть скопировано в буфер обмена")
Sleep(500)
Send("{LCTRL down}{LSHIFT down}")
MouseClickDrag("left", 0, 50, 350, 70)
Sleep(500)
Send("{DOWN}")
Sleep(500)
Send("{ENTER}")
sleep(500)
Send("{LCTRL up}{LSHIFT up}") ;Вот здесь клавиши CTRL и SHIFT должны отпускаться, но клавиша CTRL не хочет.
sleep(500)
$Char = ClipGet()
MsgBox(0, "Прочитано из буфера обмена", "Значение выделенного фрагмента = " & $Char)


Добавлено:
Сообщение автоматически объединено:

Появилась такая мысль: может кто-нибудь подскажет как можно очистить буфер клавиатуры? Может быть тогда информация о нажатии клавиши будет удалена и она окажется отпущенной?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Код:
DllCall('user32.dll', 'int', 'keybd_event', 'int', 0x10, 'int', 0x02, 'int', 0, 'ptr', 0) ; SHIFT UP
DllCall('user32.dll', 'int', 'keybd_event', 'int', 0x11, 'int', 0x02, 'int', 0, 'ptr', 0) ; CTRL UP
DllCall('user32.dll', 'int', 'keybd_event', 'int', 0x12, 'int', 0x02, 'int', 0, 'ptr', 0) ; ALT UP
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
3
Если в случае Send("{LCTRL up}{LSHIFT up}") оставался нажатым только CTRL, то с применением DllCall не хочет отжимать ни шифт, ни контрол о чем говорит то, что даже значок выделения Клептомании не исчезает.


Добавлено:
Сообщение автоматически объединено:

Так как насчет очистки буфера клавиатуры? Кто-нибудь может подсказать как это сделать?


Добавлено:
Сообщение автоматически объединено:

Спешу поделиться радостью: проблема решена удивительно просто - вместо {LCTRL up} и {LSHIFT up} использовал {CTRLUP} и {SHIFTUP}, ну и соответственно также с DOWN.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,716
Очистить клавиши напрямую нельзя, т.к. этим управляет драйвер. Попробуй так:

Код:
DllCall('user32.dll', 'int', 'keybd_event', 'int', 0xA0, 'int', 0x02, 'int', 0, 'ptr', 0) ; LSHIFT UP
DllCall('user32.dll', 'int', 'keybd_event', 'int', 0xA2, 'int', 0x02, 'int', 0, 'ptr', 0) ; LCTRL UP
 
Верх