Cesta k Po spuštění – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Cesta k Po spuštění – C / C++ – Fórum – Programujte.comCesta k Po spuštění – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Midnight
~ Anonymní uživatel
78 příspěvků
23. 8. 2011   #1
-
0
-

Zdravím!

Chci se zeptat, zdali je nějaký způsob, jak ve Windows za běhu programu zjistit přesně cestu k adresáři Po spuštění jako řetězec. Cestu bych sice mohl nastavit ručně, ale problém je, že pro různé lokalizace bude cesta jiná. A vlastně na starších Windowsech je ta cesta také jiná, takže bych byl omezen pouze na Vista/7 a na jeden jazyk.

V podstatě můj plán je, že po spuštění binárky se zkopíruje do adresáře Po spuštění a když už tam bude, tak se příště kopírovat nebude. To bych udělal porovnáním právě cestami k současnému adresáři - argv[0] a cestou, kterou potřebuji získat.

Mohl bych si hrát s registry, ale vzhledem k tomu, že můj program budou testovat moji kamarádi, tak bych nerad byl až tak zlý. Proto bych se raději spokojil s Po spuštění.

Samozřejmě vše pro studijní účely.

Děkuji za každou pomoc.

Nahlásit jako SPAM
IP: 92.62.224.–
Reklama
Reklama
michy040
Duch
23. 8. 2011   #2
-
0
-

#1 Midnight
Jednou z cest, jsou tzv Proměné Prostředí("Environment Variables"), zkus si o tom neco vygooglit ;)

Nahlásit jako SPAM
IP: 92.62.224.–
Midnight
~ Anonymní uživatel
78 příspěvků
23. 8. 2011   #3
-
0
-

Chapu to tedy dobře, že mohu použít proměnnou např. %ProgramData%, ale zbytek cesty musím stejně doplnit? Tedy %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup.

Ale to bude stále fungovat pouze pro Anglické Windows, nebo se mýlím?

Nahlásit jako SPAM
IP: 92.62.224.–
Tom
~ Anonymní uživatel
417 příspěvků
23. 8. 2011   #4
-
0
-

#3 Midnight
Nebo to vytahni z registru:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders

Nahlásit jako SPAM
IP: 89.103.121.–
Midnight
~ Anonymní uživatel
78 příspěvků
23. 8. 2011   #5
-
0
-

Zajímavé. Pokud to bude jediná možnost, jak být přesný, tak to tak udělám. Jen zatím nevím, jak to udělat.

Jinak zvláštní je, že v registrech mám cestu k této složce Anglicky, ale pokud složky projíždím, tak jsou přeložené do Češtiny.

Nahlásit jako SPAM
IP: 92.62.224.–
liborb
~ Redaktor
+18
Guru
24. 8. 2011   #6
-
0
-

Tak vytáhnout to z registru lze třeba takto:

wchar_t	wzPath[MAX_PATH];
HKEY	hKey;
DWORD	dwSize;

if (((RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", 0, KEY_READ, &hKey)) == ERROR_SUCCESS)
	&& (RegQueryValueEx(hKey, L"Startup", NULL, NULL, (LPBYTE)wzPath, &dwSize) == ERROR_SUCCESS)) {
	RegCloseKey(hKey);
	// OK
}
else {
	// Chyba
}

Ovšem po nedávných zkušenostech, kdy některé položky v registru prostě chybí (na WV a asi výše), bych doporučil jít cestou přes IShellFolder, tj. na oko složitější:

LPITEMIDLIST	pPID;		
IShellFolder*	pDesktopFolder;
STRRET		sRet;
wchar_t		wzPath[MAX_PATH];

if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder))) {
	if (SUCCEEDED(SHGetSpecialFolderLocation(NULL, CSIDL_STARTUP, &pPID))) {
		if (SUCCEEDED(pDesktopFolder->GetDisplayNameOf(pPID, SHGDN_FORPARSING, &sRet))) {
			if (SUCCEEDED(StrRetToBuf(&sRet, pPID, (LPWSTR)wzPath, MAX_PATH))) {
				// Ok
			}
		}
		CoTaskMemFree(pPID);
	}			
	pDesktopFolder->Release();
}

Jinak jaké CSIDL je to správné si najdeš v dokumentaci u funkce SHGetSpecialFolderLocation.

EDIT: A ještě bych zapomněl, přes použitím COM (tady prostřednictvím IShellFolder) je nutné volat CoInitialize a po skončení je nutné zavolat CoUninitialize.

Nahlásit jako SPAM
IP: 78.80.52.–
Midnight
~ Anonymní uživatel
78 příspěvků
24. 8. 2011   #7
-
0
-

Tak dekuji moc za pomoc, ziskane informace pujdou na dobrou vec  

Nahlásit jako SPAM
IP: 92.62.224.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 64 hostů

Podobná vlákna

Cesta k souborům — založil Jiri

Cesta k suboru — založil Peter

Nejkratsi cesta — založil Jardan

Cesta k programu — založil Slim

Relativní cesta — založil Radmill

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý