我想在我的C#代码中从Windows启动运行对话框(Windows + R)。

我认为可以使用explorer.exe完成此操作,但是我不确定如何执行。

最佳答案

不支持RunFileDlg API,Microsoft可能会从Windows的 future 版本中删除IShellDispatch::FileRun API(我同意MS对向后兼容性的 promise ,以及尽管该API尚未公开,但似乎广为人知的事实使得这种可能性不大,但仍然存在一个潜在可能)。

启动运行对话框的受支持方法是使用 RunFileDlg 方法。

在C#中,可以通过以下方式访问此方法:转到“添加引用”,选择“COM”选项卡,然后选择“Microsoft Shell控件和自动化”。完成此操作后,您可以启动对话框,如下所示:

Shell32.Shell shell = new Shell32.Shell();
shell.FileRun();

是的,[STAThread] API提供了更多的可定制性,但这具有被记录,受支持的优点,因此将来不太可能破坏。

请注意,Shell32必须在STA线程上运行。如果您的代码中出现异常,请像下面这样在方法声明上方添加ojit_code,例如:
    [STAThread]
    private static void OpenRun() {
        //Shell32 code here
    }

任何调用使用Shell32的方法的方法也应在STA线程上运行。

09-26 04:09