CPU auslesen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Sereyanne

Betreff: CPU auslesen?

BeitragFr, Mai 14, 2010 11:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich schon wieder Wink
Ist es mit BB (Plus) möglich, auszulesen, welche CPU der Rechner hat bzw. wieviel GHz?
LG,
Sereyanne

Pummelie

BeitragFr, Mai 14, 2010 11:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur per DLL ist das möglich, suche einfach mal nach CPU Speed oder so, mach ich auch mal, habe vergessen wie die hieß Confused

Edit: So gefunden: https://www.blitzforum.de/foru...hlight=cpu
It's done when it's done.

Hagbard

BeitragFr, Mai 14, 2010 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß leider nicht, ob das in den anderen Windows-Versionen auch so ist, das müsstet du mal herauskriegen. Bei WinXP kannst du diese Daten aus der Registry auslesen:

HKEY_LOCAL_MACHINE --> HARDWARE --> DESCRIPTION --> System --> CentralProcessor --> 0

Dort hast du dann drei Zeichenfolgen, die dir Auskunft über Hersteller, Art des Prozessors usw. angibt.

So jetzt fragst du dich, wie greife ich auf die Registry zu?
Vielleicht auf diese Weise oder so, du wirst durch eine Suche aber noch andere Möglichkeiten finden. Viel Erfolg!

Sereyanne

BeitragFr, Mai 14, 2010 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow, das sieht spannend aus.
Vielen Dank, da hab ich wieder was zu tun!

Sereyanne

BeitragSa, Jun 05, 2010 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
*Thread wieder ausgrab*

Pummelies Text scheint mir für 3D zu sein, zumindest läuft es bei mir unter Plus nicht. Dennoch danke für den Versuch.

@Hagbard: Im Prinzip verweisen beide von dir verlinkten Threads im Endeffekt auf denselben Code.
https://www.blitzforum.de/foru...hp?t=14920
Da kommt er z. B. von x-pressive.
Wenn mir jetzt noch jemand auf die Sprünge helfen könnte, wo ich jetzt da in dem ganzen Wirrwarr die GHz auslese, das wäre echt super! Das Programm zeigt ja leider nichts an, da keine Schleife zum Anzeigen verwendet wird. Und ich krieg das auch noch nicht hin, mich da durchzuwurschteln. Crying or Very sad
Wie arbeite ich an der Stelle also weiter? Sorry bin noch kein so großer Pro auf dem Gebiet!
Freue mich auf eure Antworten!
Vielen lieben Dank,
Sereyanne

Pummelie

BeitragSo, Jun 06, 2010 9:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Miep, das was ich gepostet habe funktioniert (naja so halb, bei usage zeigt es mir -1% an Laughing )
Hier mal Code:
BlitzBasic: [AUSKLAPPEN]

Global dll$ = "blitzcpu.dll"
cpu$ = CPUName () ; CPU name auslesen
mhz = CPUSpeed () ; Megaherzanzahl auslesen (das wolltest du doch oder?) dauert eine sekunde...
Repeat
Print "CPU: "+ cpu$
Print" running at "+mhz+" MHz"
Print "Current CPU usage: "+CPUUsage ()+" %"
Delay 1000
Until (KeyHit (1)) Or (MouseHit (1))
End
Function CPUUsage ()
Return CallDLL (dll$, "_CPUPercent")
End Function
Function CPUSpeed ()
Return CallDLL (dll$, "_CPUSpeed")
End Function
Function CPUName$ ()
size = CallDLL (dll$, "_FindCPUNameLength")
If size
bank = CreateBank (size)
result = CallDLL (dll$, "_CPUName", bank)
If result
For a = 1 To size
cpu$ = cpu$ + Chr (PeekByte (bank, a - 1))
Next
EndIf
EndIf
FreeBank bank
Return cpu$
End Function


Wichtig ist, das du die dll immer neben deiner.bb datei (oder exe) hast, du kannst den Pfad aber auch mit der Variable dll$ anpassen.
It's done when it's done.

