3 Beispielcodes [WinAPI]

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

3 Beispielcodes [WinAPI]

Beitrag von RSBasic »

Verzeichnisse aufeinmal erstellen

Mit diesem Code können Verzeichnisse inkl. Unterverzeichnisse aufeinmal erstellt werden.
Wenn man die PB-Funktion "CreateDirectory()" benutzt, dann kann man nur ein Verzeichnis erstellen.
Aber mit Hilfe dieser Funktion gibt man einen vollständigen Pfad an und Windows legt automatisch alle Unterverzeichnisse an, die noch nicht vorhanden sind.
Recht nützlich, finde ich. ;)

Code: Alles auswählen

EnableExplicit

Define Result

Result = MakeSureDirectoryPathExists_("C:\test\1\2\3\4\5\");Aufgrund der Rechte muss der erste Ordner ab Vista unter C:\ erstellt werden, aber die restlichen Verzeichnissen können problemlos erstellt werden.
If Result=0
  MessageRequester("","Verzeichnisse konnten nicht erstellt werden.",0)
Else
  MessageRequester("","Verzeichnisse konnten erstellt werden.",0)
EndIf

;MakeSureDirectoryPathExists: http://msdn.microsoft.com/en-us/library/ms680352%28v=vs.85%29.aspx

Datei suchen

Mit diesem Code kann man nach einer bestimmten Datei suchen. Die WinAPI-Funktion durchsucht auch in Unterverzeichnissen und gibt die erste gefundene Datei als Pfad zurück.

Code: Alles auswählen

EnableExplicit

Define Buffer$ = Space(256)
Define Result

Result = SearchTreeForFile_("C:\","Datei.txt",@Buffer$);Durchsucht auch in Unterverzeichnissen
If Result=0
  MessageRequester("","Es wurde keine Datei mit diesem Namen gefunden.",0)
Else
  MessageRequester("","Erste gefundene Datei: "+Buffer$,0)
EndIf

;SearchTreeForFile: http://msdn.microsoft.com/en-us/library/ms680618%28v=vs.85%29.aspx

Prozessor-Spezifikationen ermitteln

Mit diesem Code kann ermittelt werden, welche Spezifikationen euer Prozessor unterstützt. Warum mit Assembler kompliziert ermitteln, wenn es mit einer WinAPI-Funktion einfacher geht. :mrgreen:

Code: Alles auswählen

EnableExplicit

#PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7
#PF_CHANNELS_ENABLED = 16
#PF_COMPARE_EXCHANGE_DOUBLE = 2
#PF_COMPARE_EXCHANGE128 = 14
#PF_COMPARE64_EXCHANGE128 = 15
#PF_FLOATING_POINT_EMULATED = 1
#PF_FLOATING_POINT_PRECISION_ERRATA = 0
#PF_MMX_INSTRUCTIONS_AVAILABLE = 3
#PF_NX_ENABLED = 12
#PF_PAE_ENABLED = 9
#PF_RDTSC_INSTRUCTION_AVAILABLE = 8
#PF_SSE3_INSTRUCTIONS_AVAILABLE = 13
#PF_XMMI_INSTRUCTIONS_AVAILABLE = 6
#PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10
#PF_XSAVE_ENABLED = 17

;Hinweis
;1 = Wird unterstützt
;0 = Wird nicht unterstützt

Debug IsProcessorFeaturePresent_(#PF_3DNOW_INSTRUCTIONS_AVAILABLE)
Debug IsProcessorFeaturePresent_(#PF_CHANNELS_ENABLED)
Debug IsProcessorFeaturePresent_(#PF_COMPARE_EXCHANGE_DOUBLE)
Debug IsProcessorFeaturePresent_(#PF_COMPARE_EXCHANGE128)
Debug IsProcessorFeaturePresent_(#PF_COMPARE64_EXCHANGE128)
Debug IsProcessorFeaturePresent_(#PF_FLOATING_POINT_EMULATED)
Debug IsProcessorFeaturePresent_(#PF_FLOATING_POINT_PRECISION_ERRATA)
Debug IsProcessorFeaturePresent_(#PF_MMX_INSTRUCTIONS_AVAILABLE)
Debug IsProcessorFeaturePresent_(#PF_NX_ENABLED)
Debug IsProcessorFeaturePresent_(#PF_PAE_ENABLED)
Debug IsProcessorFeaturePresent_(#PF_RDTSC_INSTRUCTION_AVAILABLE)
Debug IsProcessorFeaturePresent_(#PF_SSE3_INSTRUCTIONS_AVAILABLE)
Debug IsProcessorFeaturePresent_(#PF_XMMI_INSTRUCTIONS_AVAILABLE)
Debug IsProcessorFeaturePresent_(#PF_XMMI64_INSTRUCTIONS_AVAILABLE)
Debug IsProcessorFeaturePresent_(#PF_XSAVE_ENABLED)

;IsProcessorFeaturePresent: http://msdn.microsoft.com/en-us/library/ms724482.aspx

@Stargate
Das war jetzt der letzte Thread.^^ Nun habe ich keine Lust mehr. :mrgreen:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 3 Beispielcodes [WinAPI]

Beitrag von ts-soft »

RSBasic hat geschrieben:Verzeichnisse aufeinmal erstellen

Mit diesem Code können Verzeichnisse inkl. Unterverzeichnisse aufeinmal erstellt werden.
Wenn man die PB-Funktion "CreateDirectory()" benutzt, dann kann man nur ein Verzeichnis erstellen.
Aber mit Hilfe dieser Funktion gibt man einen vollständigen Pfad an und Windows legt automatisch alle Unterverzeichnisse an, die noch nicht vorhanden sind.
Recht nützlich, finde ich. ;)
Auf älteren Systemen (Win9x) nicht immer vorhanden und auf neueren Systemen unnütz, da kein
Unicode :mrgreen: Gottseidank gibt es ForceDirectories!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: 3 Beispielcodes [WinAPI]

Beitrag von c4s »

@Verzeichnisse aufeinmal erstellen

Einfachster PureBasic-Code tuts doch auch:

Code: Alles auswählen

Procedure PathCreate(DirectoryPath.s)
	Protected i, CurrentDirectoryPath.s, DirectoryNode.s
	Protected Result = #True

	For i = 1 To CountString(DirectoryPath, "\")
		DirectoryNode = StringField(DirectoryPath, i, "\")
		CurrentDirectoryPath + DirectoryNode + "\"
		If FileSize(CurrentDirectoryPath) <> -2
			If CreateDirectory(CurrentDirectoryPath) = 0
				Result = #False
			EndIf
		EndIf
	Next

	ProcedureReturn Result
EndProcedure
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: 3 Beispielcodes [WinAPI]

Beitrag von RSBasic »

@c4s
Wenn es plattformunabhängig sein soll, dann ist dein Code natürlich besser. ;)
Aber ich hab ja ein WinAPI-Beispiel gepostet, egal ob sowas mit PB mit etwas mehr Code auch ginge, das spielt keine Rolle.
Der Code war ja sowieso für WAPIL gedacht, aber da ich ja demnächst noch kein Update veröffentlichen werde, hab ich es halt hier vorerst gepostet. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten