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.
legion
Beiträge: 467 Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:
Beitrag
von legion » 13.10.2006 09:18
Hallo,
habe wieder versucht eines meiner Delphi-Source nach PB zu übertragen.
Funktioniert, aber ich glaube das könnte man sicher schöner lösen. Besonders der Part mit dem Buffer gefällt mir nicht!
Code: Alles auswählen
;******************************************
;* Festplatte in den Sleep-Modus schalten *
;* Windows NT/2000/XP ab ATA4 *
;* Info to: fremdenlegion [at] gmail.com *
;******************************************
#BufferSize = 12
#IOCTL_IDE_PASS_THROUGH = $4D028 ;ATA - Kommando an die Festplatte
Device.s = "\\.\PhysicalDrive0" ;Die erste physikalische HD
hDevice = CreateFile_(@Device,#GENERIC_READ|#GENERIC_WRITE ,#FILE_SHARE_READ|#FILE_SHARE_WRITE,#Null,#OPEN_EXISTING,#FILE_ATTRIBUTE_NORMAL,0)
If hDevice = INVALID_HANDLE_VALUE
MessageRequester("Info","Laufwerk konnte nicht angesprochen werden",#PB_MessageRequester_Ok)
Goto Exit
EndIf
Dim Buffer.b(#BufferSize)
Buffer(0)= 0
Buffer(1)= 0
Buffer(2)= 0
Buffer(3)= 0
Buffer(4)= 0
Buffer(5)= $A0
Buffer(6)= $E6 ;--> laut ATA-Definition der Sleep-Befehl
Buffer(7)= 0
Buffer(8)= 0
Buffer(9)= 0
Buffer(10)= 0
Buffer(11)= 0
ReturnValue = DeviceIoControl_(hDevice,#IOCTL_IDE_PASS_THROUGH,@Buffer(),#BufferSize,@Buffer(),#BufferSize,@cbBytesReturned,#Null)
If ReturnValue <> 0
MessageRequester("Info","HD erfolgreich im Sleep-Modus",#PB_MessageRequester_Ok)
Else
MessageRequester("Info","Sleep-Modus fehlgeschlagen",#PB_MessageRequester_Ok)
EndIf
CloseHandle_(hDevice)
Exit:
End
NicTheQuick
Ein Admin
Beiträge: 8812 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 13.10.2006 09:36
Ich habe das Problem mit dem Buffer jetzt über eine DataSection gelöst. Und
funktionieren tut der Code auch hier an dem Firmenlaptop.
Code: Alles auswählen
;******************************************
;* Festplatte in den Sleep-Modus schalten *
;* Windows NT/2000/XP ab ATA4 *
;* Info to: fremdenlegion [at] gmail.com *
;******************************************
#BufferSize = 12
#IOCTL_IDE_PASS_THROUGH = $4D028 ;ATA - Kommando an die Festplatte
Device.s = "\\.\PhysicalDrive0" ;Die erste physikalische HD
hDevice = CreateFile_(@Device, #GENERIC_READ | #GENERIC_WRITE, #FILE_SHARE_READ | #FILE_SHARE_WRITE, #Null, #OPEN_EXISTING, #FILE_ATTRIBUTE_NORMAL, 0)
If hDevice = INVALID_HANDLE_VALUE
MessageRequester("Info", "Laufwerk konnte nicht angesprochen werden")
End
EndIf
ReturnValue = DeviceIoControl_(hDevice, #IOCTL_IDE_PASS_THROUGH, ?ATA_Sleep, #BufferSize, ?ATA_Sleep, #BufferSize, @cbBytesReturned, #Null)
If ReturnValue
MessageRequester("Info", "HD erfolgreich im Sleep-Modus")
Else
MessageRequester("Info", "Sleep-Modus fehlgeschlagen")
EndIf
CloseHandle_(hDevice)
End
DataSection
ATA_Sleep:
Data.b 0, 0, 0, 0, 0, $A0, $E6, 0, 0, 0, 0, 0
EndDataSection
Zuletzt geändert von
NicTheQuick am 13.10.2006 09:59, insgesamt 1-mal geändert.
legion
Beiträge: 467 Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:
Beitrag
von legion » 13.10.2006 09:55
Gute Idee, gefällt mir !
Wollte das Buffer-Array mit einen Rutsch über einen Pointer beschreiben, hab ich aber nicht geschafft. Muß mich erst mit den Pointer in PB vertraut machen.
NicTheQuick
Ein Admin
Beiträge: 8812 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200 Ubuntu 24.04.2 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Beitrag
von NicTheQuick » 13.10.2006 10:00
[OT]
Ich habe mal deine eMail-Adresse in den Codes abgeändert, damit nicht
irgendwelche Bots sie finden. Ist nur nett gemeint.
[/OT]
legion
Beiträge: 467 Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:
Beitrag
von legion » 13.10.2006 10:23
Alles Klar ! Danke !