1

Тема: AHK: Отправление виртуального кода клавиши

Помогите, пожалуйста, реализовать отправление виртуального кода клавиши (в случае с буквенными символами) или название клавиши в формате кода методом определения скриптом кода нажатой клавиши и добавления к нему скобок.

Пока пользуюсь таким примитивным способом:


Esc & vk30:: SendRaw {vk30}
Esc & vk31:: SendRaw {vk31}
Esc & vk32:: SendRaw {vk32}
Esc & vk33:: SendRaw {vk33}
Esc & vk34:: SendRaw {vk34}
Esc & vk35:: SendRaw {vk35}
Esc & vk36:: SendRaw {vk36}
Esc & vk37:: SendRaw {vk37}
Esc & vk38:: SendRaw {vk38}
Esc & vk39:: SendRaw {vk39}
Esc & vk41:: SendRaw {vk41}
Esc & vk42:: SendRaw {vk42}
Esc & vk43:: SendRaw {vk43}
Esc & vk44:: SendRaw {vk44}
Esc & vk45:: SendRaw {vk45}
Esc & vk46:: SendRaw {vk46}
Esc & vk47:: SendRaw {vk47}
Esc & vk48:: SendRaw {vk48}
Esc & vk49:: SendRaw {vk49}
Esc & vk4A:: SendRaw {vk4A}
Esc & vk4B:: SendRaw {vk4B}
Esc & vk4C:: SendRaw {vk4C}
Esc & vk4D:: SendRaw {vk4D}
Esc & vk4E:: SendRaw {vk4E}
Esc & vk4F:: SendRaw {vk4F}
Esc & vk50:: SendRaw {vk50}
Esc & vk51:: SendRaw {vk51}
Esc & vk52:: SendRaw {vk52}
Esc & vk53:: SendRaw {vk53}
Esc & vk54:: SendRaw {vk54}
Esc & vk55:: SendRaw {vk55}
Esc & vk56:: SendRaw {vk56}
Esc & vk57:: SendRaw {vk57}
Esc & vk58:: SendRaw {vk58}
Esc & vk59:: SendRaw {vk59}
Esc & vk5A:: SendRaw {vk5A}
Esc & vkBA:: SendRaw {vkBA}
Esc & vkBB:: SendRaw {vkBB}
Esc & vkBC:: SendRaw {vkBC}
Esc & vkBD:: SendRaw {vkBD}
Esc & vkBE:: SendRaw {vkBE}
Esc & vkBF:: SendRaw {vkBF}
Esc & vkC0:: SendRaw {vkC0}
Esc & vkDB:: SendRaw {vkDB}
Esc & vkDC:: SendRaw {vkDC}
Esc & vkDD:: SendRaw {vkDD}
Esc & vkDE:: SendRaw {vkDE}
Esc & vkDF:: SendRaw {vkDF}
Esc & vkE2:: SendRaw {vkE2}

Esc & LControl:: SendRaw {LCtrl}
Esc & RControl:: SendRaw {RCtrl}
Esc & LShift:: SendRaw {LShift}
Esc & RShift:: SendRaw {RShift}
Esc & LAlt:: SendRaw {LAlt}
Esc & RAlt:: SendRaw {RAlt}
Esc & Enter:: SendRaw {Enter}
Esc & Delete:: SendRaw {Delete}
Esc & Insert:: SendRaw {Insert}
Esc & Home:: SendRaw {Home}
Esc & End:: SendRaw {End}
Esc & PGDN:: SendRaw {PGDN}
Esc & PGUP:: SendRaw {PGUP}
Esc & BackSpace:: SendRaw {BackSpace}
Esc & Space:: SendRaw {Space}
Esc & AppsKey:: SendRaw {AppsKey}
Esc & Tab:: SendRaw {Tab}
Esc & PrintScreen:: SendRaw {PrintScreen}
Esc & Pause:: SendRaw {Pause}

