Hallo liebe Forengemeinde,
ich habe mal wieder ein fachliches Problem. Ich habe ein kleines Druckermodul gescriptet, welches mir getrennt nach Netzwerk/lokal die installieten Drucker anzeigt, und vorhandene Netzwerkdrucker zum einbinden bereit hält. Soweit klappt schon alles prima, eigentlich dachte ich ich hätte den schwierigsten Teil hinter mir, jetzt bekomme ich es ums Verrecken wiede nicht hin, das Label $Standardpronter zu aktualisieren bei Case = default. Vielleicht kann mir ja einer auf die Spünge helfen. Mein kleines DruckerScript schaut so aus:
AutoIt
_form2()
Func _form2();Form 2 (DRUCKER)
Global $sCombo, $Var
Global $aList = GetPrinterList()
global $Form2 = GUICreate("DRUCKER ZUWEISEN", 430, 400)
WinSetOnTop($Form2, "", $WINDOWS_ONTOP)
GUISetBkColor($SubBack)
GUISetState(@SW_SHOW)
;Standarddrucker ermitteln
Local $standardprinter = RegRead( "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
$standardprinter = StringSplit($standardprinter, ",")
$standardprinter = $standardprinter[1]
;Liste mit installieren Druckern
Local $idList = GUICtrlCreateList("",10, 80, 280, 120)
For $i = 1 To 1000
Local $reg = RegEnumKey( "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Print\Printers", $i)
If @error = -1 Then ExitLoop
GUICtrlSetData(-1, $reg, $standardprinter)
Next
;Liste mit verbundenen Druckern
Local $idList2 = GUICtrlCreateList("", 10, 212, 280, 120)
For $i = 1 To 100
Local $reg2 = RegEnumKey("HKEY_CURRENT_USER\Printers\Connections", $i)
If @error = -1 Then ExitLoop
Local $splitReg = StringSplit($reg2, ",")
If $splitReg[0] > 2 Then
GUICtrlSetData(-1, $splitReg[4], $standardprinter)
EndIf
Next
;Labels
GUICtrlCreateLabel ( "Standarddrucker: ", 10, 10, 120, 30 )
GUICtrlSetFont(-1, 9, 900) ; bold
GUICtrlCreateLabel ( $standardprinter, 10, 30, 360, 30 )
GUICtrlSetFont(-1, 9, 900) ; bold
GUICtrlCreateLabel ( "Installierte Drucker: ", 10, 60, 120, 20 )
GUICtrlSetFont(-1, 9, 900) ; bold
GUICtrlCreateLabel ( "Netzwerkdrucker einbinden: ", 10, 330, 250, 20 )
GUICtrlSetFont(-1, 9, 900) ; bold
;Combo mit Netzwerkdruckern
$sCombo = GUICtrlCreateCombo("", 10, 350, 280, 50)
Global $Druckserver = '"\\Druck.vwlt.antrax-berlin.de\'; Druckserver definieren
Local $Druckername = $aList; Druckernamen aus dem Array extrahieren
If Not IsArray($aList) Then
GUICtrlSetData($sCombo, "kein Printserver")
Else
For $i = 1 To UBound($aList) - 1
If $aList[$i][0] <> "" Then $var = GUICtrlSetData($sCombo, $aList[$i][0])
Next
EndIf
Local $tabtestdruck = GUICtrlCreateButton ("Testdruck", 300, 90, 100, 30)
Local $tabdruckereinstellung = GUICtrlCreateButton ("Einstellungen", 300, 140, 100, 30)
Local $tabdruckereigenschaft = GUICtrlCreateButton ("Eigenschaften", 300, 190, 100, 30)
Local $tabdruckerfenster = GUICtrlCreateButton ("Warteschlange", 300, 240, 100, 30)
Local $tabdruckerordner = GUICtrlCreateButton ("Druckerordner", 300, 290, 100, 30)
Local $Default = GUICtrlCreateButton ("Default", 300,340, 100, 30)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
CASE $GUI_EVENT_CLOSE
GUIDelete($Form2)
GUISetState(@SW_ENABLE, $Form2)
Return
CASE $tabtestdruck
SoundPlay($BeepFileST)
local $drucker = GUICtrlRead ( $idList )
local $instring = StringInStr ( $drucker, "\\")
Testdruck()
CASE $tabdruckereinstellung
SoundPlay($BeepFileST)
MsgBox('262144', "geklickt", GUICtrlRead ( $idList ))
local $drucker = GUICtrlRead ( $idList )
local $instring = StringInStr ( $drucker, "\\")
DruckerEinstellung()
CASE $tabdruckereigenschaft
SoundPlay($BeepFileST)
;if idList ="" then guiread idlist2 server = Printserver
;If $idList = "" THEN
;MsgBox(262144,"Title", "Text")
;Else
global $drucker = GUICtrlRead ( $idList )
global $instring = StringInStr ( $drucker, "\\")
DruckerEigenschaft()
;EndIf
CASE $tabdruckerfenster
SoundPlay($BeepFileST)
$drucker = GUICtrlRead ( $idList )
$instring = StringInStr ( $drucker, "\\")
DruckerFenster()
CASE $tabdruckerordner
SoundPlay($BeepFileST)
global $drucker = GUICtrlRead ( $idList )
$instring = StringInStr ( $drucker, "\\")
druckerordner()
CASE $default ;Anführungsstriche für leerzeichenstrings
SoundPlay($BeepFileST)
$drucker = GUICtrlRead ( $idList )
$drucker = '"' & $drucker & '"'
RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $Drucker)
$standardprinter = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\windows", "Device")
$standardprinter = StringSplit($standardprinter, ",")
$standardprinter = $standardprinter[1]
GUICtrlSetData(-1, $standardprinter, $standardprinter) ; aktualisiert das Label $Standardprinter
Case $sCombo
Local $sText = GUICtrlRead($sCombo)
RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /in /n " & $Druckserver & $sText)
RunWait(@SystemDir & "\RUNDLL32 PRINTUI.DLL,PrintUIEntry /q /y /n " & $Druckserver & $sText)
MsgBox('262144', "Default printer", "Default printer set to: " & $sText)
EndSwitch
WEnd
EndFunc
Func GetPrinterList()
If Not FileExists("\\Druck.vwlt.antrax-berlin.de\c$") Then
GUICtrlSetData($sCombo, "kein Printserver")
Return 0
EndIf
Local $objWMIService = ObjGet("winmgmts:\\" & "Druck.vwlt.antrax-berlin.de" & "\root\CIMV2")
Local $colItems = $objWMIService.ExecQuery('SELECT * FROM Win32_Printer')
If Not IsObj($colItems) Then Exit MsgBox(0, "", "Not an object")
If Not $colItems.count Then Return 0 ; No Printer found
Local $aPrinter[$colItems.count][10], $i = 0
For $oItem In $colItems
$aPrinter[$i][0] = $oItem.Name
$aPrinter[$i][1] = $oItem.DriverName
$aPrinter[$i][2] = $oItem.PortName
$aPrinter[$i][3] = $oItem.Shared
$aPrinter[$i][4] = $oItem.ShareName
$aPrinter[$i][5] = $oItem.Published
$aPrinter[$i][6] = $oItem.Local
$aPrinter[$i][7] = $oItem.Location
$aPrinter[$i][8] = $oItem.DeviceID
$aPrinter[$i][9] = $oItem.DriverName
$i += 1
Next
Return $aPrinter
EndFunc
;------------------------------------------------------------------------------------------------------------------------------------------------------------------
;DRUCKER FUNCTIONS
;------------------------------------------------------------------------------------------------------------------------------------------------------------------
Func druckerordner()
Run("rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder")
EndFunc
Func DruckerFenster()
If $drucker == "" Then
MsgBox(16,"Drucker-Warteschlange", "Es wurde kein Drucker ausgewählt!")
Else
$instring = 0
RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /o" )
RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /o" )
EndIf
EndFunc
Func DruckerEigenschaft()
MsgBox(262144,"Title", $Drucker)
If $drucker == "" Then
MsgBox(16,"Drucker-Eigenschaften", "Es wurde kein Drucker ausgewählt!")
Local $instring = 0
RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /p" )
Else
RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /p" )
EndIf
EndFunc
Func DruckerEinstellung()
If $drucker = "" Then
MsgBox(16,"Drucker-Einstellungen", "Es wurde kein Drucker ausgewählt!")
Local $instring = 0
RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /e" )
Else
RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /e" )
EndIf
EndFunc
Func Testdruck()
If $drucker == "" Then
MsgBox(16,"TestDruck", "Es wurde kein Drucker ausgewählt!")
Local $instring = 0
RunWait( "rundll32 printui.dll,PrintUIEntry /n""\\" & @ComputerName & "\" & $drucker & """ /k" )
MsgBox('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
Else
RunWait( "rundll32 printui.dll,PrintUIEntry /n " & $drucker & " /k" )
MsgBox('262144', "TestDruck", "Der TestDruck wurde an den Drucker """ & $drucker & """ abgeschickt!" & @CRLF & "Bitte überprüfen Sie den Ausdruck.")
EndIf
EndFunc
Alles anzeigen