Deutsch
Forum

Netzwerk?

 
- Seite 1 -


Hallo alle zusammmen...

Ich habe keinen blassen Schimmer von Netzwerken und auch habe auch keins, mit dem ich mal herumexperimentieren kann. Deshalb folgende Fragen:

- Kann jeder, der an dem Netzwerk angeschlossen ist, die Druckeigenschaften verändern (z.B. von Hochformat auf Querformat stellen), oder kann man das nur von dem Rechner aus, an dem der Drucker angeschlossen ist? (betriebssystem wichtig...)

- Welche Privilegien gelten, wenn ich in einem Netzwerk auf einem anderen Computer Systemspezifische Sachen ausführen will (RegConnectRegistry, RegLoadKey, RegSaveKey)???
 
16.01.2005  
 



 
- Seite 3 -



Jörg
Sellmeyer
Hallo Andreas,
Das kommt bei mir raus (Win98se ohne Netzwerk):

Ausrichtung soll auf 2 gesetzt werden!
Aus WIN.INI ausgelesener Standartdrucker: Canon i550
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Länge der DEVMODE Struktur: 692
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 0
Alte Ausgelesene Ausrichtung: 1
Rückgabe von DocumentProperties beim Setzen der Eigenschaft: 1
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 0
Neue Ausgelesene Ausrichtung: 2
Rückgabe von ClosePrinter: 1

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.01.2005  
 




CB
Hi,

für alle, die sich fragen, wie sie im Netzwerk richtig die Kurve kriegen, habe ich einen echt heißen Tip parat:

[...] 

Da werden sie geholfen - garantiert!

Gruß,
Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
21.01.2005  
 



Der absoulte Hammer

Salve, iF
 
21.01.2005  
 



Hallo Christian...

Ich habe die Counterstrike Frage mal an meinen Schwager weitergeleitet - der ist Programmierer bei einer Einzelhandelskette und weiß bestimmt auch eine passende Antwort...

Nochmals zu meinem Problem:
Die PRINTUI.DLL (Printer User Interface) unterstützt unter NT also wohl die Commandline Befehle nicht - ich habs ja schon vorher vermutet.

Ich habe mir die DLL mit einem Disassembler nochmals etwas genauer angesehen und auch etwas herumgegooglet.
Die Sache müßte auch so funktionieren:
- Mit GetPrinter an das Handle des Druckers gelangen, dabei das Handle mit den ACCESS_RIGHTS PRINTER_ALL_ACCESS öffnen.
- Über DocumentProperties an die Größe der DEVMODE gelangen.
- Über DocumentProperties die DEVMODE Struktur auslesen.
- Die Members dmFields und dmOrientation passend setzen.
- Über DocumentProperties die DEVMODE Struktur mit den Flags DM_IN_BUFFER und DM_OUT_BUFFER setzen.
- Mit SetPrinter über die Printer_Info_2 Struktur die Default Einstellungen anpassen.
- Mit ClosePrinter das Printerhandle schließen.

Leider bn ich damit bislang noch nicht weitergekommen - zwar werden die Einstellungen für den Printer gesetzt, die Defaultwerte werden aber nicht geändert. Habe ich hier einen Denkfehler? Quelltext folgt in der nächsten Woche, nach meinem Nachtdienst...

Der Grund meiner Bemühungen:
Ohne das Ändern der Defaultwerte ist es scheinbar nicht möglich mit den Profanbefehlen Startprint und Endprint zu arbeiten und einen richtigen Druck im Querformat zu erzielen (oder andere Einstellungen der für den Druck zuständigen DEVMODE zu ändern).
Das Endergebnis soll also für Jedermann ein vernünftiges Drucken mit Profan ermöglichen...
 
22.01.2005  
 




CB
Halllo Andreas,

Freut mich, daß Euch mein Tip gefällt (der kam überdies von meinem Bruder) - wer DAS nicht gelesen hat, hat eindeutig eine Bildungslücke...