Esc & Numpad0:: SendRaw {Numpad0}
Esc & Numpad1:: SendRaw {Numpad1}
Esc & Numpad2:: SendRaw {Numpad2}
Esc & Numpad3:: SendRaw {Numpad3}
Esc & Numpad4:: SendRaw {Numpad4}
Esc & Numpad5:: SendRaw {Numpad5}
Esc & Numpad6:: SendRaw {Numpad6}
Esc & Numpad7:: SendRaw {Numpad7}
Esc & Numpad8:: SendRaw {Numpad8}
Esc & Numpad9:: SendRaw {Numpad9}
Esc & NumpadUp:: SendRaw {NumpadUp}
Esc & NumpadDown:: SendRaw {NumpadDown}
Esc & NumpadLeft:: SendRaw {NumpadLeft}
Esc & NumpadRight:: SendRaw {NumpadRight}
Esc & NumpadAdd:: SendRaw {NumpadAdd}
Esc & NumpadClear:: SendRaw {NumpadClear}
Esc & NumpadDel:: SendRaw {NumpadDel}
Esc & NumpadDiv:: SendRaw {NumpadDiv}
Esc & NumpadDot:: SendRaw {NumpadDot}
Esc & NumpadEnd:: SendRaw {NumpadEnd}
Esc & NumpadEnter:: SendRaw {NumpadEnter}
Esc & NumpadHome:: SendRaw {NumpadHome}
Esc & NumpadIns:: SendRaw {NumpadIns}
Esc & NumpadMult:: SendRaw {NumpadMult}
Esc & NumpadPgdn:: SendRaw {NumpadPgdns}
Esc & NumpadPgup:: SendRaw {NumpadPgup}
Esc & NumpadSub:: SendRaw {NumpadSub}
Esc & NumLock:: SendRaw {NumLock}

Esc & Left:: SendRaw {Left}
Esc & Right:: SendRaw {Right}
Esc & Down:: SendRaw {Down}
Esc & Up:: SendRaw {Up}

Esc & F1:: SendRaw {f1}
Esc & F2:: SendRaw {f2}
Esc & F3:: SendRaw {f3}
Esc & F4:: SendRaw {f4}
Esc & F5:: SendRaw {f5}
Esc & F6:: SendRaw {f6}
Esc & F7:: SendRaw {f7}
Esc & F8:: SendRaw {f8}
Esc & F9:: SendRaw {f9}
Esc & F10:: SendRaw {f10}
Esc & F11:: SendRaw {f11}
Win10x64, AHK v1.1.25

2

Re: AHK: Отправление виртуального кода клавиши

serzh82saratov реализовал это в AhkSpy. А если нужно прямо печатать виртуальными кодми, то приведённый Вами скрипт как раз подходит.

3 (изменено: serzh82saratov, 2016-05-26 15:23:36)

Re: AHK: Отправление виртуального кода клавиши

becauseim пишет:

отправление виртуального кода клавиши (в случае с буквенными символами)

Как то предлагал тоже самое покороче, по Esc выводит код, Esc и Shift выводит выводит код в скобках.


#SingleInstance Force

Symbols := "vkBA|vkBB|vkBC|vkBD|vkBE|vkBF|vkC0|vkDB|vkDC|vkDD|vkDE|vk41|vk42|"
            . "vk43|vk44|vk45|vk46|vk47|vk48|vk49|vk4A|vk4B|vk4C|vk4D|vk4E|"
            . "vk4F|vk50|vk51|vk52|vk53|vk54|vk55|vk56|vk57|vk58|vk59|vk5A"

Loop, Parse, Symbols, |
    Hotkey, Esc & %A_LoopField%, InputVK
Return

InputVK:
	Key := SubStr(A_ThisHotkey, InStr(A_ThisHotkey, "&") + 2)
    SendInput, % "{Raw}" (GetKeyState("Shift", "P") ? "{" Key "}" : Key)
    KeyWait, % Key
    Return
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

4

Re: AHK: Отправление виртуального кода клавиши

Или так:

Loop  {
	Input, var, L1 E V, {Esc}{LShift}{RShift}
	e := GetKeyState("Esc", "P"), s := GetKeyState("Shift", "P")
	if e && !InStr(ErrorLevel, "EndKey") && vk := Format("vk{:02X}", GetKeyVK(var))
		SendInput, % "{BS}" . (s ? "{{}" vk "{}}" : vk)
}

По Esc выводит код, по Esc + Shift выводит выводит код в скобках.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5

Re: AHK: Отправление виртуального кода клавиши

Input тоже для таких целей раньше пытался использовать, ради короткого кода, но с ним проблемы иногда, пропускает нажатие самой клавиши в систему, пропускает нажатие как таковое, и приведённый выше код символьные клавиши у меня выдаёт как vk00.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

6

Re: AHK: Отправление виртуального кода клавиши

Этот и должен пропускать, а символьные можно отрезать, они не нужны.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7

Re: AHK: Отправление виртуального кода клавиши

Понравился последний вариант лаконичностью, т.е. без необходимости перечисления названий. Однако, думаю, что у меня могут возникнуть с ним сложности в плане размещения в файле с остальными сценариями, т.к. я все еще не понял, как размещать циклы, чтобы они не предотврощали работу сценариев, следующих за ними.

