lyris Geschrieben 10. November 2008 Geschrieben 10. November 2008 Hallo allerseits, ich habe folgendes Problem. Ich muss immer wieder mit zig Instanzen einer Anwendung arbeiten, die nicht ersetzt werden kann und mir die Taskbar zumüllt so daß ich ewig nach dem richtigen Fenster suchen muss. Also habe ich mir quasi eine eigene Taskbar gebaut, die diese Instanzen aufnimmt und aus der heraus ich die Fenster steuern kann (in den Vordergrund, Maximieren, Minimieren) usw. - Nun fehlt natürlich das Sahnehäubchen. Diese Taskbar-Buttons müssen aus der Windows Taskbar raus - und daran scheitere ich. Ich kann zwar den Start-Button der Windows Taskbar ein- und Ausblenden und den Rest ebenfalls aber ich komme nicht an die Programmfenster. Hier mal ein Link, zu einem Tool, daß das kann. CodeProject: A tool to order the window buttons in your taskbar. Free source code and programming help Dummerweise scheitere ich daran, die seltsamen fixed -Blöcke in VB.Net nachzubauen. Hier die wichtigen Abschnitte aus der Source: _ToolbarWindowHandle = GetToolbarWindowHandle(); if ( _ToolbarWindowHandle == IntPtr.Zero ) return; _Glomming = ( Glob.Glomming.Int != 0 ); UInt32 count = User32.SendMessage( _ToolbarWindowHandle, TB.BUTTONCOUNT, 0, 0 ); soweit bekomme ich das in vb auch hin. Handle habe ich, und auch die anzahl der in der Taskleiste befindlichen 'Buttons' bekomme ich korrekt zurück. Nun der Haken: fixed ( TBBUTTON* pTBButton = & tbButton ) { IntPtr ipTBButton = new IntPtr( pTBButton ); int b = ( int ) User32.SendMessage( hToolbar, TB.GETBUTTON, ( IntPtr ) i, ipRemoteBuffer ); if ( b == 0 ) { Debug.Assert( false ); return false; } // this is fixed Int32 dwBytesRead = 0; IntPtr ipBytesRead = new IntPtr( & dwBytesRead ); bool b2 = Kernel32.ReadProcessMemory( hProcess, ipRemoteBuffer, ipTBButton, new UIntPtr( ( uint ) sizeof( TBBUTTON ) ), ipBytesRead ); if ( ! b2 ) { Debug.Assert( false ); return false; } } // button text fixed ( byte* pLocalBuffer = localBuffer ) { IntPtr ipLocalBuffer = new IntPtr( pLocalBuffer ); int chars = ( int ) User32.SendMessage( hToolbar, TB.GETBUTTONTEXTW, ( IntPtr ) tbButton.idCommand, ipRemoteBuffer ); if ( chars == -1 ) { Debug.Assert( false ); return false; } // this is fixed Int32 dwBytesRead = 0; IntPtr ipBytesRead = new IntPtr( & dwBytesRead ); bool b4 = Kernel32.ReadProcessMemory( hProcess, ipRemoteBuffer, ipLocalBuffer, new UIntPtr( BUFFER_SIZE ), ipBytesRead ); if ( ! b4 ) { Debug.Assert( false ); return false; } text = Marshal.PtrToStringUni( ipLocalBuffer, chars ); if ( text == " " ) text = String.Empty; } Wie baue ich sowas in vb.net? In jedem dieser fixed-Blöcke werden die selben Variablen neu definiert und das ganze innerhalb einer Function. Egal wie ich es anstelle ich bekomme vollkommen unsinnige Werte/Texte zurück und es gibt, basierend auf dem Code, zwar zig Lösungen in C# und C++ aber keinen einzigen der das in VB geschafft hat. Über Tipps wäre ich dankbar. Zitieren
Guybrush Threepwood Geschrieben 10. November 2008 Geschrieben 10. November 2008 Nur so als unabhängiger Hinweis dazu: Du weißt das du die Windows Taskleiste so einstellen kannst das gleiche Programme gruppiert werden? Zumindest ab XP... Zitieren
lyris Geschrieben 10. November 2008 Autor Geschrieben 10. November 2008 naja ... darauf bin ich schon selbst gekommen aber das hilft mir nicht wirklich weiter, sondern ich brauche noch länger um in dem Stapel nach der passenden Anwendung zu suchen. Und wenn noch ein paar andere Programme laufen, dann schiebt Windows diese Fenster so schmal zusammen, daß ich den Text nicht mehr lesen kann und wieder nicht finde, was ich suche. Sonst hätte ich mich glaube ich nicht an die Eigenkreation einer Taskbar herangemacht. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.