Sereyanne

BeitragSo, Jun 06, 2010 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Pummelie,
vielen Dank.
Dein erster Post verlinkte auf einen Thread, in dem ein Code gepostet ist, der nicht auf Plus läuft wegen "Funtion Locate not found". In 3D läuft er, liefert aber leider das selbe Ergebnis wie dein neuer Plus-fähige Code:
Es wird ein Wert von -1654 MHz angezeigt! Wie kann denn mein Rechner mit einem Minuswert laufen?? Außerdem sollten es 2,64 GHz sein! Ist auch nur eine Single Core CPU, also wo liegt das Problem?
Hast du da vielleicht noch eine Idee? Wie gesagt, ich blick bei dem Code nicht so ganz durch, zumal man ja auch nicht in die dlls reingucken kann!
LG,
Sereyanne

Pummelie

BeitragSo, Jun 06, 2010 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, die dll ist schon älter, möglich das sie nicht immer funktioniert...
It's done when it's done.

Sereyanne

BeitragSo, Jun 06, 2010 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist jetzt dein Ernst?? So ein Sch..!
Kann man die dll auf neuere Systeme anpassen oder was soll ich jetzt damit anfangen...?

Pummelie

BeitragSo, Jun 06, 2010 22:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage doch mal beim Autor an (sollte dieser noch anktiv sein).
It's done when it's done.

Hagbard

BeitragSo, Jun 06, 2010 23:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Und bezüglich meiner Lösung würde ich dir mal empfehlen, die Daten mit einem Registry-Editor erstmal anzusehen, damit du weißt, wie du die auslesen kannst...

Silver_Knee

BeitragSo, Jun 06, 2010 23:59
Antworten mit Zitat
Benutzer-Profile anzeigen
SET reicht nicht? bei mir kann man da immerhin:

Code: [AUSKLAPPEN]
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel
PROCESSOR_LEVEL=6
PROCESSOR_REVISION=170a
NUMBER_OF_PROCESSORS=4


auslesen

Sereyanne

BeitragMi, Jun 09, 2010 18:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@Hagbard: Ich weiß wie ich im Windows auf die Registry zugreife, und da steht auch schön ordentlich 2640 MHz drin. Ich weiß nur nicht, wie ich das im BP mache, aber da hab ich schon im entsprechenden Thread angefragt.

@Silver_Knee: sorry, damit kann ich jetzt irgendwie gar nichts anfangen... Embarassed Was soll das sein??

ozzi789

BeitragMi, Jun 09, 2010 19:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Das sind weitere Angaben zu deiner CPU,
X86 Architektur
4 Kerne usw
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Silver_Knee

BeitragMi, Jun 09, 2010 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
das sind umgebungsvariablen, da stehen immerhin diese informationen drin. Weiß ja nicht was du genau vom Prozessor auslesen willst

Sereyanne

BeitragDo, Jun 10, 2010 17:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will eigentlich nur die MHz von der CPU auslesen, steht auch in meinem allerersten Post drin... nur irgendwie komm ich nicht weiter, wie ich das nun mit Plus anstelle...

ozzi789

BeitragMo, Jun 14, 2010 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
hf

Code: [AUSKLAPPEN]
;.lib "Advapi32.dll"

;ADVAPI32_RegOpenKey%(hKeyParent%,SubKey$,phkResult*):"RegOpenKeyA"
;ADVAPI32_RegCloseKey%(hKey%):"RegCloseKey"
;ADVAPI32_RegFlushKey%(hKey%):"RegFlushKey"
;ADVAPI32_RegCreateKey%(hKeyParent%,SubKey$,phkResult*):"RegCreateKeyA"
;ADVAPI32_RegDeleteKey%(hKeyParent%,SubKey$):"RegDeleteKeyA"
;ADVAPI32_RegSetValueEx%(hKey%,ValueName$,Reserved%,nType%,Bytes*,size%):"RegSetValueExA"
;ADVAPI32_RegDeleteValue%(hKey%,ValueName$):"RegDeleteValueA"
;ADVAPI32_RegEnumKey%(hKey%,idx%,Key*,size%):"RegEnumKeyA"
;ADVAPI32_RegEnumValue%(hKey%,idx%,ValueName*,NameSize*,Reserved%,nType*,ValueBytes*,ValueSize*):"RegEnumValueA"
;ADVAPI32_RegQueryValueEx%(hKey%,ValueName$,Reserved%,nType*,ValueBytes*,ValueSize*):"RegQueryValueExA"