Добавьте, пожалуйста, к варианту из 4-го поста условия, аналогично варианту из 3-го поста, для отправления следующих названий клавиш:

+ Список
Esc & LControl:: SendRaw {LCtrl}
Esc & RControl:: SendRaw {RCtrl}
Esc & LShift:: SendRaw {LShift}
Esc & RShift:: SendRaw {RShift}
Esc & LAlt:: SendRaw {LAlt}
Esc & RAlt:: SendRaw {RAlt}
Esc & Enter:: SendRaw {Enter}
Esc & Delete:: SendRaw {Delete}
Esc & Insert:: SendRaw {Insert}
Esc & Home:: SendRaw {Home}
Esc & End:: SendRaw {End}
Esc & PGDN:: SendRaw {PGDN}
Esc & PGUP:: SendRaw {PGUP}
Esc & BackSpace:: SendRaw {BackSpace}
Esc & Space:: SendRaw {Space}
Esc & AppsKey:: SendRaw {AppsKey}
Esc & Tab:: SendRaw {Tab}
Esc & PrintScreen:: SendRaw {PrintScreen}
Esc & Pause:: SendRaw {Pause}

Esc & Numpad0:: SendRaw {Numpad0}
Esc & Numpad1:: SendRaw {Numpad1}
Esc & Numpad2:: SendRaw {Numpad2}
Esc & Numpad3:: SendRaw {Numpad3}
Esc & Numpad4:: SendRaw {Numpad4}
Esc & Numpad5:: SendRaw {Numpad5}
Esc & Numpad6:: SendRaw {Numpad6}
Esc & Numpad7:: SendRaw {Numpad7}
Esc & Numpad8:: SendRaw {Numpad8}
Esc & Numpad9:: SendRaw {Numpad9}
Esc & NumpadUp:: SendRaw {NumpadUp}
Esc & NumpadDown:: SendRaw {NumpadDown}
Esc & NumpadLeft:: SendRaw {NumpadLeft}
Esc & NumpadRight:: SendRaw {NumpadRight}
Esc & NumpadAdd:: SendRaw {NumpadAdd}
Esc & NumpadClear:: SendRaw {NumpadClear}
Esc & NumpadDel:: SendRaw {NumpadDel}
Esc & NumpadDiv:: SendRaw {NumpadDiv}
Esc & NumpadDot:: SendRaw {NumpadDot}
Esc & NumpadEnd:: SendRaw {NumpadEnd}
Esc & NumpadEnter:: SendRaw {NumpadEnter}
Esc & NumpadHome:: SendRaw {NumpadHome}
Esc & NumpadIns:: SendRaw {NumpadIns}
Esc & NumpadMult:: SendRaw {NumpadMult}
Esc & NumpadPgdn:: SendRaw {NumpadPgdns}
Esc & NumpadPgup:: SendRaw {NumpadPgup}
Esc & NumpadSub:: SendRaw {NumpadSub}
Esc & NumLock:: SendRaw {NumLock}

Esc & Left:: SendRaw {Left}
Esc & Right:: SendRaw {Right}
Esc & Down:: SendRaw {Down}
Esc & Up:: SendRaw {Up}

Esc & F1:: SendRaw {f1}
Esc & F2:: SendRaw {f2}
Esc & F3:: SendRaw {f3}
Esc & F4:: SendRaw {f4}
Esc & F5:: SendRaw {f5}
Esc & F6:: SendRaw {f6}
Esc & F7:: SendRaw {f7}
Esc & F8:: SendRaw {f8}
Esc & F9:: SendRaw {f9}
Esc & F10:: SendRaw {f10}
Esc & F11:: SendRaw {f11}

Иными словами, чтобы у буквенных символов отправлялись виртуальные коды, а у всех остальных - названия, которые одинакого воспринимаются при любой раскладке.

Win10x64, AHK v1.1.25

8 (изменено: teadrinker, 2016-05-28 00:56:06)

Re: AHK: Отправление виртуального кода клавиши

serzh82saratov пишет:

символьные клавиши у меня выдаёт как vk00

А, сразу не понял, оказывается, от раскладки зависит.

becauseim пишет:

могут возникнуть с ним сложности в плане размещения в файле с остальными сценариями

Если с остальными, то так можно:

*Esc::
	Loop  {
		Input, var, L1 E V, {Esc}{LShift}{RShift}
		e := GetKeyState("Esc", "P"), s := GetKeyState("Shift", "P"), end := InStr(ErrorLevel, "EndKey")
		if e && !end && vk := Format( "vk{:02X}", GetKeyVK( ReplaceSimbol(var) ) )
			SendInput, % "{BS}" . (s ? "{{}" vk "{}}" : vk)
	} until !(e || end)
	Return

