最小化C#中所有打开的窗口

我在论坛上看到了这个C ++代码,它最小化了所有打开的窗口

#define MIN_ALL 419 #define MIN_ALL_UNDO 416 int main(int argc, char* argv[]) { HWND lHwnd = FindWindow("Shell_TrayWnd",NULL); SendMessage(lHwnd,WM_COMMAND,MIN_ALL,0); Sleep(2000); SendMessage(lHwnd,WM_COMMAND,MIN_ALL_UNDO,0); return 0; } 

如何在C#.net中访问FindWindow和SendMessage API函数以及HWND类型?

PInvoke.net是你的朋友:-)

 using System; using System.Runtime.InteropServices; namespace ConsoleApplication1 { class Program { [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)] static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam); const int WM_COMMAND = 0x111; const int MIN_ALL = 419; const int MIN_ALL_UNDO = 416; static void Main(string[] args) { IntPtr lHwnd = FindWindow("Shell_TrayWnd", null); SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero); System.Threading.Thread.Sleep(2000); SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero); } } } 

网站www.pinvoke.net提供了您需要的大量信息。 例如,关于SendMessage和FindWindow的这篇文章:

http://www.pinvoke.net/default.aspx/user32.SendMessage http://www.pinvoke.net/default.aspx/user32.FindWindow

它当然是技术性的 – 但基本上你使用p / invoke来调用FindWindow和SendMessage API函数来完成你想要的。 =)

通过发送这些键盘事件来启动任务栏弹出菜单并向其发送字母“M”,可以实现类似的结果:

 public class DesktopHelper { [DllImport("user32.dll")] static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo); ///  /// Shows the desktop. ///  public static void ShowDesktop() { keybd_event(0x5B, 0, 0, 0); keybd_event(0x4D, 0, 0, 0); keybd_event(0x5B, 0, 0x2, 0); } } 

我之前在博客上写过如何使用C#中的P / Invoke最小化和最大化: http : //improve.dk/minimizing-and-maximizing-windows/

这不是最简单的方法,但手动方式是调用C ++实现。 http://pinvoke.net帮助:

findwindow搜索结果: http ://pinvoke.net/search.aspx?search = findwindow&namedspace = [All ]

大约第四个结果有助于您的情况。