在 C# 中使用 user32.dll 时出现问题(错误 1008 试图引用不存在的标记。)
Problem Using user32.dll in C# (Error 1008 An attempt was made to reference a token that does not exist.)
你好传奇程序员。
流经我的 我尝试在 windows 通用应用程序中使用 user32.dll
(UWP) 在 C# 语言,但我在尝试使用从 .dll
导入的方法时遇到错误
这是我的代码:
[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());
}
}
如您所见,我从 user32.dll
导入了 LockWorkStation()
方法,并在按钮的事件侦听器中使用了它。 Images
是一个 Dictionary<string,string>
并且每件事都是 Fine 除非调用方法 LockWorkStation()
它总是 return false
所以抛出的错误是 1008 我在 Title 中提到了它问题是 Why? 和 how can I assign a token ?
Note: any way,any way to lock the screen is admirable.
所以在搜索了很多并且无法直接从通用 windows 应用程序平台锁定屏幕后,我向本地 Web 服务器发送了一个 Web 请求,并让该 Web 服务器使用 user32.dll
并锁屏。
这是 UWP 应用中的代码:
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 服务器中有代码:
[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";
}
注意:您可以找到如何制作简单的网络服务器here
但是:您必须安装网络服务器并授予用户访问权限。
你好传奇程序员。
流经我的 user32.dll
(UWP) 在 C# 语言,但我在尝试使用从 .dll
这是我的代码:
[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());
}
}
如您所见,我从 user32.dll
导入了 LockWorkStation()
方法,并在按钮的事件侦听器中使用了它。 Images
是一个 Dictionary<string,string>
并且每件事都是 Fine 除非调用方法 LockWorkStation()
它总是 return false
所以抛出的错误是 1008 我在 Title 中提到了它问题是 Why? 和 how can I assign a token ?
Note: any way,any way to lock the screen is admirable.
所以在搜索了很多并且无法直接从通用 windows 应用程序平台锁定屏幕后,我向本地 Web 服务器发送了一个 Web 请求,并让该 Web 服务器使用 user32.dll
并锁屏。
这是 UWP 应用中的代码:
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 服务器中有代码:
[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";
}
注意:您可以找到如何制作简单的网络服务器here
但是:您必须安装网络服务器并授予用户访问权限。