Avatar billede maluso77 Nybegynder
26. marts 2003 - 11:29 Der er 21 kommentarer og
1 løsning

scanning af hardware

Jeg leder efter et program der kan scanne hardwaren i min maskine.
- Jeg har tidligere set et fra Plextor, da jeg havde problemmer med min brænder.

Jeg gerne se noget kode for dette eller link til hvor jeg kan se det.

Nu har jeg skrevet i Java topic, men det gør ikke noget hvis det er i andre sprog.

Det skal kunne finde Processor, ram, netkort, grafikkort, HD og hvad har vi ellers i maskinen. Et ekstra plus ville være hvis det kunne finde evt. drives for enhederne.

Og hvis dette spørgsmål ligger forkert, så plzz fortæl mig hvor det så skal være.
Mads
Avatar billede arne_v Ekspert
26. marts 2003 - 11:33 #1
Java er næppe der rette sprog til den type program !
Avatar billede maluso77 Nybegynder
26. marts 2003 - 11:36 #2
Som jeg skrev Du må gerne giv bud på et andet sprog
Avatar billede Slettet bruger
26. marts 2003 - 11:47 #3
Hvis det er en Windows-maskine, kan du tilgå win32 API'en gennem sprog som,
C++, C# og Visual Basic. Læs mere om win32 API'en her:

http://msdn.microsoft.com/library
Avatar billede Slettet bruger
26. marts 2003 - 11:50 #4
Der er en masse kode eksempler i alle tre sprog. Men du skal selvfølgelig selv stykke det sammen.
Avatar billede disky Nybegynder
26. marts 2003 - 11:52 #5
Det kan du kun fra java hvis du anvender properitær underliggende kode.

Java har ikke direkte adgang til hardwaren.

Anvend i stede C++ eller lignende.
Avatar billede viht Nybegynder
26. marts 2003 - 11:52 #6
Det skal du lave i Windows C. Jeg har lavet en JNI klasse der kan hente en helvedes masse, se: http://jollerbarn.dk/download/temp.html
Koden er i C/C++ og assembler og består overvejende af Windows C.
De indsamlede informationer formateres i XML og transformeres derefter til HTML.

F.eks. for at hente processornavnet:
string getCpuName() {

  unsigned long eax, ebx, ecx, edx;

  asm(".byte 0x0f, 0xa2" : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (0));
  char cpuvendor[64] = "";
  int ch = 0;
  for(int i = 0; i < 4; i++) {
      cpuvendor[ch] = ebx >> (8*i);
      ch++;
  }

  for(int i = 0; i < 4; i++) {
      cpuvendor[ch] = edx >> (8*i);
      ch++;
  }

  for(int i = 0; i < 4; i++) {
      cpuvendor[ch] = ecx >> (8*i);
      ch++;
  }

  string cpuname = cpuvendor;
  cpuname = cpuname + " ";
  for(int i = 0x80000002; i <= 0x80000004; i++) {
      unsigned long eax, ebx, ecx, edx;
      asm("cpuid": "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (i));

      char temp[17];
      temp[16] = '\0';
 
      for(int i = 0; i < 4; i++){
        temp[i] = eax >> (8*i);
        temp[i+4] = ebx >> (8*i);
        temp[i+8] = ecx >> (8*i);
        temp[i+12] = edx >> (8*i);
      }
  cpuname += temp;
  }
}
Avatar billede disky Nybegynder
26. marts 2003 - 11:55 #7
viht:
Netop properitært kode.

p.s. Hvor meget af det installerede software har du licens til ?
Hvis du ikke har, er det nok ikke smart at reklamere med du har det installeret.
Avatar billede arne_v Ekspert
26. marts 2003 - 11:56 #8
Jeg vil nok kalde det en typisk C opgave.
Avatar billede viht Nybegynder
26. marts 2003 - 12:06 #9
Den html jeg poster her er ikke genereret fra min maskine, men fra en tidligere undervisers. Jeg går ud fra han har licenserne i orden :)
Avatar billede arne_v Ekspert
26. marts 2003 - 12:10 #10
disky>

