Komfortabler Dateimanager mit vielen Funktionen

SpeedCommander 12.50

By Sven on 24.04.2009 - 10:00 in SpeedCommander 12 with 4 Kommentare

SpeedCommander 12.50 ist ab sofort verfügbar. Neu im Vergleich zur Betaversion ist die Möglichkeit, auch relative Ordnerfavoriten verwenden zu können. Wenn ein Ordnerfavorit einen relativen Pfadnamen für das aktive und/oder inaktive Fenster enthält, dann geht SpeedCommander davon aus, dass sich der Pfadname auf den aktuellen Ordner bezieht.

Für Squeez gibt es auch noch eine kleine Fehlerkorrektur. Durch die Umstellung auf die neuen Packerbibliotheken in SpeedCommander 12.40 kann es passieren, dass beim Überfahren eines Dateieintrags die InfoTip-Erweiterung von Squeez abstürzt. Mit der Version 5.63 sollte dies nicht mehr passieren.

SpeedCommander 12.50 Beta 1

By Sven on 06.04.2009 - 10:00 in SpeedCommander 12 with 3 Kommentare

Viele Neuerungen gibt es diesmal leider nicht, da der Großteil meiner Entwicklungszeit mittlerweile in den SpeedCommander 13 fließt. Von dort kommt auch eine Optimierung des Netzwerkzugriffs, die ich in den SpeedCommander 12 rückportiert habe.

Bisher hat SpeedCommander bei der Ermittlung eines Netzwerkpfades den Pfad immer rückwärts zusammengesetzt. Bei größeren Netzwerken hat das aber seine Zeit gedauert. Deshalb schaut SpeedCommander nun, ob der Server bereits in der obersten Ebene zu finden ist. Bei Erfolg wird dann auch nach der Freigabe geschaut. Andernfalls wird der Pfad wie bisher rückwärts zusammengesetzt.

Der Geschwindigkeitsgewinn macht sich bereits in meinem kleinen Netzwerk bemerkbar. Ansonsten gibt es wie üblich noch ein paar kleine Fehlerbehebungen. Den Download findet ihr wieder im Anwenderforum (Anmeldung erforderlich).

Glückswochen bei Microsoft

By Sven on 01.04.2009 - 18:00 in Webweites with 5 Kommentare

Wer sich vom 1.03.2009 bis zum 31.05.2009 eines dieser Desktop-Sets

kauft, der bekommt von Microsoft 25 Euro zurückgezahlt.

Blogdesign aktualisiert

By Sven on 31.03.2009 - 12:00 in Alltägliches with 5 Kommentare

Ich habe es nun endlich einmal geschafft, das noch aus WordPress 2.0-Zeiten stammende Design auf die aktuelle Version umzustellen. Sollte etwas nicht passen oder ungewollt schief aussehen, dann hinterlasst bitte kurz einen Kommentar.

Kontextmenü für Ordner

By Sven on 26.03.2009 - 11:30 in SpeedCommander 13 with 7 Kommentare

Das Kontextmenü für den aktuellen Ordner, welches per Rechtsklick in den freien Bereich eines Ordnerfensters angezeigt wird, war bisher eher statisch. SpeedCommander hat eine Menüvorlage aus der Ressource geladen und diese dann mit den aktuellen Sortierungsmöglichkeiten, den Ordnerfavoriten sowie der Liste mit den Dokumentvorlagen ergänzt. Soweit funktionierte das auch recht gut, wenn man mal von eher seltenen Problemen beim Einsammeln der Dokumentvorlagen absieht.

Damals war mir bei der Entwicklung dieser Funktion nicht bewusst, dass dieses Menü auch von Shellerweiterungen ergänzt werden kann, wie es zum Beispiel von Tortoise SVN gemacht wird. Folglich werden diese Erweiterungen in SpeedCommander nicht angezeigt.

