如何从System.Windows.Forms.Screen对象创建System.Drawing.Graphics对象?

时间:2012-05-01 17:02:21

标签: .net vb.net winapi graphics gdi+

我正在寻找一个图形叠加来显示一些将在任何窗口之上的数据,甚至是全屏应用程序。

我可以使用API​​钩子来获取活动窗口,这将允许我创建一个图形对象并在活动窗口之上绘制,这几乎是我正在寻找的东西。唯一的问题是,当我尝试使用一个束带调用时,它会使用该窗口的边界来绘制数据。

所以电话:

gphx.DrawString("test", New Font("Tahoma", 12), New SolidBrush(Color.Red), New PointF(0, 0))

会在表单的可用区域的左上角显示“test”,甚至不会在标题栏中显示。你甚至不能在那个调用中使用负数,因为它使用了表单可用区域作为画布,所以你最终只是绘制到一个不可见的区域。

我的目标是让数据始终显示在屏幕的同一位置,无论窗口位于何处。

API Hook用于获取活动窗口。

<Runtime.InteropServices.DllImport("user32.dll")>
    Public Function GetForegroundWindow() As IntPtr
    End Function

是否有功能可以获取屏幕的句柄(我非常怀疑)或直接绘制到屏幕的方法?

我宁愿不必使用DirectX库来实现这一目标,但如果GDI +或其他API调用无法实现,我将不得不走这条路。

0 个答案:

没有答案