native og proprietær er ikke synonymer
Avatar billede viht Nybegynder
26. marts 2003 - 12:14 #11
Syntakshuggere :)
Avatar billede maluso77 Nybegynder
26. marts 2003 - 12:14 #12
takker for de hurtige svar. SÅ må jeg jo bare se om jeg kan finde ud af at få de rigtige ting frem.
Avatar billede disky Nybegynder
26. marts 2003 - 12:30 #13
arne:
Og hvad så ?

Der skal bruges NATIVE PROPERITÆRT kode for at kunne gøre det fra java.
Avatar billede arne_v Ekspert
26. marts 2003 - 12:34 #14
Nej man skal bruge native platform specifikt kode for at gøre
det i Java.

Det ville være properitært, hvis man skulle bruge et bestemt
library fra Microsoft.
Avatar billede disky Nybegynder
26. marts 2003 - 12:55 #15
Arne hvorfor vidste jeg bare du ville jokke videre i det.

Det skal du også det 'library' hedder WINDOWS !
Og Intel specifik assembler kode.

Når det er native specifikt er det properitært da det ikke længere er platformsuafhængigt.

Du kan jo ikke flytte det over på en sparc maskine og afvikle det, eller på min embeddede java computer.
Avatar billede arne_v Ekspert
26. marts 2003 - 13:04 #16
Prøv lige og læs hans kode der er ikke nogle Windows kald i det

Og at noget er x86 specifikt gør det ikke til properitært.

Properitært er kun hvis det bruger et library/framework/algoritme
som ejes af nogen.

Med din definition af properitær så vil XFree86 f.eks. være
properitært !

Og uden at have spurgt dem så tror jeg at de gerne vil have frabedt sig den
betegnelse.
Avatar billede maluso77 Nybegynder
26. marts 2003 - 13:54 #17
arne_v du er endnu ikke kommet med et forslag på et program. Er det muligt at du kunne komme med et forslag efter som du sabler alt og alle.
Håber ikke at træde dig over tæerne, men jeg ville bare gerne finde noget der kunne hjælpe mig, ikke en længere forklaring om ting jeg ikke spurgte om.
Mads

Forresten er der nogen der kender til et program ala, dxdiag (bare med flere oplysninger og færrer oplysninger end Microsoft Systemoplysninger 7.0)?
Avatar billede arne_v Ekspert
26. marts 2003 - 14:04 #18
Jeg er bange for at min ekspertise ikke rækker til at at fiske
hardware information ud af en x86 box.

Havde det været en VAX havde det været en anden sag.
Avatar billede maluso77 Nybegynder
26. marts 2003 - 14:11 #19
okay, takker.
Avatar billede viht Nybegynder
26. marts 2003 - 14:27 #20
Fortæl mig hvilke informationer du vil have hevet ud, så fortæller jeg dig hvordan du gør.
Avatar billede maluso77 Nybegynder
27. marts 2003 - 10:34 #21
Jeg vil gerne finde.
CPU (type, størrelse), Netkort(MAC adresse, model, fabrikant, hastighed), Grafikkort(Ram, AGP-slot), IDE /SCSI slots (hvad der er på dem), Bundkort( Model, fabrikant, Ram type, hvad der er af slots osv)
hvilken OS og hvis muligt hvilke drivere der er installeret på de oplyste enheder.
Output må gerne smides i en komma separeret fil.
Avatar billede viht Nybegynder
27. marts 2003 - 10:58 #22
CPU, har du ovenfor.

Netkort: navnet ligger her:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards
IP info ligger her:
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces
MAC adresser, ingen anelse.

Mht. netværksinfo ville det være nemme at grabbe konsoloutput for ipconfig.

Bundkort: ingen anelse. Det er uden tvivl assemblerkode.

Grafikkort: Win32 metoden:
BOOL EnumDisplayDevices(
  LPCTSTR lpDevice,                // device name
  DWORD iDevNum,                  // display device
  PDISPLAY_DEVICE lpDisplayDevice, // device information
  DWORD dwFlags                    // reserved
);
Virker dog kun i MSVC++, metoden er ikke understøttet af gnu APIer.

