201 (изменено: Malcev, 2017-07-05 13:32:11)

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Я так понял, что такие:
Volume Up транскодируется в сканкод 30 с 0 параметром, а 4 параметра в этой функции нету.
https://msdn.microsoft.com/ru-ru/librar … s.85).aspx
4 есть только в MapVirtualKeyEx (начиная с Vista).

msgbox % DllCall("MapVirtualKey", "uint", 0xAF, "uint", 0)

Можешь в исходниках полазить, он там даёт комментарии:
https://github.com/AutoHotkey/AutoHotke … e/hook.cpp

202

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Но информация об sc130 в MapVirtualKey есть, а в GetKeyName уже нет...

SetFormat, IntegerFast, h
msgbox % vk := DllCall("MapVirtualKey", "uint", 0xe030, "uint", 1)  
msgbox % GetKeyName("vk" vk)
msgbox % GetKeyName("sc" 130)
По вопросам возмездной помощи пишите письма
E-Mail: serzh82saratov@mail.ru
OS: Win7x64, AutoHotkey_L v1.1.26.01 (Unicode 32-bit).

203

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Потому что VolumeUp ahk хранит в VK, как и почти все остальные клавиши.

204

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Почему sc из vk неправильный - понятно, тут уже вопрос почему GetKeyName из sc не то возвращает, если в этом случае с MapVirtualKey проблем нет.

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

205

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Ну смотри, что пишет:

vk_type sc_to_vk(sc_type aSC)
{
// These are mapped manually because MapVirtualKey() doesn't support them correctly, at least
// on some -- if not all -- OSs.  The main app also relies upon the values assigned below to
// determine which keys should be handled by scan code rather than vk:

https://github.com/AutoHotkey/AutoHotke … _mouse.cpp

206

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Вообщем смысл в том что на MapVirtualKey надежды нет, поэтому сделано много исключений, а многие исключения отсутсвуют.

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

207

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Ну да.
Ссылки я, кстати, по невнимательности привел на старый автохотки, но сути этого не меняет.
В новых исходниках теже самые присутствуют комментарии.

208

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Я так понял ММ там напрочь отсутствуют.

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

209

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Да, вот список:

vk_type sc_to_vk(sc_type aSC)
{
	// These are mapped manually because MapVirtualKey() doesn't support them correctly, at least
	// on some -- if not all -- OSs.  The main app also relies upon the values assigned below to
	// determine which keys should be handled by scan code rather than vk:
	switch (aSC)
	{
	// Even though neither of the SHIFT keys are extended -- and thus could be mapped with MapVirtualKey()
	// -- it seems better to define them explicitly because under Win9x (maybe just Win95).
	// I'm pretty sure MapVirtualKey() would return VK_SHIFT instead of the left/right VK.
	case SC_LSHIFT:      return VK_LSHIFT; // Modifiers are listed first for performance.
	case SC_RSHIFT:      return VK_RSHIFT;
	case SC_LCONTROL:    return VK_LCONTROL;
	case SC_RCONTROL:    return VK_RCONTROL;
	case SC_LALT:        return VK_LMENU;
	case SC_RALT:        return VK_RMENU;

	// Numpad keys require explicit mapping because MapVirtualKey() doesn't support them on all OSes.
	// See comments in vk_to_sc() for details.
	case SC_NUMLOCK:     return VK_NUMLOCK;
	case SC_NUMPADDIV:   return VK_DIVIDE;
	case SC_NUMPADMULT:  return VK_MULTIPLY;
	case SC_NUMPADSUB:   return VK_SUBTRACT;
	case SC_NUMPADADD:   return VK_ADD;
	case SC_NUMPADENTER: return VK_RETURN;

	// The following are ambiguous because each maps to more than one VK.  But be careful
	// changing the value to the other choice because some callers rely upon the values
	// assigned below to determine which keys should be handled by scan code rather than vk:
	case SC_NUMPADDEL:   return VK_DELETE;
	case SC_NUMPADCLEAR: return VK_CLEAR;
	case SC_NUMPADINS:   return VK_INSERT;
	case SC_NUMPADUP:    return VK_UP;
	case SC_NUMPADDOWN:  return VK_DOWN;
	case SC_NUMPADLEFT:  return VK_LEFT;
	case SC_NUMPADRIGHT: return VK_RIGHT;
	case SC_NUMPADHOME:  return VK_HOME;
	case SC_NUMPADEND:   return VK_END;
	case SC_NUMPADPGUP:  return VK_PRIOR;
	case SC_NUMPADPGDN:  return VK_NEXT;

	// No callers currently need the following alternate virtual key mappings.  If it is ever needed,
	// could have a new aReturnSecondary parameter that if true, causes these to be returned rather
	// than the above:
	//case SC_NUMPADDEL:   return VK_DECIMAL;
	//case SC_NUMPADCLEAR: return VK_NUMPAD5; // Same key as Numpad5 on most keyboards?
	//case SC_NUMPADINS:   return VK_NUMPAD0;
	//case SC_NUMPADUP:    return VK_NUMPAD8;
	//case SC_NUMPADDOWN:  return VK_NUMPAD2;
	//case SC_NUMPADLEFT:  return VK_NUMPAD4;
	//case SC_NUMPADRIGHT: return VK_NUMPAD6;
	//case SC_NUMPADHOME:  return VK_NUMPAD7;
	//case SC_NUMPADEND:   return VK_NUMPAD1;
	//case SC_NUMPADPGUP:  return VK_NUMPAD9;
	//case SC_NUMPADPGDN:  return VK_NUMPAD3;	

	case SC_APPSKEY:	return VK_APPS; // Added in v1.1.17.00.
	}

	// Use the OS API call to resolve any not manually set above.  This should correctly
	// resolve even elements such as SC_INSERT, which is an extended scan code, because
	// it passes in only the low-order byte which is SC_NUMPADINS.  In the case of SC_INSERT
	// and similar ones, MapVirtualKey() will return the same vk for both, which is correct.
	// Only pass the LOBYTE because I think it fails to work properly otherwise.
	// Also, DO NOT pass 3 for the 2nd param of MapVirtualKey() because apparently
	// that is not compatible with Win9x so it winds up returning zero for keys
	// such as UP, LEFT, HOME, and PGUP (maybe other sorts of keys too).  This
	// should be okay even on XP because the left/right specific keys have already
	// been resolved above so don't need to be looked up here (LWIN and RWIN
	// each have their own VK's so shouldn't be problem for the below call to resolve):
	return MapVirtualKey((BYTE)aSC, 1);
}

https://github.com/Lexikos/AutoHotkey_L … _mouse.cpp

210 (изменено: teadrinker, 2017-07-05 15:31:59)

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Malcev пишет:

Volume Up транскодируется в сканкод 30 с 0 параметром, а 4 параметра в этой функции нету.
https://msdn.microsoft.com/ru-ru/librar … s.85).aspx
4 есть только в MapVirtualKeyEx (начиная с Vista)

Есть, просто не документирован:

SetFormat, IntegerFast, H
MsgBox, % DllCall("MapVirtualKey", UInt, VK_VOLUME_UP := 0xAF, UInt, MAPVK_VK_TO_VSC_EX := 4, UInt)
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

211

Re: AHK: Как перехватить все перемещения мыши и все нажатия клавиш?

Добавил новый код для клавиатурного хука, попозже добавлю для мышиного.

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