Nachrichten an Windows Fenster beeinflussen - Problem?

Das Forum fĂĽr Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

Nachrichten an Windows Fenster beeinflussen - Problem?

Beitragvon michaelw » Mo 27 Mär, 2006 22:27

Ich bin gerade dabei unter WIN XP mit Visual Studio C++ den Sourcecode eines Utilitys zum Verkleinern von Programmen in die Trayleiste an meine WĂĽnsche anzupassen.
Da ich mich mit dem ganzen Windows Benachrichtigungssystem noch nie beschäftig habe, komm ich da bei einem Problem leider nicht weiter.

Da Programm funktioniert so, dass beim Klicken auf das Minimieren Symbol die auftetende Benachrichtigungs-Meldung in einer eigenen WndProc Funktion zum Windows Nachrichten verarbeiten aufgeschnappt wird und eine passende Unterfunktion aufruft die dann wiederum eine fĂĽr die WM_SYSCOMMAND Notification mit dem Wert SC_MINIMIZE passende Unterfunktion aufruft.
Dort wird dann mit letztendlich mit
Shell_NotifyIcon( NIM_ADD, &p->nid );

if(ShowWindowAsync( p->hWnd, SW_HIDE ) )
das jeweils gewĂĽnschte Programm von der Taskleiste in den Tray verschoben.

Mit einem Klick im Tray wird dann mittels:
PostMessage( p->hWnd, WM_SYSCOMMAND, SC_RESTORE, 0 );
SetForegroundWindow( p->hWnd );
Shell_NotifyIcon( NIM_DELETE, &p->nid );
DestroyIcon( p->nid.hIcon );

das jeweilige Programm zurĂĽck in die Taskleiste und den Vordergrund geholt.

Ich habe diesen ganzen Code nun um ein paar Zeilen erweitert die dafür sorgen sollen das auch beim Klicken auf die Kopfzeile ( die blaue Leiste) die jeweilige Anwendung in den Tray minimiert wird weil das Minimieren Symbol so klein ist. Dabei werden einfach wenn eine WM_SYSCOMMAND Notification mit dem Wert SC_MOVE auftritt die obigen Funktionen vom Minimieren aufgerufen und es läuft alles somit identisch ab.

Das funktioniert auch genauso gut wie das eigentliche Minimieren und im Debugger werden die absolut gleichen Werte und Handles angezeigt nur in einer gewissen Situation hat das Kopfzeilen-Minimieren nachfolgend Probleme bereitet:
Die minimierte Anwendung hat nämlich die Fähigkeit sich selbt wieder einzublenden. Wenn ich sie jedoch zuvor mittels Kopfzeilen-Minimieren minimiert habe blendet sich die Anwendung nicht mehr selber ein obwohl das eben sehr wichtig für mich wäre.

Ich hätte jetzt eben gerne Tipps wie ich dem Problem beikommen kann:

1). Obwohl sobald eine WM_SYSCOMMAND Notification mit dem Wert SC_MOVE oder SC_MINIMIZE auffange der selbe Code aufgrufen wird scheint irgendwas anders zu sein.
Irgendwas muss also Windows im Hintergrund anscheinend anders lassen weil das spätere Verhalten der Anwendung eben anders ist. Hat jemand eine Idee ob man da irgendwas machen kann?

2.) Kann man irgendwie mittels eines Befehls das Ereignis/Nachricht/wasauchimmer das beim Klicken auf das Minimieren Symbol rechts oben passiert simullieren?

3.) Oder wäre es eine gute Idee die Tastatureingabe oder den Mausklick fürs Minimieren mittels eines Befehls zu simmulieren?
FĂĽr simulierte TastendrĂĽcke gibt es ja glaube ich was namens keybd_event ?
michaelw
Senior Board-Mitglied
Senior Board-Mitglied
 
Beiträge: 400
Registriert: So 24 Okt, 2004 04:48

ZurĂĽck zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 20 Gäste