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

16

我在论坛上看到了这段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类型?


如果有帮助的话,您可以使用shell32类显示桌面(而不是实际最小化) - nawfal
4个回答

33

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);
    }
}
}

2
如果我想最小化除了我正在运行的应用程序之外的所有窗口怎么办? - Hamish Grubijan
1
Hamish,如果你把你的问题发布为一个问题,而不是一个评论,我相信你很快就会得到答案,而且这个答案的格式会比在评论中讨论更好。 - Stanislav Kniazev

5

当我尝试将导入代码添加到我的现有代码中时,Visual C# 2008 Express告诉我,它期望的是"class、delegate、interface或struct",而不是IntPtr。 - user47322

3

@khargoosh 抱歉 - 已修复! - Mark S. Rasmussen

1

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