代码之家  ›  专栏  ›  技术社区  ›  anonymous coward

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

  •  13
  • anonymous coward  · 技术社区  · 15 年前

    我在一个论坛上看到了这个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;
    }
    

    如何访问findwindow和sendmessage api函数以及c.net中的hwnd类型?

    5 回复  |  直到 9 年前
        1
  •  26
  •   Stanislav Kniazev    15 年前

    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
  •  7
  •   J. Steen    15 年前

    网站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函数来完成您想要的工作。=)

        3
  •  4
  •   vgru    15 年前

    通过发送这些键盘事件来显示任务栏弹出菜单并发送字母“M”,也可以获得类似的结果:

    public class DesktopHelper
    {
        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
    
        /// <summary>
        /// Shows the desktop.
        /// </summary>
        public static void ShowDesktop()
        {
            keybd_event(0x5B, 0, 0, 0);
            keybd_event(0x4D, 0, 0, 0);
            keybd_event(0x5B, 0, 0x2, 0);
        }
    }
    
        4
  •  3
  •   Mark S. Rasmussen    9 年前

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

        5
  •  1
  •   PatTech    15 年前

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

    查找窗口搜索结果: http://pinvoke.net/search.aspx?search=findwindow&namespace=[All]

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