1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Schnuffel

Beiträge von Schnuffel

  • Outlookex Schriftgröße ändern

    • Schnuffel
    • 17. Februar 2024 um 13:50

    hier mal dein vollständiger Code etwas aufgeräumt:

    AutoIt
    Opt('MustDeclareVars', 1)
    
    #include-once
    #include <Array.au3>
    #include <WinAPIConv.au3>
    
    
    ; Array heißt $aWeine
    Global $aWeine[][5] = _
    		[ _
    		['02', '1 ', '2021er Silvaner, trocken ', ' 5,00 €', ' 5,00 €'], _
    		['01', '10 ', '2022er Gutenberger´s Winzerschoppen, lieblich', ' 5,00 €', ' 50,00 €'], _
    		['04', '100 ', '2021er Müller-Thurgau u. Silvaner, lieblich', ' 5,00 €', ' 500,00 €'], _
    		['08', '1000 ', '2022er Blauer Spätburgunder Rosé, lieblich', ' 5,00 €', ' 5000,00 €'], _
    		['07', '1 ', '2022er Rotling, halbtrocken', ' 10,00 €', ' 10,00 €'] _
    		]
    
    ;MsgBox(0,"Alle Artikel", $AlleArtikel)
    
    _ArrayDisplay($aWeine)
    
    ;~ For $Col = 0 to $Cols - 1 ;wird nur benötigt wenn die Spalten überschriften haben
    ;~ $AlleArtikel &= '<th>' & $aWeine[0][$Col] & '</th>'
    ;~ Next
    
    Global $Wert, $Rahmen = 'style="border: 1px solid black;"' ; Tabellen-Rahmen in schwarz
    Global $Tabelle = '<table>'
    
    
    ; Tabelle
    For $Row = 0 To UBound($aWeine, $UBOUND_ROWS) - 1
    	$Tabelle &= '<tr>'  & @CRLF
    	For $Col = 0 To UBound($aWeine, $UBOUND_COLUMNS) - 1
    		$Wert = BinaryToString(StringToBinary($aWeine[$Row][$Col], 1), 1) ; Somit sind Umlaute oder Zeichen wie "´" okay
    		If $Col = 0 Then
    			$Tabelle &= '<td style="border: 1px solid black;text-align: center;">' & $Wert & '</td>' & @CRLF
    		Else
    			$Tabelle &= '<td style="border: 1px solid black;text-align: right;">' & $Wert & '</td>' & @CRLF
    		EndIf
    	Next
    	$Tabelle &= '</tr>' & @CRLF
    Next
    
    $Tabelle &= '</table>'
    ConsoleWrite($Tabelle & @CRLF)
    Alles anzeigen
  • Outlookex Schriftgröße ändern

    • Schnuffel
    • 17. Februar 2024 um 13:47

    pls, stell auch das entsprechende Script mit ein, dann können wir daran "arbeiten" ;)

  • Outlookex Schriftgröße ändern

    • Schnuffel
    • 17. Februar 2024 um 13:33

    dafür sind wir doch da ;)

  • Gesamtzeit richtig berechnen

    • Schnuffel
    • 17. Februar 2024 um 13:01

    Alina hat dir doch ein brauchbares Beispiel geliefert.

  • Outlookex Schriftgröße ändern

    • Schnuffel
    • 17. Februar 2024 um 12:37

    Beispiel für deine For-Schleife:

    AutoIt
    	For $Col = 0 To UBound($aWeine, $UBOUND_COLUMNS) - 1
    		$Wert = BinaryToString(StringToBinary($aWeine[$Row][$Col] & @LF, 1), 1) ; Somit sind Umlaute oder Zeichen wie "´" okay
    		If $Col = 0 Then
    			$Tabelle &= '<td style="border: 1px solid black;text-align: center;">' & $Wert & '</td>'
    		Else
    			$Tabelle &= '<td style="border: 1px solid black;text-align: right;">' & $Wert & '</td>'
    		EndIf
    	Next

    Ob der @LF in deinem Wert so passt kann ich spontan nicht beurteilen ;)

    so sieht es bei mir aus:

  • Outlookex Schriftgröße ändern

    • Schnuffel
    • 17. Februar 2024 um 12:31

    naja, seh dir dein Ergebnis an und versuche zu ergründen, wie html das parsen würde...

    </td><td style="border: 1px solid black;"><td align=right>1 </td>

    ich denke da ssollte eher sowas stehen:

    </td><td style="border: 1px solid black;" align=right>1 </td>


    vielleicht musst du den "Zusammenbau deines html codes überdenken ...


    wenn du einen neuen td-Tag anfängst sind die Browser heutzutage so schlau und schließen den vorhergehenden, sollte das schließende </td> mal fehlen ;)

  • Outlookex Schriftgröße ändern

    • Schnuffel
    • 17. Februar 2024 um 12:05

    versuch mal in Zeile 37 das Argument innerhalb von "td" zu deklarieren:

    nicht:

    AutoIt
    '<td> <align=right>'

    sondern

    AutoIt
    '<td align=right>'
  • Unit Testing in Autoit

    • Schnuffel
    • 17. Februar 2024 um 11:59

    ich würde sagen, solange wir hier Code produzieren, der uns nicht durch Haftung (Softwarefirma, wobei die das meist auch ausschließen ;) ) in Gefahr bringt finanziellen Schaden zu nehmen, sehe ich auch nicht die Notwendigkeit eines "extra" Unit-testings.

    Und wie schon erwähnt wurde.
    Solange es kein Pflichtenheft gibt, ist die Spielwiese eines Code Editors doch unser Königreich. ^^

    Ich würde mich da jetzt eher Andy anschließen.

    Und meinen Code teste ich ja auch.
    Und wenn sich einer beschwert, halte ich es wie Microsoft und schiebe bei Gelegenheit einen "fix" nach. :rofl:

  • Gesamtzeit richtig berechnen

    • Schnuffel
    • 16. Februar 2024 um 18:25

    wenn du mit Registry Einträgen arbeitest, dann speichere doch einfach den letzten Start des Spiels auch in dem Zweig.

    Dann kannst du immer gegen die aktuelle Uhrzeit prüfen bei Spielzeit-Abfrage oder Abfrage Gesamtspielzeit.

    setze bei Spielstart ein: RegWrite($regKey, "StartPlayTime", $REG_STR_TYP, _NowCalc())

    und prüfe im Spiel oder für gesamt gegen den jeweiligen Wert in der Registry mit _DateDiff()

  • InetRead() mit Error 13

    • Schnuffel
    • 13. Februar 2024 um 18:28

    mit sowas kann InetRead aber nicht umgehen. ;)

    Da musst du vorab für soregn, dass der Server dem Zertifikat vertraut...

  • InetRead() mit Error 13

    • Schnuffel
    • 13. Februar 2024 um 17:57

    funktioniert die Webseite auf dem Server aus einem Browser?

  • Skript mit F10 starten und mit F9 beenden

    • Schnuffel
    • 12. Februar 2024 um 17:29
    Zitat von DivineFaith

    mit der F9 Taste beenden können

    Was soll wirklich passieren, wenn du F9 drückst?

    Meist ist es einfacher, wenn du möglichst genau beschreibst, was wann und warum geschehen soll. Nicht immer ist der eigene Lösungsweg auch der beste.

  • Skript mit F10 starten und mit F9 beenden

    • Schnuffel
    • 12. Februar 2024 um 17:22

    nun ja. nach F10 ist halt schluss, wenn du das script beendest.😉

    ich weiß nicht den Grund oder deine Zielsetzung, aber damit der Hotkey für Start funktioniert, muss dein script laufen

  • _DateDiff('s', ?, _NowCalc())

    • Schnuffel
    • 10. Februar 2024 um 13:45

    kleines Beispiel: (ich hab deinen Code mal in einen Codeblock gepackt, dann braucht man nicht so viel scrollen ;) )

    AutoIt
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Date.au3>
    #include <MsgBoxConstants.au3>
    
    
    Example()
    
    Func Example()
    
    	#Region ### START Koda GUI section ### Form=e:\autoit\scripte\eingabefeld.kxf
    	$Form1_1 = GUICreate("Wann soll die Ladung beginnen ? ", 345, 250, 800, 300)
    	$Input1 = GUICtrlCreateInput("10", 71, 25, 35, 27)
    	GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
    	$Button1 = GUICtrlCreateButton("OK", 200, 190, 49, 41)
    	GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
    	$Label1 = GUICtrlCreateLabel("KWh", 119, 29, 49, 23)
    	GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
    	$date1 = GUICtrlCreateDate(_NowDate, 71, 75, 197, 27, $DTS_SHORTDATEFORMAT)
    	GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
    	Global $idTime = GUICtrlCreateDate("", 71, 130, 197, 27, $DTS_TIMEFORMAT)
    	GUICtrlSetFont(-1, 12, 800, 0, "Times New Roman")
    
        ;GUICtrlSendMsg($date1, $DTM_SETFORMATW, 0, "yyyy/MM/dd HH:mm:ss")
    
    	Global $sDate
    	Global $sTime
    	Global $iUebergabe
    	Global $date1
    	Global $iDateCalc
    	Global $iStartzeit
    	Global $iStartzeit2
    	Global $idDate
    	Global $iDate
    	Global $iStart
    	Global $sStyle = "HH:mm:ss"
    
    	GUISetState(@SW_SHOW)
    	#EndRegion ### END Koda GUI section ###
    
    	While 1
    		$nMsg = GUIGetMsg()
    		Switch $nMsg
    			Case $GUI_EVENT_CLOSE
    				ExitLoop
    			Case $Button1
    				ExitLoop
    		EndSwitch
    	WEnd
    
    
    	Global $aDate = StringSplit(GUICtrlRead($date1), '.')
    	$sDate = $aDate[3] & "/" & $aDate[2] & "/" & $aDate[1]
    	Global $sTime = GUICtrlRead($idTime)
    	Global $Diff = _DateDIff('s', $sDate & " "  & $sTime, _NowCalc())
    	MsgBox(0, "", "Zeitdifferenz in Sekunden:" & @CRLF & $Diff)
    
    
    EndFunc   ;==>Example
    Alles anzeigen
  • Welches Event bei Win11 Fenster teilen?

    • Schnuffel
    • 10. Februar 2024 um 11:50

    ich hab mal ein wenig mit diesem "hook" Zeug rumgespielt. :)

    ich konnte die System Events identifizieren, die bei jeder Fenster größenänderung angezogen werden:

    $EVENT_SYSTEM_CAPTURESTART, $EVENT_SYSTEM_CAPTUREEND

    Ist sicher nicht 100% richtig für die Identifikation des Events, aber damit sollten alle Fenster Movements abgefangen werden.
    Funktioniert bei jedem Fenster auf deinem Desktop.
    Eine Anpassung an Fentertitel, PID oder ähnliches kannst du sicher selbst vornehmen um einzugrenzen. ;)

    AutoIt
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <Process.au3>
    #include <Misc.au3>
    
    Global $hDLL, $hWinEventProc, $hHook
    HotKeySet("{ESC}", "_HotKey") ; Exit
    
    $hDLL = DllOpen("User32.dll")
    $hWinEventProc = DllCallbackRegister("_WinEventProc", "none", "hwnd;int;hwnd;long;long;int;int")
    If Not @error Then
    	OnAutoItExitRegister("OnAutoItExit")
    Else
    	MsgBox(16 + 262144, "Error", "_SetWinEventHook did not succeed.")
    	Exit
    EndIf
    
    $hHook = _SetWinEventHook($EVENT_SYSTEM_CAPTURESTART, $EVENT_SYSTEM_CAPTUREEND, $hDLL) ;Trace focus event only
    
    While 1
    	Sleep(10)
    WEnd
    
    Func _WinEventProc($hHook, $iEvent, $hWnd, $idObject, $idChild, $iEventThread, $iEventTime)
    	Local $PID = WinGetProcess($hWnd), $sEventProcName = _ProcessGetName($PID)
    	ConsoleWrite("PID: " & $PID & @TAB & "WinTitle: " & WinGetTitle($hWnd) & @TAB & "EventTime: " & $iEventTime & @TAB & @TAB & "Event: " & $iEvent & " Hex: " & Hex($iEvent) & @CRLF)
    EndFunc   ;==>_WinEventProc
    
    Func _SetWinEventHook($iEventMin, $iEventMax, $hDLLUser32)
    	Local $aRet
    	Local Const $WINEVENT_OUTOFCONTEXT = 0x0
    	Local Const $WINEVENT_SKIPOWNPROCESS = 0x2
    	If Not $hDLLUser32 Or $hDLLUser32 = -1 Then $hDLLUser32 = "User32.dll"
    	$aRet = DllCall($hDLLUser32, "hwnd", "SetWinEventHook", _
    			"uint", $iEventMin, _
    			"uint", $iEventMax, _
    			"hwnd", 0, _
    			"ptr", DllCallbackGetPtr($hWinEventProc), _
    			"int", 0, _
    			"int", 0, _
    			"uint", BitOR($WINEVENT_OUTOFCONTEXT, $WINEVENT_SKIPOWNPROCESS))
    	If @error Then Return SetError(@error, 0, 0)
    	Return $aRet[0]
    EndFunc   ;==>_SetWinEventHook
    
    Func _HotKey()
    	Switch @HotKeyPressed
    		Case "{ESC}"
    			Exit
    	EndSwitch
    EndFunc   ;==>_HotKey
    
    Func OnAutoItExit()
    	If $hWinEventProc Then
    		Beep(3000, 5)
    		DllCallbackFree($hWinEventProc)
    	EndIf
    	If $hHook Then DllCall("User32.dll", "int", "UnhookWinEvent", "hwnd", $hHook)
    	If $hDLL Then DllClose($hDLL)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen

    Ach ja, und eine hook.dll brauchste dafür auch nicht. Funktion kommt aus der user32.dll :)

    Der WinTitle für diese neue Win11-Funktion der Fenster Größenänderung ist: "PopupHost" ;)

    2. Demo:

    AutoIt
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <Process.au3>
    #include <Misc.au3>
    
    Global $hDLL, $hWinEventProc, $hHook
    HotKeySet("{ESC}", "_HotKey") ; Exit
    
    $hDLL = DllOpen("User32.dll")
    $hWinEventProc = DllCallbackRegister("_WinEventProc", "none", "hwnd;int;hwnd;long;long;int;int")
    If Not @error Then
    	OnAutoItExitRegister("OnAutoItExit")
    Else
    	MsgBox(16 + 262144, "Error", "_SetWinEventHook did not succeed.")
    	Exit
    EndIf
    
    $hHook = _SetWinEventHook($EVENT_SYSTEM_CAPTURESTART, $EVENT_SYSTEM_CAPTUREEND, $hDLL) ;Trace focus event only
    
    ; dieser Aufruf hooked alle Events! die Events sind zu finden in APISysConstants.au3 [_WinAPI_SetWinEventHook() Zeile 267 ff]
    ;$hHook = _SetWinEventHook($EVENT_MIN, $EVENT_MAX, $hDLL) ;Trace all events
    
    While 1
    	Sleep(10)
    WEnd
    
    Func _WinEventProc($hHook, $iEvent, $hWnd, $idObject, $idChild, $iEventThread, $iEventTime)
    	Local $PID = WinGetProcess($hWnd), $sEventProcName = _ProcessGetName($PID)
    	If $sEventProcName = "SciTE.exe" Then
    		ConsoleWrite("SciTE Fenster wurde verändert ^^ 0x" & Hex($iEvent)& @CRLF)
    		;ConsoleWrite("PID: " & $PID & @TAB & "WinTitle: " & WinGetTitle($hWnd) & @TAB & "EventTime: " & $iEventTime & @TAB & @TAB & "Event: " & $iEvent & " Hex: " & Hex($iEvent) & @CRLF)
    	EndIf
    EndFunc   ;==>_WinEventProc
    
    Func _SetWinEventHook($iEventMin, $iEventMax, $hDLLUser32)
    	Local $aRet
    	Local Const $WINEVENT_OUTOFCONTEXT = 0x0
    	Local Const $WINEVENT_SKIPOWNPROCESS = 0x2
    	If Not $hDLLUser32 Or $hDLLUser32 = -1 Then $hDLLUser32 = "User32.dll"
    	$aRet = DllCall($hDLLUser32, "hwnd", "SetWinEventHook", _
    			"uint", $iEventMin, _
    			"uint", $iEventMax, _
    			"hwnd", 0, _
    			"ptr", DllCallbackGetPtr($hWinEventProc), _
    			"int", 0, _
    			"int", 0, _
    			"uint", BitOR($WINEVENT_OUTOFCONTEXT, $WINEVENT_SKIPOWNPROCESS))
    	If @error Then Return SetError(@error, 0, 0)
    	Return $aRet[0]
    EndFunc   ;==>_SetWinEventHook
    
    Func _HotKey()
    	Switch @HotKeyPressed
    		Case "{ESC}"
    			Exit
    	EndSwitch
    EndFunc   ;==>_HotKey
    
    Func OnAutoItExit()
    	If $hWinEventProc Then
    		Beep(3000, 5)
    		DllCallbackFree($hWinEventProc)
    	EndIf
    	If $hHook Then DllCall("User32.dll", "int", "UnhookWinEvent", "hwnd", $hHook)
    	If $hDLL Then DllClose($hDLL)
    EndFunc   ;==>OnAutoItExit
    Alles anzeigen
  • Gruppenmitgliedschaft ermitteln

    • Schnuffel
    • 7. Februar 2024 um 20:28

    hab mal ein Beispiel:

    Das Prinzip lässt sich auf alle Ausgaben aus der Cmd anwenden

    AutoIt
    #RequireAdmin
    #include<Array.au3>
    
    Global $aTest = _GetUserGroupMember()
    _ArrayDisplay($aTest)
    
    Global $aTest = _GetComputerGroupMember()
    _ArrayDisplay($aTest)
    
    Func _GetComputerGroupMember()
    	Local $aReturn[1] = [0], $aGroup = StringSplit(_CMDLineRead("GPRESULT /R /SCOPE COMPUTER"), @LF)
    	For $i = 1 To $aGroup[0]
    		If StringRegExp($aGroup[$i], '.*Computer.*Mitglied|Member.*') Then ExitLoop
    	Next
    	For $i = $i + 2 To $aGroup[0]
    		If $i = $aGroup[0] THen ExitLoop
    		$aReturn[0] += 1
    		ReDim $aReturn[$aReturn[0] + 1]
    		$aReturn[$aReturn[0] ] = StringStripWS($aGroup[$i], 3)
    	Next
    	Return $aReturn
    EndFunc
    
    Func _GetUserGroupMember()
    	Local $aReturn[1] = [0], $aGroup = StringSplit(_CMDLineRead("GPRESULT /R /SCOPE USER"), @LF)
    	For $i = 1 To $aGroup[0]
    		If StringRegExp($aGroup[$i], '.*Benutzer|User.*Mitglied|Member.*') Then ExitLoop
    	Next
    	For $i = $i + 2 To $aGroup[0]
    		If $i = $aGroup[0] THen ExitLoop
    		$aReturn[0] += 1
    		ReDim $aReturn[$aReturn[0] + 1]
    		$aReturn[$aReturn[0] ] = StringStripWS($aGroup[$i], 3)
    	Next
    	Return $aReturn
    EndFunc
    
    Func _CMDLineRead($sCMD)
    	Local $sLine, $sRetStr, $sOutput = '', $iStart = 1
    	Local $iPID = Run(@ComSpec & " /c " & $sCMD, "", @SW_HIDE, 8)
    	If ProcessWaitClose($iPID, 30) = 0 Then Return SetError(1, 1, 0)
    	$sOutput= StdoutRead($iPID)
    	Local $nLen = StringLen($sOutput)
    	While $iStart < $nLen
    		$aCall = DllCall('user32.dll', 'bool', 'OemToCharA', 'str', StringMid($sOutput, $iStart, 65536), 'str', '')
    		If @error Or Not $aCall[0] Then Return SetError(@error + 10, @extended, '')
    		$sRetStr &= $aCall[2]
    		$iStart += 65536
    	WEnd
    	Return $sRetStr
    EndFunc   ;==>_CMDLineRead
    Alles anzeigen
  • Gruppenmitgliedschaft ermitteln

    • Schnuffel
    • 7. Februar 2024 um 14:32

    Also:

    die Gruppenmitgliedschaft eines Computers ohne AD-Tools lässt sich über "GPResult /R" ermitteln.
    Bitte beachte, dass für die Computer Anteile Admin-Rechte benötigt werden.
    Den Output kannst/musst du dir nach deinen Bedürfnissen anpassen/filtern

    AutoIt
    #RequireAdmin
    Global $group = _CMDLineRead("gpresult /r")
    ConsoleWrite($group & @CRLF)
    
    Func _CMDLineRead($sCMD)
    	Local $sLine, $sRetStr, $sOutput = '', $iStart = 1
    	Local $iPID = Run(@ComSpec & " /c " & $sCMD, "", @SW_HIDE, 8)
    	If ProcessWaitClose($iPID, 30) = 0 Then Return SetError(1, 1, 0)
    	$sOutput= StdoutRead($iPID)
    	Local $nLen = StringLen($sOutput)
    	While $iStart < $nLen
    		$aCall = DllCall('user32.dll', 'bool', 'OemToCharA', 'str', StringMid($sOutput, $iStart, 65536), 'str', '')
    		If @error Or Not $aCall[0] Then Return SetError(@error + 10, @extended, '')
    		$sRetStr &= $aCall[2]
    		$iStart += 65536
    	WEnd
    	Return $sRetStr
    EndFunc   ;==>_CMDLineRead
    Alles anzeigen
  • Gruppenmitgliedschaft ermitteln

    • Schnuffel
    • 7. Februar 2024 um 13:56

    ich denke mit dem Script von BugFix kannst du doch alles holen.
    Da will ich das Rad gar nicht neu erfinden.

  • Code Kata - Galgenraten

    • Schnuffel
    • 7. Februar 2024 um 12:55

    und ich dachte wir proggen mal ein "kleines" Spielchen :rofl::rofl::rofl:

    PS: Eure Ansätze der Wahrscheinlichkeit geht weit über das geforderte Ziel hinaus und schreckt mögliche Interessenten eher ab.

    Ich hatte das "nur nebenbei" und auch nur mit einem Auge gelesen und umgesetzt.
    Wenn ihr mit solchen Ansätzen um die Ecke kommt crasht Ihr m.M.n. die Aufgabe und ich verabschiede mich wieder aus dem Kontest.

  • Gruppenmitgliedschaft ermitteln

    • Schnuffel
    • 7. Februar 2024 um 12:30

    ich bin bisher auch davon ausgegangen, dass du User in AD Gruppen suchst. ..

    ich schau mal

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™