私のVisual StudioユーティリティアドインSamToolsの一部として、Ctrl + MouseWheelをキャッチし、アクティブなテキストウィンドウにpageup/pagedownコマンドを送信するマウス入力ルーチンがあります。 Visual Studio 2010には、そのジェスチャを使用してズームイン/アウト(バーフ)する新しい「機能」が追加されました。現在、私のアドインはスクロールコマンドを送信しますが、入力を食べていないので、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 scroll(非常に一般的に使用されるコマンド)。
残念ながら、マウスコマンドはカスタマイズオプションに表示されません。 –
OMG、私のマウスホイールとバック/フォワードボタンをもう一度持っていいですね!!!! –
ハッハッハー、これがうまくいったのを見てうれしい! :-) –