Seite 1 von 1

3 Beispielcodes [WinAPI]

Verfasst: 04.03.2011 19:17
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:

Re: 3 Beispielcodes [WinAPI]

Verfasst: 04.03.2011 20:11
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!

Re: 3 Beispielcodes [WinAPI]

Verfasst: 04.03.2011 22:00
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

Re: 3 Beispielcodes [WinAPI]

Verfasst: 04.03.2011 22:11
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. :)