如何从C#启动windows“运行”对话框

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

我认为这可以使用explorer.exe来完成,但我不知道如何。

Solutions Collecting From Web of "如何从C#启动windows“运行”对话框"

RunFileDlg API不受支持,可能会被微软从未来版本的Windows中删除(我将授予MS对向后兼容性的承诺,以及这个API虽然没有文档,似乎已经相当广泛的知道使这不太可能,但它仍然一个潜在可能)。

支持的启动运行对话框的方法是使用IShellDispatch::FileRun方法。

在C#中,您可以通过添加引用来访问此方法,选择COM选项卡,然后选择“Microsoft Shell Controls and Automation”。 这样做后,您可以启动对话框如下:

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

是的, RunFileDlg API提供了更多的可定制性,但是这具有被记录,支持的优点,因此不太可能在未来中断。

使用RunFileDlg:

 [DllImport("shell32.dll", EntryPoint = "#61", CharSet = CharSet.Unicode)] public static extern int RunFileDlg( [In] IntPtr hWnd, [In] IntPtr icon, [In] string path, [In] string title, [In] string prompt, [In] uint flags); private static void Main(string[] args) { // You might also want to add title, window handle...etc. RunFileDlg(IntPtr.Zero, IntPtr.Zero, null, null, null, 0); } 

flags可能值:

 RFF_NOBROWSE = 1; //Removes the browse button. RFF_NODEFAULT = 2; // No default item selected. RFF_CALCDIRECTORY = 4; // Calculates the working directory from the file name. RFF_NOLABEL = 8; // Removes the edit box label. RFF_NOSEPARATEMEM = 14; // Removes the Separate Memory Space check box (Windows NT only). 

另请参见如何以编程方式打开运行c + +?

另一种方法是模拟Windows + R组合键。

 using System.Runtime.InteropServices; using System.Windows.Forms; static class KeyboardSend { [DllImport("user32.dll")] private static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo); private const int KEYEVENTF_EXTENDEDKEY = 1; private const int KEYEVENTF_KEYUP = 2; public static void KeyDown(Keys vKey) { keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY, 0); } public static void KeyUp(Keys vKey) { keybd_event((byte)vKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } 

并致电:

 KeyboardSend.KeyDown(Keys.LWin); KeyboardSend.KeyDown(Keys.R); KeyboardSend.KeyUp(Keys.R); KeyboardSend.KeyUp(Keys.LWin);