Nazwa użytkownika

0

Witam.Zastanawia mnie sprawa jak za pomocą C++ mogę sobie wczytać nazwę użytkownika do ścieżki jeśli np. chce za pomocą programu pobrać plik na pulpit lub stworzyć folder na pulpicie. Znalazłem na internecie wiele różnych wyjść z tej sytuacji ,ale bardzo prosiłbym kogoś o łopatologiczne wytłumaczenie mi tego wątku :).

0

Najprostszą metodą na pobranie ścieżki katalogu domowego użytkownika bez bawienia się w WinAPI jest przenawigowanie do katalogu %HOMEDRIVE%%HOMEPATH% (to są makra systemowe, więcej tutaj: http://ss64.com/nt/syntax-variables.html) i pobranie ścieżki katalogu roboczego (np. za pomocą POSIX-owych chdir i getcwd). Nie jestem jednak pewien, czy na każdej wersji Windowsa pulpit jest montowany z tego samego podkatalogu użytkownika, dlatego lepszym rozwiązaniem jest wykorzystanie WinAPI:
http://stackoverflow.com/ques[...]ktop-folder-using-windows-api
Samą nazwę użytkownika można pobrać za pomocą GetUserName():
https://msdn.microsoft.com/en[...]rary/ms724432%28VS.85%29.aspx

0

Wszystko pięknie tylko jestem początkujący i wydaje mi się to trochę skomplikowane.Jakbyś był w stanie podać mi kod i wytłumaczyć co za co odpowiada :).

0
#define _WIN32_IE 0x0500

#include <iostream>
#include <windows.h>
#include <Shlobj.h>

int main(int argc, char* argv[])
{
    char path[MAX_PATH+1];
    if( SHGetSpecialFolderPath(HWND_DESKTOP, path, CSIDL_DESKTOPDIRECTORY, FALSE) )
        std::cout << path;
    else
        std::cout << "ERROR";
    return 0;
}

Na początku jest definicja makra _WIN32_IE - bez tego funkcja Shlobj.h nie zadeklaruje funkcji SHGetSpecialFolderPath. W samym ciele definiujesz bufor o długości MAX_PATH (makro z WinAPI określające maksymalną długość ścieżki) + 1 na terminating null. Wywołujesz funkcję z WinAPI (dokładne wyjaśnienie argumentów jest na MSDN, zalinkowałem w poprzednim poście - Ciebie interesuje tylko drugi, gdzie podajesz swój bufor, do którego ścieżka zostanie skopiowana), która zwraca true jeśli udało się pobrać ścieżkę.
Wg MSDN funkcja SHGetSpecialFolderPath nie jest wspierana, zamiast tego proponują SHGetFolderPath która to znowu jest deprecated i odsyłają do SHGetKnownFolderPath, która to z kolei jest dostępna dopiero od Visty - to tak tylko w ramach poprawności. Nie wiem jakiego używasz systemu, dlatego podałem propozycję z SHGetSpecialFolderPath. Skoro to ma być wykorzystane w ramach nauki kodzenia to nic nie szkodzi. ;)

0

A nie ma możliwość wczytania tej nazwy usera tak jak na początku myślałem .Np. w postaci zmiennej ? Dzięki za tamto.

0

Ale po ci do tego nazwa usera? jeśli wyobrażasz sobie, że złożysz stringa c:\Users\NAZWA_USERA\cośtam_dalej to robisz to bardzo źle.

Po pierwsze, pod Windows XP nie ma katalogu Users, tylko Documents and Settings. To również oznacza, że nazwa i struktura katalogów może się znowu zmienić w przyszłości.
Po drugie, dyskiem systemowym nie musi być C:.
Po trzecie, katalog usera nawet nie musi być na dysku systemowym.
Wszystkie te problemy rozwiązują funkcje API które wyżej dostałeś.

0
Krzywy Kaczor napisał(a):

A nie ma możliwość wczytania tej nazwy usera tak jak na początku myślałem .Np. w postaci zmiennej ? Dzięki za tamto.

Podałem link do MSDN w pierwszym poście. Szlifuj lepiej angielski, bo bez jego znajomości w stopniu potrzebnym do zrozumienia dokumentacji daleko nie zajdziesz w programowaniu. :P

0
Websplash napisał(a):
Krzywy Kaczor napisał(a):

A nie ma możliwość wczytania tej nazwy usera tak jak na początku myślałem .Np. w postaci zmiennej ? Dzięki za tamto.

Podałem link do MSDN w pierwszym poście. Szlifuj lepiej angielski, bo bez jego znajomości w stopniu potrzebnym do zrozumienia dokumentacji daleko nie zajdziesz w programowaniu. :P

Dla mnie nie jestem problemem angielski , nawet bez jego znajomości mogę skorzystać z pomocy "przetłumacz stronę" i w miarę logicznie dostanę przetłumaczony tekst. No dobrze ,a jeśli nie interesuje mnie tylko pulpit tylko np. "moje dokumenty" , "autostart" etc. To komenda wyżej nie pomoże.

0

Pomoże. Dokumentacja argumentu csidl dla SHGetSpecialFolderPath (do której odnośnik prowadzi bezpośrednio od dokumentacji tej funkcji):
https://msdn.microsoft.com/en[...]op/bb762494%28v=vs.85%29.aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0