调用Windows安全对话框(在C#或VB.NET中)

我想知道如何以编程方式调用Windows安全对话框(在Windows工作站上按ctrl + alt + del 注意:我不想要任务管理器! )。

在XP工作站上,不要担心Win7或Vista

理想情况下使用C#中的快速示例(如果必须,还可以使用VB.NET)

我搜索了很多DLL,如msgina.dll ,我无法在任何地方找到它!

或者只是调用更改密码屏幕会很好!

您可以尝试从GINA调用WlxLoggedOnSAS函数或从WinLogon调用WlxSasNotify 。 但是,我担心它不起作用。 但是,也许它会引导你采用工作方法。 它肯定不适用于Vista / W7。

另一方面,可能只有 安全注意序列 (ctrl + alt + del)才能通过securytt原因调用Windows安全对话框。

安全function可能会阻碍您通过Ctrl Alt Del以编程方式管理安全相关function,如安全对话。 我一直在遇到同样的问题。

关于您调用密码更改对话框的请求。

IADsUser

旨在表示和管理网络[和本地]的最终用户帐户。

如果您发现自己缺少解决方案,可以使用密码字段创建自己的快速Windows表单,并使用WinNT提供程序与Windows IADsUser接口进行通信,以绑定到XP计算机上的本地(而不是网络)用户帐户。

 GetObject("WinNT://MYCOMPUTER/jeffsmith,user") //WinNT provider 

…并使用ChangePassword(..)方法 (链接到代码示例)。

 usr.ChangePassword szOldPass, szNewPass 

如果您尝试直接调用Windowsfunction以使用户信任该过程,那么无可否认,更改密码的自定义表单可能看起来有点傻。

RUNDLL32

您可能尝试的另一种途径是以编程方式在命令行调用RunDLL32.exe并定位正确的Win DLL以显示密码更改对话框。 一个论坛说如果没有安装SP2,以下工作在XP中。 我无法测试它,因为我在Vista上。

 rundll32.exe shell32.dll,Control_RunDLL password.cpl 

你可以使用谷歌中的许多这些 ,但是就改变密码或调用Windows安全对话框而言,似乎确实很短。

微软有关Run32Dll的信息

您可能需要查看User32中的SendInput挂钩: http : //msdn.microsoft.com/en-us/library/ms646310 (VS.85) .aspx和http://pinvoke.net/default.aspx /user32/SendInput.html

我会想象这样的东西,获取桌面的句柄,使用’ GetDesktopWindow ‘,确保焦点设置为句柄,并使用’ SendInput ‘发送按键’Ctrl + Alt + Del’或使用’ SendMessage ‘将键GetDesktopWindow送到GetDesktopWindow返回的句柄。 它不能保证工作,因为这是我的头脑。

希望这会有所帮助,最好的问候,汤姆。

这是我在其他论坛上找到的解决方法。 这个对我有用。

 Private Function IsRunAsAdministrator() As Boolean Dim wi = WindowsIdentity.GetCurrent() Dim wp = New WindowsPrincipal(wi) Return wp.IsInRole(WindowsBuiltInRole.Administrator) End Function 

‘我在formload上使用它,你可以随时使用它

 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not IsRunAsAdministrator() Then Dim processInfo = New ProcessStartInfo(Assembly.GetExecutingAssembly().CodeBase) processInfo.UseShellExecute = True processInfo.Verb = "runas" Try Process.Start(processInfo) Catch ew1 As Exception MessageBox.Show("Sorry, this application must be run as Administrator.") End Try 'Application.Current.Shutdown() Application.ExitThread() Else 'your statement here End If End Sub