[WinApi] Schnellstartleiste nach Art der Taskleiste programmieren

Tobias K.

Erfahrenes Mitglied
moin


So, ich wollte mich mal daran machen eine Schnellstartleiste zu programmieren.
Das ist soweit auch kein Ding. Sie soll natürlich immer sichtbar sein, aber nciht im Vordergrund.
Und da ist auch schon das Problem, andere Programme sollen nämlich erkennen das sie oben am Bildschirmrand sitzt und sich (z.B. beim maximieren) daran ausrichten, wie es bei der Taskleiste ja auch ist.

Hat jemand ne Idee wie ich das anstellen kann?


mfg
umbrasaxum
 
Hm ich weiß net ob sowas so einfach möglich sein wird.
Aber ich denk mal mit hooking könntest du da einiges erreichen.
Ich würde das so anpacken:
1. Eine DLL programmieren (wegen global hooking)
2. In der DLL mit SetWindowsHookEx() einen WH_CALLWNDPROC-Hook installieren
3. In der HookProc müsstest du dann auf WM_MAXIMIZED (heißt das so, du weißt was ich meine) Reagieren.
Dabei erhältst du den HWND des Fensters das die Nachricht erhalten soll hat.
4. Du veränderst die Größe/Position des Fensters von der DLL aus
5. GANZ WICHTIG: Die Nachricht wieder weiterschicken, sonst gibts absolutes Chaos!
6. In der Anwendung die DLL laden und den Hook installieren.
7. Bei beenden den Hook auf jedem Fall wieder aufräumen!

So oder so ähnlich könnte das theoretisch gehen.
Für Hilfe bei Hook's gibts hier von mir ein Tutorial (Werbung mach').
Sollte es einen einfacheren/eleganteren Weg geben dann würde mich das auch interessieren.

Daniel
 
moin


Ja dein Tutorial kenn ich, wollt mich auch schon immer mal dran machen.
Aber ich konnte mich bis jetzt nicht überwinden mal mit Hooks anzufangen....
Drumm wäre ich für jeden anderen Vorschlag dankbar, aber ich merke schon das ich früher oder später nciht drum rum komme.


mfg
umbrasaxum
 
Also wie gesagt einen anderen Weg kenn ich nicht.
Das mit den Hooks is gar net so schlimm, wenn man es mal kapiert hat. :)
Man muss hald höllisch aufpassen, da kann man sich schon mal das ganze System lamlegen, so dass man um einen Reboot nicht mehr rumkommt.
Also versuch es einfach.

Gruß Daniel
 
Das müsste einfach mit SystemParametersInfo und SPI_SETWORKAREA gehen.
 
moin


Danke hat super funktioniert!
Da bin ich nochmal um Hooks drum rum gekommen ;)

Noch ein Tip:
Da die Werte für den neuen Arbeitsbereich auch nach Programmende bestehen bleiben, am Ende wieder zurück setzen!


mfg
umbrasaxum
 
Ich hab des auch mal probiert. Hab diesen Code geschrieben:
Code:
  RECT Area;
  Area.left = 200;
  Area.right = 500;
  Area.top = 400;
  Area.bottom = 800;
  SystemParametersInfo(SPI_SETWORKAREA,0,&Area,0);

es tut sich auch was und zwar kann ich mein Programm nur diesem Bereich verschieben. Aber sonst ändert sich global nichts. Weißt du schon weiteres umbrasaxum?

EDIT:

was ich noch loslassen wolte. Die Funktion SystemParametersInfo is ja ne Hammerfunktion. Da kann man assi viel im System verändern. Hmm für Virenprogger wohl genau das richtige. Naja ich komm ma wieder auf den Teppisch. Ich werd mir die Funktion mal merken.
 
Zuletzt bearbeitet:
Sagt mal sind die verrückt? In der msdn stehen ja lustige Sachen drin. SetComputerName zum Beispiel. Was es nicht alles gibt :)

Ich glaube wir sollten einen "Die interessantesten msdn-Funktionen-threat" aufmachen.
 
moin


So hab ich es gemacht.
Code:
case WM_CREATE:
{
	workarea.top = 26;
	workarea.left = 0;
	workarea.right = GetSystemMetrics(SM_CXSCREEN);
	workarea.bottom = GetSystemMetrics(SM_CYSCREEN) - 25;

	SystemParametersInfo(SPI_SETWORKAREA, NULL, &workarea, NULL);

	return 0;
}
Ich hab jetzt ganz oben ein Fenster das über die ganze breite geht und 25p hoch ist.
Das besondere daran ist jetzt das sich Fenster die z.B. maximiert werden, weder vor noch hinter das Fenster verschieben sonder sich anpassen.


mfg
umbrasaxum
 
moin


Sagt mal sind die verrückt? In der msdn stehen ja lustige Sachen drin. SetComputerName zum Beispiel. Was es nicht alles gibt
Das gibt es auch wenn du auf die Eigenschaften vom Arbeitsplatz gehst.
Die Programmierer von Windows haben auch die selben Funktionen benutzt wie wir.


mfg
umbrasaxum
 

Neue Beiträge

Zurück