• ずっと昔(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);
	}
}