2

我需要通过代码执行与 WindowsKey + M 相同的任务,即。最小化所有打开的窗口。这必须通过 Win32 API 而不是 .Net 来完成。

我在 FreeBasic 中尝试了以下操作,但没有任何反应:

Dim hWndConsole As HWND
'Shell_TrayWnd = class name of taskbar
Dim WindowName as String = "Shell_TrayWnd"

hWndConsole = FindWindow(0, strptr(WindowName))
ShowWindow(hWndConsole, SW_MINIMIZE) 'outta my sight

有人知道该怎么做吗?

谢谢你。


编辑:这是工作解决方案:

#include "Windows.bi"

Dim hWndConsole As HWND
'Shell_TrayWnd = class name of taskbar
Dim WindowName as String = "Shell_TrayWnd"
Dim res as LRESULT
CONST minall = 419

hWndConsole = FindWindow( "Shell_TrayWnd",null)

res = postMessage(hWndConsole, WM_COMMAND,  minall, null )
4

3 回答 3

3

这对我来说似乎有点像黑客,但以下似乎确实完成了你正在寻找的东西(在 C 中):

HANDLE hwnd = FindWindow( "Shell_TrayWnd", NULL );
LRESULT res = SendMessage( hwnd, WM_COMMAND, (WPARAM)419, 0 );
于 2012-12-18T23:02:37.467 回答
1

当您拥有一个窗口的句柄时,您可以通过消息使其最小化WM_SYSCOMMAND。例如:

SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);

因此,您需要做的就是枚举顶级窗口(使用EnumWindows命令)并将该命令发送到您要最小化的窗口(这不会是所有顶级窗口 - 可能只有可见的重叠窗口没有WS_EX_TOOLWINDOW扩展样式应该像这样最小化)。

于 2012-12-18T23:15:32.623 回答
0

Putting this out as an option, not a recommendation - simulating the keyboard events for Win-M:

keybd_event(VK_LWIN, 0, 0, 0);
keybd_event('M', 0, 0, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
于 2012-12-19T11:00:27.653 回答