相关疑难解决方法(0)

如何从WPF应用程序中检测"锁定此计算机"命令?

更喜欢使用WPF的C#,.Net 3.5中的答案(Windows Forms也没关系)

我有一个基本上是工具栏窗口或托盘图标的应用程序.它需要检测用户是否锁定他/她的工作站并走开以便在集中式系统中更新该人的状态.

我可以使用SystemEvents轻松地检测会话切换或注销,但我不能在我的生活中弄清楚如何在Lock上检测或接收事件.

谢谢你的帮助.

c# wpf desktop locking

19
推荐指数
1
解决办法
9094
查看次数

使用Delphi检测用户在Windows 7中锁定/解锁屏幕的时间

如何检测用户何时在Windows 7中锁定/解锁屏幕?

我发现这个问题有一个C#的答案,但我想在Delphi 2009中使用它.我猜有一些Windows消息(像这些)可以完成这项工作.这是我试过的代码,但它不起作用:

const
  NOTIFY_FOR_ALL_SESSIONS = 1;
  {$EXTERNALSYM NOTIFY_FOR_ALL_SESSIONS}
  NOTIFY_FOR_THIS_SESSION = 0;
  {$EXTERNALSYM NOTIFY_FOR_THIS_SESSION}

type

TfrmAlisson = class(TForm)
  lbl2: TLabel;
  procedure FormCreate(Sender: TObject);
  procedure FormDestroy(Sender: TObject);
public
  FLockedCount: Integer;
  procedure WndProc(var Message: TMessage); override;
  function WTSRegisterSessionNotification(hWnd: HWND; dwFlags: DWORD): bool; stdcall;
  function WTSUnRegisterSessionNotification(hWND: HWND): bool; stdcall;
end;

implementation

uses
  // my impl uses here

procedure TfrmAlisson.FormCreate(Sender: TObject);
begin
  if (WTSRegisterSessionNotification(Handle, NOTIFY_FOR_THIS_SESSION)) then
    ShowMessage('Nice')
  else
  begin
    lastError := GetLastError;
    ShowMessage(SysErrorMessage(lastError));
  end;
end;

procedure TfrmAlisson.FormDestroy(Sender: TObject);
begin …
Run Code Online (Sandbox Code Playgroud)

windows delphi winapi delphi-2009

8
推荐指数
1
解决办法
1117
查看次数

使用c#检查工作站锁定/解锁更改

DUPLICATE: 如何以编程方式确定我的工作站是否已锁定?

如何检测(在运行时)Windows用户锁定其屏幕(Windows + L)并再次解锁时.我知道我可以全局跟踪键盘输入,但是可以用环境变量来检查这样的事情吗?

c# windows environment session-state

7
推荐指数
2
解决办法
1万
查看次数

检测屏幕保护程序是否处于活动状态和/或用户是否已在Windows中锁定屏幕

我正在编写一个应用程序,有时会以烤面包机消息的形式向用户发送通知.

如果用户不在,他看不到通知.所以我想做的是能够检查用户是否已锁定屏幕或是否正在激活屏幕保护程序.

当用户重新登录并恢复其会话时,在用户看不到它时触发的任何通知都将被延迟并显示.

我自己在Windows 7上,但我更喜欢一种适用于Windows XP及以上版本的解决方案.

c# windows

7
推荐指数
2
解决办法
1万
查看次数

检查 Windows 当前是否被锁定

我在 Windows 10 Pro x64 ver 1703 build 15063.726 上,尝试编写程序重启服务。它以管理员权限在我的用户下运行,通过计划任务每​​ 10 分钟运行一次。

如果服务器不可用或中断:

  • 如果我的计算机被锁定,重启程序会终止并重新启动服务器程序。
  • 如果我的电脑没有被锁定,重启程序会显示一个对话框来确认重启。我可能正在处理服务器程序并且不希望重新启动破坏任何调试。

唯一的复杂问题是检测计算机是否被锁定。我尝试了几种方法:

  1. 打开输入桌面()

仅当用户在计算机被锁定后开始输入密码时才返回 NULL。除此之外,返回一个有效的句柄。据推测,在用户尝试登录并切换输入之前,不会取消选择输入桌面。

  1. OpenInputDesktop() 与 GetThreadDesktop()

(当然传入 GetCurrentThreadID() )

句柄仍然匹配,可能是由于相同的原因 1 失败。

  1. LockApp.exe/LockAppHost.exe 的进程检查

似乎也与用户输入密码有关……或者因为我的服务器重启应用程序是 32 位的,在读取 64 位进程 LockApp.exe 时遇到问题。

  1. GetForegroundWindow() 锁定时返回 null

虽然提到可疑,但我也试过这个。假阴性,说它没有被锁定

  1. 手动切换桌面并查看它是否有效

这里的代码示例描述,这个也是半身像并给出了错误的否定。

有没有剩下的办法?我真的宁愿没有仅用于注册锁定/解锁不断运行的服务。

或者这些方法中的一种应该已经起作用了,而我的 Windows 被窃听了?

干杯

c# windows process

6
推荐指数
2
解决办法
3884
查看次数

如何在c#windows应用程序中获取Windows解锁事件?

我想跟踪Windows应用程序中的Windows解锁事件.怎么做?用于此的事件是什么?我需要导入任何命名空间吗?

当用户解锁窗口时,应用程序需要执行一些任务.

c# windows

5
推荐指数
1
解决办法
6268
查看次数

检测桌面是否已锁定

可能重复:
如何以编程方式确定我的工作站是否已锁定?

确定桌面是否为当前登录用户锁定的最佳方法是什么?我查看了MSDN,找不到任何API调用来检测它.我错过了什么,或者我可以使用没有简单的电话?

winapi desktop

4
推荐指数
2
解决办法
1万
查看次数

C++:检查计算机是否已锁定

我正在试图弄清楚计算机是否已锁定.

我看过LockWorkStation的功能,但我希望找到的功能是IsWorkStationLocked.


我需要支持所有windows版本> = XP

c++ windows-xp windows-7

4
推荐指数
4
解决办法
2624
查看次数

如何使用C#识别键盘键

我有一个C#应用程序在后台运行.现在我想在系统锁定时停止此应用程序.我怎样才能做到这一点.对此有任何帮助,我们非常感谢.

感谢Hougen的解决方案.你可以建议我,我们应该包括任何Dll来处理"Microsoft.Win32.SystemEvents.SessionSwitch"这个事件吗?以及此代码应驻留在哪一层.我猜它在商业层.有什么想法退守这个?

c# keyboard key identify

1
推荐指数
1
解决办法
1037
查看次数