我想在Windows XP计算机屏幕上显示半透明图像(类似于水印)。这是因为我从同一个终端访问不同的计算机,我想在任何时候看到该终端连接到哪台计算机。
这个“半透明”图像不应该干扰Windows的正常操作,它应该允许点击(因为它有效地不存在)。
我编写了一点C ++和C#。因为我只需要一个可以在Windows XP中运行的脏解决方案, 我实际上可以想到一个钩子,它捕获窗口刷新事件并以某种方式在显示之前注入我想要的图像,但我以前从未这样做过,也不知道是否可以有任何其他更优化的方法。 有什么想法吗?
答案 0 :(得分:3)
如果你想要一个快速而又脏的解决方案,在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 = "W A T E R M A R K",
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
代码借用了此答案here)
答案 1 :(得分:0)
根据您要显示的信息类型,您可以尝试使用Microsoft Sysinternals BgInfo。 它允许将信息集成到桌面的背景图像中。
http://technet.microsoft.com/en-us/sysinternals/bb897557.aspx