;---------------------------------------------------
; REQUIRES ADVAPI32.DECLS
;---------------------------------------------------


; REGISTRY ROOTS
Const HKEY_CLASSES_ROOT         = -2147483648
Const HKEY_CURRENT_USER         = -2147483647
Const HKEY_LOCAL_MACHINE      = -2147483646
Const HKEY_USERS         = -2147483645

; RETURN VALUE CONSTANTS
Const ERROR_SUCCESS          = 0
Const ERROR_EOF            = 259     ; NO MORE ENTRIES IN KEY

; DATA TYPES FOR KEYS
Const REG_SZ            = 1   ; DATA STRING
Const REG_EXPAND_SZ         = 2
Const REG_BINARY         = 3   ; BINARY DATA IN ANY FORM.
Const REG_DWORD            = 4    ; A 32-BIT NUMBER.
Const REG_MULTI_SZ         = 7 

; GLOBAL VAR HOLDING LAST ERROR #
Global reg_lasterr         = ERROR_SUCCESS



Print Reg_GetOSVersion$
Print Reg_GetOSLanguage$

Print Reg_GetValue(HKEY_LOCAL_MACHINE,"HARDWARE\DESCRIPTION\System\CentralProcessor\0","~MHz")

WaitKey

;---------------------------------------------------
; ENUMERATES THE KEYS CONTAINED IN THE PASSED SUBKEY
; AND RETURNS THEM AS A DELIMITED STRING IN THE FORMAT:
; KEY=VALUE|KEY=VALUE|KEY=VALUE
;---------------------------------------------------
Function Reg_EnumValues$(RegKey%,SubKey$,delim$="|\",types=False)
   
   Local cRetVal$ = "\",key$="\",val$="\"
   Local keybank  = CreateBank(100),keybanksize=CreateBank(4),valbank=CreateBank(100),valbanksize=CreateBank(4),typebank=CreateBank(4)
   Local char     = 0
   Local nIdx     = 0
   Local nType    = 0

   ; OPEN THE KEY
   Local hKey = Reg_OpenKey(RegKey,SubKey$)
   If hKey<>-1   
      ; READ IN THE VALUES
      Repeat
         ; INIT THE BANKS
         PokeInt (typebank,0,0)
         PokeInt (valbanksize,0,100)
         PokeInt (keybanksize,0,100)
      
         ; CLEAR OUT THE TEMP VALUES
         key$="\"
         val$="\"
         
         If ADVAPI32_RegEnumValue(hKey,nIdx,keybank,keybanksize,0,typebank,valbank,valbanksize)<>ERROR_EOF
            nType = PeekInt(typebank,0)
            
            ; TACK ON THE DELIMITER
            If cRetVal$<>"\"
               cRetVal$ = cRetVal$+delim$
            EndIf

            ; BUILD THE KEY NAME
            For char = 0 To PeekInt (keybanksize,0)-1
               If PeekByte (keybank,char)=0 Then Exit
               key$ = key$ + Chr(PeekByte(keybank,char))
            Next

            Select nType
               ; READ IN A STRING OR BINARY VALUE
               Case REG_SZ, REG_BINARY, REG_EXPAND_SZ
                  ; BUILD THE VALUE
                  For char = 0 To PeekInt (valbanksize,0)-1
                     If PeekByte (valbank,char) = 0 Then Exit
                     val$ = val$ + Chr(PeekByte (valbank,char))
                  Next
               ; READ IN AN INTEGER
               Case REG_DWORD
                  val$ = PeekInt(valbank,0)                  
            End Select

            If types
               cRetVal$ = (cRetVal$+PeekInt(typebank,0)+";\"+key$+"=\"+val$)
            Else
               cRetVal$ = (cRetVal$+key$+"=\"+val$)
            EndIf
         Else
            Exit
         EndIf         
         
         nIdx=nIdx+1
      Forever
      Reg_CloseKey(hKey)
   EndIf
   
   FreeBank typebank
   FreeBank valbank
   FreeBank valbanksize
   FreeBank keybank
   FreeBank keybanksize
   
   Return cRetVal$

End Function


;---------------------------------------------------
; ENUMERATES THE KEYS CONTAINED IN THE PASSED SUBKEY
; AND RETURNS THEM AS A DELIMITED STRING IN THE FORMAT:
; KEY|KEY|KEY
;---------------------------------------------------
Function Reg_EnumKeys$(RegKey%,SubKey$,delim$="|\")

   Local cRetVal$ = "\"
   Local keybank  = CreateBank(100)
   Local nIdx     = 0

   ; OPEN THE KEY FIRST   
   Local hKey=Reg_OpenKey(RegKey,SubKey$)
   If hKey <> -1   
      Repeat         
         If ADVAPI32_RegEnumKey(hKey,nIdx,keybank,BankSize(keybank))<>ERROR_EOF         
            ; TACK ON THE DELIMITER
            If cRetVal$ <> "\"
               cRetVal$=cRetVal$+delim$
            EndIf
            
            For char = 0 To BankSize (keybank)-1
               If PeekByte (keybank,char)=0 Then Exit
               cRetVal$ = cRetVal$ + Chr(PeekByte (keybank,char))
            Next
         Else
            Exit
         EndIf
         
         nIdx = nIdx + 1
      Forever
      Reg_CloseKey(hKey)
   EndIf

   FreeBank keybank
   Return cRetVal$

End Function


;---------------------------------------------------
; DELETES A VALUE FROM THE REGISTRY.  RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_DeleteValue%(RegKey%,SubKey$,ValueName$)
   
   Local hKey    = Reg_OpenKey(RegKey,SubKey$)
   Local lRetVal = False
   If hKey <> -1
      Local nRslt = ADVAPI32_RegDeleteValue(hKey,ValueName$)      
      If (nRslt = ERROR_SUCCESS)
         lRetVal = True
      Else
         reg_lasterr = nRslt
      EndIf
      Reg_CloseKey(hKey)
   EndIf
   Return lRetVal

End Function


;---------------------------------------------------
; GETS A VALUE FROM THE REGISTRY AND RETURNS IT AS A STRING. 
; WILL RETURN THE PASSED DEFAULT IF THE VALUE REQUESTED IS
; NOT FOUND IN THE REGISTRY.
;---------------------------------------------------
Function Reg_GetValue$(RegKey%,SubKey$,ValueName$,Dflt$="\",types=False)
   
   Local cRetVal$ = Dflt$
   Local hKey     = Reg_OpenKey(RegKey,SubKey$)
   Local char     = 0
   Local nType    = 0
   
   ; OPEN THE KEY
   If hKey<>-1
      Local valbank     = CreateBank(100)
      Local valbanksize = CreateBank(4)
      Local typebank    = CreateBank(4)
   
      ; INIT THE BANKS
      PokeInt (typebank,0,0)
      PokeInt (valbanksize,0,100)
   
      Local nRslt = ADVAPI32_RegQueryValueEx(hKey,ValueName$,0,typebank,valbank,valbanksize)
      
      If nRslt = ERROR_SUCCESS
         cRetVal$ = "\"
         nType = PeekInt(typebank,0)
         
         ; BUILD THE VALUE
         Select nType
            ; READ IN A STRING OR BINARY VALUE
            Case REG_SZ, REG_BINARY, REG_EXPAND_SZ
               ; BUILD THE VALUE
               For char = 0 To PeekInt (valbanksize,0)-1
                  If PeekByte (valbank,char) = 0 Then Exit
                  cRetVal$ = cRetVal$ + Chr(PeekByte(valbank,char))
               Next
            ; READ IN AN INTEGER
            Case REG_DWORD
               cRetVal$ = PeekInt(valbank,0)                  
         End Select
         
         ; TACK ON THE TYPE IF REQUESTED
         If types Then cRetVal$ = nType + ";\" + cRetVal$
      Else
         reg_lasterr = nRslt
      EndIf
      Reg_CloseKey(hKey)
   EndIf
   
   Return cRetVal$
   
End Function


;---------------------------------------------------
; SETS A VALUE IN THE REGISTRY. DEFAULTS TO TYPE STRING,
; BUT CAN PASS REG_DWORD AND REG_BINARY. RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_SetValue%(RegKey%,SubKey$,ValueName$,Value$,nType=REG_SZ)
   
   Local hKey    = Reg_OpenKey(RegKey,SubKey$)
   Local lRetVal = False
   If hKey <> -1
      Local valbank
      
      ; CREATE A BANK TO HOLD THE INFO
      Select nType
         Case REG_SZ, REG_BINARY, REG_EXPAND_SZ
            valbank = CreateBank(Len(Value$))            
            For i = 1 To Len(Value$)
               PokeByte(valbank,i-1,Asc(Mid(Value$,i,1)))
            Next            
         Case REG_DWORD
            valbank = CreateBank(4)
            PokeInt (valbank,0,Int(Value$))
      End Select
   
      Local nRslt = ADVAPI32_RegSetValueEx(hKey,ValueName$,0,nType,valbank,BankSize(valbank))
      
      If nRslt = ERROR_SUCCESS 
         lRetVal = True
      Else
         reg_lasterr = nRslt
      EndIf
      
      Reg_CloseKey(hKey)
   EndIf
   
   Return lRetVal
   
End Function


;---------------------------------------------------
; DELETES THE PASSED KEY FROM THE REGISTRY.  RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_DeleteKey%(RegKey%,KeyName$)
   reg_lasterr=ERROR_SUCCESS
   Local nRslt=ADVAPI32_RegDeleteKey(RegKey,KeyName$)
   
   If nRslt<>ERROR_SUCCESS
      reg_lasterr=nRslt
   EndIf
   
   Return (nRslt=ERROR_SUCCESS)
End Function


;---------------------------------------------------
; RETURNS THE REGISTRY HANDLE OR -1 IF FAILED.
;---------------------------------------------------
Function Reg_CreateKey%(RegKey%,KeyName$)

   reg_lasterr   = ERROR_SUCCESS
   Local regbank = CreateBank(4)
   Local hKey    = -1

   Local nRslt = ADVAPI32_RegCreateKey (RegKey%,KeyName$,regbank)

   If nRslt = ERROR_SUCCESS
      hKey = PeekInt(regbank,0)
   Else
      reg_lasterr = nRslt
   EndIf

   FreeBank regbank   

   Return hKey

End Function


;---------------------------------------------------
; RETURNS THE REGISTRY HANDLE OR -1 IF FAILED
;---------------------------------------------------
Function Reg_OpenKey%(RegKey%,KeyName$)
   
   reg_lasterr   = ERROR_SUCCESS
   Local regbank = CreateBank(4)
   Local hKey    = -1

   Local nRslt = ADVAPI32_RegOpenKey(RegKey%,KeyName$,regbank)

   If nRslt = ERROR_SUCCESS
      hKey=PeekInt(regbank,0)
   Else
      reg_lasterr=nRslt
   EndIf

   FreeBank regbank

   Return hKey

End Function


;---------------------------------------------------
; CLOSES THE REGISTRY KEY.  RETURNS TRUE/FALSE.
;---------------------------------------------------
Function Reg_CloseKey%(RegKey%)
   
   reg_lasterr = ERROR_SUCCESS
   Local nRslt = ADVAPI32_RegCloseKey(RegKey)
   
   If nRslt <> ERROR_SUCCESS Then reg_lasterr=nRslt
   
   Return (nRslt = ERROR_SUCCESS)

End Function


;---------------------------------------------------
; RETURNS TRUE IF THE KEY EXISTS
;---------------------------------------------------
Function Reg_IsKey%(RegKey%,KeyName$)

   Local hKey    = Reg_OpenKey(RegKey,KeyName$)
   Local lRetVal = False

   If hKey<>-1 Then Reg_CloseKey(hKey) : lRetVal = True
   
   Return lRetVal

End Function



;---------------------------------------------------




;---------------------------------------------------
; FUNCTION: RETURNS OS LANGUAGE
;---------------------------------------------------
Function Reg_GetOSLanguage$()

   key$ = "Control Panel\International\"

   KeyHandle = Reg_OpenKey(HKEY_CURRENT_USER,key$)
   If KeyHandle <> -1 Then
      ;GERMAN = \"DEU\"
      value$  = Reg_GetValue(HKEY_CURRENT_USER,key$,"sLanguage\")
      Reg_CloseKey(KeyHandle)
   Else
      ; DID NOT FIND - FAIL SILENTLY
      value$ = "Unknown\"
   End If
   
   Return  value$

End Function


;---------------------------------------------------
; FUNCTION: RETURNS OS VERSION
;---------------------------------------------------
Function Reg_GetOSVersion$()

   key$ = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\"

   KeyHandle% = Reg_OpenKey(HKEY_LOCAL_MACHINE,key$)
   If KeyHandle <> -1 Then
      ;WIN XP = \"Microsoft Windows XP\"
      value$  = Reg_GetValue(HKEY_LOCAL_MACHINE,key$,"ProductName\")
      Reg_CloseKey(KeyHandle)
   Else
      ; DID NOT FIND - FAIL SILENTLY
      value$ = "Unknown\"
   EndIf

   Return  value$

End Function


;---------------------------------------------------
; FUNCTION: REGISTERS A FILE EXTENSION TO THE .EXE
;---------------------------------------------------
Function Reg_RegisterFileType(extension$,exeName$)

   If Mid(extension$,1,1) <> ".\" Then extension$ = ".\" + extension$
   
   extension$ = Lower(extension$)
   
   typeName$  = Right(extension$,3) + "file\"
   
   If Right(exeName$,4) <> ".exe\" Then exeName$ = exeName$ + ".exe\"

   KeyHandle% = Reg_CreateKey (HKEY_CLASSES_ROOT,extension$)
   If KeyHandle <> -1 Then
      Reg_SetValue (HKEY_CLASSES_ROOT,extension$,"\",typeName$,REG_SZ)   

      Reg_CloseKey(KeyHandle)
   End If

   KeyHandle% = Reg_CreateKey (HKEY_CLASSES_ROOT,typeName + "\shell\open\command\" )
   If KeyHandle <> -1 Then
      Reg_SetValue (HKEY_CLASSES_ROOT,typeName + "\shell\open\command\","\",Chr(34) + CurrentDir() + exeName$ + Chr(34) + " %1\",REG_SZ)   
      Reg_CloseKey(KeyHandle)
   End If

   KeyHandle% = Reg_CreateKey (HKEY_CLASSES_ROOT,typeName + "\DefaultIcon\" )
   If KeyHandle <> -1 Then
      Reg_SetValue (HKEY_CLASSES_ROOT,typeName + "\DefaultIcon\","\",Chr(34) + CurrentDir() + exeName$ + Chr(34) + ",0\",REG_SZ)   
      Reg_CloseKey(KeyHandle)
   End If

End Function
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Sereyanne

BeitragFr, Jun 18, 2010 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Herzlichen Dank, so weit war ich schon, und jetzt weiß ich auch wie ich damit arbeite!
Ist somit erledigt, danke an alle!

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group