Как часть моей служебной программы утилит Visual Studio SamTools, у меня есть процедура ввода мышей, которая ловит Ctrl + MouseWheel и отправляет команду createup/pagedown в активное текстовое окно. Visual Studio 2010 добавила новую «функцию», которая использует этот жест для увеличения/уменьшения масштаба (barf). В настоящее время моя надстройка отправляет команду прокрутки, но Visual Studio все еще меняет размер шрифта, потому что я не ем вход.Могу ли я подавить выбранный вход перед основным контуром приложения?
Я установил свой крючок по телефону SetWindowsHookEx
. Вот код обратного вызова. Мой вопрос: - лучший способ предотвратить визуализацию Visual Studio от ввода Ctrl + MouseWheel в качестве команды масштабирования просто не позвонить CallNextHookEx
, когда я получаю событие колеса мыши с помощью клавиши Ctrl?
(Пожалуйста, имейте в виду, что это какой-то старый код шахты.) :)
private IntPtr MouseCallback(int code, UIntPtr wParam, ref MOUSEHOOKSTRUCTEX lParam)
{
try
{
// the callback runs twice for each action - this is the latch
if (enterHook)
{
enterHook = false;
if (code >= 0)
{
int x = lParam.mstruct.pt.X;
int y = lParam.mstruct.pt.Y;
uint action = wParam.ToUInt32();
switch (action)
{
case WM_MOUSEWHEEL:
OnMouseWheel(new MouseEventArgs(MouseButtons.None, 0, x, y, ((short)HIWORD(lParam.mouseData))/(int)WHEEL_DELTA));
break;
default:
// don't do anything special
break;
}
}
}
else
{
enterHook = true;
}
}
catch
{
// can't let an exception get through or VS will crash
}
return CallNextHookEx(mouseHandle, code, wParam, ref lParam);
}
И вот код, который выполняется в ответ на MouseWheel
событие:
void mouse_enhancer_MouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
try
{
if (Keyboard.GetKeyState(System.Windows.Forms.Keys.ControlKey).IsDown && Connect.ApplicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
int clicks = e.Delta;
if (e.Delta < 0)
{
Connect.ApplicationObject.ExecuteCommand("Edit.ScrollPageDown", "");
}
else
{
Connect.ApplicationObject.ExecuteCommand("Edit.ScrollPageUp", "");
}
}
}
catch (System.Runtime.InteropServices.COMException)
{
// this occurs if ctrl+wheel is activated on a drop-down list. just ignore it.
}
}
PS : SamTools - с открытым исходным кодом (GPL) - вы можете скачать его по ссылке, а источник - в установщике.
PSS: Ctrl + [+] и Ctrl + [-] лучше для масштабирования. Пусть Ctrl + MouseWheel прокручивает (значительно более часто используемая команда).
К сожалению, команды мыши не отображаются в настройках параметров. –
OMG, так приятно снова иметь колесо мыши и кнопки назад/вперед !!!! –
ха-ха, рад видеть, что это сработало! :-) –