Что нового

Назначить HotKeySet пункту меню программы

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Столкнулся с такой задачей, прикрутить горячую клавишу к пункту меню для которого проверяется событие в цикле. Понимаю, что можно функцию вызвать из события (под Case $msg = ), но тогда проблема генерации переменных, они все (переменные) окажутся изолированными в функции.

Код:
HotKeySet("^{F12}", "_copybyfer")
$createF=0

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = 1 Or $createF = 1
			If $createF = 1 Then Send("^{ins}")
			$createF = 0
			MsgBox(0, "", "нунаконецто")
		Case $msg = -3
			Exit
	EndSelect
WEnd


Func _copybyfer()
	$createF=1
EndFunc


глюки: после использования горячей клавиши происходит непонятное, контекстное меню не вызывается, в NP++ выделение работает выделяя столбиком, помогает вызов Диспетчера задач. Глюк появляется через раз, особенно стабильно на скрипте, к которому я пытаюсь его прикрутить. Проблема точно не NP++, так как в эксплорере и SciTE почти тоже самое, из трея нет конт. меню.
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
Цитата из помощи:

F12 It is also reserved by Windows, according to its API.
(нельзя использовать эту клавишу).
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
Redline
Вообщето Ctrl+F12... но и Alt+F12 и Ctrl+F11 и Alt+F11 пробовал, всё работало одинаково глючно.
 

beve

Осваивающий
Сообщения
104
Репутация
31
AZJIO [?]
глюки: после использования горячей клавиши происходит непонятное
Пробовал и этот пример, и этот скрипт (который в спойлере) в котором я пробовал по Ctrl+F12 - и текст из буфера обмена прекрасно добавляется куда нужно, и кнопка создается и нету никаких косяков. Пробовал и в SciTE и в Notepad++ - Пробовал раз 5-8, глюков не вижу.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
beve
Проверил сняв все процессы, кроме системных. После первого добавления кнопки горячей клавишей Ctrl+F11 (и Ctrl+F12) и Enter (в качестве OK в диалоге) появляется глюк: кнопка "на уровень вверх" вместо перехода открывает новое окно эксплорера. После запуска "Диспетчера задач" переход на уровень вверх нормально работает. Кроме этого на панели задач не разворачиваются приложения, и их контекстное меню предлагает закрыть все окна проводника, а если запущен "сократ" то вылетает его меню перевода, которое срабатывает по Ctrl+"правая кнопка мыши". Система WindowsXP SP3, AutoIt3 v3.3.0.0, Notepad++.
Если просто использовать клавиши Ctrl+F11 и Ctrl+Insert в проводнике никаких проблем.



Всё сводится к тому, что остаётся как бы зажатая клавиша Ctrl, так как в проводнике у меня происходит выделение каталогов, аналогично при зажатой кнопке, и когда нажал Ctrl, то исправляется. Добавление Send("{LCTRL}"), Send("{RCTRL}"), Send("{LCTRL up}"), Send("{RCTRL up}"), Send("{^ up}") не помогает.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AZJIO [?]
Всё сводится к тому, что остаётся как бы зажатая клавиша Ctrl

[?]
метод обхода залипания клавиш-модификаторов:

Код:
#include <Misc.au3>

_SendEx("+{F1}")

Func _SendEx($sSend_Data)
    Local $hUser32DllOpen = DllOpen("User32.dll")
    
    While _IsPressed("10", $hUser32DllOpen) Or _IsPressed("11", $hUser32DllOpen) Or _IsPressed("12", $hUser32DllOpen)
        Sleep(10)
    WEnd
    
    Send($sSend_Data)
    
    DllClose($hUser32DllOpen)
EndFunc
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2,894
Репутация
1,196
beve [?]
Залипание клавиш не включено случайно?
Настройки клавиатуры и специальные возможности всё по умолчанию, наоборот искали возможность отключить многократное нажатие Shift (более 5 раз) чтоб не расценивалось как залипание. Понял теперь причину, добавил паузу 130мс, проблема исчезла (120 недостаточно).

CreatoR
Тоже помогло, смысл понял, каждые 10мс проверяется зажатие клавиши и следующая сочетание не используется пока не произойдёт отжатие...
 
Верх