C++ alle Fenster verstecken

BlackMark

Lt. Commander
Registriert
Juni 2007
Beiträge
1.346
Hi,
Ich würde gerne ein programm schreiben dass alle fenster die gerade offen sind versteckt
also mit dem prameter SW_HIDE versieht.

Ich habe dazu schon einen code geschrieben doch irgendwie will dass nicht so ganz hinhauen.

hier mein CODE:
Code:
#include <windows.h>

int main()
{
	HWND consoleWindow = GetConsoleWindow();
	ShowWindow( consoleWindow, SW_HIDE );

	// Get every window on the screen
	HWND foundWindow;

	do
	{
// Hier liegt mein problem, ich weiß nicht wie ich alle fenster
// die gerade offen sind einlese.
		foundWindow = FindWindow( NULL, NULL );

		if(foundWindow == NULL)	
			MessageBox( NULL, L"Can't find window!", L"ERROR", MB_OK | MB_ICONERROR );

		else if(foundWindow != NULL)
		{
			MessageBox( NULL, L"Got the window!", L"INFO", MB_OK | MB_ICONINFORMATION );
			ShowWindow( foundWindow, SW_HIDE );
		}
	}
	while(foundWindow != NULL);

	return 0;
}

Ich hoffe ihr könnt mir helfen.
Danke schon mal im vorraus.
 
hi,
hier mal ne Antwort von Dr. Goolge :):
Code:
#define MIN_ALL        419
HWND hWnd= FindWindowA("Shell_TrayWnd",NULL);
SendMessage(hWnd,WM_COMMAND,MIN_ALL,0);
 
Hi Woey,
hab die antwort gerade selber in der MSDN gefunden aber trotzdem THX!
außerdem minimiert mir diese funktion nur alle fenster ich will aber auch unten in der leiste alle symbole wek haben
 
Zuletzt bearbeitet:
"außerdem minimiert mir diese funktion nur alle fenster ich will aber auch unten in der leiste alle symbole wek haben "

Was soll das den für ein Prog. werden? - Das wird seinen Benutzer nicht viel freude machen!
 
ist für nen kollegen er will mit nem hotkey alle offennen fenster verstecken und auch die symbole in der leiste
ich schreibe dann noch ein anderes programm was das ganze dann wieder rückgängig macht
 
teilweise gehts, wenn du statt SendMessage(hWnd,WM_COMMAND,MIN_ALL,0) einfach ShowWindow(hWnd,SW_HIDE) verwendest
 
so blendet man nur die ganze task leiste aus. das ist auch nicht grad so gut :-(
 
das einzige was mir da noch einfallen würde, währe mit EnumChildWindows() alle childs der taskbar zu durchlaufen. Mit GetClassName() überprüft man ob es sich um eine Button handelt. Wenn dem so ist blendet man diesen dann mit ShowWindow() aus.
Kanns ja mal versuchen, wenn du nichts besseres findest

EDIT: mann sollte vieleicht drauf achten das der button auch Text enthält, bevor man ihn ausblendet
 
Zuletzt bearbeitet:
ich bin mir sicher dass es irg wie einfacher gehen muss hab nur noch nicht herausen wie
doch für heute ist genug morgen ist auch noch ein tag ...
 
funktioniert wunderbar (unter vista):

Code:
#include "shlwapi.h"
....

HWND hWnd = FindWindowA("Shell_TrayWnd",NULL);
EnumChildWindows(hWnd,EnumChildProc,0);
....

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
	CHAR ClassName[100];
	GetClassNameA(hwnd,(LPSTR)&ClassName,50); 
	if(StrCmpIA(ClassName,"button"))
	{
		if(GetWindowTextLengthA(hwnd) != 0)	
			ShowWindow(hwnd,SW_HIDE);
	}

	return(TRUE);

}
 
stimmt funktioniert wirklich gut
nur eins ist noch blöd:
die schnellstartsymbole gehen auf XP zumindest auch in den status hide über
 
ist bei mir auch so... überleg mir mal was.

EDIT: sind halt schwer unterscheidbar
 
hab grad ne alternative ausprobiert nur funktioniert die überhaupt nicht wie sie soll
der CODE sieht so aus:
Code:
#include <windows.h>

int main()
{
	HWND consoleWindow = GetConsoleWindow();
	ShowWindow( consoleWindow, SW_HIDE );

	// Get every window on the screen
	HWND windowName;

	windowName = FindWindow( NULL, NULL );
	if(windowName == NULL)
		MessageBox(NULL, L"Can't find window!", L"ERROR", MB_OK | MB_ICONERROR);

	else if(windowName != NULL)
		MessageBox(NULL, L"Got the window!", L"INFO", MB_OK | MB_ICONINFORMATION);

	windowName = GetWindow( windowName, GW_HWNDFIRST );
	ShowWindow(windowName, SW_HIDE);
	
	while(windowName != NULL)
	{
		windowName = GetWindow( windowName, GW_HWNDNEXT );
		ShowWindow(windowName, SW_SHOW);
	}

	return 0;
}

Es wird dann einfach alles auf hidden gesetzt also startleiste alle fenster alle symbole einfach alles
 
ok - das ist die Lösung, zumindest unter vista mit Standarteinstellungen:

Code:
#include "shlwapi.h"
....

HWND hWnd = FindWindowA("Shell_TrayWnd",NULL);
EnumChildWindows(hWnd,EnumChildProc,0);
....


BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
	CHAR ClassName[100];
	GetClassNameA(hwnd,(LPSTR)&ClassName,49); 
	if(StrCmpIA(ClassName,"button"))
	{
		if(GetWindowTextLengthA(hwnd) != 0)
		{
			if (!(GetWindowLong(hwnd,GWL_STYLE) & BS_FLAT ) )
				ShowWindow(hwnd,SW_HIDE);
		
		}
	}

	return(TRUE);

}
 
Zuletzt bearbeitet:
Zurück
Oben