Habe es jetzt mal mit $MB_ICONNONE versucht, ist aber immer noch zu hören. Die Icon wäre mir egal, hauptsache ruhig. Früher gab es mal ein "net stop beep" aber das geht wohl nicht mehr.
Beiträge von Code4Fun
-
-
Hallo,
ich habe diverse Scripte, wo ich am Ende eine MsgBox ausgebe, welche sich dann nach 1 bis 3 Sekunden schließen. Es ist jetzt aber so, das beim Erscheinen immer dieser Betriebssystem Beep am Lautsprecher ausgegeben wird. Wie kann ich das unterdrücken?
-
Ich muss mich jetzt nochmals melden, da ich noch keine Lösung habe. Folgendes habe ich mal gemacht. Da ich kein Programmierer bin, habe ich mir via copilot einen C# Code zusammen bauen lassen, welcher mit den Zugangsdaten von Autoit die Datenbank anfrägt. Wenn die Verbindung erfolgreich ist (oder auch nicht), soll eine Messagebox ausgegeben werden. Beim ersten Versuch wurde dort dann ebenfalls auf ein SSL Problem verwiesen. Leider werde ich die ganzen Parteien nicht an einen Tisch bekommen, von daher wurde mir "erst mal" - damit ich die Verbindung hinbekomme, folgendes empfohlen.
Code// Verbindung zum SQL Server herstellen string connectionString = $"Server={ip};Database={dbName};User Id={user};Password={password};Encrypt=True;TrustServerCertificate=True;"; // Verbindungszeichenfolge für den SQL Server using (SqlConnection conn = new SqlConnection(connectionString)) // Erstellt eine neue SQL-Verbindung
Wie bilde ich das Encrypt=True;TrustServerCertificate=True; in meinem Autoit Script bzw. der MSSQL.au3 ab?
Das hier geht leider nicht
Code
Alles anzeigen;=============================================================================== ; ; Function Name....: _MSSQL_Con ; Description......: Connect to a Database ; Syntax...........: _MSSQL_Con($scIP, $scUser, $scPass, $scDB) ; Parameter(s).....: $scIP = IP adress ; $scUser = User ; $scPass = Pass ; $scDB = Database ; Return Value(s)..: Success - Returns the Database-"handle" ; ;=============================================================================== Func _MSSQL_Con($scIP, $scUser, $scPass, $scDB) Local $sqlCon $sqlCon = ObjCreate("ADODB.Connection") $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";Encrypt=True;TrustServerCertificate=True;") Return $sqlCon EndFunc ;==>_MSSQL_Con
-
Folgende Links behandeln auch das Handshake Thema. Eventuell lassen sich da Infos gewinnen.
https://learn.microsoft.com/en-us/answers/…iled-(dbnetlib)(connectionopen
Ja, läuft als x64. Hat aber auch nicht geholfen.
-
Wenn Du den aktuellsten SQLOLEDB Treiber verwendest, dann sollte TLS 1.2 kein Problem mehr sein (zumindest lt. Stackoverflow, siehe Link oben).
Mit folgendem Skript erhältst Du eine Liste aller installierten Treiber inkl. Dateiname und Version.
AutoIt
Alles anzeigen#include <Constants.au3> #include <Debug.au3> _ADO_OLEDBProvidersList() Func _ADO_OLEDBProvidersList() Local $sKey = "HKCR\CLSID" Local $iIndexReg = 1, $iIndexResult = 0 Local $iMax = 100000, $iMin = 1, $iPrevious = $iMin, $iCurrent = $iMax / 2 Local $aResult[200][6] ProgressOn("OLE DB Providers", "Processing the Registry", "", Default, Default, $DLG_MOVEABLE) AutoItSetOption("ExpandEnvStrings", 1) ; Count the number of keys While 1 RegEnumKey($sKey, $iCurrent) If @error = -1 Then ; Requested subkey (key instance) out of range $iMax = $iCurrent $iCurrent = Int(($iMin + $iMax) / 2) $iPrevious = $iMax Else If $iPrevious <= ($iCurrent + 1) And $iPrevious >= ($iCurrent - 1) Then ExitLoop $iMin = $iCurrent $iCurrent = Int(($iMin + $iMax) / 2) $iPrevious = $iMin EndIf WEnd Local $iPercent = 0 Local $sKeyValue = '' ; Process registry While 1 If Mod($iIndexReg, 10) = 0 Then $iPercent = Int($iIndexReg * 100 / $iCurrent) ProgressSet($iPercent, $iIndexReg & " keys of " & $iCurrent & " processed (" & $iPercent & "%)") EndIf $sSubKey = RegEnumKey($sKey, $iIndexReg) If @error Then ExitLoop $sKeyValue = RegRead($sKey & "\" & $sSubKey, "OLEDB_SERVICES") If @error = 0 Then $aResult[$iIndexResult][0] = $sKey & "\" & $sSubKey ; Registry Key $aResult[$iIndexResult][1] = RegRead($sKey & "\" & $sSubKey, "") ; OLE DB Provider $aResult[$iIndexResult][2] = RegRead($sKey & "\" & $sSubKey & "\OLE DB Provider", "") ; Description $aResult[$iIndexResult][3] = RegRead($sKey & "\" & $sSubKey & "\InprocServer32", "") ; DLL file If $aResult[$iIndexResult][3] <> "" Then $aResult[$iIndexResult][4] = _FileGetProperty($aResult[$iIndexResult][3], "Dateiversion") $aResult[$iIndexResult][5] = _FileGetProperty($aResult[$iIndexResult][3], "Änderungsdatum") EndIf $iIndexResult += 1 EndIf $iIndexReg += 1 WEnd ProgressOff() ReDim $aResult[$iIndexResult][UBound($aResult, 2)] _DebugArrayDisplay($aResult, "OLE DB Providers", "", 0, Default, "Registry key|OLE DB Provider|Description|DLL|DLL Version|DLL last modified") EndFunc ;==>_ADO_OLEDBProvidersList
Hallo Water,
wenn ich versuche das Script via F5 laufen zu lassen (unter aktueller Autoit Version 3.3.16.1), bekomme ich folgenden Fehler:
Treiber.au3"(60,94) : error: _FileGetProperty(): undefined function.
$aResult[$iIndexResult][4] = _FileGetProperty($aResult[$iIndexResult][3], "Dateiversion")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Treiber.au3 - 1 error(s), 0 warning(s)An was könnte das liegen?
-
Google zeigt für den Suchtext "connectionOpen SECDoClientHandshake SSL 80020009" in Richtung TLS
Das würde ja Sinn machen. Wie gesagt, im Konzern wurden wir in eine andere AD Domain migriert. Vermutlich wurde in dem Step auch die eine oder andere TLS Version deaktiviert. Da ich ja nur mit der mssql.au3 arbeite und damit die Verbindung herstelle, stellt sich mir halt die Frage, ob es in der Richtung was aktuelleres gibt?
-
Hallo zusammen,
ich habe ein paar Autoit Scripte, welche mit der MSSQL.au3 diverse Datenbanken anflanschen. Diese laufen seit Jahren auf einem Windows 2016 Terminalserver, die Datenbanken liegen auf einem anderen Windows Server. An den Datenbanken wurde nichts geändert und an den Scripten auch nicht. Es gab wohl eine Domänen Migration. In einen Script bekomme ich plötzlich diesen SSL Sicherheitsfehler, wobei wir hier nicht über einen SSL Kanal kommunizieren. Auf dem Terminalserver läuft z.B. auch DBeaver, welcher weiterhin die Datenbanken ansprechen kann.
In meinem anderen Script fliege ich bei Zeile 350 raus.
Anbei der Ausschnitt aus der stripped Datei
Wie gehe ich bei so einer Fehlersuche denn vor. Bin jetzt schon einige Zeit aus dem Scripten draußen, von daher um jede Hilfe dankbar.
Gruß
-
du kannst auch PureBasic verwenden, um dein Script zu starten.
Wenn Interesse besteht einfach Bescheid geben.
Erfordert eine autoit3.exe und ein a3x-Datei in einem Verzeichnis. Die selbstkompilierte PureBasic.exe startet dann die a3x.
Prüft anhand md5, ob die a3x Datei unverändert ist oder ersetzt wurde.
Hallo Schnuffel, kannst Du mir dazu etwas mehr erzählen?
-
Hallo,
ich habe folgendes kleines Script geschrieben. Es soll nur die Zwischenablage auslesen und an einer bestimmten Koordinate dann via SEND reinschreiben. Also nix wildes.
AutoIt
Alles anzeigen#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=rci.ico #AutoIt3Wrapper_Outfile_x64=RemoteClipboardInput.exe #AutoIt3Wrapper_Run_Tidy=y #Tidy_Parameters=/reel #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> Global $clipboardText = "Platzhalter" Global $mouseX = 0 Global $mouseY = 0 Global $gui, $label1, $button1, $label2, $label3, $button2, $label4, $label5, $button3 ; Erstellen Sie die GUI $gui = GUICreate("Remote Clipboard Input", 720, 300) GUISetState(@SW_SHOW) ; Erstellen Sie das erste Label und den Button $label1 = GUICtrlCreateLabel("1. Bitte den einzufügenden Text in die Zwischenablage kopieren und OK drücken", 10, 10, 480, 50) GUICtrlSetFont(-1, 10) $button1 = GUICtrlCreateButton("OK", 500, 10) $label2 = GUICtrlCreateLabel("2. Der Wert auf der Zwischenablage ist: " & $clipboardText, 10, 70, 480, 50) GUICtrlSetFont(-1, 10) $label3 = GUICtrlCreateLabel("3. Bitte mit der Maus zu den Koordinaten fahren, wo der Zwischenablagetext eingefügt werden soll. Dann 2x die linke Maustaste drücken", 10, 130, 480, 50) GUICtrlSetFont(-1, 10) $button2 = GUICtrlCreateButton("Mauskoordinaten bestimmen", 500, 130) $label4 = GUICtrlCreateLabel("4. Die gewählten Koordinaten sind: X=" & $mouseX & ", Y=" & $mouseY, 10, 190, 480, 50) GUICtrlSetFont(-1, 10) $label5 = GUICtrlCreateLabel("5. Zwischenablagetext " & $clipboardText & " bei den Koordinaten X=" & $mouseX & ", Y=" & $mouseY & " eintragen.", 10, 250, 480, 50) GUICtrlSetFont(-1, 10) $button3 = GUICtrlCreateButton("Zwischenablage Text remote übertragen", 500, 250) While 1 $msg = GUIGetMsg() If $msg = $GUI_EVENT_CLOSE Then Exit ElseIf $msg = $button1 Then ;~ ClipPut("") $clipboardText = ClipGet() If $clipboardText = "" Then $clipboardText = "NULL" EndIf GUICtrlSetData($label2, "2. Der Wert auf der Zwischenablage ist: " & $clipboardText) GUICtrlSetBkColor($button1, 0x90EE90) ; Hellgrün ElseIf $msg = $button2 Then Local $clickCount = 0 While $clickCount < 2 If _IsPressed("01") Then ; linke Maustaste $clickCount += 1 Sleep(200) ; Vermeiden Sie Doppelklicks EndIf $mousePos = MouseGetPos() ToolTip("X: " & $mousePos[0] & ", Y: " & $mousePos[1], $mousePos[0] + 30, $mousePos[1]) Sleep(10) WEnd ToolTip("") $mouseX = $mousePos[0] $mouseY = $mousePos[1] GUICtrlSetData($label4, "4. Die gewählten Koordinaten sind: X=" & $mouseX & ", Y=" & $mouseY) GUICtrlSetData($label5, "5. Zwischenablagetext " & $clipboardText & " bei den Koordinaten X=" & $mouseX & ", Y=" & $mouseY & " eintragen.") GUICtrlSetBkColor($button2, 0x90EE90) ; Hellgrün ElseIf $msg = $button3 Then MouseClick("left", $mouseX, $mouseY) Sleep(500) MouseClick("left", $mouseX, $mouseY) WinActivate("[ACTIVE]") Send($clipboardText & "{ENTER}") MsgBox($MB_ICONEXCLAMATION + $MB_OK, "Fertig", "Zwischenablage Text erfolgreich übertragen.", 2) EndIf WEnd Func _IsPressed($hexKey) Local $aR = DllCall("user32", "int", "GetAsyncKeyState", "int", "0x" & $hexKey) If Not @error And BitAND($aR[0], 0x8000) = 0x8000 Then Return 1 Else Return 0 EndIf EndFunc ;==>_IsPressed
Wenn ich die EXE dann auf meinem Firmen PC ausführe, schlägt der Firmen Scaner an mit
Habe ich hier irgendeine Möglichkeit, den Code anzupassen, damit er als harmlos erkannt wird?
-
Hallo zusammen,
ich habe jetzt schon ein paar Jahre nichts mehr mit Autoit gemacht und bräuchte mal eure Hilfe. Ich habe ein altes Script, welches diverse Datenbanken der Reihe nach andockt und dort eine oder mehrere Abfragen machen. Jetzt ist es aber so, das unsere Datenbank Admins ab und zu mal die Datenbanken auf andere Systeme verlagern, sodass die IP Adresse nicht mehr passt und dadurch mein Script auf die Nase fällt.
Mit der Funktion _MSSQL_Con aus MSSQL.au3 erstelle ich ja meine Datenbankverbindung
CodeFunc _MSSQL_Con($scIP, $scUser, $scPass, $scDB) Local $sqlCon $sqlCon = ObjCreate("ADODB.Connection") $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";") Return $sqlCon EndFunc ;==>_MSSQL_Con
Wie kann ich denn jetzt prüfen, ob Return $sqlCon erfolgreich war, oder nicht.
Wenn es nicht erfolgreich ist, fliegt mir aktuell mein Script weg. Ich würde das gerne aber so lösen, das ich zumindest an dieser Stelle das irgendwie abfangen kann und mir via Messagebox mitteilen lassen kann, das diese Verbindung fehlerhaft ist. Schön wäre es dann noch, wenn das Script dann trotzdem mit den restlichen Datenbanken weiterlaufen würde.
Hier noch ein Beispiel von einer meiner DatenbankverbindungenCodeIf $SelectedDatabase = "ABC" Then $URL = "https://www.platzhalter.fqdn/abc/" $IP = $IP3 $USER = "abcuser" $PASSWORD = "abcpasswort" $DB = "abcdb" $sqlCon = _MSSQL_Con($IP, $USER, $PASSWORD, $DB) ; IP, User, PW, DB ConsoleWrite("$sqlCon bei ABC ist: " & $sqlCon & @CRLF) EndIf
Leider komme ich aktuell nicht bis zum ConsoleWrite. Wenn ich das Script mit F5 laufen lasse, fliege ich aktuell so raus
Code"C:\Program Files (x86)\AutoIt3\Include\MSSQL.au3" (434) : ==> The requested action with this object has failed.: $sqlCon.Open("Provider=SQLOLEDB; Data Source=" & $scIP & "; User ID=" & $scUser & "; Password=" & $scPass & "; database=" & $scDB & ";") $sqlCon^ ERROR ->10:08:36 AutoIt3.exe ended.rc:1 +>10:08:36 AutoIt3Wrapper Finished
Danke für eure Tipps
-
Hallo,
ich habe ein Script, welches seit Jahren auf Windows 10 läuft. Ich muss es jetzt aber irgendwie unter Windows Server 2019 zum Laufen bringen. Das (erste) Problem befindet sich in dieser Funktion
Spoiler anzeigen
Code
Alles anzeigenFunc Abfragen() Local $sServerName, $sPaket, $sPOST, $hConnect, $hSession, $aTestString $hSession = _WinHttpOpen('Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:64.0) Gecko/20100101 Firefox/64.0') ;host $sServerName = 'leanv.zks-abfall.de' $hConnect = _WinHttpConnect($hSession, $sServerName) _WinHttpSetTimeouts($hConnect, 10000, 60000, 120000, 120000) ;(1)Aufruf der Seite: https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', '/LaenderEANV_Web/registrierung?BTN-initRegistration=start') ;~ _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(2)rechts oben auf Anmelden klicken (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', '/LaenderEANV_Web/registrierung?action=displaylogin', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start') ;~ _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(3)Benutzername und Passwort senden (POST) ;~ ConsoleWrite("Benutername in der ZKS_Abfrage ist: " & $sBenutzerName & " mit dem Passwort: " & $sPasswort & @CRLF) $sPOST = 'action=login&uname=' & $sBenutzerName & '&password=' & $sPasswort & '&login=login' ;~ ConsoleWrite("$sPOST ist: " & $sPOST & @CRLF) $sPaket = "" ConsoleWrite("STOP" & @CRLF) Exit While $sPaket = "" ;Entweder auf "0" = Zeichen oder 0 = Zahl prüfen $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST) WEnd ;~ $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST) _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(4)Unter Menü Registrierung/Stammdatenpflege auf Registrierung/Stammdaten klicken (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', 'LaenderEANV_Web/registrierung?BTN-initRegistration=start', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung') ;~ _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(5)Auf die große blaue Schaltfläche Registrierung/Stammdatenpflege klicken (POST) $sPOST = 'BTN-auswahl=Registrierung / Stammdatenpflege' $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/stammdaten', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?BTN-initRegistration=start', $sPOST) ;~ _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ;(6)Auf den Radio Button Baden-Württemberg klicken $sPOST = 'chooseBL=H&ok=Übernehmen' $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', 'LaenderEANV_Web/stammdaten?action=auswahl', 'https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten', $sPOST) ;~ _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei ClipPut("") ; Zwischenablage zur Vorsicht einmal leeren Sleep(500) ClipPut($sPaket) ; Zwischenablage mit Quellcode befüllen Sleep(500) _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei Sleep(500) ;(7)rechts oben auf Abmelden klicken (GET) $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'GET', '/LaenderEANV_Web/registrierung?action=logout', 'https://leanv.zks-abfall.de/LaenderEANV_Web/stammdaten?BTN-main=Stammdaten') ;~ _FileWrite($sPaket) ; schreibe eine Kontroll HTML Datei _WinHttpCloseHandle($hConnect) ; die Handles werden beendet _WinHttpCloseHandle($hSession) ; die Handles werden beendet PARSEN_Dokumentenname() ; mit der befüllten Zwischenablage wird an die Funktion PARSEN_Dokumentenname() übergeben. EndFunc ;==>ZKS_Abfragen
Ich habe die beiden Zeilen
immer weiter im Code versetzt, bis ich keine STOP Meldung mehr bekommen habe. Der Windows Server hat wohl mit diesem Aufruf ein Problem
CodeWhile $sPaket = "" ;Entweder auf "0" = Zeichen oder 0 = Zahl prüfen $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST) WEnd
Wo liegt hier der Unterschied zwischen Windows 10 und Windows Server?
Gruß Code4Fun
-
Hallo,
ich schreibe gerade ein Script, wo ich aus einer Textdatei Zahlenfolgen auslese und diese dann in einer in Firefox Version 91.0.2 (64-Bit) geöffneten Cloudanwendung per Tabs und Mausklickst eintrage. Irgendwann "versende" ich dann dort über eine Schaltfläche etwas. Als Response bekomme ich dann im Quelltext
bei Erfolg: <div class="alert alert-success" role="alert">Dokument erfolgreich versendet!</div>
und
bei einem Fehler: <div class="alert alert-danger" role="alert">Ein Fehler ist aufgetreten: de.fum.eanv.core.exception.PermissionException: Zugriff verweigert!</div>
Da die FF.au3 wohl nur noch bis Firefox Version 57 geht, wollte ich mal fragen, was hier denn ein guter gangbarer Weg ist, den Quelltext zu parsen?
Vielen Dank
Gruß C4F
-
Hallo,
ich habe eine einfach GUI, in welche deutsche Umlaute vorkommen. Wenn ich das Script mit F5 ausführe, werden diese sauber dargestellt. Wird das Script aber x64 compiliert, sehen die Umlaute komisch aus.
Woran kann dass denn liegen?
Gruß
-
Guten Morgen,
ich habe mir vor langer Zeit ein kleines Script gebaut, welches diverse Daten aus dem Internet holt und diese dann in ein lokales Verzeichnis speichert. Wenn ich das Script starte, erscheint eine kleine GUI mit 2 Buttons. Der eine Button holt die Dateien aus dem Internet, der andere öffnet den Explorer mit dem Verzeichnis, wo die Daten hingespeichert wurden.
Der Virenscanner in der Firma hat dieses Script in letzter Zeit gerne in die Mange genommen. Daraufhin habe ich mit der Komprimierung rumgespielt.
Was ich jetzt nicht verstehe:
Wenn ich via F5 das Script starte, läuft alles ganz normal.
Wenn ich die EXE starte, sehe ich im Taskmanager, das die EXE läuft. Jedoch wird diese nach ca. 2 Sekunden einfach beendet - ohne Fehlermeldung. Die GUI erscheint nicht. Der Virenscanner schlägt aber auch nicht an (habe auch die Logs kontrolliert).Wie kann man so einem Problem auf die Spur kommen?
Gruß C4F
-
Ich habe es jetzt mit einer weiteren Zeile WinSetState($sApp, "", @SW_MAXIMIZE) hinbekommen.
AutoIt: Code Schnipsel
Alles anzeigen;Microsoft Outlook suchen und sortieren $sApp = "[TITLE:Outlook; CLASS:rctrl_renwnd32]" If WinExists($sApp) Then ; Wenn Microsoft Outlook geöffnet ist und gefunden wurde, dann ... If $sLocation = "GP" Then WinSetState($sApp, "", @SW_RESTORE) WinMove($sApp, "", 1672, -8, 1696, 1036) ; das sind die Koordinaten von GP WinActivate($sApp) WinSetState($sApp, "", @SW_MAXIMIZE) EndIf If $sLocation = "NU" Then WinSetState($sApp, "", @SW_RESTORE) WinMove($sApp, "", 2497, 0, 1343, 1050) ; das sind die Koordinaten von NU WinActivate($sApp) EndIf If $sLocation = "UL" Then WinSetState($sApp, "", @SW_RESTORE) WinMove($sApp, "", 1912, -8, 1936, 1066) ; das sind die Koordinaten von UL WinActivate($sApp) EndIf EndIf
Danke an Alle
-
Welchen Ansatz habe ich denn, das zu korrigieren, ohne hier mich "ran zu tasten"?
-
Hallo zusammen,
ich habe mir ein kleines Script gebaut, welches mir meine Anwendungen auf definierte Positionen auf meinen Monitoren platziert.
Beim Firefox viel mir auf, das er nicht ganz richtig positioniert wird. Ich habe dann die leicht falsch sitzende Firefox Position mit (Frozen) AutoIt v3 Windows Info 64-Bit gemessen und die Werte -8, -8, 1696, 1005 ermittelt.
Danach habe ich im Firefox rechts oben auf die Maximieren Schaltfläche geklickt. Jetzt hat sich Firefox perferkt positioniert. Daraufhin habe ich mit (Frozen) AutoIt v3 Windows Info 64-Bit nochmals gemessen, bekomme aber wieder die Werte -8, -8, 1696, 1005 angezeigt.
Kann mir das bitte mal jemand erklären, was hier nicht ganz passt?
Danke
-
OK, ganz grob verstanden.
-
Hallo Kanashius,
danke für die positive Rückmeldung. Den Code schaue ich mir noch in Ruhe an. Ein Hash sagt mir was, aber von einem Salt habe ich noch nie was gehört. Was steckt da genau dahinter?
Gruß C4F
-
Erst mal vielen Dank.
Ich habe jetzt mal die ersten Zeilen geschrieben. "Eigentlich" läuft das in die Richtung die mir ausreicht, aber folgendes ist mir aufgefallen, wo ich keine richtige Erklärung dazu habe
- Das Passwort wird als OK (also gleich) erkannt, auch wenn die Buchstaben gross oder klein geschrieben werden. Wie kann ich das ändern? Ein a = A ist ja nicht A = A
- Wenn ich die ComboBox nicht via Maus bediene, sondern mit den Pfeiltasten den Benutzer raussuche und dann mit der Tabulator Taste zum Passwortfeld hüpfe, wird das Passwort nur vom BenutzerA ausgewertet. Wähle ich BenutzerB oder Mitarbeiter via Pfeiltasten, wird das Passwort als leerer String erkannt. Klicke ich jedoch die ComboBox mit der Maus an, dann wir das Passwort ausgelesen. Ich glaube aber auch, das hier noch im Ablauf der Wurm drin steckt. Vielleicht kann mir hier einer eine Verbesserung vorschlagen
- In Zeile 122 lasse ich zur Kontrolle das Passwort an der Console ausgeben. Hierbei fällt mir auf, dass das nicht nur 1x ausgegeben wird, sondern gleich 5 mal. Was mache ich denn da falsch.
Danke für eure Hilfe
Loginscript
C
Alles anzeigen#include <AutoItConstants.au3> #include <ColorConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <FontConstants.au3> #include <MsgBoxConstants.au3> #include <WinAPI.au3> #include <WinAPISys.au3> #include <WinAPIGdi.au3> #include <WinAPIHObj.au3> #include <WindowsConstants.au3> #include <misc.au3> #Region ; Script Kopf #cs ---------------------------------------------------------------------------- Script Function: Diese Script soll bei der Windowsanmeldung, bzw. von Hand gestartet werden können. Die Aufgaben sollen sein: - Benutzer via Dropdownbox auswählen - Passwort eingeben - Passwort überprüfen - Wenn Passwort OK, dann ... - verschiedene Netzwerklaufwerke auf der NAS verbinden - verschiedene Outlook Profile mit dem jeweiligen Benutzer verbinden - Optional: Protokolldatei schreiben, wer sich wann angemeldet hat - Optional: Überlegung was passiert beim sperren oder Logout Prozess von Windows. Erstellungendatum: 17.11.2021 - Start Änderungsdatum: Version: 0.0.0.* History: 0.0.0.*: Entwicklungsphase 1.0.0.0: Initialerstellung Info: Passwörter werden in der Globale Variablendeklaration gesetzt #ce ---------------------------------------------------------------------------- #EndRegion ; Script Kopf #Region ; AutoIt-Spezifischen Optionen Opt("GUICloseOnESC", 1) ; Wenn man die ESC Taste drückt, wird die GUI geschlossen, da eine $GUI_EVENT_CLOSE Nachricht gesendet wird Opt("MustDeclareVars", 1) ; Variablen (Dim / Global / Local / Const) müssen deklariert sein. Wichtig für Fehlersuche Opt("TrayIconDebug", 1) ; Zeigt die aktuelle Skriptzeile im Trayicon Tipp um das Debugging zu unterstützen Opt("WinTitleMatchMode", 2) ; 1=vom Anfang, 2=enthält, 3=genau, 4=fortgeschritten, -1 bis -4=Groß-/Klein ignorieren #EndRegion ; AutoIt-Spezifischen Optionen #Region ; Globale Variablendeklaration Global $iMsg, $hGUI, $hGUIParent, $hGUIChild, $idComboBox, $sComboRead = "", $sPassword, $sPasswortCheck Global $sFileVersion = FileGetVersion(@AutoItExe) Global $sPasswort_BenutzerA = "123AR"; müssen noch angepasst werden Global $sPasswort_BenutzerB = "456ar"; müssen noch angepasst werden Global $sPasswort_Mitarbeiter = "789ma"; müssen noch angepasst werden Global $sBenutzer = "" #EndRegion ; Globale Variablendeklaration #Region ; GUI Erstellung $hGUIParent = GUICreate("", @DesktopWidth, @DesktopHeight, -3, Default, Default, Default) ; Das Hauptfenster wird erstellt GUISetBkColor(0x4d4d4d) ; Ändert die Hintergrundfarbe in ein grau GUISetState(@SW_SHOW, $hGUIParent) ; Das Hauptfenster neu aufbauen $hGUIChild = GUICreate(" Login - Firma Reik Raumausstattung", 600, 400, Default, Default, Default, Default, $hGUIParent) ; Das davor liegende Childfenster wird erstellt GUISwitch($hGUIChild) ; Das Childfenster wird zum aktuellen Fenster angewendet, damit dort GUI Funktionen angewendet werden können. GUISetBkColor(0x680000) ; Ändert die Hintergrundfarbe in ein rot GUICtrlCreateLabel("Bitte wähle Deinen Benutzer aus:", 50, 10, 500) ; Beschreibender Text erstellen GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss GUICtrlSetFont(-1, 12) $idComboBox = GUICtrlCreateCombo("", 50, 50, 200) ; Dropdown Menü erstellen GUICtrlSetFont(-1, 10) GUICtrlSetData($idComboBox, "BenutzerA|BenutzerB|Mitarbeiter", "") GUISetState(@SW_SHOW, $hGUIChild) ; Das Childfenster neu aufbauen #EndRegion ; GUI Erstellung #Region ; Hauptschleife $iMsg = 0 While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop Case $idComboBox $sComboRead = GUICtrlRead($idComboBox) GUICtrlCreateLabel('Du hast den Benutzer "' & $sComboRead & '" gewählt', 50, 80, 500) ; Beschreibender Text erstellen GUICtrlSetFont(-1, 10) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss GUICtrlCreateLabel('Bitte gebe das Passwort von "' & $sComboRead & '" ein', 50, 120, 500) ; Beschreibender Text erstellen GUICtrlSetFont(-1, 10) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss GUICtrlCreateLabel("Passwort:", 50, 150, 500) ; Schreibe Passwort GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss $sPassword = GUICtrlCreateInput("", 50, 180, 500, Default, BitOR($ES_PASSWORD, $ES_AUTOHSCROLL)) ; Inputfeld für Passwort GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0x000000) ; Setzt die Schriftfarbe auf weiss GUISetState(@SW_SHOW, $hGUIChild) ; Das Childfenster neu aufbauen EndSwitch If _IsPressed("0D") Then $sPasswortCheck = GUICtrlRead($sPassword) _01_PasswortCheck($sComboRead, $sPasswortCheck) EndIf WEnd GUIDelete($hGUI) ; schließe die GUI #EndRegion ; Hauptschleife Func _01_PasswortCheck($sComboRead, $sPasswortCheck) ConsoleWrite("erkanntes Passwort: " & $sPasswortCheck & @CRLF) If $sComboRead = "BenutzerA" Then ; Passwortcheck für BenutzerA If $sPasswortCheck = $sPasswort_BenutzerA Then ; BenutzerA hat das korrekte Passwort eingegeben $sBenutzer = "BenutzerA" GUICtrlCreateLabel("Das Passwort wurde korrekt eingegeben. Login wird fortgesetzt ...", 50, 210, 500) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss _02_Steuerung() Else GUICtrlCreateLabel($sPasswortCheck & " war wohl nichts. Bitte nochmals eingeben!", 50, 210, 500) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0x7FFF00) ; Setzt die Schriftfarbe auf weiss EndIf EndIf If $sComboRead = "BenutzerB" Then ; Passwortcheck für BenutzerB If $sPasswortCheck = $sPasswort_BenutzerB Then ; BenutzerB hat das korrekte Passwort eingegeben $sBenutzer = "BenutzerB" GUICtrlCreateLabel("Das Passwort wurde korrekt eingegeben. Login wird fortgesetzt ...", 50, 210, 500) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss _02_Steuerung() Else GUICtrlCreateLabel($sPasswortCheck & " war wohl nichts. Bitte nochmals eingeben!", 50, 210, 500) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0x7FFF00) ; Setzt die Schriftfarbe auf weiss EndIf EndIf If $sComboRead = "Mitarbeiter" Then ; Passwortcheck für Mitarbeiter If $sPasswortCheck = $sPasswort_Mitarbeiter Then ; Mitarbeiter hat das korrekte Passwort eingegeben $sBenutzer = "Mitarbeiter" GUICtrlCreateLabel("Das Passwort wurde korrekt eingegeben. Login wird fortgesetzt ...", 50, 210, 500) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss _02_Steuerung() Else GUICtrlCreateLabel($sPasswortCheck & " war wohl nichts. Bitte nochmals eingeben!", 50, 210, 500) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0x7FFF00) ; Setzt die Schriftfarbe auf weiss EndIf EndIf GUISetState(@SW_SHOW, $hGUIChild) ; Das Childfenster neu aufbauen EndFunc ;==>_01_PasswortCheck Func _02_Steuerung() _03_Laufwerke($sBenutzer) _04_Outlook() EndFunc ;==>_02_Steuerung Func _03_Laufwerke($sBenutzer) ; Benutzerlaufwerke managen ; Verbindungen trennen GUICtrlCreateLabel("Loginscript von " & $sBenutzer & " wird gestartet", 150, 310, 400) ; Schreibe erfolgreiche Passworteingabemeldung GUICtrlSetFont(-1, 12) GUICtrlSetColor(-1, 0xFFFFFF) ; Setzt die Schriftfarbe auf weiss GUISetState(@SW_SHOW, $hGUIChild) ; Das Childfenster neu aufbauen ; Laufwerke löschen - eventuell vorher Anwendungen schließen, die auf diese Laufwerke zugreifen. ; Kontrolliern ob Sie gelöscht sind ; Laufwerke neu mappen EndFunc ;==>_03_Laufwerke Func _04_Outlook() ; Outlookprofile managen EndFunc ;==>_04_Outlook