Benutzerverzeichnis auslesen
-
hi,
ich brauch ne funktion mit der ich das Benutzerverzeichnis des momentan angemelden benutzers bekomme, zb:
C:\Dokumente und Einstellungen\adminZiel
ich will verknüpfungen auf desktop und Autostart (Startmenü) speichern.
-
Wie kommst du darauf, dass die VCL etwas so Systemabhängiges kapselt? WinAPI ist da ganz klar dein Freund.... Mir war da gabs was ala SHGetSpecialFolder oder so...
->Verschoben
-
Das geht zum Beispiel mit SHGetFolderPath. Für den Dektop nimmst Du CSIDL_DEKTOP, für das Startmenü CSIDL_STARTMENU (oder CSIDL_PROGRAMS für Startmenü/Programme) für den zweiten Parameter.
-
Danke, werds ausprobieren.
-
also dass is nun die api funktion:
HRESULT SHGetFolderPath(
HWND hwndOwner,
int nFolder,
HANDLE hToken,
DWORD dwFlags,
LPTSTR pszPath
);wenn ich das nun das bsp aus msdn im builder umsetze:
TCHAR szPath[MAX_PATH];
if(SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_PERSONAL|CSIDL_FLAG_CREATE,
NULL,
0,
szPath)))
{
PathAppend(szPath, TEXT("New Doc.txt"));
HANDLE hFile = CreateFile(szPath, ...);
}
sagt er, dass er die funktion nicht findet, was nun?
-
Erstens sollte der Funktionsaufruf wohl so aussehen:
SHGetFolderPath(NULL,CSIDL_PERSONAL|CSIDL_FLAG_CREATE,NULL,SHGFP_TYPE_CURRENT,szPath);
und zweitens hast du aus shlobj.h eingebunden?
Da kommt man ja ganz durcheinander, wenn du beim Editieren den Code vollständig änderst
-
also in dem kruscht von msdn steht auch nichts von einer shlobj.h
Dankejetzt hab ich nur noch diese meldungen aus shlobj.h:
[C++ Fehler] shlobj.h(1762): E2238 Bezeichner 'FVSHOWINFO' mehrfach deklariert
[C++ Fehler] shlobj.h(1936): E2238 Bezeichner 'FOLDERSETTINGS' mehrfach deklariert
[C++ Fehler] shlobj.h(3717): E2238 Bezeichner 'DESKBANDINFO' mehrfach deklariert
[C++ Fehler] shlobj.h(4808): E2238 Bezeichner 'SHELLFLAGSTATE' mehrfach deklariertwie krieg ich die weg
-
Also auf der Seite, auf die -King- verlinkt hat steht das mit shlobj.h doch drauf
Hast du vor shlobj.h auch windows.h eingebunden - wird eigentlich immer benötigt- kann aber auch sein, dass es an was anderem liegt
-
die richtige lösung gibts unter