首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中使用user32.dll时出现问题(错误1008尝试引用不存在的令牌)。

在C#中使用user32.dll时出现问题(错误1008尝试引用不存在的令牌)。
EN

Stack Overflow用户
提问于 2019-08-31 12:07:25
回答 1查看 465关注 0票数 0

你好传奇程序员。

通过我的前一个问题,我尝试用C#语言在windows通用应用程序(UWP)中使用user32.dll,但是在使用从.dll导入的方法时遇到了一个错误。

这是我的代码:

代码语言:javascript
复制
[DllImport("user32.dll")]
public static extern bool LockWorkStation();
private async void btnLock_Click(object sender, RoutedEventArgs e)
{
    string path;
    if (Images.TryGetValue(selectedRadioButton.Name, out path))
    {
        StorageFile file = await StorageFile.GetFileFromPathAsync(path);
        await LockScreen.SetImageFileAsync(file);
        if (!LockWorkStation())
            throw new Exception(Marshal.GetLastWin32Error().ToString());
    }
}

如您所见,我从LockWorkStation()导入了user32.dll方法,并在按钮的事件侦听器中使用了它。Images是一个Dictionary<string,string>,每件事都是精细的,除非对方法的调用总是返回false,所以抛出的错误是1008,我在标题中提到过,问题是,为什么?,我如何分配一个令牌?<代码>E 218

注:无论如何,以任何方式锁定屏幕,都是令人钦佩的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-01 15:06:42

因此,在搜索了大量内容之后,由于无法从通用的windows应用程序平台直接锁定屏幕,我向本地web服务器发送了一个web请求,并使该web服务器使用user32.dll并锁定屏幕。

以下是UWP应用程序中的代码:

代码语言:javascript
复制
       try
               {
                   HttpClient httpClient = new HttpClient();
                   Uri uri = new Uri("http://localhost:8080/lock/");

                   HttpStringContent content = new HttpStringContent(
                       "{ \"pass\": \"theMorteza@1378App\" }",
                       UnicodeEncoding.Utf8,
                       "application/json");

                   HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(
                       uri,
                       content);

                   httpResponseMessage.EnsureSuccessStatusCode();
               }
               catch (Exception ex)
               {
                   throw ex;
               }

web服务器中有代码:

代码语言:javascript
复制
        [DllImport("user32.dll")]
        public static extern bool LockWorkStation();
        private static string LockTheScreen(HttpListenerRequest request)
        {
            var inputStream = request.InputStream;
            try
            {

                using (StreamReader sr = new StreamReader(inputStream))
                {
                    JToken pass = JToken.Parse(sr.ReadToEnd());
                    if (pass.Value<string>("pass") == "theMorteza@1378App")
                    {
                        LockWorkStation();
                    }
                }
            }
            catch (Exception)
            {

                return "fail";
            }
            return "fail";
        }

注意:您可以找到如何制作一个简单的web服务器这里

但是:您必须安装web服务器并为用户授予它的访问权限。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57737883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档