Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
#include <stdio.h>
#include <windows.h>
int main()
{
// kein Gebrauch der Unicode-Typedefs und -Makros
// DWORD ist unsigned long, LPCTSTR und LPTSTR char*
// -> damit nicht mehr Unicode-kompatibel
// der Name der env-Variable, die ausgelesen werden soll
char *envName = "USERPROFILE";
// Speicher reservieren für den Wert der env-Variable; 256 bit sollten
// i.A. ausreichen, falls nicht, kann man hierfür bis zu 2^15 - 1 bit reservieren
unsigned long nSize = 255;
char *envValBuffer = (char*) malloc (sizeof(char) * nSize);
unsigned long apiRetVal = GetEnvironmentVariable(envName, envValBuffer, nSize);
// Wenn Rückgabewert 0, ist der API-Call gescheitert oder die Variable nicht vorhanden, exit.
if (apiRetVal == 0)
{
printf("GetEnvironmentVariable() failed. Error code %d\n", (int)GetLastError());
return 1;
}
printf ("%s = %s\n", envName, envValBuffer);
// alloziierten Speicher freigeben
free (envValBuffer);
return 0;
}
So weit richtig.%var% funktioniert soweit ich weiß nur in einer Shell bzw in diversen Skriptsprachen.
Muss man nicht, wenn man die Standardbibliothek-Funktion getenv verwendet. Dann sind es sogar mit Fehlerbehandlung nur fünf Zeilen:In C oder C++ muss man die Win-API bemühen.
#include <cstdlib>
#include <iostream>
int main() {
char *value = std::getenv("USERPROFILE");
if (value == NULL) {
std::cerr << "User profile not found" << std::endl;
return EXIT_FAILURE;
}
std::cout << "User profile is " << value << std::endl;
return EXIT_SUCCESS;
}
Besser wäre const char *envName, da das genau der Typ einer Zeichenkettenkonstante ist.C:// der Name der env-Variable, die ausgelesen werden soll char *envName = "USERPROFILE";
Bits? Wohl eher Zeichen. Außerdem verstehe ich nicht, warum du im Kommentar von 256 „Bit“ redest, dann aber nur Platz für 255 Zeicher reservierst. Am besten wäre es, wenn man die benötigte Zeichenanzahl ermittelt, anstatt zu raten:C:// Speicher reservieren für den Wert der env-Variable; 256 bit sollten // i.A. ausreichen, falls nicht, kann man hierfür bis zu 2^15 - 1 bit reservieren unsigned long nSize = 255;
DWORD requiredNumChars = GetEnvironmentVariable(envName, NULL, 0);
if (requiredNumChars == 0) {
// Fehlerbehandlung, Umgebungsvariable nicht auslesbar
}
char *envValBuffer = new char[requiredNumChars];
DWORD numChars = GetEnvironmentVariable(envName, envValBuffer, requiredNumChars);
if (numChars == 0 || numChars >= requiredNumChars) {
// Fehlerbehandlung, ggf. neuer Versuch beim zweiten Fall (Umgebungsvariable wurde zwischen
// den Aufrufen von GetEnvironmentVariable auf einen längeren Wert geändert).
}
delete[] envValBuffer;