我目前正在研究一些家长控制软件。 该软件应该注销一个用户,然后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] 举报,一经查实,本站将立刻删除。