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 -



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  
 



 
- Seite 4 -



CB
Hi, Andreas!
Auf XP - WLAN-Printserver:
KompilierenMarkierenSeparieren
Gruß,
Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
30.01.2005  
 



Funzt perfect: [quote:87cc1988f2]Ausrichtung soll auf 2 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
Alte Ausgelesene Ausrichtung: 1
Rückgabe von ClosePrinter: 1
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 122
Neue Ausgelesene Ausrichtung: 2
Rückgabe von ClosePrinter: 1[/quote:87cc1988f2]
[quote:87cc1988f2]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
Alte Ausgelesene Ausrichtung: 2
Rückgabe von ClosePrinter: 1
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:87cc1988f2]
Salve, iF
 
30.01.2005  
 




CB
Hi, Andreas!
Test der letzten Version unter NT:

Meinen Glückwunsch!
[quote:9d2a00bfd0]
Ausrichtung soll auf 2 gesetzt werden!
Aus WIN.INI ausgelesener Standarddrucker: \SVAXerox
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Länge der DEVMODE Struktur: 268
Fehlercode letzte API: 122
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 122
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 122
Alte Ausgelesene Ausrichtung: 1
Rückgabe von DocumentProperties beim Setzen der Eigenschaft: 1
Fehlercode letzte API: 122
Rückgabe von ClosePrinter: 1
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 122
Neue Ausgelesene Ausrichtung: 2
Rückgabe von ClosePrinter: 1
[/quote:9d2a00bfd0]
Vielleicht solltest Du noch in die Editbox die Windows-Version mit eintragen, dann brauchen wirs nicht mehr dazuschreiben - für evtl. neue Testläufe...

Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
31.01.2005  
 




Manfred
Barei
Hallo Andreas,

Test mit einem reinen Netzwerkdrucker unter Betriebssystem ( Client Windows NT 4.0 Sevicepack 6, Server Windows 2003 Server)

[quote:4174c6ae51]
Ausrichtung soll auf 2 gesetzt werden!
Aus WIN.INI ausgelesener Standarddrucker: \GPGBEV1GPGPRT3
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Länge der DEVMODE Struktur: 1278
Fehlercode letzte API: 288
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 288
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 288
Alte Ausgelesene Ausrichtung: 1
Rückgabe von DocumentProperties beim Setzen der Eigenschaft: 1
Fehlercode letzte API: 288
Rückgabe von ClosePrinter: 1
Fehlercode OpenPrinter: 1
Fehlercode letzte API: 0
Rückgabe von DocumentProperties beim Auslesen der Struktur: 1
Fehlercode letzte API: 288
Neue Ausgelesene Ausrichtung: 2
Rückgabe von ClosePrinter: 1
[/quote:4174c6ae51]
Grus aus der Heide von Manfred
 
Zu wenig Wissen ist gefärlich, zu viel auch.(XProfan X4) | Win 10 Pro 64 | Win7 Ultimate 32/64 | AMD FX-8320, 16GB, GeForce GT 630 |
03.02.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.126 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