WindowStat... Super, nur WindowStat auch in C möglich?



  • Hi @ll.

    Ich habe ein wenig nachgeforscht...
    Ich kann ein Fenster Minimiert starten und Minimieren,
    aber kann ich auch abfragen ob es Minimiert ist?

    Oder besser: kann ich über WndProc und die message den Minimierprozess abfangen?

    Eine Message Liste habe ich schon überprüft, aber keine Nachricht gefunden, die den Anschein erweckte, dass ich sie dafür nutzen könnte...

    Bitte um Schnelle Hilfe...

    DANKE IM FORRAUS



  • case WM_ACTIVATE:
    {
    	if (!HIWORD(wParam))
    	{
    		// nicht minimiert
    	}
    	else
    	{
    		// minimiert
    	}
    	return 0;
    }
    


  • Afaik wird das Minimieren auch von WM_SIZE bearbeitet (geht ja auch um Größenänderungen) - du mußt nur den wParam auswerten.

    (PS: voraus schreibt man übrigens mit v ;))



  • LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
    {	
    	bool visitMsg;
    
    	visitMsg = true;
    
    	int returnValue;
    
    	returnValue = 0;
    
    	switch( message )
    	{
    		case WM_CREATE:
    			myIcon = (HICON)LoadImage( myInst, "C:\\NaDiA\\48.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE );
    
    			if( !SysTray_IconOpts( hWnd, 1 ) )
    				MessageBox( NULL, "Laden dess Icon nicht hat geklappt", "Benachrichtigung:", MB_OK );
    
    			ShowWindow( myConsol, SW_HIDE );
    			ShowWindow( hWnd, SW_HIDE );
    		break;
    		case WM_ICONCLICK:
    			switch( lParam )
    			{
    				case WM_LBUTTONDOWN:
    					SysTray_IconOpts( hWnd, 0 );
    					ShowWindow( myConsol, SW_SHOW );
    				break;
    			}
    		break;
    		case WM_DESTROY:
    			SysTray_IconOpts( hWnd, 0 );
    
    			PostQuitMessage( 0 );
    		break;
    		case WM_ACTIVATE:
    			if( HIWORD( wParam ) )
    				MessageBox( NULL, "Minimiert!!", "Benachrichtigung:", MB_OK );
    		break;
    		default:
    			visitMsg = false;
    		break;
    	}
    
    	if( visitMsg )
    		returnValue = 0;
    	else
    		returnValue = DefWindowProc( hWnd, message, wParam, lParam );
    
    	return returnValue;
    }
    

    Die Messagebox (Minmiert!!!) wird nicht angezeigt!?
    Mache ich dass so Richtig?

    Währe dass dan beim klick auf den "Minimieren" button?

    DICKES DANKE FÜR DIE ANTWORTEN



  • ja. WM_ACTIVATE wird gesendet, wenn das Fenster aktiviert wird, oder wenn
    es deaktiviert wird. also bei mir wird eine MessageBox angezeigt, obwohl
    dies keine gute Idee ist, da WM_ACTIVATE nachrichten mehr als einmal gesendet
    werden, und die ganzen MessageBoxes wegklicken nervt 😃



  • Ich habe es mit Hilfe eines Thread-Timers gelöst, wenn das Programm aktiviert wird,
    hat man 5 Sekunden, um es z.B. zu Beenden, dann wird es wieder minimiert.

    Die 5 Sekunden erfolgen nach dem Klick auf OK der MessageBox, die dich beim Maximieren dess Programmes darauf aufmerksam machen!



  • Fang einfach wie bereits geposted WM_SIZE ab und schau dir da dann den wParam an.



  • Wie schaue ich mir den wParam an?

    printf( "\n%d", wParam );
    

    geht wohl nicht oder?

    Würde dass ur gerne machen, habe aber leider keine Idee wie.
    Kannst du dass ein wenig näher erleutern?

    DANKE



  • Was meinst du mit "geht ja nicht"? Klar kannst du auf diese Weise den Parameter-Inhalt ausgeben lassen, aber wir reden hier eher davon, ihn im Programm auszuwerten:

    ...
    switch(message)
    {
      ...
    case WM_SIZE:
      if(wParam == SIZE_MINIMIZED)
      {
        // das Fenster wurde/wird gerade minimiert
      }
      ...
    }
    


  • Was ich mit dem pritnf meinte war, zu schauen was mein Programm während des Minimiervorgangs überhaupt von wParam bekommt, dass wusste ich ja nicht.

    case WM_SIZE:
    			if( SIZE_MINIMIZED == wParam )
    			{
    				MessageBox( NULL, "123", "Benachrichtigung:", MB_OK );
    
    				//Wenn das Programm nicht in den Tray verschoben werden konnte
    				if( !SysTray_IconOpts( hWnd, 1 ) )
    					MessageBox( NULL, "Programm konnte nicht in den Tray verschoben werden", "Benachrichtigung:", MB_OK );
    				else
    				{
    					//Fenster verstecken
    					ShowWindow( myConsol, SW_HIDE );
    					ShowWindow( hWnd, SW_HIDE );
    				}
    			}
    		break;
    

    Funktioniert im übrigen nicht...
    Ich hoffe ja, dass ich was falsch gemacht habe (dann kann ich es korrigieren und es läuft) aber...
    Also die MessageBox mit 123 wird leider nicht angezeigt.

    Warum?

    [edit]
    Ich habe eine Idee und die ist leider negativ 😞
    Ich arbeite ja eigentlich ausschließlich mit der Konsole, diese wird beim Start versteckt und beim IconClick wieder Maximiert.
    Allerdings wird diese dann ja auch wieder Minimiert...
    Diese message bekomme ich natürlich nicht, da ich ja -warum auch immer- so ein anderes Fenster erstellen musste. 👎

    Wie kann ich also die Message der Konsole abfangen?



  • Mich wunderts schon daß noch keiner auf die WinAPI-Funktionen aufmerksam gemacht hat:

    Mit IsIconic() kann man jederzeit (also egal ob gerade aktiviert wurde oder nicht) abfragen ob das Fenster minimiert wurde.
    Das analoge Gegenstück heißt IsZoomed() für maximiert.

    Diese Funktionen gibts bereits seit Win95.... 🕶

    Martin



  • Mmacher schrieb:

    Mich wunderts schon daß noch keiner auf die WinAPI-Funktionen aufmerksam gemacht hat:

    Mit IsIconic() kann man jederzeit (also egal ob gerade aktiviert wurde oder nicht) abfragen ob das Fenster minimiert wurde.
    Das analoge Gegenstück heißt IsZoomed() für maximiert.

    Diese Funktionen gibts bereits seit Win95.... 🕶

    Martin

    oh cool, man lernt nie aus 😃 danke, die muss ich mir merken 🤡



  • Ich habe deinen Beitrag schon vor 2-3 Tagen gelesen,
    und bis heute an irgendwas von wegen consolen messages abfangen...

    Wobei dass interessant ist... DANKE euch allen.


Anmelden zum Antworten