Mit der Unterstützung des Shell-Namensbereichs wurde eine Überarbeitung nötig, weil das hier angezeigte Kontextmenü vom aktuellen Ordner abhängig ist. Im Arbeitsplatz können z.B. keine Dokumentvorlagen erstellt werden. Dafür gibt es aber die Möglichkeit, die Verbindung zu einem Netzlaufwerk herzustellen. Da SpeedCommander nicht weiß, welche Aktionen der jeweilige Ordner anbietet, ruft er das Menü direkt beim Ordner ab.

Von dieser Umstellung profitiert das Kontextmenü für den normalen Dateisystemordner, das nun auch die Einträge von Tortoise SVN anzeigt:

Kontextmenü für Ordner

Auch die Einträge im Untermenü „Neu“ werden jetzt von der Shell zusammengestellt. Damit sollte SpeedCommander hier nun den gleichen Inhalt anzeigen wie der Explorer.

Probleme mit Kontextmenü-Erweiterungen

By Sven on 16.03.2009 - 10:00 in SpeedCommander 12 with 3 Kommentare

Es ist ja kein Geheimnis, dass es ab und zu mal Probleme mit Kontextmenü-Erweiterungen. Vor mehr als zwei Jahren habe ich über ein Problem mit der Erweiterung des Nero-Covereditors berichtet. Ihr werdet es nicht glauben, aber es gibt immer noch Anwender, die genau diese fehlerhafte Version noch heute einsetzen.

Derzeit bereiten mir aber zwei andere Kontextmenü-Erweiterungen Probleme. Genaugenommen geht es um den Freeware-Zipper jZip und um das Vergleichsprogramm SourceGear DiffMerge. Bei beiden ist es so, dass sie ein eigenes Untermenü in das Kontextmenü einfügen und SpeedCommander bei Anwahl dieses Menüs in Ehrfurcht erstarrt und den Prozessor schwitzen lässt. Lässt man SpeedCommander im Debugger laufen, dann wirft die MFC nur so mit ASSERTs um sich. Für die Nichtentwickler unter euch: Ein ASSERT ist eine Prüfung zur Laufzeit, die auf unerwartete Zustände hinweist (z.B. ungültige Funktionsparameter). Die Prüfungen werden aber nur in der Debug-Version ausgeführt, die Release-Version enthält keine ASSERTs.

In diesem Fall treten die ASSERTs bei der Verarbeitung der WM_INITMENUPOPUP-Nachricht auf. Windows verschickt diese Nachricht, wenn ein Menü oder Untermenü angezeigt werden soll. Die MFC nutzt diese Gelegenheit, um den Status von Menüelementen zu aktualisieren. Soll z.B. ein bestimmter Menübefehl als gewählte Option angezeigt werden, so lässt sich das hier bequem erledigen. Häufig wird die WM_INITMENUPOPUP-Nachricht auch verwendet, um Menüs vor der Anzeige mit aktuellen Daten zu füllen. SpeedCommander nutzt dies u.a. für die Zusammenstellung der Ordnerfavoriten, die bei jeder Anzeige aktuell in das jeweilige Menü eingetragen werden müssen.

Eigentlich sollte man davon ausgehen können, dass das bei WM_INITMENUPOPUP im ersten Parameter mitgelieferte Menühandle auch gültig ist. Die MFC geht jedenfalls davon aus, eventuelle Probleme werden dem Programmierer durch ASSERTs gemeldet. Ich wüsste auch nicht, was dagegensprechen sollte. In 17 Jahren Windows-Programmierung kam mir noch nie eine WM_INITMENUPOPUP für ein ungültiges Menü unter. Die MFC fragt in ihrer Routine nun die Anzahl der Menüeinträge ab und durchläuft diese nacheinander, um der Anwendung die Möglichkeit zu geben, den Status der Einträge gegebenenfalls anzupassen.

Dummerweise rechnet die MFC nicht damit, dass GetMenuItemCount bei einem ungültigen Menühandle den Wert -1 zurückgeben kann. Das MFC-eigene Menüobjekt CMenu::GetMenuItemCount hat deshalb wohl auch als Rückgabewert einen UINT, was für ganzzahlige Werte von 0 bis 4294967295 steht. Und was passiert, wenn man in einer Schleife 4294967295 Menüeinträge durchlaufen möchte? Richtig, der Prozessor kommt ins Schwitzen und die Anwendung hängt erst einmal.

