2012-12-18 141 views
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) 
+0

你知道,我真的不會,如果它是我的計算機上運行喜歡這個功能。而且,雖然我不使用Windows,但我無法想象(並希望)這是不可能的。 –

+0

沒問題,因爲它是我個人使用的;-) – Gulbahar

回答

3

這似乎是一個黑客位給我的,但以下似乎來完成你在找什麼(在C):

HANDLE hwnd = FindWindow("Shell_TrayWnd", NULL); 
LRESULT res = SendMessage(hwnd, WM_COMMAND, (WPARAM)419, 0); 
+2

419也被稱爲'MIN_ALL'。還有'MIN_ALL_UNDO'(416)。 –

+0

感謝您的提示。 – Gulbahar

+0

@RemyLebeau:出於好奇,你知道什麼頭文件嗎?我確實通過谷歌搜索查看了這些內容,但似乎無法在我的PC上的任何Microsoft頭文件中找到它。 –

0

當您擁有窗口句柄時,可以使用WM_SYSCOMMAND消息使其最小化。例如:

SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); 

因此,所有你需要做的是枚舉頂級窗口(與EnumWindows命令),併發送命令到要最小化窗口(這不會是所有頂級窗口 - 可能只有可見,沒有WS_EX_TOOLWINDOW擴展樣式的重疊窗口應該像這樣最小化)。

0

把它做爲一個選項,而不是一個建議 - 模擬鍵盤事件Win-M

keybd_event(VK_LWIN, 0, 0, 0); 
keybd_event('M', 0, 0, 0); 
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0); 
+0

感謝有關keybd_event()的信息 – Gulbahar