Beiträge von gmmg
-
-
-
Da gibt es mehrere Ansätze bzw. fertige Software
Lithnet Idle Logoff Group Policy Administrative Templates
How can I log users off after a period of inactivity, rather than merely locking the workstation? Is there a "logoff" screen saver? - The Old New ThingPutting together some building blocks.devblogs.microsoft.comAuto logout for users - Microsoft Q&AHi, I have a question because so far I have only found the lock screen solution.We often use multiple users on a PC in remote management. To save resources, we…learn.microsoft.comReleases · lithnet/idle-logoffA group-policy enabled utility for logging off idle windows user sessions - lithnet/idle-logoffgithub.comGruß gmmg
-
oder um das mit deinem Script zu machen. die Description muss natürlich auch im AD gesetzt sein.
AutoIt
Alles anzeigen_AD_Open() ; Globale Variable für Computer Global $aComputers ;$sOU = $strDNSDomain $sOU = "OU=OU1234,DC=Domain,DC=int" ;muss angepasst werden ; AD-Abfrage, um nur Computer zu holen, deren Name mit "A" oder "N" beginnt $aComputers = _AD_GetObjectsInOU($sOU, "(&(objectclass=computer)(|(name=F*)(name=N*)))", 2, "name,operatingSystem,description") ; Ausgabe der gefundenen Computer _ArrayDisplay($aComputers) _AD_Close()
-
hier mal ein Beispiel.
Um die Beschreibung vom Computer herauszubekommen muss das $ an gehangen werden.
_AD_GetObjectAttribute($aObjects[$i][0] & "$", "description")
AutoIt
Alles anzeigen#include <D:\scripte\AD_1.6.2.0_Functions\AD.au3> ;AD.au3 von Water -> Pfad muss angepasst werden #include <Array.au3> local $serverArray [1] local $clientsArray [1][2] ;2D Array _AD_Open() $sOU = "OU=eureOU,DC=domain,DC=int" ;muss angepasst werden $aObjects = _AD_GetObjectsInOU($sOU, "(objectclass=computer)", 2, "name,operatingSystem") _ArrayDisplay($aObjects) ; alle Computer If @error > 0 Then MsgBox(64, "", "Nichts gefunden") Else For $i = 1 To $aObjects[0][0] $fill = "" ;MsgBox(0,"", $aObjects[$i][1]) $server = StringLeft ($aObjects[$i][1],14) $clients = StringLeft ($aObjects[$i][1],10) ;MsgBox(0,"",$server) IF $server = "Windows Server" Then ;MsgBox(0,"",$aObjects[$i][0]) _ArrayAdd($serverArray, $aObjects[$i][0]) EndIf IF $clients = "Windows 10" Or $clients = "Windows 11" Then $description = _AD_GetObjectAttribute($aObjects[$i][0] & "$", "description") ;MsgBox(0,$aObjects[$i][0],$description) $fill = $aObjects[$i][0] & "|" & $description _ArrayAdd($clientsArray, $fill) EndIf Next _ArrayDisplay($serverArray) ; Server Array _ArrayDisplay($clientsArray) ; Clients Array EndIf _AD_Close()
-
@casi4712 schau mal bei Water in die Signatur unter meine Werke, da findest du die aktuelle AD UDF.
-
Du kannst auch im Englischen Forum mal schauen
Microsoft Edge - WebView2, embed web code in your native applicationAnybody could help with using QueryInterface in AutoIt to embed Microsoft Edge using WebView2 Interface ? Here are links to information/documentation: Image…www.autoitscript.comEin Beispiel: benötigt aber die Ressourcen aus obigen Link nzw hier direkt verlinkt die Webview2.7z Datei https://www.autoitscript.com/forum/applicat…nt.php?id=67293
AutoIt
Alles anzeigen#AutoIt3Wrapper_Au3Check_Parameters=-d -w- 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_UseX64=y Opt( "MustDeclareVars", 1 ) #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <WinAPICom.au3> #include <WinAPI.au3> #include "D:\Scripte\WebView2\Includes\WV2Interfaces.au3" ; Pfad muss muss an die 7Z Ressouren angepasst werden Global $hGui Global $url = "https://autoit.de/wcf/" WebView2() Func WebView2() EnvSet( "WEBVIEW2_DEFAULT_BACKGROUND_COLOR", "FF000000" ) EnvSet ("WEBVIEW2_USER_DATA_FOLDER", @AppDataDir & "\WebView2") EnvSet( "WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--disable-web-security" ) $hGui = GUICreate( "WebView2 Sample", 1200, 900, -1, -1, $WS_OVERLAPPEDWINDOW ) _WinAPI_CoInitialize( $COINIT_APARTMENTTHREADED ) CoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerCreate() ConsoleWrite( "$pCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler = " & $pCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler & @CRLF & @CRLF ) CoreWebView2CreateCoreWebView2ControllerCompletedHandlerCreate() ConsoleWrite( "$pCoreWebView2CreateCoreWebView2ControllerCompletedHandler = " & $pCoreWebView2CreateCoreWebView2ControllerCompletedHandler & @CRLF & @CRLF ) Local $hWebView2Loader = DllOpen( @AutoItX64 ? "WebView2Loader-x64.dll" : "WebView2Loader-x86.dll" ) Local $aRet = DllCall( $hWebView2Loader, "long", "CreateCoreWebView2EnvironmentWithOptions", "wstr", "", "wstr", "", _ "ptr", NULL, "ptr", $pCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler ) If @error Or $aRet[0] Then Return ConsoleWrite( "CreateCoreWebView2EnvironmentWithOptions ERR" & @CRLF ) ConsoleWrite( "CreateCoreWebView2EnvironmentWithOptions OK" & @CRLF & @CRLF ) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_MAXIMIZE, $GUI_EVENT_RESIZED Local $tRect = _WinAPI_GetClientRect( $hGui ) $oCoreWebView2Controller.put_Bounds( $tRect ) Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd CoreWebView2CreateCoreWebView2ControllerCompletedHandlerDelete() CoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerDelete() DllClose( $hWebView2Loader ) EndFunc Func CoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_Invoke( $pSelf, $long, $ptr ) ; Ret: long Par: long;ptr* ConsoleWrite( "CoreWebView2CreateCoreWebView2EnvironmentCompletedHandler_Invoke" & @CRLF ) $oCoreWebView2Environment = ObjCreateInterface( $ptr, $sIID_ICoreWebView2Environment, $dtag_ICoreWebView2Environment ) ConsoleWrite( "IsObj( $oCoreWebView2Environment ) = " & IsObj( $oCoreWebView2Environment ) & @CRLF & @CRLF ) $oCoreWebView2Environment.CreateCoreWebView2Controller( $hGui, $pCoreWebView2CreateCoreWebView2ControllerCompletedHandler ) Return 0 #forceref $pSelf, $long EndFunc Func CoreWebView2CreateCoreWebView2ControllerCompletedHandler_Invoke( $pSelf, $long, $ptr ) ; Ret: long Par: long;ptr* ConsoleWrite( "CoreWebView2CreateCoreWebView2ControllerCompletedHandler_Invoke" & @CRLF ) $oCoreWebView2Controller = ObjCreateInterface( $ptr, $sIID_ICoreWebView2Controller, $dtag_ICoreWebView2Controller ) ConsoleWrite( "IsObj( $oCoreWebView2Controller ) = " & IsObj( $oCoreWebView2Controller ) & @CRLF ) $oCoreWebView2Controller.AddRef() $oCoreWebView2Controller.get_CoreWebView2( $pCoreWebView2 ) $oCoreWebView2 = ObjCreateInterface( $pCoreWebView2, $sIID_ICoreWebView2, $dtag_ICoreWebView2 ) ConsoleWrite( "IsObj( $oCoreWebView2 ) = " & IsObj( $oCoreWebView2 ) & @CRLF & @CRLF ) Local $tRect = _WinAPI_GetClientRect( $hGui ) $oCoreWebView2Controller.put_Bounds( $tRect ) $oCoreWebView2.Navigate($url) ;navigate to URL Sleep (2000) ;$oCoreWebView2.ExecuteScriptAsync("(function() { document.getElementsByName('member[email]')[0].value = 'MyUsername@gmail.com';document.getElementsByName('member[password]')[0].value = 'MyPassword'; })()") ;$oCoreWebView2.ExecuteScript("(function() { document.getElementsByName('username')[0].value = 'MyUsername@gmail.com';document.getElementsByName('password')[0].value = 'MyPassword'; })()") ;$oCoreWebView2.ExecuteScript( "alert( 'Hello' );", $pCoreWebView2ExecuteScriptCompletedHandler ) ;$oCoreWebView2.Navigate("javascript:(function() { document.getElementsByName('username')[0].value = 'MyUsername@gmail.com';document.getElementsByName('password')[0].value = 'MyPassword'; })()") ;$oCoreWebView2.ExecuteScriptAsync("javascript:(function() { document.getElementsByName('username')[0].value = 'MyUsername@gmail.com';document.getElementsByName('password')[0].value = 'MyPassword'; })()") ;now execute your javascripts ;$oCoreWebView2.ExecuteScriptAsync("(function() { document.getElementById('username').value = 'blahblahusername'; document.getElementById('password').value = 'blahpassword';})()") ;$oCoreWebView2.ExecuteScriptAsync("(function() { document.getElementsByName('wp-submit')[0].click(); })()") ;$oCoreWebView2.ExecuteScript("(function() { document.getElementById('username').value = 'blahblahusername'})") ;$oCoreWebView2.ExecuteScriptAsync("(function() { document.getElementsByName('wp-submit')[0].click(); })()") ;$oCoreWebView2.ExecuteScriptAsync("(function() {document.getElementsById('username')[0].value = 'test'();") ;document.getElementsByClassName('cke_editable cke_editable_themed cke_contents_rtl cke_show_borders').value = 'NewText'; ;~ $cmds = '{ @"document.getElementsByName('f_uid')[0].value = testuser;", ;~ @"document.getElementsByName('f_pwd')[0].value = testpass;", ;~ @"document.getElementsByTagName('button')[0].click();"}' ;$oCoreWebView2.ExecuteScript("(function() {document.getElementsByID('username').item(1).value = 'MyUsername@gmail.com';})", $pCoreWebView2ExecuteScriptCompletedHandler ) ;$oCoreWebView2.ExecuteScriptAsync("(function() { document.getElementById('username').value = 'blahblahusername'; document.getElementById('password').value = 'blahpassword'; })()"); $oCoreWebView2.ExecuteScript("document.getElementById('username').value = 'name';", $pCoreWebView2ExecuteScriptCompletedHandler) ;$oCoreWebView2.ExecuteScript("document.getElementsByTagName(""img"").item(0).insertAdjacentHTML('beforebegin', '<iframe width=""210"" height=""173"" style=""position: absolute; top: 50px; left: 10px;"" src=""https://www.youtube.com/embed/tgbNymZ7vqY?autoplay=1""></iframe>');", $pCoreWebView2ExecuteScriptCompletedHandler ) ;$oCoreWebView2.ExecuteScript("document.getElementsByTagName(""username"").item(0).value = 'MyUsername@gmail.com');", $pCoreWebView2ExecuteScriptCompletedHandler ) ;$oCoreWebView2.ExecuteScript("(function() {document.getElementById('username')[1].value = '12345678']);", $pCoreWebView2ExecuteScriptCompletedHandler ) ;$oCoreWebView2.ExecuteScript("document.getElementById('username').value = '100';)", $pCoreWebView2ExecuteScriptCompletedHandler ) ;view.loadUrl("javascript:document.forms[0].email.value = '"+email+"';"); ;document.getElementsByName("username")[0].value = "username"; ;webView.ExecuteScriptAsync(dialog.Input.Text); Return 0 #forceref $pSelf, $long EndFunc
Wenn der Browser nicht in einer embeddet GUI sein muss, lieber per Webdriver abbilden.
Gruß gmmg
-
@heyhey83 funktioniert dein Script mit einer anderen Webseite (autoit.de)?
-
Ich würde auch die AD Variante bevorzugen.
Hier mal ein Beispiel:
AutoIt
Alles anzeigen#include <D:\scripte\AD_1.6.2.0_Functions\AD.au3> ;AD.au3 von Water -> Pfad muss angepasst werden #include <Array.au3> Dim $avArray [1] _AD_Open() $sOU = "OU=SiteOU,DC=Domainfti,DC=int" ;muss angepasst werden $aObjects = _AD_GetObjectsInOU($sOU, "(objectcategory=Computer)", 2, "cn,operatingsystem,pwdlastset") ;$aObjects = _AD_GetObjectsInOU($sOU, "(&(objectclass=user)(name=*))", 2) ;, "sAMAccountName", "sAMAccountName") If @error > 0 Then MsgBox(64, "", "Nichts gefunden") Else For $i = 1 To $aObjects[0][0] ;MsgBox(0,"", $aObjects[$i][1]) $server = StringLeft ($aObjects[$i][1],14) ;MsgBox(0,"",$server) IF $server = "Windows Server" Then ;MsgBox(0,"",$aObjects[$i][0]) _ArrayAdd($avArray, $aObjects[$i][0]) EndIf Next _ArrayDisplay($avArray) _ArrayDisplay($aObjects) EndIf _AD_Close()
Gruß Marcel
-
das geht mit der Excel UDF.
hier mal ein Beispiel.
AutoIt
Alles anzeigen#include <Excel.au3> #include <MsgBoxConstants.au3> ; Create application object Local $oExcel = _Excel_Open() If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended) ; Create a new workbook with only 1 worksheets Local $oWorkbook = _Excel_BookNew($oExcel, 1) _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "Test A", "A1") $oExcel.Columns("A:A").ColumnWidth = "20" ;setze spaltenbreite _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "Test B", "B1") $oExcel.Columns("B:B").ColumnWidth = "30" ;setze spaltenbreite $oExcel.Range("A1:F1") .Font.Bold = TRUE ; setze schriftgrad $oExcel.Range("A1:F1") .Font.Size = 14 ; setze schriftgröße ;$oExcel.Range("A1:D1") .Font.Color = 0xffffff $oExcel.Range("A1:F1") .Interior.ColorIndex = 43 ; setze Farbe ;$oExcel.Range("A"& $zeile &":F"& $zeile) .Interior.ColorIndex = 27 ; setze Farbe ;$oExcel.Range("A1:F"&$zeile).Borders.LineStyle = 1 ; setze einen Rahmen um die Zellen
Weiteres zu Excel steht in der Autoit Hilfe.
Gruß Marcel
-
Danke hab ich angepasst.
-
@Moombas Danke für deine Antwort.
-
OK, habe jetzt die folgende Func hinzugefügt und habe nach dem erstellen des Labels die Zeile GUICtrlSetOnEvent(-1, _admin_config) eingefügt.
Wäre das so korrekt oder lässt sich das auch anders lösen?
Func _admin_config()
MsgBox(0,"","test")
EndFuncAutoIt
Alles anzeigen#include <Array.au3> #include <GUIConstantsEx.au3> ; zum leichteren Zugriff auf die Attribute im URL-Array Global Enum $eID, $eName, $eURL, $eGUI ; Das Eingabearray Global $aURLArray[][4] = [["ID", "Name", "URL", "GUI"], [1,"AutoIt","www.autoit.de", 0], [2,"Heise","www.heise.de", 1], [3,"Test1","www.test1.de", 0], [4,"Test2","www.test2.de", 0], [5,"Test3","www.test3.de", 0], [6,"Test4","www.test4.de", 0], [7,"Test5","www.test5.de", 1], [8,"Test6","www.test6.de", 0], [9,"Test7","www.test7.de", 0]] ; aus dem Array abgeleitete Parameter Global $nEntries = UBound($aURLArray, 1) - 1 ; Layout-Parameter (Größen und Abstände der Buttons) Global $iCols = 3, _ ; Anzahl der Spalten der Buttons $iRows = Ceiling($nEntries / $iCols), _ ; Anzahl der Zeilen der Buttons $iButtonWidth = 150, _ ; Breite eines Buttons $iButtonHeight = 25, _ ; Höhe eines Buttons $iButtonXStep = 15, _ ; horizontaler Abstand der Buttons $iButtonYStep = 15, _ ; vertikaler Abstand der Buttons $iMarginT = 30, _ ; Dicke des oberen Randes um die Button-Matrix $iMarginB = 20, _ ; Dicke des unteren Randes um die Button-Matrix $iMarginL = 20, _ ; Dicke des linken Randes um die Button-Matrix $iMarginR = 20, _ ; Dicke des rechten Randes um die Button-Matrix $iGUIWidth = $iMarginL + $iMarginR + $iCols * $iButtonWidth + ($iCols - 1) * $iButtonXStep, _ ; Breite des GUI $iGUIHeight = $iMarginT + $iMarginB + $iRows * $iButtonHeight + ($iRows - 1) * $iButtonYStep ; Höhe des GUI ; das GUI erstellen Opt("GUIOnEventMode", 1) $GUI = GUICreate("Website AutoLogin " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight) GUISetOnEvent($GUI_EVENT_CLOSE, _raus) $label = GUICtrlCreateLabel("admin config",55,8,100,25) GUICtrlSetFont($label, 8, 300, 0, "Arial") ;IF @UserName <> "userxyz" Then GUICtrlSetState($label, $GUI_Hide) GUICtrlSetOnEvent(-1, _admin_config) ; Das Array durchgehen und die Buttons erstellen Global $iPosX, $iPosY, $iButtonX, $iButtonY For $i = 1 To $nEntries ; die Koordinaten des Buttons in der Button-Matrix $iPosX = Mod($i - 1, $iCols) $iPosY = Ceiling($i / $iCols) - 1 ; die GUI-Koordinaten des Buttons $iButtonX = $iMarginL + $iPosX * ($iButtonWidth + $iButtonXStep) $iButtonY = $iMarginT + $iPosY * ($iButtonHeight + $iButtonYStep) ; Den Button selbst erstellen GUICtrlCreateButton($aURLArray[$i][$eName], $iButtonX, $iButtonY, $iButtonWidth, $iButtonHeight) ; Verknüpfe Button mit Funktion _search GUICtrlSetOnEvent(-1, _search) Next ; GUI anzeigen GUISetState(@SW_SHOW) ; Endlosschleife um GUI am Leben zu halten Do Sleep(100) Until 0 ; eigene Funktion, welche beim Klick auf einen Button ausgelöst wird Func _search() Local $sName = GUICtrlRead(@GUI_CtrlId) Local $iPos = _ArraySearch($aURLArray, $sName, 1, 0, 1, 0, 0, $eName) Local $sURL = $aURLArray[$iPos][$eURL] MsgBox(0,"Array Position", "Element: " & $sName & @CRLF & "Position: " & $iPos & @CRLF & "URL: " & $sURL) EndFunc ; Funktion zum Beenden des GUI Func _raus() Exit EndFunc ; Funktion für den Admin Config Bereich Func _admin_config() MsgBox(0,"","test") EndFunc
Gruß Marcel
-
Hallo Zusammen,
benötige nochmal eure Hilfe. Ich habe der GUI noch ein Label "admin config" hinzugefügt.
Hier komme ich nun nicht weiter, wie ich den Aufruf starte, damit es klick bar ist. Bei einer Switch Endswitch würde ich das im Case zweig machen aber hier?
C
Alles anzeigen#include <Array.au3> #include <GUIConstantsEx.au3> ; zum leichteren Zugriff auf die Attribute im URL-Array Global Enum $eID, $eName, $eURL, $eGUI ; Das Eingabearray Global $aURLArray[][4] = [["ID", "Name", "URL", "GUI"], [1,"AutoIt","www.autoit.de", 0], [2,"Heise","www.heise.de", 1], [3,"Test1","www.test1.de", 0], [4,"Test2","www.test2.de", 0], [5,"Test3","www.test3.de", 0], [6,"Test4","www.test4.de", 0], [7,"Test5","www.test5.de", 1], [8,"Test6","www.test6.de", 0], [9,"Test7","www.test7.de", 0]] ; aus dem Array abgeleitete Parameter Global $nEntries = UBound($aURLArray, 1) - 1 ; Layout-Parameter (Größen und Abstände der Buttons) Global $iCols = 3, _ ; Anzahl der Spalten der Buttons $iRows = Ceiling($nEntries / $iCols), _ ; Anzahl der Zeilen der Buttons $iButtonWidth = 150, _ ; Breite eines Buttons $iButtonHeight = 25, _ ; Höhe eines Buttons $iButtonXStep = 15, _ ; horizontaler Abstand der Buttons $iButtonYStep = 15, _ ; vertikaler Abstand der Buttons $iMarginT = 30, _ ; Dicke des oberen Randes um die Button-Matrix $iMarginB = 20, _ ; Dicke des unteren Randes um die Button-Matrix $iMarginL = 20, _ ; Dicke des linken Randes um die Button-Matrix $iMarginR = 20, _ ; Dicke des rechten Randes um die Button-Matrix $iGUIWidth = $iMarginL + $iMarginR + $iCols * $iButtonWidth + ($iCols - 1) * $iButtonXStep, _ ; Breite des GUI $iGUIHeight = $iMarginT + $iMarginB + $iRows * $iButtonHeight + ($iRows - 1) * $iButtonYStep ; Höhe des GUI ; das GUI erstellen Opt("GUIOnEventMode", 1) $GUI = GUICreate("Website AutoLogin " & FileGetVersion(@ScriptName), $iGUIWidth, $iGUIHeight) GUISetOnEvent($GUI_EVENT_CLOSE, _raus) $label = GUICtrlCreateLabel("admin config",55,8,100,25) GUICtrlSetFont($label, 8, 300, 0, "Arial") ;IF @UserName <> "userxyz" Then GUICtrlSetState($label, $GUI_Hide) ; Das Array durchgehen und die Buttons erstellen Global $iPosX, $iPosY, $iButtonX, $iButtonY For $i = 1 To $nEntries ; die Koordinaten des Buttons in der Button-Matrix $iPosX = Mod($i - 1, $iCols) $iPosY = Ceiling($i / $iCols) - 1 ; die GUI-Koordinaten des Buttons $iButtonX = $iMarginL + $iPosX * ($iButtonWidth + $iButtonXStep) $iButtonY = $iMarginT + $iPosY * ($iButtonHeight + $iButtonYStep) ; Den Button selbst erstellen GUICtrlCreateButton($aURLArray[$i][$eName], $iButtonX, $iButtonY, $iButtonWidth, $iButtonHeight) ; Verknüpfe Button mit Funktion _search GUICtrlSetOnEvent(-1, _search) Next ; GUI anzeigen GUISetState(@SW_SHOW) ; Endlosschleife um GUI am Leben zu halten Do Sleep(100) Until 0 ; eigene Funktion, welche beim Klick auf einen Button ausgelöst wird Func _search() Local $sName = GUICtrlRead(@GUI_CtrlId) Local $iPos = _ArraySearch($aURLArray, $sName, 1, 0, 1, 0, 0, $eName) Local $sURL = $aURLArray[$iPos][$eURL] MsgBox(0,"Array Position", "Element: " & $sName & @CRLF & "Position: " & $iPos & @CRLF & "URL: " & $sURL) EndFunc ; Funktion zum Beenden des GUI Func _raus() Exit EndFunc
Danke
Gruß Marcel
-
Für mein Script habe ich jetzt in der Function _Start_Connection die folgende Anpassung vorgenommen.
Die Zeile If $PassWord Then $Connection_String &= "Password=" & $PassWord & ";" in If $PassWord Then $Connection_String &= ";Jet OLEDB:Database Password=" & $PassWord & ";" geändert.
AutoIt
Alles anzeigenFunc _Start_Connection($DBPath, $UserName = "", $PassWord = "") If Not IsObj($objConnection) Then Return -1 $Connection_String = $sDataProvider & $DBPath & ";" If $UserName Then $Connection_String &= "User ID=" & $UserName & ";" ;If $PassWord Then $Connection_String &= "Password=" & $PassWord & ";" If $PassWord Then $Connection_String &= ";Jet OLEDB:Database Password=" & $PassWord & ";" ;$Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=123456789" ;$Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=" & $PassWord & ";" $objConnection.Open($Connection_String) If @error Then $ConnStatus = "Failed " & @error Return $ConnStatus EndFunc
KR,
Marcel
-
Bitte den Post in die Rubrik "Datenbanken" verschieben.
Danke
-
Hallo Zusammen,
Ich verwende Access UDF ( https://www.autoitscript.com/forum/topic/177556-yet-another-access-udf-but-different-accdb-only) und möchte eine passwortgeschützte „accdb“-Datenbank öffnen. Mit der benutzten Access UDF klappt das im Standard nicht, obwohl mit .
Meine Lösung, ich habe den Connection_String in der Funktion angepasst.
$Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=" & $PassWordWie kann ich das nun sauber in die UDF integrieren? Habe im engl. Forum da auch bereits angefragt, da ja sicher andere auch das Problem haben.
AutoIt
Alles anzeigenGlobal $Connection = _Start_Connection($dbname, "", "password") ; mein codeabschnitt im Script ; folgend die Funktion in der access.udf #Region - Function _Start_Connection ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Start_Connection ; Description ...: This function will start or open a new connection. ; Syntax ........: _Start_Connection($DBPath [, $UserName = ""[, $PassWord = ""]]) ; Parameters ....: $DBPath - Path of your Access database file.(with *.accdb extension and a ";" sign at the end") ; $UserName - [optional] Username of your database . Default is "". ; $PassWord - [optional] Password of your database. Default is "". ; Return values .: String. If connection is opneed then, it will be "OK". And if it is failed then, "Failed " & @error ; Author ........: spudw2k. I've made a little change to this function ; Modified ......: 2015 sep ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: _Start_Connection(@ScriptDir & "\TestDB.accdb;") ; =============================================================================================================================== Func _Start_Connection($DBPath, $UserName = "", $PassWord = "") If Not IsObj($objConnection) Then Return -1 $Connection_String = $sDataProvider & $DBPath & ";" If $UserName Then $Connection_String &= "User ID=" & $UserName & ";" If $PassWord Then $Connection_String &= "Password=" & $PassWord & ";" ; mit dem angepassten String funktioniert das öffnen $Connection_String = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=" & $DBPath & ";Jet OLEDB:Database Password=" & $PassWord $objConnection.Open($Connection_String) If @error Then $ConnStatus = "Failed " & @error Return $ConnStatus EndFunc #EndRegion
Danke
Gruß Marcel
-
Hallo Sven,
danke für die Hinweise. Ich schau mir das an und gebe zeitnah eine Rückmeldung.
Danke
Gruß Marcel
-
Hallo Sven,
ich habe nochmal eine Frage. Wenn ich das _WD_UpdateDriver nutze, dann dauert es immer einen Moment, bis danach der Browser öffnet.
Hast du da bereits etwas umgesetzt, um den Status / Fortschritt des Updates anzuzeigen? Meine Idee war jetzt, vor und nach dem _WD_UpdateDriver einen TrayTip anzuzeigen, damit der User hier weiß, das noch was passiert.
Danke
Gruß Marcel
-
Hi Code4Fun,
hier mal ein Beispiel aus meinem SQL Script.
AutoIt
Alles anzeigen#include <MSSQL.au3> #include <Array.au3> #include <WindowsConstants.au3> local $oMyError $sserver = "servername" $susername = "user" $spassword = "pass" $sdatabase = "db" $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc") $sqlCon = _MSSQL_Con($sserver, $susername, $spassword, $sdatabase) $ergebnis = _MSSQL_Query($sqlCon, "SELECT id, name FROM teilprojekt where projektid = 110 and geloeschtam = 0;") $array = $ergebnis.GetRows If Not IsArray($array) Then MsgBox(0, 'Array', 'kein Ergebnis') Exit EndIf _ArraySort($array, 0, 0, 0, 0) _ArrayDisplay($array) For $i = 1 to UBound($array) -1 ;MsgBox(0,"",$array[$i][0]) ;_MSSQL_AddRecord($oConnectionObj, $sTable, $Values, $UNIQUE, $condition) ;-'Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value n' $values = "'26931'" & ",'"&$array[$i][0]&"',100" ;MsgBox(0,"",$values) _MSSQL_AddRecord($sqlCon, "zustaendigkeit", $values) Next _MSSQL_End($sqlCon) Func MyErrFunc() Local $HexNumber $HexNumber = Hex($oMyError.number, 8) MsgBox(0, "COM Error Test", "We intercepted a COM Error !" & @CRLF & @CRLF & _ "err.description is: " & @TAB & $oMyError.description & @CRLF & _ "err.windescription:" & @TAB & $oMyError.windescription & @CRLF & _ "err.number is: " & @TAB & $HexNumber & @CRLF & _ "err.lastdllerror is: " & @TAB & $oMyError.lastdllerror & @CRLF & _ "err.scriptline is: " & @TAB & $oMyError.scriptline & @CRLF & _ "err.source is: " & @TAB & $oMyError.source & @CRLF & _ "err.helpfile is: " & @TAB & $oMyError.helpfile & @CRLF & _ "err.helpcontext is: " & @TAB & $oMyError.helpcontext _ ) SetError(1); to check for after this function returns EndFunc ;==>MyErrFunc
Gruß Marcel