Что нового

[Мышь, клавиатура] Назначить действие на левую клавишу Win

WSWR

AutoIT Гуру
Сообщения
941
Репутация
362
Можно ли средствами Autoit назначить выполнение какой-либо функции только на левую клавишу Win (естественно, клавиша потеряет основное назначение, но это без разницы)? В AHK сделать такое не составляет труда, но пользоваться этим языком не могу по ряду причин :IL_AutoIt_1:
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Так сойдет ?
Код:
#include <Misc.au3>

While 1
	If _IsPressed('5B') Then Function()
WEnd

Func Function()
	MsgBox(0, 'TEST', 'TEST')
EndFunc
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
362
Zaramot
Нет :(
Тут не переназначение, а просто детект нажатия

Пока использую связку exe-скрипта на AHK, переназначающего LWin на другую клавишу + скрипт на Autoit
 

DarWiM

Продвинутый
Сообщения
527
Репутация
90
WSWR
AutoIt не может переназначать системные клавиши, имхо
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
362
sngr
И эта UDF такое не может:
Код клавиши не может состоять только из одного(их) CK-значения. Так же, не допускается использование более одного VK-значения. Функция не делает различий между левыми и правыми вспомогательными клавишами. Например, нельзя назначить горячую клавишу с использованием только левой клавиши CTRL.
У меня на клавиатуре две клавиши Win, правую хотелось бы оставить, и при существующей связке AHK+Autoit это нетрудно сделать.

Мне просто интересно, почему в AHK это так легко реализуется, а в Autoit даже сложного способа не просматривается? :stars:
 

InnI

AutoIT Гуру
Сообщения
4,724
Репутация
1,355
WSWR [?]
средствами Autoit назначить выполнение какой-либо функции только на левую клавишу Win
На основе примера из справки к функции _WinAPI_SetWindowsHookEx
Код:
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <StructureConstants.au3>

OnAutoItExitRegister("Cleanup")

$hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
$hmod = _WinAPI_GetModuleHandle(0)
$hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)

While 1
  Sleep(1000)
WEnd

Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then
        Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $wParam = $WM_KEYDOWN Then
        If DllStructGetData($tKEYHOOKS, "vkCode") = 0x5B Then
          ConsoleWrite("DOWN ")
          Return -1
        EndIf
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
EndFunc   ;==>_KeyProc

Func Cleanup()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
EndFunc   ;==>Cleanup
 
Автор
W

WSWR

AutoIT Гуру
Сообщения
941
Репутация
362
InnI
Похоже, это оно, спасибо!
 
Верх