C# を使用して、すべての上に (マウスで) 線を引く必要があります。P/Invoke を使用して、デスクトップ ウィンドウの Graphics オブジェクトを取得できます。
DesktopGraphics = Graphics.FromHdc(GetDC(IntPtr.Zero));
ただし、このグラフィックス オブジェクトを使用して描画したものはすべて、左側のモニターにのみ表示され、右側のモニターには何も表示されません。失敗でも何でもなく、表示されないだけです。
Graphics オブジェクトを作成すると、可視クリップ領域が 1680 x 1050 であることが示されます。これは、左のモニターの解像度です。左モニターのデバイスコンテキストのみを取得しているとしか思えません。両方 (または任意の数) のモニターのデバイス コンテキストを取得する方法はありますか?
EDIT 3/7/2009: 私が使用した修正に関する追加情報。
colthium が提供する修正プログラムを使用して、各モニターのグラフィック オブジェクトを作成するための次のコードと、グローバル マウス ポイントをグラフィック サーフェス上の有効なポイントに変換できるようにオフセットを格納する方法を考え出しました。
private void InitializeGraphics()
{
// Create graphics for each display using compatibility mode
CompatibilitySurfaces = Screen.AllScreens.Select(s => new CompatibilitySurface()
{
SurfaceGraphics = Graphics.FromHdc(CreateDC(null, s.DeviceName, null, IntPtr.Zero)),
Offset = new Size(s.Bounds.Location)
}).ToArray();
}
private class CompatibilitySurface : IDisposable
{
public Graphics SurfaceGraphics = null;
public Size Offset = default(Size);
public PointF[] OffsetPoints(PointF[] Points)
{
return Points.Select(p => PointF.Subtract(p, Offset)).ToArray();
}
public void Dispose()
{
if (SurfaceGraphics != null)
SurfaceGraphics.Dispose();
}
}
[DllImport("gdi32.dll")]
static extern IntPtr CreateDC(string lpszDriver, string lpszDevice, string lpszOutput, IntPtr lpInitData);