微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用c#在本地注销Windows用户

我目前正在研究一些家长控制软件。 该软件应该注销一个用户,然后locking该帐户,以便他们不能重新login,除非父母/pipe理员已经指定他们可以。

到目前为止,我已经尝试了几件事情,例如在用户帐户上设置标志,说它被禁用。 这完全从login屏幕中删除它。 从我发现的是,如果用户帐户login,它不应用ADS_disable标志。 我也尝试寻找注销另一个帐户的资源,但我似乎只能find有关注销正在运行注销命令的帐户的信息。 如Pinvoke ,或直接调用logoUT.EXE程序。

我在LSAUser上find一个资源,发现那里可能有些东西。 我正在为学校做这个项目,我需要一点指导。 既然有这样的信息稀less,有没有更好的办法做我想做的事情? 还是有一个原因,我不应该这样做? 任何替代品?

简单的方法来获得在VB.NETregistry项的所有权?

在registry中创build子上下文菜单

如何为Windows编写一个非常简单的本机应用程序(不需要.NET并通过安装过程)

NamedpipeClientStream无法连接,保持超时

我如何(重新)从.net应用程序格式化分区?

阅读事件日志从最新到最旧

WinForm:与VS2010中的现有菜单合并ContextMenuStrip MenuItem

.NET Framework Windows XP错误,Visual Studio Express

我怎样才能从VB6应用程序发送消息到我的C#应用​​程序

指定的模块无法find0x8007007E

使用WTSdisconnectSession() Windows API。 在这里看到文章

using System; using System.Runtime.InteropServices; using System.ComponentModel; class Program { [DllImport("wtsapi32.dll",SetLastError = true)] static extern bool WTSdisconnectSession(IntPtr hserver,int sessionId,bool bWait); const int WTS_CURRENT_SESSION = -1; static readonly IntPtr WTS_CURRENT_SERVER_HANDLE = IntPtr.Zero; static void Main(string[] args) { if (!WTSdisconnectSession(WTS_CURRENT_SERVER_HANDLE,WTS_CURRENT_SESSION,false)) throw new Win32Exception(); } }

即使没有远程桌面,也会断开当前用户并进入登录界面。 这些进程仍然会在后台运行。 再次手动登录后,正在运行的程序将显示为断开连接之前的状态。

[DllImport("wtsapi32.dll",bool bWait);

在远程桌面中使用WTSdisconnectSession时 ,相当于“关闭”远程桌面窗口。 这是断开你的Windows会话,但保持连接。

优点是您可以通过远程登录再次重新连接会话。

缺点是当远程桌面连接已满时,Windows可能无法由其他用户登录

要模拟Windows的“注销”,应在User32.dll下使用ExitwindowsEx

[DllImport("user32.dll",SetLastError = true)] static extern bool ExitwindowsEx(uint uFlags,uint dwReason); public static bool Windowslogoff() { return ExitwindowsEx(0,0); }

捎带冷玮生的回答(因为我不能评论),如果你想强制用户注销,你需要添加这样的EWX_FORCE标志:

ExitwindowsEx(0 | 0x00000004,0);

有关此功能的更多详细信息,请访问: https : //msdn.microsoft.com/en-us/library/windows/desktop/aa376868(v=vs.85).aspx

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