K32GetModuleFileNameExW wird nicht gefunden

Nach der Umstellung vom Windows SDK für Vista auf das von Windows 7 zeigte das Installationsprogramm von SpeedCommander unter Windows XP und Vista beim Start plötzlich folgende Meldung an:

—————————
setup.exe – Einsprungpunkt nicht gefunden
—————————
Der Prozedureinsprungpunkt “K32GetModuleFileNameExW” wurde in der DLL “KERNEL32.dll” nicht gefunden.
—————————
OK
—————————

Der Grund dafür ist, dass mit Windows 7 alle Funktionen der PSAPI.DLL in den Kernel gewandert sind. Wenn man nun für Windows 7 kompiliert, dann werden alle Funktionsnamen auf die entsprechenden Kernelfunktionen gemappt. Die Implementierung findet man in der psapi.h:

//
// Give teams a choice of using a downlevel version of psapi.h for an OS versions.
// Teams can set C_DEFINES=$(C_DEFINES) -DPSAPI_VERSION=1 for downlevel psapi
// on windows 7 and higher.  We found that test code needs this capability.
//
#ifndef PSAPI_VERSION
#if (NTDDI_VERSION >= NTDDI_WIN7)
#define PSAPI_VERSION 2
#else
#define PSAPI_VERSION 1
#endif
#endif

#if (PSAPI_VERSION > 1)
#define EnumProcesses               K32EnumProcesses
#define EnumProcessModules          K32EnumProcessModules
#define EnumProcessModulesEx        K32EnumProcessModulesEx
#define GetModuleBaseNameA          K32GetModuleBaseNameA
#define GetModuleBaseNameW          K32GetModuleBaseNameW
#define GetModuleFileNameExA        K32GetModuleFileNameExA
#define GetModuleFileNameExW        K32GetModuleFileNameExW
......
#endif

Die Kernelfunktionen existieren aber nur ab Windows 7. Auf älteren Systemen können sie beim Programmstart nicht aufgelöst werden und es erfolgt eine Fehlermeldung.

Zur Abhilfe definiert man einfach vor dem Einbinden der psapi.h den entsprechenden Kompatibilitätsschalter:

#define PSAPI_VERSION		1

Nun werden die Funktionen nicht mehr gemappt und wie bisher gewohnt in der PSAPI.DLL gesucht.

SpeedCommander 13.30.6165 (Beta)

Mit SpeedCommander 13.30 gibt es einige Änderungen hinter den Kulissen. Die wohl größte ist die Umstellung auf die CRT/MFC sowie den Compiler/Linker von Visual Studio 2010. Dazu wurden die Komponenten Scintilla, OpenSSL und UnRar auf die aktuellen Versionen aktualisiert.

In den Registerkarten können nun auf Wunsch nur die Laufwerksbezeichner anstatt der Ordnernamen angezeigt werden. Durch einen Doppelklick in den freien Bereich wird eine neue Registerkarte erstellt. Beim Kopieren von Dateien größer als 4 GiB auf einen FAT32-Datenträger erscheint nun eine aussagekräftigere Fehlermeldung.

Mit SpeedCommander 13.00 wurden die Dateien beim Doppelklick in der Listenansicht mit Hilfe des Kontextmenüs gestartet. Dazu wurde mit den markierten Dateien ein Kontextmenüobjekt initialisiert und mit dessen Methoden die Dateien geöffnet. Seitdem war auf meinem System aber zu beobachten, dass beim Öffnen von Mediendateien mit dem Media Player ab und zu mal die Meldung Starten des Servers fehlgeschlagen angezeigt wurde, die ich in den vorherigen Versionen nie zu sehen bekam. Aus diesem Grund öffnet SpeedCommander 13.30 die Dateien wieder mit der bewährten Windows-Funktion ShellExecuteEx. Über einen Schalter in der SpeedCommander.ini lässt sich die gewünschte Methode anpassen:

[FolderWndShell]
OpenWithContextMenu=0

0 ist Standard und steht für ShellExecuteEx, mit 1 werden die Kontextmenü-Methoden verwendet.

Dazu gibt es noch einen Schalter, mit dem sich die Verzögerung bei der Anzeige des InfoTip-Fensters beim Überfahren der Laufwerkssymbole mit der Maus einstellen lässt. In den ersten Betaversionen von SpeedCommander 13.00 gab es unter Umständen kleine Hänger, wenn der Mauszeiger bei der Laufwerksauswahl eine kurze Zeit über einem Netzlaufwerk verweilte und die Anzeige der Speicherplatzanzeige für die Laufwerkssymbole aktiviert ist. Mit dem folgenden Schalter lässt sich der Mindestaufenthalt des Mauszeigers über einem Laufwerkssymbol nun anpassen:

[DriveWnd]
InfoTipDelayInitial=0

Mit dem Wert 0 wird die in Windows eingestellte Verzögerung für die Anzeige von InfoTips verwendet, ansonsten erfolgt die Angabe in Millisekunden. Der Wert 2000 bedeutet also, dass man mit dem Mauszeiger zwei Sekunden über einem Laufwerkssymbol verweilen muss, damit das InfoTip-Fenster angezeigt wird.



Startbildschirme von SpeedCommander 11

Bei SpeedCommander 11 gab es erstmals einen eigenen Startbildschirm für die Betaversion:

Startbildschirm von SpeedCommander 11 (Beta)

Mit dem Startbildschirm für die finale Version erfolgte ein Schwenk von einem dunklen zu einem hellen Hintergrund. Auch der Komet wurde grundlegend überarbeitet:

Startbildschirm von SpeedCommander 11

Für die an Windows Vista angepasste Version 11.5 gab es dann noch einen aktualisierten Startbildschirm, wobei das .V sowie das Vista-Logo im Kometen an Vista erinnern sollten:

Startbildschirm von SpeedCommander 11.5

SpeedCommander 11 erschien im Oktober 2005 als 32-bit und 64-bit Version. Ab SpeedCommander 11.1 gab es dann auch eine Version für U3-Sticks. Die Version 11.5 wurde im Oktober 2006 veröffentlicht.

Hintergrundbilder für SpeedCommander 13

Alexandra hat einige Hintergrundbilder für SpeedCommander 13 erstellt. Pro Auflösung gibt es eine helle und dunkle Version, jeweils mit einem farbigen und einem monochromen Linseneffekt:

Dunkel mit farbigem LinseneffektDunkel mit schwarzweiß-Linseneffekt

Hell mit farbigem LinseneffektHell mit schwarzweiß-Linseneffekt

Die entsprechend der Auflösung geschnürten Pakete findet ihr im Download-Bereich.