Aber wie kommt es zu einem ungültigen Menühandle? Ich vermute, dass beide Erweiterungen bei der Zusammenstellung des Kontextmenüs einen neuen Menüeintrag mit AppendMenu einfügen. Die Flags für den neuen Eintrag werden auf MF_POPUP gesetzt, was für ein neues Untermenü steht. Soweit ist das auch in Ordnung. Allerdings sollte dann der Parameter uIDNewItem auch das Handle eines mit CreatePopupMenu erstellten Menüs enthalten und nicht einen Zeiger auf eine private Datenstruktur.

Dass es keine normalen Windows-Menüs sind, sieht man im folgenden Screenshot:

Kontextmenü für DiffMerge

Meine Abneigung für Kontextmenü-Erweiterungen mit eigenen Symbolen zur besseren Erkennbarkeit wird übrigens auch durch solche Verunstaltungen nicht gerade kleiner:

Kontextmenü für jZip

Schon krass, wie ein einzelner Eintrag das ganze Kontextmenü versauen kann.

Effizienter Programmieren mit Visual Studio

By Sven on 13.03.2009 - 15:00 in Visual Studio 2008 with Keine Kommentare

Der eine oder andere kennt vielleicht die vielen kleinen (insgesamt 382) Tips zu Visual Studio, die Sara Ford täglich in ihrem Weblog veröffentlicht hat. Im letzten Herbst hat sie 250 davon in einem Buch zusammengestellt, die deutsche Ausgabe ist mittlerweile auch erhältlich. Ich habe mir das Buch gerade bestellt. Auf der Couch macht das Lesen halt mehr Spaß als vor dem Rechner.

Erwähnenswert ist vielleicht noch, dass Sara Ford alle ihre Einkünfte aus dem Buchverkauf einem Stipendienfond zur Verfügung stellt, um Betroffene vom Wirbelsturm Katrina den Collegebesuch zu ermöglichen.

Drück die 0

By Sven on 12.03.2009 - 15:30 in SpeedCommander 13 with 5 Kommentare

Letzte Woche gab es nur graue Theorie, heute kommt wieder etwas Farbe ins Spiel. Um den Zugriff auf MTP-Geräte zu testen, habe ich mir einen Sansa Fuze zugelegt. Werksseitig ist dieser bereits mit ein paar Samples bestückt, von den Künstlern kenne ich keinen einzigen. Aber das muss nichts heißen, der Musikexperte vor dem Herrn bin ich nämlich nicht.

Im Screenshot seht ihr die neue Baumansicht. Unterhalb des Computers werden die lokalen Laufwerke zusammen mit MP3-Player und Digitalkamera angezeigt. Letztere besitzen keine zugeordneten Laufwerksbuchstaben und konnten deshalb bisher nicht angezeigt werden.

Sansa Fuze in SpeedCommander 13

Eine weitere Herausforderung war das gezielte Navigieren zu einem Ordner im Shell-Namensbereich durch Eingabe einer Pfadbezeichnung. Es gibt leider keine dokumentierte Funktion (ich habe jedenfalls nichts passendes gefunden), wie man z.B. von Desktop\Computer\Sansa Fuze 4GB\Internal Memory\Albums an den gewünschten Shell-Ordner kommt. Die von der Shell bevorzugte Variante für diesen Pfad ist 217 Zeichen lang und fängt mit ::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_0781&pid_74c0#d011ee018309b6960000000000000000# an. Sicher nichts, was ein Anwender eintippen möchte. Mittlerweile habe ich mir eine eigene Funktion geschrieben und damit kann man die erste Pfadangabe z.B. auch direkt als Ordnerfavoriten verwenden.

Klassik und Moderne

By Sven on 05.03.2009 - 10:00 in SpeedCommander 13 with 5 Kommentare

