Drucken in Autoit

  • *grins* mal wieder ich. Wie man merkt, es ist Sonntag, Formel 1 ist vorbei und ich hab Zeit.
    Also, kommt da ein Problem nach dem anderen :S

    Und zwar im Moment ist es das Drucken. Ich benutze folgende geklaute Funktion (die auch nach einigen Anpassungen funktioniert):

    Spoiler anzeigen
    [autoit]

    Func _Print()
    Local $WM_PRINT = 0x317
    Local $PRF_CHILDREN = 0x10; Draw all visible child windows.
    Local $PRF_CLIENT = 0x4 ; Draw the window's client area.
    Local $PRF_OWNED = 0x20 ; Draw all owned windows.
    Local $PRF_NONCLIENT = 0x2 ; Draw the window's Title area.
    Local $PRF_ERASEBKGND = 0x8 ; Erases the background before drawing the window

    [/autoit] [autoit][/autoit] [autoit]

    Local $hWnd = WinGetHandle("Pflanzen Datenbank") ;ControlGetHandle("Pflanzen Datenbank", "", $listview)
    Local $pos = WinGetPos("Pflanzen Datenbank") ;ControlGetPos("Pflanzen Datenbank", "", $listview)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()
    Local $Width = $pos[2]
    Local $Height = $pos[3]

    [/autoit] [autoit][/autoit] [autoit]

    Local $hDC = _WinAPI_GetDC($hWnd)
    Local $memDC = _WinAPI_CreateCompatibleDC($hDC)
    Local $memBmp = _WinAPI_CreateCompatibleBitmap($hDC, $Width, $Height)
    _WinAPI_SelectObject($memDC, $memBmp)

    [/autoit] [autoit][/autoit] [autoit]

    Local $Ret = _SendMessage($hWnd, $WM_PAINT, $memDC, 0)
    $Ret = _SendMessage($hWnd, $WM_PRINT, $memDC, BitOR($PRF_CHILDREN, $PRF_CLIENT, $PRF_OWNED, $PRF_NONCLIENT, $PRF_ERASEBKGND))

    [/autoit] [autoit][/autoit] [autoit]

    Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($memBmp)

    [/autoit] [autoit][/autoit] [autoit]

    ;Get Default Printer
    Local $s_PrinterName = _GetDefaultPrinter()

    [/autoit] [autoit][/autoit] [autoit]

    ; Create a printer device context
    Local $hPrintDc = _WinAPI_CreateDC("winspool", $s_PrinterName)
    Local $hGraphic = _GDIPlus_GraphicsCreateFromHDC($hPrintDc)

    [/autoit] [autoit][/autoit] [autoit]

    ; get pixel and twips info
    Local $PixelsPerInchY = _WinAPI_GetDeviceCaps($hPrintDc, $__WINAPICONSTANT_LOGPIXELSY); Get Pixels Per Inch Y
    Local $TwipsPerPixelY = 1440 / $PixelsPerInchY
    Local $PixelsPerInchX = _WinAPI_GetDeviceCaps($hPrintDc, $__WINAPICONSTANT_LOGPIXELSX); Get Pixels Per Inch X
    Local $TwipsPerPixelX = 1440 / $PixelsPerInchX

    [/autoit] [autoit][/autoit] [autoit]

    ; get page width and height
    Local $PageWidth = _WinAPI_GetDeviceCaps($hPrintDc, $HORZRES); Get width, in millimeters, of the physical screen
    Local $PageHeight = _WinAPI_GetDeviceCaps($hPrintDc, $VERTRES); Get height, in millimeters, of the physical screen.

    [/autoit] [autoit][/autoit] [autoit]

    ; set docinfo
    Local $s_DocName = "Printing from AutoIt with WinAPI"
    Local $DocName = DllStructCreate("char DocName[" & StringLen($s_DocName & Chr(0)) & "]")
    DllStructSetData($DocName, "DocName", $s_DocName & Chr(0)); Size of DOCINFO structure
    Local $DOCINFO = DllStructCreate($tagDOCINFO); Structure for Print Document info
    DllStructSetData($DOCINFO, "Size", 20); Size of DOCINFO structure
    DllStructSetData($DOCINFO, "DocName", DllStructGetPtr($DocName)); Set name of print job (Optional)

    [/autoit] [autoit][/autoit] [autoit]

    ; start new print doc
    Local $result = _WinAPI_StartDoc($hPrintDc, $DOCINFO)
    ; start new page
    $result = _WinAPI_StartPage($hPrintDc)

    [/autoit] [autoit][/autoit] [autoit]

    ; Draw one image in another
    _GDIPlus_GraphicsDrawImageRect($hGraphic, $hImage, 50, 100, $Width, $Height)
    ; Draw a frame around the inserted image
    _GDIPlus_GraphicsDrawRect($hGraphic, 50, 100, $Width, $Height)
    ; ------------------------ End of Story -----------------------
    ; End the page
    $result = _WinAPI_EndPage($hPrintDc)
    ; End the print job
    $result = _WinAPI_EndDoc($hPrintDc)
    ; Delete the printer device context
    _WinAPI_DeleteDC($hPrintDc)
    ; End Rest of Resources
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_ImageDispose($hImage)
    _WinAPI_ReleaseDC($hWnd, $hDC)
    _WinAPI_DeleteDC($memDC)
    _WinAPI_DeleteObject($memBmp)
    _GDIPlus_Shutdown()
    EndFunc ;==>_Print

    [/autoit] [autoit][/autoit] [autoit]

    ;------------------------------ Get Default printer --------------------------------
    Func _GetDefaultPrinter()
    Local $szDefPrinterName
    Local $Size
    Local $namesize = DllStructCreate("dword")
    DllCall("winspool.drv", "int", "GetDefaultPrinter", "str", '', "ptr", DllStructGetPtr($namesize))
    Local $pname = DllStructCreate("char[" & DllStructGetData($namesize, 1) & "]")
    DllCall("winspool.drv", "int", "GetDefaultPrinter", "ptr", DllStructGetPtr($pname), "ptr", DllStructGetPtr($namesize))
    Return DllStructGetData($pname, 1);
    ;~ msgbox(0,dllstructgetdata($namesize,1),DllStructGetData($pname,1))
    EndFunc ;==>_GetDefaultPrinter

    [/autoit]

    Hat einer eine Ahnung, wie man damit im Querformat drucken kann?

    Eine Frage zur Funktion:

    Original Text:

    [autoit]


    Local $PixelsPerInchY = _WinAPI_GetDeviceCaps($hPrintDc, $__WINAPCONSTANT_LOGPIXELSY); Get Pixels Per Inch Y
    Local $PixelsPerInchX = _WinAPI_GetDeviceCaps($hPrintDc, $__WINAPCONSTANT_LOGPIXELSX); Get Pixels Per Inch X

    [/autoit]

    Damit bekomme ich Fehlermeldungen von Scite. Gehe ich richtig in der Annahme, das __WINAPCONSTANT_LOGPIXELSY eigentlich __WINAPICONSTANT_LOGPIXELSY heisen sollte ? Die Funktion geistert durch einige Beiträge mit diesem Fehler (evtl.) aber keiner sagt was dazu.

  • Da das ja nur die reine Funktion ist, sind da eigentlich gar keine Includes.

    Übrigens, Aquarianer ? Wegen der Prachtschmerle.

  • Hach, dem trauer ich auch noch hinterher. Hatte ein 800L Becken mit Barschen und davor einige Gesellschaftsbecken. Musste ich leider wegen Umzug aufgeben.

    Aber scheint trotzdem so, dass keiner einer Idee zu meiner Frage hat. Dann wohl mal nach was anderem umschauen

  • ok...

    versuch doch mal was mit:

    [autoit]


    #include <File.au3>
    _FilePrint()

    [/autoit]


    Da wird dann (zumindest bei mir) ein Druckmenü geöffnet

    PS: Hab leider nur 60l Becken.. mit Prachtschmerlen, Antennenwelsen und Guppys, mal vereinzelt "Deutschlandfische" gehabt (die heißen echt so sind auch schwarz, rot, gold) und Platis