OS: rimelig bøvlet:
string getOS() {

  OSVERSIONINFOEX osvi;
  BOOL bOsVersionInfoEx;
  string operativsystem;

  ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

  if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) ) {
      // If OSVERSIONINFOEX doesn't work, try OSVERSIONINFO.
      osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
      if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
        return FALSE;
  }

  switch (osvi.dwPlatformId) {
      // Tests for Windows NT product family.
      case VER_PLATFORM_WIN32_NT:
        if ( osvi.dwMajorVersion <= 4 )
            operativsystem = "Microsoft Windows NT";

        if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
            operativsystem = "Microsoft Windows 2000";

        if( bOsVersionInfoEx ) {// Use information from GetVersionEx.
            // Test for the workstation type.
            if ( osvi.wProductType == VER_NT_WORKSTATION ) {
              if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 && osvi.wSuiteMask & VER_SUITE_PERSONAL )
                  operativsystem = "Microsoft Windows XP Home Edition";
              else
                  operativsystem = "Microsoft Windows XP Professional";
            }

            // Test for the server type.
            else if ( osvi.wProductType == VER_NT_SERVER ) {
              if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 && osvi.wSuiteMask & VER_SUITE_DATACENTER )
                  operativsystem = "Microsoft Windows .NET DataCenter Server";

              else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                  if( osvi.dwMajorVersion == 4 )
                    operativsystem = "Microsoft Windows .NET Advanced Server";
                  else
                    operativsystem = "Microsoft Windows .NET Enterprise Server";

              else if ( osvi.wSuiteMask == VER_SUITE_BLADE )
                  operativsystem = "Microsoft Windows .NET Web Server";
              else
                  operativsystem = "Microsoft Windows .NET Server";
            }
        }
        else  // Use the registry on early versions of Windows NT.
        {
            HKEY hKey;
            char szProductType[BUFSIZE];
            DWORD dwBufLen=BUFSIZE;
            LONG lRet;

            lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
              "SYSTEM\\CurrentControlSet\\Control\\ProductOptions",
              0, KEY_QUERY_VALUE, &hKey );
            if( lRet != ERROR_SUCCESS )
                return FALSE;

            lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,
              (LPBYTE) szProductType, &dwBufLen);
            if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )
                return FALSE;

            RegCloseKey( hKey );

            if ( lstrcmpi( "WINNT", szProductType) == 0 )
              operativsystem += "Professional ";
            if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
              operativsystem += "Server ";
            if ( lstrcmpi( "SERVERNT", szProductType) == 0 )
              operativsystem += "Advanced Server ";
        }

        // Display version, service pack (if any), and build number.

        if ( osvi.dwMajorVersion <= 4 )
        {
            operativsystem += "version: ";
            operativsystem += osvi.dwMajorVersion;
            operativsystem += ".";
            operativsystem += osvi.dwMinorVersion;
            operativsystem += " ";
            operativsystem += osvi.dwMinorVersion;
            operativsystem += " ";
            operativsystem += osvi.szCSDVersion;
            operativsystem += "(Build: ";
            operativsystem += osvi.dwBuildNumber; //& 0xFFFF;
        }
        else
        {
            operativsystem += " ";
            operativsystem += osvi.szCSDVersion;
            operativsystem += "(Build: ";
            operativsystem += itos(osvi.dwBuildNumber);// & 0xFFFF;
            operativsystem += ")";
        }
        break;

      // Test for the Windows 95 product family.
      case VER_PLATFORM_WIN32_WINDOWS:

        if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
        {
            if ( osvi.szCSDVersion[1] == 'C' || osvi.szCSDVersion[1] == 'B' )
                operativsystem = "Microsoft Windows 95 OSR2";
            else
                operativsystem = "Microsoft Windows 95";

        }

        if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10) {
            if ( osvi.szCSDVersion[1] == 'A' )
                operativsystem = "Microsoft Windows 98 SE";
            else
                operativsystem = "Microsoft Windows 98";

        }

        if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90) {
            operativsystem = ("Microsoft Windows Millennium Edition ");
        }
        break;
  }
  return operativsystem;
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester