Seite 40 von 43
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 26.04.2017 14:58
von RSBasic
Dann funktioniert der Code von nco2k & WeePe nur unter 64 Bit. Den Code müsste man auch für 32 Bit anpassen.
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 26.04.2017 15:27
von ts-soft
Wie wäre es denn, mit diesem Code?
GetWindowsProductKey
http://www.purebasic.fr/german/viewtopi ... 99#p282999
Funktioniert in 32- und 64-Bit, sowie ASCII und Unicode, seit 2010 ohne Fehler

Re: WinAPI Library (Snippets) (1.077)
Verfasst: 26.04.2017 15:31
von RSBasic
Jupp, dann ersetze ich den durch deinen Code.

Re: WinAPI Library (Snippets) (1.077)
Verfasst: 26.04.2017 15:35
von tft
Ja .. danke, Funktioniert tip top.
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 10.07.2017 00:44
von TheCube
Gibt es eine Möglichkeit die Anzahl -echter- Kerne zu ermitteln ?
Weil ... der folgende Code aus der WinAPI-Lib zeigt bei meinem 2-Kerner mit HT ja 4 Kerne an,
was ja irgendwie nicht falsch, aber auch nicht wirklich richtig ist.
Code: Alles auswählen
Procedure.l cpu_count()
Protected SI.SYSTEM_INFO
GetSystemInfo_ (@SI)
ProcedureReturn SI\dwNumberOfProcessors
EndProcedure
MessageRequester("","Anzahl der Prozessoren: "+Str(cpu_count()),0)
Das "Prozessor-Spezifikationen ermitteln" der WinAPI-Lib gibt mir (glaube ich) leider nicht die nötige Zusatzinfo.
//EDIT 10.07.:
Nach MSDN (
http://msdn.microsoft.com/en-us/library ... S.85).aspx) wäre GetLogicalProcessorInformation() eine Möglichkeit.
Werde die Tage mal mein Glück versuchen ... bin da nicht so firm.
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 10.07.2017 17:56
von Shardik
Es ist nicht mehr nötig, die Anzahl
logischer CPUs mit API-Funktionen zu ermitteln, weil es seit PB 5.10 die native Funktion CountCPUs() gibt, die dies plattform-übergreifend erledigt...
Nein, GetLogicalProcessorInformation() ermittelt auch nur die logischen Prozessoren. Der richtige Weg laut
MSDN wäre die Verwendung von GetLogicalProcessorInformation
Ex():
MSDN hat geschrieben:Note For information about the physical processors shared by logical processors, call GetLogicalProcessorInformationEx with the RelationshipType parameter set to RelationProcessorPackage (3).
Eine einfachere Möglichkeit besteht darin, die Anzahl physischer Cores durch eine WMI-Abfrage zu ermitteln:
Code: Alles auswählen
ProgramID = RunProgram("Cmd", "/C WMIC CPU Get NumberOfCores", "",
#PB_Program_Open | #PB_Program_Read | #PB_Program_Hide)
If ProgramID
While ProgramRunning(ProgramID)
If AvailableProgramOutput(ProgramID)
Output$ + ReadProgramString(ProgramID)
EndIf
Wend
CloseProgram(ProgramID)
If Trim(Output$) <> ""
MessageRequester("Info", Output$ + #CR$, #PB_MessageRequester_Info)
EndIf
EndIf
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 10.07.2017 19:38
von RSBasic
WinAPI Library 1.4.3 wurde veröffentlicht (156 Beispielcodes wurden angepasst)
Ich habe nun insgesamt 156 Forenlinks in den Code-Dateien nachträglich eingefügt.
27 Codes konnte ich nicht verlinken, da diese entweder per E-Mail oder in der WinAPI Library eingereicht oder im nicht mehr existierenden PureBasic-Lounge-Forum gepostet wurden.
Außerdem habe ich jetzt auch endlich die Einreichen-Funktion repariert bzw. die Verbindungsdaten angepasst und neue Codes können jetzt wieder eingereicht werden.
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 10.07.2017 20:54
von Nino
Herzlichen Dank dafür!
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 10.07.2017 21:23
von Kiffi
Wie immer: Daumen hoch!
(nächstes Jahr ist 10-jähriges; meine Güte, wie die Zeit verfliegt...

)
Grüße ... Peter
P.S.: Das wäre doch mal ein Super-Projekt, um es in SpiderBasic umzusetzen <gd&r>)
Re: WinAPI Library (Snippets) (1.077)
Verfasst: 11.07.2017 00:19
von TheCube
@ Kiffi: Danke für die Antwort.
GetLogicalProcessorInformationEx() hatte ich beim überfliegen gesehen, aber dachte
fälschlicherweise die ältere Variante ab Win XP (ohne Ex) täte es auch schon.
Den Weg über die WinAPI fände aber trotz deiner WMI-Abfrage Lösung weiterhin interessant.
Meine andere Idee wäre andersrum gewesen:
Mit PB's CountCPU() die logischen Kerne ermitteln, dann ein CPU-Flag Hyperthreading vorhanden/aktiv
auslesen und dann ggf. durch 2 teilen um auf die Anzahl echter Kerne zu kommen. Wahrscheinlich umständlicher Unsinn ...