Allg. Fragen



  • Hallo zusammen,

    hab mal wieder einige Fragen.
    1. Wie kann ich die Systemsprache auslesen? (Nicht Tastatur sondern sozusagen die angezeigte Sprache, Dialoge usw.)
    2. Wie kann ich die Programmuptime bestimmen? (So etwas wie GetTickCount für mein Programm)
    3. Den Namen des Prozessors herausbekommen? (z.B. AMD Athlon XP 3000+)
    4. Die Farbtiefe des Monitors herausbekommen?
    5. Den benötigten Speicher meines Prozesses?
    6. Die physikalisch verfügbaren/komplette Speichergröße auslesen?

    Hoffe das war nicht zu viel des Guten 😃

    MfG
    yogle :schland:



  • yogle schrieb:

    1. Wie kann ich die Systemsprache auslesen? (Nicht Tastatur sondern sozusagen die angezeigte Sprache, Dialoge usw.)

    GetUserDefaultLCID bzw. GetSystemDefaultLCID bzw. GetLocaleInfo (beachte auch MUI-Systeme!)

    yogle schrieb:

    2. Wie kann ich die Programmuptime bestimmen? (So etwas wie GetTickCount für mein Programm)

    GetProcessTimes

    yogle schrieb:

    3. Den Namen des Prozessors herausbekommen? (z.B. AMD Athlon XP 3000+)

    WMI mit Win32_Processor und Name-Property

    yogle schrieb:

    4. Die Farbtiefe des Monitors herausbekommen?

    GetDeviceCaps mit BITSPIXEL

    yogle schrieb:

    5. Den benötigten Speicher meines Prozesses?

    GetProcessMemoryInfo und hier PagefileUsage

    yogle schrieb:

    6. Die physikalisch verfügbaren/komplette Speichergröße auslesen?

    WMI mit Win32_PhysicalMemory



  • [edit] VERDAMMT, zu langsam gesucht 😡 [/edit]

    ad 1) ➡ GetSystemDefaultLangID()
    ad 2) ➡ GetProcessTime()
    ad 3) WMI ➡ Win32_Processor class
    ad 4) ➡ GetDeviceCaps():

    #include <iostream>
    #include <windows.h>
    
    int main( )
    {
        HWND desktop = GetDesktopWindow( );
        HDC dc = GetDC( desktop );
        std::cout << "You are using " << GetDeviceCaps( dc, BITSPIXEL )  << " bits per pixel." << std::endl;
        ReleaseDC( desktop, dc);
    }
    

    ad 5) ➡ GetProcessMemoryInfo()
    ad 6) WMI ➡ Win32_PhysicalMemory class

    Greetz, Swordfish



  • Danke vielmals für die Antworten! 🙂
    Muss jetzt alles erst mal testen. Bei weiteren (bestimmt auftretenden) Fragen poste ich nochmal.

    MfG
    yogle



  • Gint es denn eine Funktion die mir für den Rückgabewert von GetSystemDefaultLangID die Sprache in einen String umwandlen kann wie z.B. "Deutsch" oder so was?

    Mit GetProcessTimes hab ich so meine Probleme. Ich bekomme einfach keinen sinnvollen Wert heraus. Könnte mir da vl. jemand ein kurzes Beispiel zeigen, wie ich die Programmuptime bestimmen könnte?

    Und gibt es eine Funktion, mit der ich bestimmen könnte, ob mein Programm eine Konsolenanwendung oder eine GUI-Anwendung ist?

    Der Rest klappt soweit schon recht gut 🙂

    MfG
    yogle



  • yogle schrieb:

    Gint es denn eine Funktion die mir für den Rückgabewert von GetSystemDefaultLangID die Sprache in einen String umwandlen kann wie z.B. "Deutsch" oder so was?

    GetLocaleInfo
    http://msdn.microsoft.com/library/en-us/intl/nls_34rz.asp
    mit z.B. LOCALE_SLANGUAGE

    yogle schrieb:

    Mit GetProcessTimes hab ich so meine Probleme. Ich bekomme einfach keinen sinnvollen Wert heraus. Könnte mir da vl. jemand ein kurzes Beispiel zeigen, wie ich die Programmuptime bestimmen könnte?

    Für ein Beispiele siehe:
    http://www.codeproject.com/threads/getprocesstimes.asp

    yogle schrieb:

    Und gibt es eine Funktion, mit der ich bestimmen könnte, ob mein Programm eine Konsolenanwendung oder eine GUI-Anwendung ist?

    EIgentlich wird dies ja schon zur Compilerzeit festgelegt und kann z.B. via _CONSOLE macro abgefragt werden...

    Wenn Du es aber wirklich zur Laufzeit erfahren willst, ist das einfachste die Funktion GetConsoleTitle aufzurufen und schauen ob es erfolgreich war oder nicht...

    TCHAR szConsoleTitle[1024];
    DWORD dwRes = GetConsoleTitle(szConsoleTitle, 1024);
    if ( (dwRes == 0) && (GetLastError() == 6))
    {
      // Wir haben keine Console
    }
    

    Das ist aber nicht die 100%ig Lösung, da ja zu diesem Zeitpunkt die Console freigegeben sein könnte (FreeConsole).

    Die 100%ig Lösung ist in den PE-Header der EXE-Datei zuschauen und nach SubSystem-Console schauen (siehe PE-Spec).



  • Danke erstmal für die Antowrten.

    Jochen Kalmbach schrieb:

    Für ein Beispiele siehe:
    http://www.codeproject.com/threads/getprocesstimes.asp

    Diese Beispiel habe ich auch schon gesehen, ich verwende aber kein MFC.

    Ich habe mir eine kleine Funktion geschrieben, mit der ich den DWORD von GetTickCount in ein Datum/Zeit-String umwandlen kann. Bei mir hängt es aber bei der Umwandlung von der FILETIME-Struktur bishin zum DWORD. Könnte mir für das jemand vl. ein Beispiel zeigen?

    MfG
    yogle



  • Du bekommst kein FILETIME in ein DWORD...
    Im FILETIME steht die Startzeit Deiner Anwendung drin und nun bruachst Du nur noch die aktuelle Uhrzeit. Dann ziehst Du die zwei voneinander ab und hast die Laufzeit...
    - GetLocalTime
    - SystemTimeToFileTime
    FILETIME kannst Du in einen "ULARGE_INTEGER" kopieren dann beide "ULARGE_INTEGER" voneinander abziehen; wieder zurück nach FILETIME und dann mittels "FileTimeToSystemTime" wieder in eine lesbare Zeit.


Anmelden zum Antworten