Zu Deinem Projekt: Das klingt sehr interessant - für uns alle!
Stehe Dir gerne als NT-Tester zur Verfügung - offenbar bin ich dzt. der einzige, der so ein Netzwerk zur Verfügung hat.
Falls das für Dich wichtig ist: genaugenommen habe ich mich mit meinem privaten PC über einen Switch an eine NT-Workstation angehängt, am XP-Rechner hängt dann mein Printer - ich kann also vergleichen, wie sich Dein Programm auf beiden verhält.
Was tut man nicht alles für einen guten Zweck! Ich würde mir aber etwas leichter dabei tun, wenn Du mir den zu testenden Code per email schicken würdest.
Die NT-Workstation hängt leider nicht im Internet, ich kann aber die email über mein Handy herunterladen, das Attachment auf eine SD-Karte speichern und dann auf diesen PC einspielen. Das ist zwar umständlich, ich erspare mir dabei aber ein paar weitere Schritte (Herunterladen des Codes vom Firmen-PC, als email-Attachment auf meine Mailbox schicken).
Gruß,
Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
22.01.2005  
 



Hallo Christian...

Einen NT-Tester für das Projekt kann ich immer gebrauchen.
Ich habe dir mal den Quelltext zum Testen unter XP an deine Mailadresse geschickt.
Nach meiner Nachtschicht poste ich hier nochmals einen Quelltext, der den Flag DM_UPDATE auch unter WindowsNT setzt. Vielleicht gibts diesen undokumentierten Flag ja erst ab 2000 nicht mehr.

In der nächsten Woche kommen dann ein paar (noch nicht funtionierende) Anfänge mit Setprinter hinzu (siehe mein vorheriges Posting).
Ich will mal hoffen, daß noch irgendjemand Lust hat, die Sache mit mir zusammen zu entwickeln und ein paar Ideen einzubringen. In der Regel muß ich (wie bei der LSA API) eigentlich nur einmal in die richtige Richtung geschupst werden, um dann eine Lösung zu erkennen...

Zwar hat Roland [...]  geschrieben, daß er selbst keine Möglichkeit gefunden hat, daß zu realisieren - das sollte uns aber nicht unbedingt entmutigen.
Unter 2000/XP funtioniert die Sache bereits über die PRINTUI.DLL - das heißt, es gibt auch eine Lösung für NT.
Wenn ich Rolands Posting richtig gedeutet habe, kann ich mir schon vorstellen, wo genau er da Probleme hatte. Leider fehlen mir Rolands Quelltextversuche in Delphi, ich hätte sonst vielleicht schon die Lösung. Sollte ich vielleicht mal versuchen, die zu bekommen?
 
23.01.2005  
 




CB
Hallo Andreas,

Code habe ich erhalten, kanns aber erst morgen testen -die Workstation habe ich in der Arbeit - halte Dich am laufenden!

Gruß,
Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
23.01.2005  
 



Hallo Christian...

Besten Dank für deine Rückmeldung!!!

Das gibts doch nicht! Der Flag DM_UPDATE existiert noch unter Windows-NT!!! Damit dürfte dies eine für alle 32-Bit Betriebssysteme funtionierende Lösung sein:
KompilierenMarkierenSeparieren
DEF @GetProfileString(5) !"kernel32","GetProfileStringA"
DEF @OpenPrinter(3) !"winspool.drv","OpenPrinterA"
DEF @DocumentProperties(6) !"winspool.drv","DocumentPropertiesA"
DEF @ClosePrinter(1) !"winspool.drv","ClosePrinter"
DEF @GetLastError(0) !"kernel32","GetLastError"
DEF @DocumentPropertiesW(6) !"winspool.drv","DocumentPropertiesW"
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)

