%windir% in C++ [erledigt] BIG THX 2 VOLKARD
-
Hätt mal wieder ein Problem...
Ich hab nen programm geschrieben, dass ein anderes in den Autostart eintragen soll
sieht dann so aus:BYTE pfad[] = "C:\\Windows\\meinprogramm.exe"; HKEY hkey; RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, 0); RegSetValueEx(hkey, "meinprogramm", 0, REG_SZ, pfad, sizeof(pfad)); RegCloseKey(hkey);
jetzt wollt ich fragen obs ne möglichkeit gibt windir in C bzw. C++ zu bestimmen, damit mein programm auch startet wenns z.B. auf D:\\Windows\\meinprogramm.exe liegt...
hab zwar gegooglt, bin daraus aber nicht wirklich schlau geworden
lg Flo
-
Meinst du die Environment-Variable WINDIR? Dann einfach:
#include <cstdlib> // ... const char *env = std::getenv("WINDIR"); if(env) { // ... }
Stefan.
-
In der Not ist man: getenv seit 89 bei C dabei. Es gibt sicher auch Windows-Funktionen, die das können.
-
#include <cstdlib> // ... const char *env = std::getenv("WINDIR"); if(env) { // ... }
Danke Steffan, kann man des au in c schreiben?
wenn wie würds dann aussehen?
-
ZockerFloh7 schrieb:
#include <cstdlib> // ... const char *env = std::getenv("WINDIR"); if(env) { // ... }
Danke Steffan, kann man des au in c schreiben?
wenn wie würds dann aussehen?Klar, geht auch. Inkludiere stdlib.h und lasse "std::" weg.
Stäffahn.
-
Geb ich dann BYTE pfad[] = "Windir\\Programm.exe
anstatt von BYTE pfad [] = C:\\Windows\\Programm.exe an oder?
-
ZockerFloh7 schrieb:
Geb ich dann BYTE pfad[] = "Windir\\Programm.exe
anstatt von BYTE pfad [] = C:\\Windows\\Programm.exe an oder?Nein, du musst WINDIR mit getenv() auflösen, den Wert dann in deinen Pfad kopieren und daran deinen Programmnamen anhängen. In C++ etwa so (ungetestet):
#include <cstdlib> #include <string> // Das Argument progname ist der REINE Dateiname, ohne Pfad! // std::string addPath(const char *progname) { std::string result; const char *env = std::getenv("WINDIR"); if(env) result = env; else result = "c:\\windows"; result += '\\'; result += progname; return result; }
Stefan.
-
Warum nicht einfach
BYTE pfad[] = "%windir%\\meinprogramm.exe";
? Der Bezug zu C++ erscheint mir allerdings als zu gering, als dass er das Posten in diesem Unterforum rechtfertigen würde.
-
wtf is dat kompliziert, gehts irgendwie einfacher?
hab bei microsoft sowas gefunden:UINT GetWindowsDirectory( LPTSTR lpBuffer, UINT uSize );
weißt, bin anfänger und hab da mit codes wie deinen nen bissl probleme
Flo
-
doppelpost sorry
-
camper schrieb:
Warum nicht einfach
BYTE pfad[] = "%windir%\\meinprogramm.exe";
? Der Bezug zu C++ erscheint mir allerdings als zu gering, als dass er das Posten in diesem Unterforum rechtfertigen würde.
wo soll ich denn sonst sowas fragen?
-
camper schrieb:
Warum nicht einfach
BYTE pfad[] = "%windir%\\meinprogramm.exe";
? Der Bezug zu C++ erscheint mir allerdings als zu gering, als dass er das Posten in diesem Unterforum rechtfertigen würde.
Das ginge meines Wissens nur, wenn der Typ des Registry-Keys REG_EXPAND_SZ ist. Ich habe halt das REG_SZ wörtlich genommen.
Stefan.
-
Bei mir siehts jetzt so aus:
#include <cstdlib> #include <mmsystem.h> #include <stdlib.h> #include <string> std::string addPath(const char *progname) { std::string result; const char *env = std::getenv("WINDIR"); if(env) result = env; else result = "c:\\windows"; result += '\\'; result += progname; return result; } int main() { HWND hwnd = FindWindow("ConsoleWindowClass",NULL); ShowWindow(hwnd,SW_HIDE); BYTE pfad[] = "Programm.exe"; HKEY hkey; RegCreateKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, 0, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, 0); RegSetValueEx(hkey, "Programm", 0, REG_SZ, pfad, sizeof(pfad)); RegCloseKey(hkey); }
wo muss ich jetzt noch was machen?
bitte help, ich hab keine ahnung
-
gut, habs jetzt geschafft windir auszulesen
geht so:char * pPath; pPath = getenv ("WINDIR");
wie trag ich dass jetzt in den Pfad zu einem Programm, das beim autostart gestartet werden soll ein?
-
ZockerFloh7 schrieb:
gut, habs jetzt geschafft windir auszulesen
geht so:char * pPath; pPath = getenv ("WINDIR");
ach echt? zähl mal nach, wie oft das hier schon geschrieben wurde...
ZockerFloh7 schrieb:
wie trag ich dass jetzt in den Pfad zu einem Programm, das beim autostart gestartet werden soll ein?
was?
-
sorry man ich binn hald total anfänger
ich hab jetzt 2 stungen gegooglt und langsam hat sich das ergeben...
ich möchte die ermittelte "Windir" jetzt in nen pfad einbauen
z.b. beim autostart, damit windows weiß wo des autostart file liegt
so in der richtung:BYTE pfad[] = "windir\\SYS\\LanNetService.exe";
aber so gehts nich und ich find keine lösung
-
#include <string> #include <cstdlib> std::string get_windows_path() { char* str = std::getenv("WINDIR"); return str ? str : "C:/Windows"; }
Benutzung:
#include <string> int main() { std::string path = get_windows_path() + "/SYS/LanNetService.exe"; }
Jz klüger als zuvor?
bb
-
ZockerFloh7 schrieb:
wtf is dat kompliziert, gehts irgendwie einfacher?
hab bei microsoft sowas gefunden:UINT GetWindowsDirectory( LPTSTR lpBuffer, UINT uSize );
weißt, bin anfänger und hab da mit codes wie deinen nen bissl probleme
Flo
#include <iostream> #include <string> #include <windows.h> std::string getWindowsPath() { char* buff = new char[MAX_PATH]; std::string ret_val; if (GetWindowsDirectory(buff, MAX_PATH)) { ret_val = buff; } delete[] buff; return ret_val; } int main() { std::cout << getWindowsPath() + "\\test.png" << std::endl; }
-
milan1612 schrieb:
#include <iostream> #include <string> #include <windows.h> std::string getWindowsPath() { char* buff = new char[MAX_PATH]; std::string ret_val; if (GetWindowsDirectory(buff, MAX_PATH)) { ret_val = buff; } delete[] buff; return ret_val; } int main() { std::cout << getWindowsPath() + "\\test.png" << std::endl; }
jz erklär mir mal, wieso du nicht den stack nimmst!?
bb
-
unskilled schrieb:
jz erklär mir mal, wieso du nicht den stack nimmst!?
bb
Ist schnurz-piep-egal imho, das ist ja keine Funktion die man oft braucht, einmal
aufrufen und dann zwischenspeichern...EDIT:
Hier bitte:std::string getWindowsPath() { char buff[MAX_PATH]; std::string ret_val; if (GetWindowsDirectory(buff, MAX_PATH)) { ret_val = buff; } return ret_val; }
Jetzt aber Ruhe hier