ReplaceSimbol(sim)
{  
   static Cyr := "ЁЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮёйцукенгшщзхъфывапролджэячсмитьбю,.""№;?"
        , Lat := "~QWERTYUIOP{}ASDFGHJKL:""ZXCVBNM<>``qwertyuiop[]asdfghjkl;'zxcvbnm,.?/@#$&"
	Return (found := InStr(Cyr, sim, 1)) ? SubStr(Lat, found, 1) : sim
}

Но этот код предназначен только для печатных символов.
Если для всех и без перечислений — ради интереса сделал, но лаконично не получается:

$*Esc::
	hHookKeybd := SetKbdHook()
	KeyWait, Esc
	DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
	Return

LowLevelKeyboardProc(nCode, wParam, lParam)
{
	static oMsg := {0x100: "WM_KEYDOWN", 0x101: "WM_KEYUP"}, ShiftState
	msg  := oMsg[wParam]
	vk   := NumGet(lParam + 0, "UInt")
	ext  := NumGet(lParam + 8, "UInt") & 1
	sc   := NumGet(lParam + 4, "UInt") | ext << 8
	
	if (vk = 0xA0 || vk = 0xA1)
		ShiftState := msg = "WM_KEYDOWN" ? 1 : 0
	
	if ( (vk = 0x1B || vk = 0xA0 || vk = 0xA1) && msg = "WM_KEYUP" && !(ShiftState := "") )
		Return DllCall("CallNextHookEx", Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
	
	if (msg = "WM_KEYDOWN")  {
		Timer := Func("SendHotkey").Bind(vk, sc, ShiftState)
		SetTimer, % Timer, -10
	}
	Return 1
}

SendHotkey(vk, sc, ShiftState)
{
	global hHookKeybd
	KeyName := GetKeyName( Format("vk{:02X}", vk) . Format("sc{:02X}", sc))
	if KeyName in Escape,LShift,RShift
		Return
	
	char := RegExMatch(KeyName, "i)^[a-z]$")
	DllCall("UnhookWindowsHookEx", Ptr, hHookKeybd)
	if !ShiftState
		SendInput % "{Raw}" (char ? Format("vk{:02X}", vk) : KeyName)
	else
		SendInput % "{Raw}{" (char ? Format("vk{:02X}", vk) : KeyName) "}"
	hHookKeybd := SetKbdHook()
}

SetKbdHook()
{
	Return DllCall("SetWindowsHookEx"
		, Int, WH_KEYBOARD_LL := 13
		, Ptr, RegisterCallback("LowLevelKeyboardProc", "Fast")
		, Ptr, DllCall("GetModuleHandle", UInt, 0, Ptr)
		, UInt, 0, Ptr)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

9 (изменено: serzh82saratov, 2016-05-28 14:03:51)

Re: AHK: Отправление виртуального кода клавиши

У меня в обоих вариантах не работают символьные.

Если взять функции отсюда, то таким кодом можно печатать с модификаторами (если требуются), а также клавиши джойстика и мыши. Саму клавишу Esc можно напечатать с модификатором.


#NoEnv
#SingleInstance Force

Hotkey_Arr("Func", "Write"), Hotkey_Control("MLRJ")

$Esc::
$<+Esc::
	Hotkey_Arr("Mode", GetKeyState("LShift", "P"))
	If GetKeyState("LShift", "P")
		KeyWait, LShift
	Hotkey_Arr("Hook", 1)
	TrayTip, % "Печать клавиш" . (Hotkey_Arr("Mode") ? " в скобках" : ""), % " ", , 1
	Return
	
Write(K) {
	If (K.Pref = "" && K.HK = "Escape") {
		TrayTip, % "Печать клавиш выключена", % " ", , 2
		Return Hotkey_Reset() 
	}
	If (K.HK = "")
		Return 
	SendStr(K.Pref . (Hotkey_Arr("Mode") ? "{" K.HK "}" : K.HK)) 
}

SendStr(Str) {  
	ControlGetFocus, Ctrl, % "ahk_id" WinExist("A")
	Loop, Parse, Str
		PostMessage, 0x102, Ord(A_LoopField), 1, %Ctrl%   ;  WM_CHAR
}
+ Заменить функцию, если надо без модификаторов.

Write(K) {
	If (K.Pref = "" && K.HK = "Escape") {
		TrayTip, % "Печать клавиш выключена", % " ", , 2
		Return Hotkey_Reset()
	}
	If (K.ModUp && K.HK = "")
		Return
	Key := K.VK = K.HK ? K.HK : K.TK
	SendStr(Hotkey_Arr("Mode") ? "{" Key "}" : Key)
}
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

10

Re: AHK: Отправление виртуального кода клавиши

У меня в обоих вариантах не работают символьные.

А это какие именно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

11

Re: AHK: Отправление виртуального кода клавиши

Печатные.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

12

Re: AHK: Отправление виртуального кода клавиши

Странно, у меня оба работают идеально на Win7 x64 на обеих версиях AHK. А можешь проверить, что именно не работает? Первый код, вроде, совсем простой. Может, параллельно что-то запущено?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

13

Re: AHK: Отправление виртуального кода клавиши

А у тебя работает при русской расскладке по умолчанию?

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

14

Re: AHK: Отправление виртуального кода клавиши

Во втором варианте лучше заменить на более очевидное:

char := StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)

тогда работает. Ну а первый думаю вообще не вариант.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

15 (изменено: teadrinker, 2016-05-28 21:17:18)

Re: AHK: Отправление виртуального кода клавиши

А разве эти оба варианта не истину возвращают в случае буквенных клавиш? Я так понял, у тебя с печатными это вариант вообще не работает.

serzh82saratov пишет:

А у тебя работает при русской расскладке по умолчанию?

Не пробовал, попозже. Я не просто так интересуюсь, у меня бывали случаи с заказчиками, когда у меня всё работает идеально, а у них нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

16

Re: AHK: Отправление виртуального кода клавиши

teadrinker пишет:

А разве эти оба варианта не истину возвращают в случае буквенных клавиш?

Не совсем понял ты про:

char := RegExMatch(KeyName, "i)^[a-z]$")

и

char := StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

17

Re: AHK: Отправление виртуального кода клавиши

Ну да:

KeyName := "a"
MsgBox, % char := RegExMatch(KeyName, "i)^[a-z]$")
MsgBox, % char := StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

18

Re: AHK: Отправление виртуального кода клавиши

KeyName := "а"
MsgBox, % char := RegExMatch(KeyName, "i)^[a-z]$")
MsgBox, % char := StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

19

Re: AHK: Отправление виртуального кода клавиши

KeyName := "/"
MsgBox, % char := RegExMatch(KeyName, "i)^[a-z]$")
MsgBox, % char := StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

20

Re: AHK: Отправление виртуального кода клавиши

Так в моём варианте KeyName может быть только латиницей, вроде.

vk := 0x41, sc := 0x1E  ; клавиша a
KeyName := GetKeyName( Format("vk{:02X}", vk) . Format("sc{:02X}", sc))
MsgBox, % char := RegExMatch(KeyName, "i)^[a-z]$")
MsgBox, % char := StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

21

Re: AHK: Отправление виртуального кода клавиши

GetKeyName должен вернуть символ текущей раскладки, но у меня почему то твой код всегда возвращает символ раскладки по умолчанию, то есть кирилицу. Хотя одновременно с твоим кодом AhkSpy стабильно выдаёт символ именно текущей раскладки, разницы в коде я не понял.
GetKeyVK должен возвращать код только от символа текущей раскладки, в противном случае будет пусто. Данное поведение функций наблюдаю у себя всегда. Так как в справке такого нет, то может у нас это отличается.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

22

Re: AHK: Отправление виртуального кода клавиши

serzh82saratov пишет:

KeyName := "/"

Так я пока только про буквенные говорю.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

23

Re: AHK: Отправление виртуального кода клавиши

Ладно, потом с другой раскладкой проверю.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

24

Re: AHK: Отправление виртуального кода клавиши

teadrinker пишет:

Так в моём варианте KeyName может быть только латиницей, вроде.

В случае с "/" всё равно ведь не правильно. Опять же мало ли какие клавиатуры и раскладки, зачем перечислять все известные а потом неизвестные варианты. По моему надёжнее и проще так:

StrLen(KeyName) = 1 && !Instr("1234567890-=", KeyName)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).

25

Re: AHK: Отправление виртуального кода клавиши

teadrinker пишет:

Так я пока только про буквенные говорю.

Я думал мы говорим про сценарий который выдаёт вк коды всех тех клавиш, которые нуждаются в этом для независимости от раскладки, и именах остальных.

becauseim пишет:

Иными словами, чтобы у буквенных символов отправлялись виртуальные коды, а у всех остальных - названия, которые одинакого воспринимаются при любой раскладке.

По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.30.01 (Unicode 32-bit).