AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Union Übersetzung nach Pascal

Ein Thema von Neutral General · begonnen am 12. Mär 2007 · letzter Beitrag vom 30. Mär 2007
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#11

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 17:42
GetLastError gibt mir keinen Fehler zurück... Das Handle bekomm ich wie in MSDN beschrieben durch

Delphi-Quellcode:
h:= CreateFile('\\.\C:',0,FILE_SHARE_DELETE or FILE_SHARE_READ or FILE_SHARE_WRITE,
                 nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
Dieses Handle ist auch gültig.

Nebenbei mal ne Frage: Ich will ja (wie du vielleicht noch aus dem anderen Thread weißt) herausfinden wie viele Partitionen auf einer Festplatte sind und welche das dann sind. Komm ich hiermit überhaupt an mein Ziel? Hatte mal mit deiner WMI-Unit die Festplatten ausgelesen:

Delphi-Quellcode:
var
  X: TWMIInfo;
  i,j: Integer;
begin
  ComputerName := '.';
  WMIGetInfo(ComputerName,'root\CIMV2','','','SELECT Caption, DeviceID FROM Win32_DiskDrive',x);

  if x.Instance = nil then
   ShowMessage('Hat nicht geklappt');
  for i:= 0 to High(x.Instance) do
    for j:= 0 to High(x.Propname) do
   ShowMessage(X.PropName[j] + ': ' + WMIRead(x,i,j));
Da bekomme ich auch schön die Festplatten-Namen und ID's angezeigt (ID z.B \\.\PHYSICALDRIVE0).
Dann versuche ich damit die Partitionen auszulesen nämlich so:

Delphi-Quellcode:
WMIGetInfo(ComputerName,'root\CIMV2','','','ASSOCIATORS OF {Win32_DiskDrive.DeviceID='''
             + WMIRead(x,0,1) + '''} WHERE AssocClass = Win32_DiskDriveToDiskPartition',y);
(nach diesem Vorbild):

Code:
'Use the disk drive device id to
'find associated partition

query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" _
        & wmiDiskDrive.DeviceID & "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"  
    Set wmiDiskPartitions = wmiServices.ExecQuery(query)
Aber da bekomm ich für Y immer nur nil zurück... (vgl. Letztes Beispiel)

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#12

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 18:18
Zitat von Neutral General:
Dieses Handle ist auch gültig.
Ein gültiges Handle heißt noch garnichts.

Das gültige Handle bedeutet nur, daß du nun ein Handle mit den angegebenen Rechten bekommen hast,

aber ob die Rechte auch für die gewünschte Funktion ausreichen?

Code:
Dh := CreateFile(PChar(S), [color=#ff0000]GENERIC_READ or GENERIC_WRITE[/color],
  FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, [color=#ff0000]0[/color], 0);
also mit bekomm ich auch keine Antwort
Zitat:
ASSOCIATORS OF {Win32_DiskDrive.DeviceID='\\.\PHYSICALDRIVE0'} WHERE AssocClass = Win32_DiskDriveToDiskPartition
> http://www.delphipraxis.net/internal...ct.php?t=89423

wenn \\.\PhysicalDrive0 einzeln vorkommen würde, dann könnte man es so machen,
Zitat:
SELECT * FROM Win32_DiskDriveToDiskPartition WHERE Antecedent = "\\.\PhysicalDrive0"
aber wie man nur "teilweise" suchen kann weiß ich auch nicht -.-''

Notfalls halt alles durchgehn was Win32_DiskDriveToDiskPartition rausrückt und mit Pos in den Antworten danach suchen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#13

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 18:35
Hi,

Also mit

SELECT * FROM Win32_DiskDriveToDiskPartition WHERE Antecedent = "\\.\PhysicalDrive0" erreiche ich auch nix (y = nil)...

Ach ja:

Delphi-Quellcode:
Dh := CreateFile(PChar(S), GENERIC_READ or GENERIC_WRITE,
  FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
ändert auch nix an der ganzen Sache...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#14

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 19:14
Zitat von Neutral General:
Also mit ... erreiche ich auch nix (y = nil)...
sag ich doch?

Kennst dich zufällig mit SQL aus?
Die WMI-Queries ähneln diesem ja.

Wie kann man da nach "TeilStrings" suchen?


Zitat von Neutral General:
Ach ja ... ändert auch nix an der ganzen Sache...
Hast du den Record vorher mal geleert?

Wenn das dateihandle OK ist und DeviceIoControl True liefert, dann sollten eigentlich korrekt Werte in dem Record liegen.

Also, ist DeviceIoControl = True
und was gibt OutBytes zurück?


Was sagt das?
Delphi-Quellcode:
H := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
  FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
Size := SizeOf(_DRIVE_LAYOUT_INFORMATION_EX) + SizeOf(_PARTITION_INFORMATION_EX) * 31;
GetMem(P, Size);
Try
  FillChar(P^, Size, 0);
  If DeviceIoControl(H, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nil, 0,
    P, Size, OutBytes, nil) Then Begin
    
    ...

  End Else ShowMessage(SysErrorMessage(GetLastError));
Finally
  FreeMem(P);
End;
CloseHandle(H);
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#15

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 19:24
Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var H: THandle;
    P: PDRIVE_LAYOUT_INFORMATION_EX;
    outBytes: Cardinal;
    Size: Cardinal;
begin
  H := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
  FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);

Size := SizeOf(_DRIVE_LAYOUT_INFORMATION_EX) + SizeOf(_PARTITION_INFORMATION_EX) * 31;

GetMem(P, Size);
Try
  FillChar(P^, Size, 0);
  If DeviceIoControl(H, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nil, 0,
    P, Size, OutBytes, nil) Then
      ShowMessage('Klappt')

  Else ShowMessage(SysErrorMessage(GetLastError));
Finally
  FreeMem(P);
End;
CloseHandle(H);
end;
Das sagt mir: 'klappt'
OutBytes = 4656
Werte von P sind die selben wie sonst auch...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#16

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 19:31
Delhpi kennt kein unsigned Int64, C aber schon. Man muss daher notgedrungen ein Int64 in Delphi nehmen und beim Rechnen auf das Vorzeichen aufpassen. Da gibt es aber selten Probleme, da ueblicherweise die Werte nicht so gross werden oder eh nicht gerechnet wird.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#17

Re: Union Übersetzung nach Pascal

  Alt 12. Mär 2007, 20:47
jetzt sag blos das zeigt was falsches an?

Robert: System.UInt64

[add]
und jupp, dat sagt hier och klappt
obwohl ich demnach angeblich 8 Partitionen hier hab, statt nur 2.

Allerdings scheinen die weiteren Daten selber zu stimmen...
- die Daten der ersten 2 Records kommen anscheinend hin
- und die nachfolgenden Records sind mit 0 gefüllt
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#18

Re: Union Übersetzung nach Pascal

  Alt 13. Mär 2007, 05:01
Oops, UInt64 ist aber ziemlich frisch bei Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.132 Beiträge
 
Delphi 12 Athens
 
#19

Re: Union Übersetzung nach Pascal

  Alt 13. Mär 2007, 09:51
Zitat von Robert Marquardt:
Oops, UInt64 ist aber ziemlich frisch bei Delphi.
> http://www.delphipraxis.net/internal...=694376#694376

kommt drauf an, was man "frisch" nennt

@Neutral General:
also komisch ist das Ganze schon, denn ich hab für den Test mit deiner Funktion meine Definitionen verwendet.
Die Funktion ist ja i.O. und die Definitionen eigentlich uch,
dennoch gehts nicht, obwohl das ganze in meinem Programm läuft, wo ja der "selbe" Code verwendet wird.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#20

Re: Union Übersetzung nach Pascal

  Alt 13. Mär 2007, 10:07
Zitat von himitsu:
Delphi-Quellcode:
// ab Delphi 6:
Type DWord64 = System.UInt64;
   LargeWord = System.UInt64;


// und D1 bis D5:
Type DWord64 = Type System.Int64;
   LargeWord = Type System.Int64;
Haeh?
In welcher Unit ist das deklariert?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz