@AspirinJunkie
das wurde von mir auch nicht so aufgefasst! Ich denke wir verstehen uns da blind
Ich wollte dem Thread Ersteller aber auch aufzeigen, was er für Möglichkeiten hat. Wir kennen ja nicht seinen Einsatzbereich.
Gruß gmmg
@AspirinJunkie
das wurde von mir auch nicht so aufgefasst! Ich denke wir verstehen uns da blind
Ich wollte dem Thread Ersteller aber auch aufzeigen, was er für Möglichkeiten hat. Wir kennen ja nicht seinen Einsatzbereich.
Gruß gmmg
@AspirinJunkie
Ich betreue Zufällig einige MySQL / MS SQL Server in meiner täglichen Arbeit und da laufen auch einige Autoit MySQL Scripte aktiv. Aus Erfahrung sage ich, dass die ODBC Variante in bestimmten konstellationen Probleme macht und zum zweiten ist für die ODBC Variante immer eine Install des entsprechenden Treibers nötig.
Zum Beispiel haben wir ein Auswertungstool für alle User (ca. 300) im Einsatz, welches entsprechende Daten in eine MySQL DB schreibt. Praktisch heißt das bei Nutzung über ODBC, ich müsste auf alle PC's den ODBC Treiber ausrollen, auch wenn das per Rollout geschiet ist das jede Menge arbeit!
Diese kann man sich sparen, wenn man einfach die andere UDF nimmt.
@Heavy
poste doch mal dein komplettes script mit aktuellem Stand und benutze die Autoit Tags
Gruß gmmg
bei der MySQL UDF von Prog@Andy wird die libmysql.dll bzw. libmysql_x64.dll benötigt!
http://progandy.de/downloads/view…mysql-udfs.html
Ich lege die immer ins Scriptverzeichnis! Beispiele sollten da in der udf sein!
Gruß gmmg
so hab ich das mal mit einer zweiten gui gemacht
[autoit]
;.............
while ... ; schleife im hauptteil
case button ; zweite gui
dummy()
wend
;..........
Func dummy() ; zweite gui
$popup_gui1 = GUICreate("Vorschau ...", 800, 600, 10, 10)
GUICtrlCreateEdit(" Test" , 10, 10, 700, 500)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then
GUIDelete($popup_gui1)
ExitLoop
EndIf
WEnd
EndFunc ;==>dummy
gruß gmmg
für Hardwareinformationen oder eigene Infos auf dem Hintergrundbild, gibt es die BGInfo.exe.
https://technet.microsoft.com/de-de/sysinternals/bb897557.aspx
ich denke mal, das ist das was du brachst! Wir benutzen das auch auf den Clients im Konzern.
gruß gmmg
@water
muss ja irgendwas sein, wenn die abfragen bei uns allen funktioniert und bei ihm nicht
gruß gmmg
dein Quelltext aus Post 40 funktioniert bei mir, wobei du mit der Anweisung "$aProperties = _AD_GetObjectProperties()" den Inhalt von $aProperties wieder überschreibst!
Entweder ein _ArrayDisplay ($aProperties) zwischen die Zeilen, sodass du beide Ausgaben siehst oder eine von beiden einfach auskommentieren.
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=C:\temp\test.Exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <AD.au3>
#include <DATE.au3>
#include <Array.au3>
_AD_ErrorNotify(2)
[/autoit] [autoit][/autoit] [autoit]_AD_Open("Domain\User","*PW*","","dc.domain.de:3268")
[/autoit] [autoit][/autoit] [autoit]ConsoleWrite(@error & @CRLF)
[/autoit] [autoit][/autoit] [autoit]$aProperties = _AD_GetObjectProperties(@UserName, "displayname,distinguishedName,pwdlastset")
$aProperties = _AD_GetObjectProperties()
ConsoleWrite(@error & @CRLF)
[/autoit] [autoit][/autoit] [autoit]_ArrayDisplay ($aProperties)
[/autoit] [autoit][/autoit] [autoit];$ddd = $aProperties[3][1]
;_DateTimeFormat($ddd,2)
;$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
;$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
;$PCName = $aProperties[4][1]
;$PCBeschreibung = $aProperties[7][1]
_AD_Close()
funktioniert denn bei dir eine vbs abfrage auf das AD?
als Beispiel diese
UserNameFromEmail "vorname.nachname@domain.de" 'hier deine firmenmailadresse eintragen
Sub UserNameFromEmail(sEmail)
Const ADS_SCOPE_SUBTREE = 2
Const PageSize = 1000
Dim sRootLDAP, oConnection, oCommand, oRecordSet
sRootLDAP = "'LDAP://" & GetObject("LDAP://RootDSE").Get("defaultNamingContext") & "'"
[/autoit][autoit][/autoit][autoit]Set oConnection = CreateObject("ADODB.Connection")
oConnection.Provider = "ADsDSOObject"
oConnection.Open "Active Directory Provider"
Set oCommand = CreateObject("ADODB.Command")
Set oCommand.ActiveConnection = oConnection
oCommand.CommandText = "Select sAMAccountName from " & sRootLDAP & " Where mail='" & sEmail & "'"
oCommand.Properties("Page Size") = PageSize
oCommand.Properties("Timeout") = 30
oCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
oCommand.Properties("Cache Results") = True
Set oRecordSet = oCommand.Execute
oRecordSet.MoveFirst
Do Until oRecordSet.EOF
WScript.Echo "Username for """ & sEmail & """ is """ & oRecordSet.Fields(0) & """"
oRecordSet.MoveNext
Loop
Set oRecordSet = Nothing
Set oCommand = Nothing
Set oConnection = Nothing
End Sub
Gruß gmmg
noch eine idee!
starte mal das _AD_Open mit der übergabe von user und passwort.
[autoit]
; Open Connection to the Active Directory
_AD_Open($ADMINUSER, $ADMINPASS)
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
[/autoit]und ein zweites script - getUserGroups zum testen
#include <D:\Data\scripte\AD_1.4.1.0_Functions\AD.au3>
;MsgBox(0,"",@LogonServer & @LogonDNSDomain & @LogonDomain)
[/autoit] [autoit][/autoit] [autoit]; Open Connection to the Active Directory
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
; Get a sorted array of group names (FQDN) that the user is immediately a member of
Global $aUser = _AD_GetUserGroups(@username)
If @error > 0 Then
MsgBox(64, "Active Directory Functions - Example 1", "User '" & @UserName & "' has not been assigned to any group")
Else
_ArraySort($aUser, 0, 1)
_ArrayDisplay($aUser, "Active Directory Functions - Example 1 - Group names user '" & @UserName & "' is immediately a member of")
for $i = 1 to $aUser[0]
[/autoit] [autoit][/autoit] [autoit];MsgBox(0,"", $aMembers01)
ConsoleWrite(_AD_FQDNToSamAccountName($aUser[$i]) & @CRLF)
Next
EndIf
; Close Connection to the Active Directory
_AD_Close()
gruß gmmg
die meldungen in den ausgaben sind schon unterschiedlich!
in der obersten steht noch > Skipping AU3check: Current version doesn't support the AutoIt3 v 3.3.9.5+ syntax.
den fehler sieht man in der underen nicht mehr.
probiere mal das folgendes Testscript! hier werden die user aus einer gruppe ausgelesen und entsprechende properties.
#include <D:\Data\scripte\AD_1.4.1.1_Functions\AD.au3>
Global $aGroups[1], $aMembers[1], $aProperties[1][2]
[/autoit] [autoit][/autoit] [autoit]; Open Connection to the Active Directory
_AD_Open()
If @error Then Exit MsgBox(16, "Active Directory Example Skript", "Function _AD_Open encountered a problem. @error = " & @error & ", @extended = " & @extended)
; Get a sorted list of members for the first group the currently logged on user is a member of
$aMembers = _AD_GetGroupMembers("AD_Gruppennamen_eingeben") ; hier den AD gruppennamen eintragen AD-Gruppenname
If @error > 0 Then
MsgBox(64, "Active Directory Functions - Example 1", "The group has no members")
Else
_ArraySort($aMembers, 0, 1)
_ArrayDisplay($aMembers, "Active Directory Functions - Example 1 - List of members for group")
EndIf
For $i = 1 to $aMembers[0]
[/autoit] [autoit][/autoit] [autoit]$sFQDN = _AD_SamAccountNameToFQDN()
[/autoit] [autoit][/autoit] [autoit]$aMembers01 = _AD_FQDNToDisplayname($aMembers[$i])
$sSamAccountName = _AD_FQDNToSamAccountName($aMembers[$i])
;MsgBox(0,"",$sSamAccountName)
;$login = $sSamAccountName
$aProperties = _AD_GetObjectProperties($sSamAccountName)
;_ArrayDisplay($aProperties, "Active Directory Functions - Example 1 - Properties for user '" & @UserName & "'")
;MsgBox(0,"", $aProperties[41][1])
For $x = 1 to $aProperties[0][0]
If $aProperties[$x][0] = "mail" then $mail = $aProperties[$x][1];MsgBox(0,"",$aProperties[$x][1])
If $aProperties[$x][0] = "objectSid" then $sid = $aProperties[$x][1]
Next
;MsgBox(0,"", $aMembers01)
ConsoleWrite($aMembers01 & ";"& $sSamAccountName & ";" & $mail & ";" & $sid & @CRLF)
Next
[/autoit] [autoit][/autoit] [autoit]; Close Connection to the Active Directory
_AD_Close()
gruß gmmg
@water , @ freddyd
bei mir funktioniert der Code in der Domäne!
#include <D:\Data\scripte\AD_1.4.1.1_Functions\AD.au3> ; da liegt bei mir die AD.au3
#include <DATE.au3>
#include <Array.au3>
_AD_Open()
$aProperties = _AD_GetObjectProperties(@UserName, "displayname,distinguishedName,pwdlastset")
ConsoleWrite(@error & @CRLF)
_ArrayDisplay ($aProperties)
$ddd = $aProperties[3][1]
_DateTimeFormat($ddd,2)
$zuletzt = _DateTimeFormat($ddd,2)&" "&" "&_DateTimeFormat($ddd,4)
$aProperties = _AD_GetObjectProperties(@ComputerName & "$")
$PCName = $aProperties[4][1]
$PCBeschreibung = $aProperties[7][1]
msgbox(4144,"",$PCName&" "&$PCBeschreibung)
_AD_Close()
gruß gmmg
aus welchem system kommen denn die daten?
ich würde das eher über eine Datenbank realisieren, auch mit Autoit (Access, MySQL, MSSQL u.a.) sind da möglich.
die daten in jeweils eine tabelle schreiben und darüber eine abfrage laufen lassen!
die gleichen daten würde ich dann in Tabelle A in Spalte X als gelöscht markieren.
Hat den vorteil, dass man hier dann auch aus der DB eine Statisktik erstellen kann, was du ja mit den Dateien nicht kannst, wenn du Datensätze löschst.
Nur mal als Ansatz ...
gruß gmmg
schon die sc.exe probiert?
http://support.microsoft.com/kb/251192/de
zum prüfen hättest auch ein autoit script schreiben können und das dann einfach per task ausführen
[autoit]
If ProcessExists("test.exe") Then
Else
Run("C:\test.exe")
EndIf
gruß gmmg
es gibt da verschiedene Gründe!
http://www.autoitscript.com/forum/topic/13…is-not-working/
oder
http://www.autoitscript.com/forum/topic/57…er-not-working/
suche mal bei google nach DllCall() send enter
;Send Enter
dllcall("keybd_event", int, 0x0D, int, 0x01C, int, 0, int, 0)
eventuell ist da was dabei, was dir hilft ...
gruß gmmg
wahrscheinlich hat keiner deine entsprechende Hardware um das zu testen!
Vielleicht hat der Button nach dem Send("{TAB}") noch nicht den Focus.
eventuell auch mit den Befehlen MouseClick, Controlclick, ControlSend mal dein Glück versuchen ...
gruß gmmg
Ja, ich habe die Variablen mal so umbenannt, das auch ein dritter das gleich versteht!
schau mal in den vorletzten Post (13) von mir, da stehen doch die neuen Varibalen definiert drin und sollten auch verständlich sein!
gruß gmmg
Habe aber noch nicht so ganz verstanden, was du machen willst!
Du hast 2 verzeichnisse in denen PDF Dateien liegen, diese möchtest du auf 2 verschiedenen Druckern ausdrucken!
PDF Dateien aus Verzeichnis 1 auf Drucker 1, PDF Dateien aus Verzeichnis 2 auf Drucker 2!
Ist das so richtig?
Hier das Script nochmal abgewandelt.
local $file
;Pfad zu PDF Viewer
$program_path = "C:\Programme\SumatraPDF\"
$path_defaultprinter = "c:\AutoIt\Program\"
$defaultprinter = "P040"
$printer1 = "P003"
$printer2 = "P006"
; Pfad der auf neue Dateien überwacht werden soll
; Recht muss vorhanden sein
$source_path = "T:\_PDF_Druck\"
Local $iFileExists = FileExists("T:\") ; soll nur abfragen, ob laufwerk T: vorhanden ist!
[/autoit] [autoit][/autoit] [autoit]If $iFileExists Then
MsgBox(0, "", "The file exists." & @CRLF & "FileExist returned: " & $iFileExists)
Else
MsgBox(0, "", "The file doesn't exist." & @CRLF & "FileExist returned: " & $iFileExists)
EndIf
$full_source_path1 = $source_path & $printer1
$full_source_path2 = $source_path & $printer2
; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
$dest = "T:\_PDF_Druck\save\"
; Dauer des Prüfintervalls in Millisekunden (10 Sek = 10000)
$interval = 5000
;----Test---
;$pdffile = $full_source_path1 & "test.pdf"
;$printer = $printer1
;ConsoleWrite('"' & $program_path & '\SumatraPDF.exe" -print-to '& $printer &' -silent -exit-when-done "' & $pdffile & '"')
;-----------
While 1
[/autoit] [autoit][/autoit] [autoit]Sleep($interval)
[/autoit] [autoit][/autoit] [autoit]; Druckverzeichnisse für jeden Drucker erstellen falls es mal geloescht wird
IF Not FileExists($full_source_path1) Then DirCreate($full_source_path1) ; wenn es nicht da ist, wird es erstellt! du hast es immer neu erstellt
IF Not FileExists($full_source_path2) Then DirCreate($full_source_path2) ; wenn es nicht da ist, wird es erstellt! du hast es immer neu erstellt
; Durchsuchen der Verzeichnisse nach PDF Dateien
FindFile($full_source_path1)
; Print File if Exists
If $file <> -1 then Print($printer1,$full_source_path1 & $file)
FileClose($file)
FindFile($full_source_path2)
; Print File if Exists
If $file <> -1 then Print($printer2,$full_source_path1 & $file)
FileClose($file)
WEnd
[/autoit] [autoit][/autoit] [autoit]Func FindFile($path)
$file = FileFindFirstFile ($path & "*.pdf")
Return $file
EndFunc
Func Print($printer,$pdffile)
[/autoit] [autoit][/autoit] [autoit];RunWait($pathtosetdefaultprinter & "SetDefaultPrinter.exe " & $printer, "", @SW_HIDE)
[/autoit] [autoit][/autoit] [autoit]While 1
$pdffile = FileFindNextFile($pdffile)
If @error then ExitLoop
RunWait('"' & $program_path & '\SumatraPDF.exe" -print-to '& $printer &' -silent -exit-when-done "' & $pdffile & '"')
;FileDelete($printer & '\' & $pdffile)
WEnd
;RunWait($pathtosetdefaultprinter & "SetDefaultPrinter.exe " & $standardprinter, "", @SW_HIDE)
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func Quit()
Exit
EndFunc
einen Default Printer musst du nicht setzen, wenn du direkt auf einen entsprechenden Drucker druckst!
Gruß gmmg
in meinem script sind noch fehler und das ist auch nicht getestet!
Zeile 13-19 prüft ob das laufwerk t: vorhanden ist.
könntest das aber auch so machen oder wie geschrieben unc pfade benutzen, dann sparst du dir den laufwerksbuchstaben
$path = "\\server\freigabe"
die Befehlszeilenparameter von SumatraPDF.exe kenne ich nicht, am besten hier auch im cmd den Befehl erstellen und dann nach autoit umsetzen!
eine consolewrite('"' & $program & '\SumatraPDF.exe" -print-to '& $printer &' -silent -exit-when-done "' & $printer & '\' & $pdffile & '"') sollte da auch helfen, damit kannst du dir die Ausgabe nochmal im scite ansehen..
$status = DriveStatus( "T:" )
;MsgBox(0,"test", $status,1)
If $status = "INVALID" Then
DriveMapAdd("T:", "\\server", 0,"$ADMINUSER,$ADMINPASS)
MsgBox(0,"T:\Laufwerk", "Verbindung hergestellt",1)
EndIf
;Pfad zu PDF Viewer
$program_path = "C:\Programme\SumatraPDF\"
$pathtosetdefaultprinter = "c:\AutoIt\Program\"
$standardprinter = "P040"
$P1 = "P003"
$P2 = "P006"
; Pfad der auf neue Dateien überwacht werden soll
; Recht muss vorhanden sein
$source = "T:\_PDF_Druck\"
Local $iFileExists = FileExists("T:\") ; soll nur abfragen, ob laufwerk T: vorhanden ist!
[/autoit] [autoit][/autoit] [autoit]If $iFileExists Then
MsgBox(0, "", "The file exists." & @CRLF & "FileExist returned: " & $iFileExists)
Else
MsgBox(0, "", "The file doesn't exist." & @CRLF & "FileExist returned: " & $iFileExists)
EndIf
$sP1 = $source & $P1
$sP2 = $source & $P2
; Pfad, in den die Dateien nach dem Drucken verschoben werden sollen
$dest = "T:\_PDF_Druck\save"
; Dauer des Prüfintervalls in Millisekunden (10 Sek = 10000)
$interval = 5000
$pdffile = "test.pdf"
$printer = $P1
ConsoleWrite('"' & $program_path & 'SumatraPDF.exe" -print-to '& $printer &' -silent -exit-when-done "' & $printer & '\' & $pdffile & '"')
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]Sleep($interval)
[/autoit] [autoit][/autoit] [autoit]; Druckverzeichnisse für jeden Drucker erstellen falls es mal geloescht wird
IF Not FileExists($sP1) Then DirCreate($sP1) ; wenn es nicht da ist, wird es erstellt! du hast es immer neu erstellt
IF Not FileExists($sP2) Then DirCreate($sP2) ; wenn es nicht da ist, wird es erstellt! du hast es immer neu erstellt
; Durchsuchen der Verzeichnisse nach PDF Dateien
$file1 = FileFindFirstFile ($sP1 & "\*.pdf")
If $file1 <> -1 then Print($sP1,$file1) ;ruft die funktion print auf und übergibt die zwei parameter Drucker und Datei
FileClose($file1)
$file2 = FileFindFirstFile ($sP2 & "\*.pdf")
If $file2 <> -1 then Print($sP2,$file2) ;ruft die funktion print auf und übergibt die zwei parameter Drucker und Datei
FileClose($file2)
WEnd
[/autoit] [autoit][/autoit] [autoit]Func Print($printer,$printfile)
[/autoit] [autoit][/autoit] [autoit]RunWait($pathtosetdefaultprinter & "SetDefaultPrinter.exe " & $printer, "", @SW_HIDE)
[/autoit] [autoit][/autoit] [autoit]While 1
$pdffile = FileFindNextFile($printfile)
If @error then ExitLoop
RunWait('"' & $program_path & '\SumatraPDF.exe" -print-to '& $printer &' -silent -exit-when-done "' & $printer & '\' & $pdffile & '"')
FileDelete($printer & '\' & $pdffile)
WEnd
RunWait($pathtosetdefaultprinter & "SetDefaultPrinter.exe " & $standardprinter, "", @SW_HIDE)
EndFunc
[/autoit] [autoit][/autoit] [autoit]Func Quit()
Exit
EndFunc
hab in zeile 30-33 mal das consolewrite eingebaut! musst du bei dir entpsrechend anpassen!
http://www.sumatrapdfreader.org/manual-de.html
...
der Befehl -print-to $printer_name $file.pdf druckt die angegebene PDF auf dem angegebenen Drucker
gruß gmmg