Avatar billede the_fox Nybegynder
27. november 2006 - 13:04 Der er 15 kommentarer og
1 løsning

Stien til skrivebordet for den aktuelle bruger

Hej Eksperter,

Jeg efterlyser en funktion som kan hente stien til skrivebordet for den bruger som er logget ind.

F.eks. C:\Documents and Settings\Administrator\Skrivebord

Mvh Ole
Avatar billede arne_v Ekspert
27. november 2006 - 13:17 #1
getenv("USERPROFILE")

bør give dig "C:\Documents and Settings\Administrator" men jeg ved ikke
lige hvor man henter det sidste
Avatar billede tokelil Nybegynder
27. november 2006 - 14:08 #2
Så vidt jeg ved og lige kan søge mit til, så findes det ikke som "environment" variabel. (Som f.eks. %appdata% mv.)

Du kan dog bruge Shell API'et:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/enums/csidl.asp
Avatar billede the_fox Nybegynder
27. november 2006 - 14:44 #3
-> tokelil
Jeg kunne forestille mig at det er denne (CSIDL_DESKTOPDIRECTORY)jeg skal bruge, men jeg er lidt i tvivl om hvordan jeg benytter den?

Har du eventuelt et hurtigt eksempel?
Avatar billede the_fox Nybegynder
27. november 2006 - 15:00 #4
Når jeg laver denne:

BOOL resultat = SHGetSpecialFolderPath(NULL, path, CSIDL_DESKTOPDIRECTORY, 0);

Får jeg fejlen 'SHGetSpecialFolderPath' undeclared.

Jeg har inkluderet shlobj.h

Har I et godt forslag?
Avatar billede tokelil Nybegynder
27. november 2006 - 15:17 #5
Har du includeret shell32.lib i dine linker options?

Du kan evt. også gøre det ved at have følgende linie:
#pragma comment(lib, "shell32.lib")
Avatar billede the_fox Nybegynder
27. november 2006 - 15:42 #6
hmm jeg har tilføjet den i min main.cpp men det ændrer ikke noget?
Avatar billede tokelil Nybegynder
27. november 2006 - 15:52 #7
Har du tilføjet den øverst eller? Jeg har:

#include <shlobj.h>
#pragma comment(lib, "shell32.lib")

og kode:
    TCHAR strPath[MAX_PATH] = {0};
    if (SHGetSpecialFolderPath(NULL, strPath, CSIDL_DESKTOPDIRECTORY, false))
        MessageBox(NULL, strPath, _T("Test"), 0);

og det virker fint.
Avatar billede tokelil Nybegynder
27. november 2006 - 15:55 #8
Kommer til at tænke på du muligvis mangler en define, da funtionen først er med på Windows installation med IE 4.

Jeg kan se min stdafx.h i mit test project har følgende defines:
#ifndef _WIN32_WINNT        // Allow use of features specific to Windows XP or later.                 
#define _WIN32_WINNT 0x0501    // Change this to the appropriate value to target other versions of Windows.
#endif                       

#ifndef _WIN32_WINDOWS        // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
#endif

#ifndef _WIN32_IE            // Allow use of features specific to IE 6.0 or later.
#define _WIN32_IE 0x0600    // Change this to the appropriate value to target other versions of IE.
#endif
Avatar billede the_fox Nybegynder
27. november 2006 - 16:02 #9
ok og hvor skal jeg tilføje det?
Avatar billede the_fox Nybegynder
27. november 2006 - 16:08 #10
Forresten så er det tilføjet foroven i main og jeg har prøvet at kopiere din kode og det giver samme resultat :(
Avatar billede tokelil Nybegynder
27. november 2006 - 16:11 #11
Det skal includeres et sted før din #include <shlobj.h>. (Da funktionerne sandsynligvis kun bliver "oprettet" hvis ovenstående #define's er tilstede)
Avatar billede the_fox Nybegynder
27. november 2006 - 16:14 #12
Det var pokkers! Nu virker skidtet! Jeg siger mange tak. Vil du ligge et svar?
Avatar billede tokelil Nybegynder
27. november 2006 - 16:20 #13
Hvis jeg laver et nyt project med nedenstående, så compiler det fint. Er det en gammel SDK version du har måske?

[code]
#pragma once

#include <stdio.h>
#include <tchar.h>

#include <shlobj.h>
#pragma comment(lib, "shell32.lib")


int _tmain(int argc, _TCHAR* argv[])
{
    TCHAR strPath[MAX_PATH] = {0};
    if (SHGetSpecialFolderPath(NULL, strPath, CSIDL_DESKTOPDIRECTORY, false))
        MessageBox(NULL, strPath, _T("Test"), 0);

    return 0;
}
[/code]
Avatar billede tokelil Nybegynder
27. november 2006 - 16:21 #14
Ok :) Held og lykke med det :)
Avatar billede the_fox Nybegynder
27. november 2006 - 16:21 #15
forresten? Kan du fortælle mig hvordan jeg tilføjer "fil.exe" til strPath?

så hele strengen bliver: "c:\dokuments and settings\admin\skrivebord\fil.exe"
Avatar billede tokelil Nybegynder
27. november 2006 - 16:26 #16
_tcscat(strPath, _T("\\fil.exe"));
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester