gpt4 book ai didi

c# - 在屏幕上放置半透明标记 (Windows XP)

转载 作者:可可西里 更新时间:2023-11-01 10:06:02 27 4
gpt4 key购买 nike

我想在 Windows XP 计算机屏幕上显示半透明图像(类似于水印)。因为我是用同一个终端访问不同的电脑,我想随时查看那个终端连接的是什么电脑。

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

我会编写一些 C++ 和 C# 程序。因为我只需要一个可以在 Windows XP 中运行的肮脏解决方案,我实际上可以考虑一个钩子(Hook)来捕获窗口刷新事件并以某种方式在显示它之前注入(inject)我想要的图像,但我以前从未这样做过,也不知道是否有任何其他更优化的方法。有什么想法吗?

最佳答案

如果您想要一个快速而肮脏的解决方案,请在 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 )

关于c# - 在屏幕上放置半透明标记 (Windows XP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24009579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com