Что нового

[Мышь, клавиатура] Не удается отправить комбинацию клавиш типа Send("#r")

S1NTEZ

Новичок
Сообщения
4
Репутация
0
Достаточно тривиальная задача обернулась огромной проблемой
никак не удается вызвать комбинацию клавиш использующую буквы, типа Send("#r") или Send("^p") или подобное.

При запуске на выполнение (Tools -> Go) простой команды, выполнение которой должно запустить run.exe


Комбинация не срабатывает, run.exe не запускается.

но вместо этого в окно редактора дописывается буква 'r'


Если выполнить Send("^p"), то так же комбинация не сработает а просто допишется буква 'p'

проверял на 2 компьютерах, результат тот же. везде кстати Win 7

Другие комбинации типа Send("#{F1}") работают прекрасно.

Может кто в курсе, в чем может быть косяк?
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
S1NTEZ
[WIN]+[R] - системная комбинация клавиш...
Для начала надо отключить системные комбинации клавиш...

Код:
; НАЧАЛО

 $CUPOL="HKCU\Software\Microsoft\Windows\CurrentVersion\Policies"

 ; Отключение системных комбинаций клавиш

 RegWrite($CUPOL&"\Explorer","NoWinKeys","REG_DWORD","1")

 ; Закрыть профиль пользователя

 Shutdown(0)

; КОНЕЦ
 
Автор
S1NTEZ

S1NTEZ

Новичок
Сообщения
4
Репутация
0
Но мне не нужно отключать системную комбинацию.
мне как раз таки из автоита нужно выполнить комбинацию клавиш чтоб произошел процесс который закреплен в системе за этой комбинацией.
Нужно сделать так как будто пользователь сам на клавиатуре нажал win+R
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
S1NTEZ
Тогда попробуйте заменить английскую букву русской, например, #к и ^з...
 
Автор
S1NTEZ

S1NTEZ

Новичок
Сообщения
4
Репутация
0
вы правы, все получилось.
Удивительно. Встает вопрос насколько такой способ универсален.
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
S1NTEZ
Я делаю так...

Код:
; Установка горячих клавиш

 If @KBLayout=409 Then

  HotKeySet("#!q","FUNC1")
  HotKeySet("#!d","FUNC2")

 ElseIf @KBLayout=419 Then

  HotKeySet("#!й","FUNC1")
  HotKeySet("#!в","FUNC2")

 EndIf
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 472
Репутация
2 401
snoitaleR [?]
Я раньше тоже так делал, а теперь делаю так (универсальность, в отличий от твоего примера):

Код:
_WinAPI_LoadKeyboardLayout(0x0409)

Send("#r")

Func _WinAPI_LoadKeyboardLayout($sLayoutID, $hWnd = 0)
	Local Const $WM_INPUTLANGCHANGEREQUEST = 0x50
	Local $aRet = DllCall("user32.dll", "long", "LoadKeyboardLayoutW", "wstr", Hex($sLayoutID, 8), "int", 0)
	
	If Not @error And $aRet[0] Then
		If $hWnd = 0 Then
			$hWnd = WinGetHandle(AutoItWinGetTitle())
		EndIf
		
		DllCall("user32.dll", "ptr", "SendMessage", "hwnd", $hWnd, "int", $WM_INPUTLANGCHANGEREQUEST, "int", 1, "int", $aRet[0])
		Return 1
	EndIf
	
	Return SetError(1)
EndFunc
 
Верх