gpt4 book ai didi

.net - 在 Windows 7 中使用 .NET Windows 服务显示消息框

转载 作者:行者123 更新时间:2023-12-04 02:46:23 27 4
gpt4 key购买 nike

在 Windows 7 中使用 .NET Windows 服务显示消息框

我们有一个 Windows 服务,用于在用户在 Windows XP 上扫描他们的门禁卡时显示确认消息框,但是一旦我们迁移到 Windows 7,该弹出功能就不再有效。如本文所述Displaying Message Box using .NET Windows Services In Windows 7 ,我已按照说明进行操作,当我将应用程序作为控制台应用程序运行时它可以正常工作,但是当我将其作为 Windows 服务安装时它不起作用。下面是我的代码。 result 变量返回 false,err 变量返回 5。

class Class1
{
public static IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero;
public static int WTS_CURRENT_SESSION = -1;
public void test()
{
bool result = false;
string title = "Hello";
int tlen = title.Length;
string msg = "Terminal Service!";
int mlen = msg.Length;
int resp = 0;

result = WTSSendMessage(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION, title, tlen, msg, mlen, 0, 0, out resp, true);
int err = Marshal.GetLastWin32Error();
System.Console.WriteLine("result:{0}, errorCode:{1}, response:{2}", result, err, resp);

}

[DllImport("wtsapi32.dll", SetLastError = true)]
static extern bool WTSSendMessage(
IntPtr hServer,
[MarshalAs(UnmanagedType.I4)] int SessionId,
String pTitle,
[MarshalAs(UnmanagedType.U4)] int TitleLength,
String pMessage,
[MarshalAs(UnmanagedType.U4)] int MessageLength,
[MarshalAs(UnmanagedType.U4)] int Style,
[MarshalAs(UnmanagedType.U4)] int Timeout,
[MarshalAs(UnmanagedType.U4)] out int pResponse,
bool bWait);

[DllImport("Kernel32.dll", SetLastError = true)]
static extern int WTSGetActiveConsoleSessionID();

}

最佳答案

您已声明 WTSGetActiveConsoleSessionId 但从未调用它。该函数返回当前事件的 session ID。这是您必须传递给 WTSSendMessage 的 session ID。

您当前的代码正在尝试在服务 session ( session 0)中显示消息。这不是您想要的。

不过,在调用该函数之前,您必须更正其声明。你拼错了。它被命名为 WTSGetActiveConsoleSessionId。

我认为字符串长度参数需要考虑零终止符。将 1 添加到您传递的值。如果您切换到 Unicode API,那么您必须将这些值乘以 2,因为它们是以字节而不是字符为单位测量的。

还有一点。仅在 API 调用失败时询问错误代码。因此,在您的代码中,如果结果为假,您只能调用 Marshal.GetLastWin32Error。

关于.net - 在 Windows 7 中使用 .NET Windows 服务显示消息框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18732110/

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