Das funktioniert soweit gut, solange ich eine 32bit Variante einer Autohotkey.exe (AHK-L in meinem Fall AHK-H) verwende. Ansonsten wird der Fehlercode: 87 ausgeworfen (ERROR_INVALID_PARAMETER - The parameter is incorrect).
Die Bibliothek kann lt. Beschreibung mit 32/64bit ANSI oder Unicode umgehen. Achtung in meinem Fall habe ich die Zeile NumPut( (bSelect) ? 0x0003 : 0x0000, LVITEM, 12, "UInt" ) geändert (focused and selected).
Code: Select all
Error in #include file "M:\Praxis\Skripte\Skripte Neu\Addendum für AlbisOnWindows\lib\LV_ExtListView.ahk":
objLV.pwritebuf: error writing memory
Specifically: LastError: 87
Line#
092: VarSetCapacity( LVITEM, objLV.szwritebuf, 0 )
093: NumPut( 0x0008, LVITEM, 0, "UInt")
094: NumPut( nItem, LVITEM, 4, "Int" )
095: NumPut( 0, LVITEM, 8, "Int" )
096: NumPut( (bSelect) ? 0x0003 : 0x0000, LVITEM, 12, "UInt")
097: NumPut( 0x0003, LVITEM, 16, "UInt")
099: if ( !DllCall( "WriteProcessMemory", Ptr,objLV.hproc, Ptr,objLV.pwritebuf, Ptr,&LVITEM, UInt,objLV.szwritebuf, UInt,0 ) )
---> 100: Throw,Exception("objLV.pwritebuf: error writing memory", "WriteProcessMemory", "LastError: " A_LastError)
101: SendMessage,0x102B,nItem,objLV.pwritebuf,,"ahk_id " objLV.hlv
103: Return,ErrorLevel
104: }
106: {
111: PROCESS_ALL_ACCESS := 0x001F0FFF
112: INVALID_HANDLE_VALUE := 0xFFFFFFFF
113: PAGE_READWRITE := 4
The current thread will exit.
Code: Select all
SetTitleMatchMode, RegEx
sumatraprint := "i)[(Print)|(Drucken)] ahk_class i)#32770 ahk_exe i)SumatraPDF.exe"
StandardA4 := "Microsoft Print to PDF"
rxPrinter:= StrReplace(Trim(StandardA4), " ", "\s")
rxPrinter:= StrReplace(rxPrinter, "(", "\(")
rxPrinter:= StrReplace(rxPrinter, ")", "\)")
hSumatra := WinExist("ahk_class SUMATRA_PDF_FRAME")
hSumatraprint := GetHex(WinExist(sumatraprint))
; Handle der SysListview321 (Druckerliste)
ControlGet, hLV, Hwnd,, SysListview321, % "ahk_id " hSumatraprint
; Auslesen der vorhandenen Drucker
ControlGet, Items , List , Col1 ,, % "ahk_id " hLV
; Listview Position des Standarddrucker suchen
ItemNr := 0
Loop, Parse, Items, `n
If RegExMatch(A_LoopField, "i)" rxPrinter) {
ItemNr := A_Index
break
}
; Drucker in der externen Listview auswählen
If ItemNr {
objLV := ExtListView_Initialize(sumatraprint)
ControlFocus,, % "ahk_id " objLV.hlv
err := ExtListView_ToggleSelection(objLV, 1, ItemNr - 1)
ExtListView_DeInitialize(objLV)
}
else {
MsgBox, % "Drucker: " StandardA4 "`nkonnte nicht gefunden werden."
}
Anmerkung:
Ich kann das Dokument nicht per cli-Aufruf ausdrucken, da die Dokumente in meiner Verwaltungssoftware hinterlegt sind. Die Software startet je nach Arbeitsplatzeinstellung entweder Sumatra oder der FoxitReader.
Sinn des Ganzen ist ein automatisierter Druck eines Dokumentes. Das bietet meine Software leider nicht.