Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   WriteBinary Registry - Datenformat (https://www.delphipraxis.net/199780-writebinary-registry-datenformat.html)

TKNU 19. Feb 2019 20:36

WriteBinary Registry - Datenformat
 
Hallo zusammen,

stehe gerade etwas auf dem Schlauch.

In meinem aktuellen Projekt (noch in Delphi 6) werden mit Write- & ReadBinary aus der Unit Registry Druckereigenschaften (DEVMODE) gelesen & geschrieben. Geht auch, funktioniert aber nicht:


Im Regedit sieht der Original - Eintrag z.B. so aus:

43 00 54 00 EA 00 etc.

Wenn ich über WriteBinary schreibe, erhalte ich die folgende Ansicht:

43 54 EA … -> fehlt also jeweils das 2. Byte (0). Wird dann leider auch vom Druckertreiber nicht erkannt.

Was übersehe ich?

Delphi.Narium 19. Feb 2019 20:41

AW: WriteBinary Registry - Datenformat
 
Unicode <-> Nicht Unicode?

TKNU 19. Feb 2019 20:53

AW: WriteBinary Registry - Datenformat
 
Stimmt - das könnte eine Erklärung sein. Eine Idee, wo ich das umstelle?

Der WriteBinary Befehl in meinem Programm sieht wie folgt aus:

reg.WriteBinaryData(device,printerdevmode,devmodes ize);

wobei printerdevmode vom Typ tdevmode ist.

Problem von Delphi6?

Delphi.Narium 19. Feb 2019 21:14

AW: WriteBinary Registry - Datenformat
 
Da wird es jetzt eher schwierig was sinnvolles als Tipp abzugeben.

Delphi würd' ich jetzt erstmal keine Schuld zuweisen, binär ist binär, egal was da drinne steht, ob nun jedes zweite Byte 00 ist oder nicht, sollte bei diesem Datentyp eigentlich eher egal sein.

Den Inhalt des Binärtypes hast Du "irgendwo" her, vom Drucker, über 'ne API ... (keine Ahnung).

Kannst Du diese Werte irgendwie auslesen? Wenn ja, einmal mit Delphi 6 und einmal mit dem aktuellen Delphi?

Diese Werte dann vergleichen, gibt's Unterschiede?

Von was für 'nem Drucker reden wir hier, hat der irgendwas besonderes oder wurde da nur das Datenformat zwischen zwei Treiberversionen, Windowsversionen, werwiewowasauchimmer geändert und Du stolperst hier nur gerade über einen Nebeneffekt, der suggeriert, dass die Ursache bei Delphi 6 liegen könnte?

TKNU 19. Feb 2019 21:22

AW: WriteBinary Registry - Datenformat
 
Ausgelesen wird hiermit:


gpResult := WinSpool.GetPrinter(
PrinterHandle,
LEVEL_2,
pBuffer,
bytesNeeded,
@bytesNeeded
);
if gpResult then
begin
printerInfo := PPrinterInfo2(pBuffer)^;
move(printerInfo.pDevMode^,printerdevmode,printerI nfo.pDevMode^.dmSize+printerInfo.pDevMode^.dmDrive rExtra);
end;


Es geht darum, bestimmte Druckeigenschaften (doppelseitig etc.) zu setzten und mit einer Arbeitsdatei zusammen zu speichern. Sind Standarddrucker von HP.

Ich muss mal schauen, wo hier Unicode auftaucht und wo nicht.

Delphi.Narium 19. Feb 2019 21:32

AW: WriteBinary Registry - Datenformat
 
Mach Dir bitte zwei Programmversionen, eine Delphi 6 und eine aktuelles Delphi.

Stimmen die gelesenen Werte überein?

TKNU 19. Feb 2019 21:59

AW: WriteBinary Registry - Datenformat
 
Habe erstmal eine lauffähige Version mit Umwegen.

- devmode per copymemory in ein Byte Array kopieren,
- dann dieses in ein 2. Array kopieren, aber in 2er Schritten und die 0 manuell einfügen


Probiere es morgen aber mal in der Fa. mit der aktuellen Version aus. Interessiert mich dann doch :-D

HolgerX 20. Feb 2019 04:38

AW: WriteBinary Registry - Datenformat
 
Hmm...

Zitat:

Zitat von TKNU (Beitrag 1426027)
Habe erstmal eine lauffähige Version mit Umwegen.

- devmode per copymemory in ein Byte Array kopieren,
- dann dieses in ein 2. Array kopieren, aber in 2er Schritten und die 0 manuell einfügen


Probiere es morgen aber mal in der Fa. mit der aktuellen Version aus. Interessiert mich dann doch :-D


Das ist murks....

D6 verwendet von GetPrinter immer per default die ANSI-Version, welche ein PRINTER_INFO_2 mit Ansi-Strings liefert.
Verwende stattdessen direkt GetPrinterW mit PRINTER_INFO_2W und Du erhälst alle Strings als WideSting, somit incl. des 2. Bytes je Char.

TKNU 20. Feb 2019 12:43

AW: WriteBinary Registry - Datenformat
 
Perfekt - hat bestens funktioniert. Den Murks habe ich schon gelöscht :-D:-D:-D

TKNU 22. Feb 2019 22:52

AW: WriteBinary Registry - Datenformat
 
In diesem Zusammenhang noch eine Frage:

Gibt es eine Möglichkeit DevmodeA und DevmodeW gegenseitig zu konvertieren?


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.
Seite 1 von 2  1 2      

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