Info's über Fenster



  • Hallo

    ich hab mich hier im forum schon ne ganze weile umgesehen hab aber leider nichts gefunden was mich bei meinem problem so wirklich weiter bringt. falls es doch irgendwo in der faq lösungen geben sollte entschuldige ich mich schon mal im voraus (bin neu hier).

    zum problem :

    ich hab mir so ne art taskleiste für meinen zweiten bildschirm programmiert (ähnlich wie die von windows) hab aber leider große probleme damit herauszufinden welche fenster offen sind.
    ich hab mir mit enumwindows die fenster ausgeben lassen und dann über mehrere abfragen die zahlreichen fenster eingegrenzt. ich hab IsWindowVisible, GetWindowPlacement und GetWindow verwendet. iss sicher keine schöne lösung aber gibt mir nur die fenster aus die parent sind. leider hab ich auch ein paar anwendungen bei denen das nich klappt wie zum beispiel mymp3pro von steinberg. gibts da noch irgendwelche lösungen bei denen man vielleicht auf die windows taskbar direkt zugreifen kann um die fenster zu erhalten?
    dann hab ich da noch das problem das ich gerne die anwendungsicons mit dargestellt hätte. ich hab aber noch keinen wirklich erfolgreichen weg gefunden der mir aus dem handle des fensters den pfad zur *exe des programms liefert. ich hatte da hier im forum was gefunden das bei mir aber nich wirklich gefunzt hat.

    Hier iss mein code für die fenster :

    BOOL CALLBACK AlleFenster(HWND hwnd, LPARAM lparam)
    {
     char buf[20];
     WINDOWPLACEMENT wp;
     wp.length = sizeof(WINDOWPLACEMENT);
     GetWindowText(hwnd, buf, 20);
     GetWindowPlacement(hwnd, &wp);
     if (IsWindowVisible(hwnd) && strcmp("",buf) != 0)
     {
      if (wp.showCmd != 0)
      {
       if (!GetWindow(hwnd, GW_OWNER) && (strcmp("Program Manager",buf) != 0))
       {
        TMenuItem *Proggs = new TMenuItem(Taskbar->DropDown);
        Proggs->Caption=buf;
        Taskbar->DropDown->Items->Add(Proggs);
        TToolButton *Button = new TToolButton(Taskbar->ToolBar2);
        Button->Style = tbsCheck;
        Button->Caption = buf;
        Button->ImageIndex = 0;
        Button->Parent = Taskbar->ToolBar2;
    
       }
      }
     }
     return true;
    }
    

    wäre echt toll wenn jemand eine lösung hätte.
    vielen dank schon mal!



  • Bekommst du denn diese Fenster in deiner Callback-Funktion von Enum Windows?

    Zum Icon:
    http://c-plusplus.net/forum/viewtopic.php?t=43175
    http://c-plusplus.net/forum/viewtopic.php?t=47725



  • in der callback funktion lasse ich mir die titel der fenster ausgeben und erstelle buttons auf einer toolbar. diese buttons sollen dann als caption die titel der fenster + die icons haben (wie windows taskbar).
    leider gibt die funktion auch noch fenster wieder wie z.Bsp. dem Program Manager den ich schon durch einen stringvergleich ausgeschlossen habe.
    ich glaube aber nicht das das die richtige lösung sein kann alle ungewollten fenster so zu killen.



  • BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
    {
    	if(IsWindowVisible(hwnd) && (GetParent(hwnd) == NULL))
    	{
    		BOOL bNoOwner = (GetWindow(hwnd, GW_OWNER) == NULL);
    		LONG lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
    
    		if( ( ((lExStyle & WS_EX_TOOLWINDOW) == 0) && bNoOwner ) || ((lExStyle & WS_EX_APPWINDOW) && !bNoOwner) )
    		{
    			int iBufferSize = GetWindowTextLength(hwnd) + 1;
    			char *buffer = new char[iBufferSize];
    			GetWindowText(hwnd,buffer,iBufferSize);
    			if(lstrcmp(buffer,"") != 0) {
    				MessageBox(NULL,buffer,"Titel",0);
    			}
    			delete [] buffer;
    		}
    	}
    	return TRUE;
    }
    

    http://upc.pkmn.co.uk/win32/task.shtml
    http://www.thescarms.com/vbasic/alttab.asp



  • vielen dank für die antwort.
    funktioniert einwand frei. hätt da nur noch ein kleines problem. da iss ein programm ( das mymp3pro ) das nicht erscheint. das programm ist bei windows nicht in der taskliste aber bei alt+tab erscheint es. iss irgendwie ne komische sache, oder?
    naja falls du da noch einen tipp hättest wäre das toll, wenn nich isses auch egal. wenn die halt nich wollen das man ihr programm in seine eigene taskleiste aufnimmt ham se halt pech gehabt.
    danke noch mal für den code.



  • Kannst ja mit den if Bedingungen etwas rumspielen - evtl. bekommst du durch weglassen einer Bedingung auch dieses Fenster mit angezeigt 🙂



  • Alles klar. Werd mal sehen was sich machen lässt.
    Vielen Dank!

    PS: Das Forum iss echt klasse!!!


Anmelden zum Antworten