在屏幕上放置一个半透明的标记(Windows XP)

我想在Windows XP电脑屏幕上显示一个半透明的图像(类似于水印)。 这是因为我从同一个terminal访问不同的计算机,而且我希望在任何时候看到连接到哪个terminal的计算机。

这个“半透明”的图像不应该干扰Windows的正常操作,它应该允许点击(因为它有效地不存在)。

我编程一点C + +和C#。 因为我只需要一个能在Windows XP下工作的肮脏的解决scheme,我实际上可以思考一个钩子,捕获窗口刷新事件,并以某种方式注入我想要的图像之前显示它,但我从来没有这样做过,也不知道是否有可以是任何其他更优化的方法。 有任何想法吗?

如果您想要一个快速和肮脏的解决方案,请在Visual Studio中创建一个新的默认C#WinForms应用程序,然后将Form1.cs中的Form1部分类代码替换为:

public partial class Form1 : Form { private Label waterMarkLabel; public Form1() { waterMarkLabel = new Label { Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right), Font = new Font("Microsoft Sans Serif", 80F, FontStyle.Regular, GraphicsUnit.Point, ((byte)(0))), ForeColor = SystemColors.ControlDarkDark, Location = new Point(126, 178), Name = "WATERMARK", Size = new Size(338, 120), TabIndex = 0, Text = "WATERMARK", TextAlign = ContentAlignment.MiddleCenter }; InitializeComponent(); SuspendLayout(); AutoScaleDimensions = new SizeF(6F, 13F); AutoScaleMode = AutoScaleMode.Font; ClientSize = new Size(579, 489); ControlBox = false; FormBorderStyle = FormBorderStyle.None; MaximizeBox = false; MinimizeBox = false; Opacity = 0.1D; ShowIcon = false; ShowInTaskbar = false; TopMost = true; var hwnd = Handle; WindowsServices.SetWindowExTransparent(hwnd); TopMost = true; AllowTransparency = true; ResumeLayout(false); Controls.Add(waterMarkLabel); WindowState = FormWindowState.Maximized; } } public static class WindowsServices { const int WS_EX_TRANSPARENT = 0x00000020; const int GWL_EXSTYLE = (-20); [DllImport("user32.dll")] static extern int GetWindowLong(IntPtr hwnd, int index); [DllImport("user32.dll")] static extern int SetWindowLong(IntPtr hwnd, int index, int newStyle); public static void SetWindowExTransparent(IntPtr hwnd) { var extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE); SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT); } } 

然后将以下using语句添加到顶部:

 using System.Runtime.InteropServices; 

如果您构建并运行,您应该在屏幕上找到“WATERMARK”字样,并且可以使用它下面的所有其他窗口,就像它不在那里一样。

DLLImport代码从这个答案借来)

根据您要显示的信息类型,您可以尝试Microsoft Sysinternals BgInfo。 它允许将信息集成到桌面的背景图像中。

http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx