- ずっと昔(1999年くらい)に、スクロールバーやトラックバーの値をポップアップで表示するツールがあったと記憶してたけど、窓の杜とかVectorで調べまくっても発見できず。しょうがないので自分で作ってみることに。Win32はよくわからんし、.NETだと(グローバルフックの)メッセージフックができないのでさてどうしよう。と思って調べていたら、.NETでも、マウスとキーボードの低レベルフックはできるようだ。で、早速作ってみた。メッセージフックではないので、ちょっとばかり使いにくい仕様だが、まぁよしとした。カスタムなクラスには未対応。以下抜粋。
public delegate int DefaultHookProc(int nCode, IntPtr wParam, IntPtr lParam);
private static IntPtr mouseHookHandle;
private static DefaultHookProc mouseHookCallBack;
private static int mouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode == HC_ACTION)
{
//ここに処理を記述
}
return CallNextHookEx(mouseHookHandle, nCode, wParam, lParam);
}
private static void setLowLevelHook()
{
mouseHookCallBack = new DefaultHookProc(mouseHookProc);
mouseHookHandle = SetWindowsHookEx(
WH_MOUSE_LL,
mouseHookCallBack,
GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName),
0);
}
あと、以下もどこかで必要です。
GC.KeepAlive(mouseHookCallBack);
GC.KeepAlive(mouseHookHandle);
- MenuStipがWindows2000ではProfessionalでなくSystemの場合、正しく描画されない問題を発見。以下抜粋。
private class ToolStripCustomSystemRenderer : ToolStripSystemRenderer
{
protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs e)
{
ToolStrip ts = e.ToolStrip;
Graphics g = e.Graphics;
Rectangle rect = e.AffectedBounds;
if (!ToolStripManager.VisualStylesEnabled)
{
if (ts is MenuStrip && ts.BackgroundImage == null)
{
g.FillRectangle(new SolidBrush(SystemColors.Menu), rect);
return;
}
}
base.OnRenderToolStripBackground(e);
}
}