Computer Daten auslesen [Fehler beim schreiben in eine .txt]



  • Last-Boyscout schrieb:

    Deli1 schrieb:

    Ich glaube, das was du suchst, ist die Funktion c_str() 🙂

    Also:

    string outfile = ComputerName + ".txt";
    ofstream Computerdaten(outfile.c_str(), ios::out); // anstatt ofstream Computerdaten(outfile, ios::out);
    

    So was ähnliches habe ich schon probiert.

    Bekomme aber diese Fehlermeldung:
    invalid operands of types `char[16]' and `const char[5]' to binary `operator+'

    gruß
    Last-Boyscout

    datentypen anpasssen.
    gruß
    t.l.w.



  • Wie 😉

    Oder besser gesagt, wie mach ich das richtig?

    gruß
    Last-Boyscout



  • Hab gerade keinen Compiler hier. Das geht in etwa so:

    string ComputerName;
    ComputerName.resize(MAX_COMPUTERNAME_LENGTH + 2);
    DWORD cbComputerName = MAX_COMPUTERNAME_LENGTH +1;
    if ( GetComputerName ( &ComputerName[0], &cbComputerName ) == false )
    {
        cout << "Kagge!" << endl;
        ComputerName.clear();
    }
    else
    ComputerName += ".txt";
    

    Geht aber nur gut, wenn du nicht Unicode compilierst. Sonst gibts eventuell nen Pufferüberlauf ( 1 wchar_t Zeichen benötigt mehr Bytes als ein char ). Besser, gleich TCHAR nehmen, bzw. wstring.



  • es ist illegal direkt in den string einzulesen!!! du musst den umweg über ein std::vector gehen!!!



  • !!! schrieb:

    es ist illegal direkt in den string einzulesen!!! du musst den umweg über ein std::vector gehen!!!

    Kommt dann die Bohlizei? 😃

    Habe festgestellt, das bei meinem Beispiel Schrott rauskommt. Hier ne Korrektur:

    string computer_name;
    	char buf[MAX_COMPUTERNAME_LENGTH +1] = {0};
    	DWORD cbComputerName = sizeof(buf); 
    	if ( GetComputerNameA ( buf, &cbComputerName ) == false ) 
    	{ 
    		cout << "Kagge!" << endl; 
    		return 1;
    
    	} 
    	else 
    	{
    		computer_name = buf;
    		cout << computer_name << " is a computer !" << endl;
    		computer_name += ".txt";
    	}
    
    	cout << "I am a textfile name now :( " <<  computer_name << endl;
    
    	return 0;
    

    Nen vector kann man sich sparen. MfG,
    t.l.w.



  • Nen vector kann man sich sparen.

    nur wenn man gegen den c++ standard anproggt 😃



  • achso hast jetzt ein char array genommen. dann ist es ja okay.



  • class Win32_BIOS : CIM_BIOSElement
    {
      uint16   BiosCharacteristics[];
      string   BIOSVersion[];
      string   BuildNumber;
      string   Caption;
      string   CodeSet;
      string   CurrentLanguage;
      string   Description;
      string   IdentificationCode;
      uint16   InstallableLanguages;
      datetime InstallDate;
      string   LanguageEdition;
      String   ListOfLanguages[];
      string   Manufacturer;
      string   Name;
      string   OtherTargetOS;
      boolean  PrimaryBIOS;
      datetime ReleaseDate;
      string   SerialNumber;
      string   SMBIOSBIOSVersion;
      uint16   SMBIOSMajorVersion;
      uint16   SMBIOSMinorVersion;
      boolean  SMBIOSPresent;
      string   SoftwareElementID;
      uint16   SoftwareElementState;
      string   Status;
      uint16   TargetOperatingSystem;
      string   Version;
    };
    

    Hi, mir fehlen noch die Infos zum Service Tag von Dell.
    Ich habe hier eine Bios Klasse von der MSDN von Microsoft.
    Bräuchte aber noch Hilfe mit dem Umgang damit.

    Eigentlich interessiert mich da der string Serial Number am meisten!^^

    Wie binde ich diese Klasse überhaupt richtig an, sodass ich die Elemente richtig ansprechen kann?



  • Last-Boyscout schrieb:

    class Win32_BIOS : CIM_BIOSElement
    {
      uint16   BiosCharacteristics[];
      string   BIOSVersion[];
      string   BuildNumber;
      string   Caption;
      string   CodeSet;
      string   CurrentLanguage;
      string   Description;
      string   IdentificationCode;
      uint16   InstallableLanguages;
      datetime InstallDate;
      string   LanguageEdition;
      String   ListOfLanguages[];
      string   Manufacturer;
      string   Name;
      string   OtherTargetOS;
      boolean  PrimaryBIOS;
      datetime ReleaseDate;
      string   SerialNumber;
      string   SMBIOSBIOSVersion;
      uint16   SMBIOSMajorVersion;
      uint16   SMBIOSMinorVersion;
      boolean  SMBIOSPresent;
      string   SoftwareElementID;
      uint16   SoftwareElementState;
      string   Status;
      uint16   TargetOperatingSystem;
      string   Version;
    };
    

    Hi, mir fehlen noch die Infos zum Service Tag von Dell.
    Ich habe hier eine Bios Klasse von der MSDN von Microsoft.
    Bräuchte aber noch Hilfe mit dem Umgang damit.

    Eigentlich interessiert mich da der string Serial Number am meisten!^^

    Wie binde ich diese Klasse überhaupt richtig an, sodass ich die Elemente richtig ansprechen kann?

    Hat einer dazu eine Idee?
    Hab gegoogelt, verschiedene Threads angeguckt und finde jedesmal ein schönes vb.net Beispiel.

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
    
    Set colBIOS = objWMIService.ExecQuery _
    ("Select * from Win32_BIOS")
    
    For each objBIOS in colBIOS
    Wscript.Echo "Build Number: " & objBIOS.BuildNumber
    Wscript.Echo "Current Language: " & objBIOS.CurrentLanguage
    Wscript.Echo "Installable Languages: " & objBIOS.InstallableLanguages
    Wscript.Echo "Manufacturer: " & objBIOS.Manufacturer
    Wscript.Echo "Name: " & objBIOS.Name
    Wscript.Echo "Primary BIOS: " & objBIOS.PrimaryBIOS
    Wscript.Echo "Release Date: " & objBIOS.ReleaseDate
    Wscript.Echo "Serial Number: " & objBIOS.SerialNumber
    Wscript.Echo "SMBIOS Version: " & objBIOS.SMBIOSBIOSVersion
    Wscript.Echo "SMBIOS Major Version: " & objBIOS.SMBIOSMajorVersion
    Wscript.Echo "SMBIOS Minor Version: " & objBIOS.SMBIOSMinorVersion
    Wscript.Echo "SMBIOS Present: " & objBIOS.SMBIOSPresent
    Wscript.Echo "Status: " & objBIOS.Status
    Wscript.Echo "Version: " & objBIOS.Version
    For i = 0 to Ubound(objBIOS.BiosCharacteristics)
    Wscript.Echo "BIOS Characteristics: " & _
    objBIOS.BiosCharacteristics(i)
    Next
    Next
    

    Sowas habe ich leider aber nicht ansatzweise in C++ gefunden.
    Hat da keiner eine Idee?

    gruß
    Last-Boyscout



  • Hallo,

    das ist etwas komplizierter in C++, siehe z.B. unter "BIOS Seriennummer mit WMI auslesen (Win32_BIOS-Klasse)" hier:

    http://fatman98.fa.funpic.de/builder_tricks.php

    Musst du natürlich etwas anpassen (AnsiString gibt's z.B. nicht in Visual C++), und die richtigen Header einbinden usw...

    MfG,

    Probe-Nutzer


Anmelden zum Antworten