Bis vor zehn Jahren musste sich ein Dateimanager hauptsächlich mit lokalen Laufwerken und mit Netzwerklaufwerken herumschlagen, dazu kam noch etwas Archivunterstützung und Zugriff auf FTP-Server. Windows 95 führte zwar das Konzept der virtuellen Ordner ein, diese bezogen sich aber mehr oder weniger auf Elemente, die ein Dateimanager nicht unbedingt ansprechen musste (z.B. Systemsteuerung oder Arbeitsplatz).

Seit Windows XP aber nimmt die Anzahl der Geräte zu, die sich ohne Laufwerksbuchstaben direkt in den Explorer einbinden. Damit steigen natürlich auch die Anfragen der Anwender, warum SpeedCommander nicht auf bestimmte Digitalkameras oder MP3-Player zugreifen kann, obwohl diese ja im Arbeitsplatz angezeigt werden. Zudem basiert das mit Windows 7 eingeführte Bibliothekskonzept ebenfalls auf virtuellen Ordnern. Es ist also nur eine Frage der Zeit, bis auch deswegen nachgefragt wird.

Ich habe schon länger (eigentlich seit SpeedCommander 4) darüber nachgedacht, wie man die Anzeige von virtuellen Strukturen mit der Anzeige der realen Dateistrukturen verbinden kann. Anfangs stand die Idee, neben der bisherigen Ordneranzeige für lokale Laufwerke und das Netzwerk einfach zusätzlich noch eine Exploreransicht einzubauen. Das hätte aber den großen Nachteil, dass sich der Anwender immer in zwei Parallelwelten bewegen müsste.

Mitte Januar kam mir dann bei der Entwicklung der neuen Listenansicht die Idee, wie man den gordischen Knoten auflösen könnte. Die bisherigen zwei Fensterimplementationen für die lokalen Laufwerke und die Netzwerkumgebung werden zu einer fusioniert und diese dann zusätzlich um die Fähigkeit ergänzt, auch Ordner im Shell-Namensbereich anzeigen zu können. Der Übergang in die bisher gewohnte dateisystemorientierte Anzeige erfolgt dabei über die lokalen Laufwerke im Arbeitsplatz sowie über die Netzwerkumgebung. Alles andere wird in der von Windows vorgegebenen Struktur angezeigt, Digitalkameras, MP3-Player und Papierkorb eingeschlossen.

Für die Baumansicht bedeutet dies, dass nun der Desktop die oberste Ebene ist und alle lokalen Laufwerke wie im Explorer innerhalb einer Struktur angezeigt werden (was auch schon öfters gewünscht wurde). Allerdings gibt es hier auch eine Funktionskürzung. Archive werden in Zukunft nicht mehr im Baum angezeigt. Die durch die kombinierte Ansicht ohnehin schon gewachsene Komplexität hätte sich damit noch einmal deutlich erhöht.

Anzeige und Navigation in Baum- und Listenansicht sind weitgehend fertiggestellt, ebenso Brotkrumennavigation und Hintergrundaktualisierung. Einige Stolpersteine habe ich schon umschifft, andere liegen noch vor mir. Dazu gehören mit Sicherheit auch die Dateioperationen, die bisher ausschließlich auf Dateisystemfunktionen basieren.

Aus der anfangs geplanten Verbesserung vieler kleiner Sachen ist nun doch eine ziemlich große Neuprogrammierung grundlegender Funktionen geworden. Das bisherige Fundament ist schon etwas älter, es stammt noch von SpeedCommander 9. Da tut eine Aktualisierung auch mal ganz gut.

Um auf das Bilderrätsel zurückzukommen: Die 0 steht, wie ihr schon richtig vermutet habt, tatsächlich für den Desktop und damit für den Shell-Namensbereich.

Bilderrätsel

By Sven on 03.03.2009 - 10:00 in SpeedCommander 13 with 9 Kommentare

Die beiden folgenden Screenshots zeigen die Laufwerksleisten von SpeedCommander 12 und 13:

Laufwerksleiste SpeedCommander 12

Laufwerksleiste SpeedCommander 13

Wer findet den Unterschied?

Top