Proc Drucker_Orientation_Umstellen

    Parameters Orientation% 1=Hochformat, 2=Querformat
    Declare WINVER&,OS#
    Declare SectionName$,KeyName$,DefautString$,ReturnBuffer#,Printername$,PHANDLE#,Länge2&
    Declare Pdevice$,Count&,Länge&,DevMode#,DevMode2#,Länge&,Fehler&,Offset&,Zähler&
    Declare Found%,Länge2&,Vergleich&
    Declare count#,Pointer_TO_DEVMODE&
    Dim OS#,OSVERSIONINFO
    OS#.dwOSVersionInfoSize& = 148
    External("Kernel32","GetVersionExA",OS#)
    LET Winver& = 8

    If OS#.dwPlatformId& = &Ver_Platform_Win32_Windows

        If OS#.dwMajorVersion& = 4

            Case OS#.dwMinorVersion& = 0  : Winver& = 1
            Case OS#.dwMinorVersion& = 10 : Winver& = 2
            Case OS#.dwMinorVersion& = 90 : Winver& = 3

        Endif

    ElseIf OS#.dwPlatformId& = &Ver_Platform_Win32_NT

        Case OS#.dwMajorVersion& = 3 : Winver& = 4
        Case OS#.dwMajorVersion& = 4 : Winver& = 5
        Case OS#.dwMajorVersion& = 5 : Winver& = 6
        Case OS#.dwMinorVersion& = 1 : Winver& = 7

    Endif

    Dispose OS#
    DIM ReturnBuffer#,256
    Addstring "Ausrichtung soll auf "+@STR$(Orientation%)+" gesetzt werden!"
    Let SectionName$="Windows"
    Let KeyName$="device"
    DefautString$=""
    @GetProfileString(@ADDR(SectionName$),@ADDR(KeyName$),@ADDR(DefautString$),ReturnBuffer#,256)
    LET Printername$=@SubStr$(@STRING$(ReturnBuffer#,0),1,",")
    Addstring "Aus WIN.INI ausgelesener Standartdrucker: "+Printername$
    Dispose ReturnBuffer#
    LET Pdevice$=""

    IF WinVer&<6

        DIM PHANDLE#,4
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Länge&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
        Addstring "Länge der DEVMODE Struktur: "+@STR$(Länge&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DIM DevMode#,Länge&
        DIM DevMode2#,Länge&
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44)
        Addstring "Alte Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Long DevMode#,40=1
        Word DevMode#,44=Orientation%
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,DevMode#,8 | 2 | 1)
        Addstring "Rückgabe von DocumentProperties beim Setzen der Eigenschaft: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44)
        Addstring "Neue Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Dispose DevMode#
        Dispose PHANDLE#
        Dispose DevMode2#

    Else

        DIM PHANDLE#,4
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Länge2&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
        Addstring "Länge der DEVMODE Struktur: "+@STR$(Länge2&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DIM DevMode#,Länge2&+256
        LET FEHLER&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DISPOSE DevMode2#
        DIM DevMode2#,10001
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzter API vor dem Auslesen von DEVMODE: "+@STR$(Fehler&)
        SHELL "rundll32 printui.dll,PrintUIEntry /Ss /n "+CHR$(34)+Printername$+CHR$(34)+" /a "+CHR$(34)+"C:PDEVMODE.DAT"+CHR$(34)+" u"
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzter API nach dem Auslesen von DEVMODE: "+@STR$(Fehler&)
        SLeep 1000
        ASSIGN #1,"C:PDEVMODE.DAT"
        OpenRW #1
        LET Länge&=@BlockRead(#1,DevMode2#,0,10000)
        CloseRW #1
        Addstring "Länge der Datei: "+@STR$(Länge&)
        LET OFFSET&=0
        LET FOUND%=1
        LET Zähler&=0

        While @AND(Found%=1,OFFSET&<(Länge&-72))

            Let FOUND%=0

            While @AND(Found%=0,Zähler&<70)

                LET VERGLEICH&=Offset&+Zähler&
                PRINT @STR$(OFFSET&)+"   "+@STR$(Zähler&)+"    "+@STR$(@BYTE(DevMode#,Zähler&))+"    "+@STR$(@Byte(DevMode2#,VERGLEICH&))
                LET FOUND%=0

                IF @BYTE(DevMode#,Zähler&)<>@Byte(DevMode2#,VERGLEICH&)

                    LET Found%=1

                endif

                LET Zähler&=Zähler&+1

            WEND

            if Zähler&<70

                LET FOUND%=1
                LET ZÄHLER&=0
                LET OFFSET&=OFFSET&+1

            else

                LET FOUND%=10
                LET ZÄHLER&=0

            Endif

        WEND

        IF FOUND%<>10

            Addstring "Offset konnte nicht ermittelt werden!"
            ASSIGN #2,"C:PDEVMODE2.DAT"
            OPENRW #2
            BlockWrite #2,DevMode#,0,Länge2&
            CLOSERW #2

        Else

            Addstring "Offset liegt bei: "+@STR$(OFFSET&)
            LET VERGLEICH&=OFFSET&+44+32
            Addstring "Alte Ausgelesene Ausrichtung: "+@STR$(@WORD(DevMode2#,Vergleich&))

            IF @or(@WORD(DevMode2#,Vergleich&)=1,@WORD(DevMode2#,Vergleich&)=2)

                WORD DevMode2#,VERGLEICH&=Orientation%
                OPENRW #1
                BlockWrite #1,DevMode2#,0,Länge&
                CloseRW #1
                Sleep 1000
                Let Fehler&=@GetLastError()
                Addstring "Fehlercode letzter API vor dem Setzen von DEVMODE: "+@STR$(Fehler&)
                SHELL "rundll32 printui.dll,PrintUIEntry /Sr /n "+CHR$(34)+Printername$+CHR$(34)+" /a "+CHR$(34)+"C:PDEVMODE.DAT"+CHR$(34)+" u"
                Let Fehler&=@GetLastError()
                Addstring "Fehlercode letzter API nach dem Setzen von DEVMODE: "+@STR$(Fehler&)
                Sleep 1000
                ERASE #1

            else

                Addstring "Devmode Offset nicht gefunden!"

            endif

        endif

        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode2#,44)
        Addstring "Neue Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Dispose PHANDLE#
        Dispose DevMode2#
        Dispose DevMode#

    ENDIF

Endproc

Drucker_Orientation_Umstellen 2
@EDitBox("Ruckgaben",1)

Hat jemand etwas gegen diese Lösung einzuwenden? Gibts Probleme?
 
24.01.2005  
 



Hallo alle zusammen...

Bernhard Künzel hat mir noch einen Fehler gemailt, hier ist er beseitigt:
KompilierenMarkierenSeparieren
DEF @GetProfileString(5) !"kernel32","GetProfileStringA"
DEF @OpenPrinter(3) !"winspool.drv","OpenPrinterA"
DEF @DocumentProperties(6) !"winspool.drv","DocumentPropertiesA"
DEF @ClosePrinter(1) !"winspool.drv","ClosePrinter"
DEF @GetLastError(0) !"kernel32","GetLastError"
DEF @DocumentPropertiesW(6) !"winspool.drv","DocumentPropertiesW"
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)

Proc Drucker_Orientation_Umstellen

    Parameters Orientation% 1=Hochformat, 2=Querformat
    Declare WINVER&,OS#
    Declare SectionName$,KeyName$,DefautString$,ReturnBuffer#,Printername$,PHANDLE#,Länge2&
    Declare Pdevice$,Count&,Länge&,DevMode#,DevMode2#,Länge&,Fehler&,Offset&,Zähler&
    Declare Found%,Länge2&,Vergleich&
    Declare count#,Pointer_TO_DEVMODE&
    Dim OS#,OSVERSIONINFO
    OS#.dwOSVersionInfoSize& = 148
    External("Kernel32","GetVersionExA",OS#)
    LET Winver& = 8

    If OS#.dwPlatformId& = &Ver_Platform_Win32_Windows

        If OS#.dwMajorVersion& = 4

            Case OS#.dwMinorVersion& = 0  : Winver& = 1
            Case OS#.dwMinorVersion& = 10 : Winver& = 2
            Case OS#.dwMinorVersion& = 90 : Winver& = 3

        Endif

    ElseIf OS#.dwPlatformId& = &Ver_Platform_Win32_NT

        Case OS#.dwMajorVersion& = 3 : Winver& = 4
        Case OS#.dwMajorVersion& = 4 : Winver& = 5
        Case OS#.dwMajorVersion& = 5 : Winver& = 6
        Case OS#.dwMinorVersion& = 1 : Winver& = 7

    Endif

    Dispose OS#
    DIM ReturnBuffer#,256
    Addstring "Ausrichtung soll auf "+@STR$(Orientation%)+" gesetzt werden!"
    Let SectionName$="Windows"
    Let KeyName$="device"
    DefautString$=""
    @GetProfileString(@ADDR(SectionName$),@ADDR(KeyName$),@ADDR(DefautString$),ReturnBuffer#,256)
    LET Printername$=@SubStr$(@STRING$(ReturnBuffer#,0),1,",")
    Addstring "Aus WIN.INI ausgelesener Standarddrucker: "+Printername$
    Dispose ReturnBuffer#
    LET Pdevice$=""

    IF WinVer&<6

        DIM PHANDLE#,4
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Länge&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
        Addstring "Länge der DEVMODE Struktur: "+@STR$(Länge&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DIM DevMode#,Länge&
        DIM DevMode2#,Länge&
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44)
        Addstring "Alte Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Long DevMode#,40=1
        Word DevMode#,44=Orientation%
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,DevMode#,8 | 2 | 1)
        Addstring "Rückgabe von DocumentProperties beim Setzen der Eigenschaft: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44)
        Addstring "Neue Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Dispose DevMode#
        Dispose PHANDLE#
        Dispose DevMode2#

    Else

        DIM PHANDLE#,4
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Länge2&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
        Addstring "Länge der DEVMODE Struktur: "+@STR$(Länge2&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DIM DevMode#,Länge2&+256
        LET FEHLER&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DISPOSE DevMode2#
        DIM DevMode2#,10001
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzter API vor dem Auslesen von DEVMODE: "+@STR$(Fehler&)
        SHELL "rundll32 printui.dll,PrintUIEntry /Ss /n "+CHR$(34)+Printername$+CHR$(34)+" /a "+CHR$(34)+"C:PDEVMODE.DAT"+CHR$(34)+" u"
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzter API nach dem Auslesen von DEVMODE: "+@STR$(Fehler&)
        SLeep 1000
        ASSIGN #1,"C:PDEVMODE.DAT"
        OpenRW #1
        LET Länge&=@BlockRead(#1,DevMode2#,0,10000)
        CloseRW #1
        Addstring "Länge der Datei: "+@STR$(Länge&)
        LET OFFSET&=0
        LET FOUND%=1
        LET Zähler&=0

        While @AND(Found%=1,OFFSET&<(Länge&-72))

            Let FOUND%=0

            While @AND(Found%=0,Zähler&<70)

                LET VERGLEICH&=Offset&+Zähler&
                PRINT @STR$(OFFSET&)+"   "+@STR$(Zähler&)+"    "+@STR$(@BYTE(DevMode#,Zähler&))+"    "+@STR$(@Byte(DevMode2#,VERGLEICH&))
                LET FOUND%=0

                IF @BYTE(DevMode#,Zähler&)<>@Byte(DevMode2#,VERGLEICH&)

                    LET Found%=1

                endif

                LET Zähler&=Zähler&+1

            WEND

            if Zähler&<70

                LET FOUND%=1
                LET ZÄHLER&=0
                LET OFFSET&=OFFSET&+1

            else

                LET FOUND%=10
                LET ZÄHLER&=0

            Endif

        WEND

        IF FOUND%<>10

            Addstring "Offset konnte nicht ermittelt werden!"
            ASSIGN #2,"C:PDEVMODE2.DAT"
            OPENRW #2
            BlockWrite #2,DevMode#,0,Länge2&
            CLOSERW #2

        Else

            Addstring "Offset liegt bei: "+@STR$(OFFSET&)
            LET VERGLEICH&=OFFSET&+44+32
            Addstring "Alte Ausgelesene Ausrichtung: "+@STR$(@WORD(DevMode2#,Vergleich&))

            IF @or(@WORD(DevMode2#,Vergleich&)=1,@WORD(DevMode2#,Vergleich&)=2)

                WORD DevMode2#,VERGLEICH&=Orientation%
                OPENRW #1
                BlockWrite #1,DevMode2#,0,Länge&
                CloseRW #1
                Sleep 1000
                Let Fehler&=@GetLastError()
                Addstring "Fehlercode letzter API vor dem Setzen von DEVMODE: "+@STR$(Fehler&)
                SHELL "rundll32 printui.dll,PrintUIEntry /Sr /n "+CHR$(34)+Printername$+CHR$(34)+" /a "+CHR$(34)+"C:PDEVMODE.DAT"+CHR$(34)+" u"
                Let Fehler&=@GetLastError()
                Addstring "Fehlercode letzter API nach dem Setzen von DEVMODE: "+@STR$(Fehler&)
                Sleep 1000
                ERASE #1

            else

                Addstring "Devmode Offset nicht gefunden!"

            endif

        endif

        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode2#,44)
        Addstring "Neue Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Dispose PHANDLE#
        Dispose DevMode2#
        Dispose DevMode#

    ENDIF

Endproc

Drucker_Orientation_Umstellen 2
@EDitBox("Ruckgaben",1)
 
26.01.2005  
 



Funktioniert päärfegt

Gibz nu eine 1. AHsche Pcu ?
[quote:352c70bb36]Ausrichtung soll auf 1 gesetzt werden!
Aus WIN.INI ausgelesener Standarddrucker: Phaser 8400DP-2
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Länge der DEVMODE Struktur: 2576
Fehlercode letzte API: 6
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 122
Rückgabe von ClosePrinter: 1
Fehlercode letzter API vor dem Auslesen von DEVMODE: 122
Fehlercode letzter API nach dem Auslesen von DEVMODE: 0
Länge der Datei: 2728
Offset liegt bei: 152
Alte Ausgelesene Ausrichtung: 2
Fehlercode letzter API vor dem Setzen von DEVMODE: 0
Fehlercode letzter API nach dem Setzen von DEVMODE: 0
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 122
Neue Ausgelesene Ausrichtung: 1
Rückgabe von ClosePrinter: 1[/quote:352c70bb36]
Salve, iF
 
26.01.2005  
 



Hallo IF...

Da ich mir die neueste XProfan Version erst im Laufe dieses Jahres anschaffen werde, gibts von mir keine PCU.

Neben dem, was hier in den Foren steht, habe ich mit weiteren Profanern in Briefkontakt gestanden.
Ein Profaner (Bernhard Künzel) hat scheinbar Roland seit 7 Jahren bombardiert, um eine vernünftige Drucklösung von ihm zu bekommen - bislang war es Roland scheinbar nicht möglich, etwas in der Art zu erstellen, was auch im Netzwerkbereich funktioniert.

Da ich durch ein Experiment mit dem Ändern Bildschirmauflösung wußte, daß bei einem Zugriff auf die DEVMODE Struktur sehr interessante Möglichkeiten im Rahmen des Drucks bestehen, wollte ich ihm gerne etwas unter die Arme greifen und zu einer Losung für Profan kommen (er hats schon für total unmöglich gehalten).
Bernhard schreibt zur Zeit an einer Drucker PCU und ich will hoffen, daß er diese auch anderen zur Verfügung stellt...
 
26.01.2005  
 



Die PRINTUI.DLL liest die DEVMODE Struktur aus der Registry aus. Wenn die betreffenden Registryschlüssel fehlen, wird qusie eine leere PDEVMODE.DAT erzeugt und die Ausrichtung kann nicht geändert werden - also neuer Versuch mit Direktzugriff auf die DEVMODE in der Registry unter Windows2000/XP:
KompilierenMarkierenSeparieren
DEF @GetProfileString(5) !"kernel32","GetProfileStringA"
DEF @OpenPrinter(3) !"winspool.drv","OpenPrinterA"
DEF @DocumentProperties(6) !"winspool.drv","DocumentPropertiesA"
DEF @ClosePrinter(1) !"winspool.drv","ClosePrinter"
DEF @GetLastError(0) !"kernel32","GetLastError"
DEF @DocumentPropertiesW(6) !"winspool.drv","DocumentPropertiesW"
DEF @RegCREATEKEY(3)!"ADVAPI32","RegCreateKeyA" Schlüssel erstellen
def @RegSetValueEx(6) !"ADVAPI32","RegSetValueExA"
def @RegCloseKey(1) !"ADVAPI32","RegCloseKey"
DEF &Ver_Platform_Win32_Windows 1
DEF &Ver_Platform_Win32_NT 2
Struct OSVERSIONINFO = dwOSVersionInfoSize&,dwMajorVersion&,dwMinorVersion&,dwBuildNumber&,dwPlatformId&,szCSDVersion$(128)

Proc Drucker_Orientation_Umstellen

    Parameters Orientation% 1=Hochformat, 2=Querformat
    Declare WINVER&,OS#
    Declare SectionName$,KeyName$,DefautString$,ReturnBuffer#,Printername$,PHANDLE#,Länge2&
    Declare Pdevice$,Count&,Länge&,DevMode#,DevMode2#,Länge&,Fehler&,Offset&,Zähler&
    Declare Found%,Länge2&,Vergleich&,SubKey$
    Declare count#,Pointer_TO_DEVMODE&,Handle#
    Dim OS#,OSVERSIONINFO
    OS#.dwOSVersionInfoSize& = 148
    External("Kernel32","GetVersionExA",OS#)
    LET Winver& = 8

    If OS#.dwPlatformId& = &Ver_Platform_Win32_Windows

        If OS#.dwMajorVersion& = 4

            Case OS#.dwMinorVersion& = 0  : Winver& = 1
            Case OS#.dwMinorVersion& = 10 : Winver& = 2
            Case OS#.dwMinorVersion& = 90 : Winver& = 3

        Endif

    ElseIf OS#.dwPlatformId& = &Ver_Platform_Win32_NT

        Case OS#.dwMajorVersion& = 3 : Winver& = 4
        Case OS#.dwMajorVersion& = 4 : Winver& = 5
        Case OS#.dwMajorVersion& = 5 : Winver& = 6
        Case OS#.dwMinorVersion& = 1 : Winver& = 7

    Endif

    Dispose OS#
    DIM ReturnBuffer#,256
    Addstring "Ausrichtung soll auf "+@STR$(Orientation%)+" gesetzt werden!"
    Let SectionName$="Windows"
    Let KeyName$="device"
    DefautString$=""
    @GetProfileString(@ADDR(SectionName$),@ADDR(KeyName$),@ADDR(DefautString$),ReturnBuffer#,256)
    LET Printername$=@SubStr$(@STRING$(ReturnBuffer#,0),1,",")
    Addstring "Aus WIN.INI ausgelesener Standarddrucker: "+Printername$
    Dispose ReturnBuffer#
    LET Pdevice$=""

    IF WinVer&<6

        DIM PHANDLE#,4
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Länge&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
        Addstring "Länge der DEVMODE Struktur: "+@STR$(Länge&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DIM DevMode#,Länge&
        DIM DevMode2#,Länge&
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44)
        Addstring "Alte Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Long DevMode#,40=1
        Word DevMode#,44=Orientation%
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,DevMode#,8 | 2 | 1)
        Addstring "Rückgabe von DocumentProperties beim Setzen der Eigenschaft: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentProperties(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44)
        Addstring "Neue Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Dispose DevMode#
        Dispose PHANDLE#
        Dispose DevMode2#

    Else

        DIM PHANDLE#,4
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Länge2&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),0,0,0)
        Addstring "Länge der DEVMODE Struktur: "+@STR$(Länge2&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        DIM DevMode#,Länge2&
        LET FEHLER&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode#,44+32)
        Addstring "Alte Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        DIM DevMode2#,Länge2&
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        WORD DEVMODE#,44+32=Orientation%
        Dim Handle#,4
        LET SubKey$="PrintersDevModePerUser"
        @RegCREATEKEY($80000001,@addr(SubKey$),Handle#)
        @RegSetValueEx(@LONG(Handle#,0),@ADDR(Printername$),0,3,DEVMODE#,Länge2&)
        @RegCloseKey(@LONG(Handle#,0))
        LET SubKey$="PrintersDevModes2"
        @RegCREATEKEY($80000001,@addr(SubKey$),Handle#)
        @RegSetValueEx(@LONG(Handle#,0),@ADDR(Printername$),0,3,DEVMODE#,Länge2&)
        @RegCloseKey(@LONG(Handle#,0))
        Dispose Handle#
        @Sendmessage($FFFF,$001A,0,0)
        @Sendmessage($FFFF,$001B,0,0)
        LET Fehler&=@OpenPrinter(@ADDR(Printername$),PHANDLE#,0)
        Addstring "Fehlercode OpenPrinter: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET FEHLER&=@DocumentPropertiesW(%HWND,@Long(PHANDLE#,0),@ADDR(Pdevice$),DevMode2#,0,2)
        Addstring "Rückgabe von DocumentProperties beim Auslesen der Struktur: "+@STR$(Fehler&)
        Let Fehler&=@GetLastError()
        Addstring "Fehlercode letzte API: "+@STR$(Fehler&)
        LET Fehler&=@Word(DevMode2#,44+32)
        Addstring "Neue Ausgelesene Ausrichtung: "+@STR$(Fehler&)
        Let Fehler&=@ClosePrinter(@Long(PHANDLE#,0))
        Addstring "Rückgabe von ClosePrinter: "+@STR$(Fehler&)
        Dispose PHANDLE#
        Dispose DevMode2#
        Dispose DevMode#

    ENDIF

Endproc

Drucker_Orientation_Umstellen 2
@EDitBox("Ruckgaben",1)
 
30.01.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.088 Betrachtungen

Unbenanntvor 0 min.
E.T.12.06.2023
Uwe Lang21.11.2021
Thomas Zielinski05.02.2021
H.Brill07.06.2020
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie