以编程方式打开高级安全设置对话框?

8

有没有一种程序化地打开目录/文件的高级安全设置对话框的方法?这是我想要打开的对话框:

Advanced Security Dialog

您可以通过单击目录/文件的安全属性对话框上的高级按钮来打开它。

Security Properties

这里有一个答案,展示如何使用ShellExecuteEx打开安全属性选项卡,也许有不同的参数可以用来直接打开高级安全设置对话框,但我不知道在哪里找到支持动词/参数的文档(或在注册表中查找)。
还有EditSecurityAdvanced API,但看起来需要实现获取/设置ACL的功能,而不是使用内置于Windows shell的功能。
我正在使用VB.NET,但可以根据需要翻译C#或Windows API调用,并且也希望得到如何进行自己研究的指导。

我不确定你能做到这一点,高级窗口很可能是主属性窗口的子窗口。 - DavidG
1
如果您找不到直接打开该对话框的解决方案,也许可以考虑打开普通安全对话框,然后通过自动化按下“高级”按钮? - Visual Vincent
1
哇,+1 就是因为“但可以根据需要翻译 C# 或 Windows API 调用,并提供如何进行自己的研究的指针。” 在这里,人们已经厌倦了那些不愿意采取任何主动行动,甚至懒得通过转换工具在他们非本地的 .NET 方言中运行代码的程序员。 - Cody Gray
1个回答

2

我也找不到直接打开它的方法。像评论者Visual Vincent建议的那样使用自动化并不难。不要忘记添加对程序集的引用和导入System.Windows.Automation

然后,这段代码应该会为您按下高级按钮。但这种方式仍会创建主属性对话框。

Dim FileName As String = "The file name you are viewing the properties of"
Dim AE As AutomationElement = AutomationElement.RootElement.FindFirst(TreeScope.Children, New PropertyCondition(AutomationElement.NameProperty, FileName + " Properties"))
Dim Advancedbtn = AE.FindFirst(TreeScope.Element Or TreeScope.Descendants, New PropertyCondition(AutomationElement.NameProperty, "Advanced"))
TryCast(Advancedbtn.GetCurrentPattern(InvokePattern.Pattern), InvokePattern).Invoke()

谢谢 - 我从未使用过这个API,所以这个例子真的很有帮助并且运行良好。我不得不插入一个等待,以便在运行此代码之前显示属性对话框,我想知道是否最好让用户点击高级选项,但这给了我一个尝试的选择。 - Mark
好的回答!我只是编辑了一下,以使代码更易读一些。 - Visual Vincent
@Mark,我没有想到需要等待,在我的机器上没有问题。只是运气好吧。 - Evan P
我想知道是否使用SHSetInstanceExplorer()可以帮助解决这个问题,避免需要猜测你正在谈论哪个对话框并避免意外点击未创建的对话框。如果那样不能让你知道窗口何时被创建,你也可以使用UI自动化来订阅窗口事件。 - andlabs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接