Es ist völlig egal ob AdlibRegister() das Label triggert oder ob es ein Button tut.
Die Frage ist/war, ob mein drittes Beispiel das flackern sein soll, was du meinst oder eben nicht?
Dies ist vorerst mein letzter Beitrag zu diesem Thread. Ich verstehe dein Anliegen anscheinend nicht und du kannst es, aus meiner Sicht, nicht so kommunizieren, dass ich etwas besseres dazu beitragen kann. Daher bin ich hier erstmal raus. Viel Glück mit den anderen Helfenden 🤞 .
Mein Tipp: Lies dir nochmal meine Hinweise aus post #5 durch und beherzige dies, dann wird dir hier sicherlich geholfen.
Viele Grüße, over and out,
Sven
Beiträge von SOLVE-SMART
-
-
Die Frage ging an mich oder an hipfzwirgel, AspirinJunkie?
Falls sie an mich ging: Ja, liest sich noch besser, aber kommt darauf an was man kennt und weiß (Konzepte etc.) und was nicht.
Wenn ich mit Arrays vertraut bin, dann ist dies sicherlich eine gut nachvollziehbare Variante. Wenn ich RegEx mag und kenne, dann nutze ich lieber RegEx etc.
Erst wenn man verschiedene Lösungswege für ein Problem umsetzen kann und kennt, wird man gut in der Lage sein zu beurteilen was man am besten für das jeweils vorliegende Problem nimmt, um es zu lösen.
Von daher: "Alle Wege führen nach Rom" 😀 .
Viele Grüße
Sven -
Dein Ansatz AspirinJunkie, ohne RegEx gefällt mir besser als mein ursprünglicher, da dieser einfach Beginner freundlicher ist 👍 .
Ansonsten schön, dass wir dein Thema lösen bzw. die Fragestellung beantworten konnten hipfzwirgel 😀 .
Viele Grüße
Sven -
Hi hipfzwirgel ,
angenommen, dass deine Datei welche du einliest "data.txt" heißt und die folgenden Zeilen hat:
CodeRechnername1_Port1 Rechnername2_Port2 Rechnername3_Port3 Rechnername4_Port4 Rechnername5_Port5 Rechnername6_Port6 Rechnername7_Port7 Rechnername8_Port8 Rechnername9_Port9 Rechnername10_Port10
[...] und auch nichts anderes drin steht außer Rechnername und Port, wie beschrieben, würde es bspw. so aussehen:
AutoIt
Alles anzeigen#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/sf /sv /mo /rm /rsln #include <Array.au3> Opt('MustDeclareVars', 1) Global $aListOfComputerAndPort = FileReadToArray('data.txt') _ArrayDisplay($aListOfComputerAndPort, 'Data') Global $aListOfComputer = _RemoveSubstringAfterUnderscoreFromArray($aListOfComputerAndPort) _ArrayDisplay($aListOfComputer, 'Data without "_PortN"') Func _RemoveSubstringAfterUnderscoreFromArray($aList) Local Const $sRegExPattern = '(.*?)_(.*?)$' Local Const $iCount = UBound($aList) - 1 For $i = 0 To $iCount Step 1 $aList[$i] = StringRegExpReplace($aList[$i], $sRegExPattern, '$1') Next Return $aList EndFunc
Die ist allerdings nicht robust. Nur in Ordnung für diesen einen konkreten Fall. Aber vielleicht reicht dir dies ja auch schon?
Viele Grüße
Sven -
Und nun noch die Variante mit einem transparenten Label:
AutoIt
Alles anzeigen#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/sf /sv /mo /rm /rsln Opt('MustDeclareVars', 1) Global Const $iGuiCloseFlag = -3 Global Const $iControlTransparent = -2 Global Const $iControlShowFlag = 16 Global Const $iControlHideFlag = 32 Global Const $iControlEnableFlag = 64 Global Const $iControlDisableFlag = 128 Global $cLabel, $cToggleButton _CreateGui() While True Switch GUIGetMsg() Case $iGuiCloseFlag Exit Case $cToggleButton _ToggleLabel() EndSwitch WEnd Func _CreateGui() Local Const $iWidth = 270 Local Const $iHeight = 150 Local Const $hGui = GUICreate('Test', $iWidth, $iHeight) Local Const $sImageFilePath = 'C:\Windows\Web\Wallpaper\Windows\img0.jpg' Local Const $cBackgoundImage = GUICtrlCreatePic($sImageFilePath, 0, 0, $iWidth, $iHeight) $cLabel = GUICtrlCreateLabel('Label-Test', 10, 20, 250) $cToggleButton = GUICtrlCreateButton('Anzeigen', 10, 80, 250) GUICtrlSetState($cBackgoundImage, $iControlDisableFlag) GUICtrlSetState($cLabel, $iControlHideFlag) GUICtrlSetBkColor($cLabel, $iControlTransparent) GUICtrlSetFont($cLabel, 13) GUISetState(@SW_SHOW, $hGui) EndFunc Func _ToggleLabel() If GUICtrlGetState($cLabel) == $iControlHideFlag + $iControlEnableFlag Then GUICtrlSetState($cLabel, $iControlShowFlag) GUICtrlSetData($cToggleButton, 'Verstecken') Else GUICtrlSetState($cLabel, $iControlHideFlag) GUICtrlSetData($cToggleButton, 'Anzeigen') EndIf EndFunc
Wenn man hier nun zügig und oft auf Anzeigen/Verstecken klickt, flackert der Label-Hintergrund, meinst du das???
Viele Grüße
SvenUpdate:
-
Und hier casi4712 eine Variante mit Hintergrundbild:
AutoIt
Alles anzeigen#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 -w 7 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/sf /sv /mo /rm /rsln Opt('MustDeclareVars', 1) Global Const $iGuiCloseFlag = -3 Global Const $iControlShowFlag = 16 Global Const $iControlHideFlag = 32 Global Const $iControlEnableFlag = 64 Global Const $iControlDisableFlag = 128 Global $cLabel, $cToggleButton _CreateGui() While True Switch GUIGetMsg() Case $iGuiCloseFlag Exit Case $cToggleButton _ToggleLabel() EndSwitch WEnd Func _CreateGui() Local Const $iWidth = 270 Local Const $iHeight = 150 Local Const $hGui = GUICreate('Test', $iWidth, $iHeight) Local Const $sImageFilePath = 'C:\Windows\Web\Wallpaper\Windows\img0.jpg' Local Const $cBackgoundImage = GUICtrlCreatePic($sImageFilePath, 0, 0, $iWidth, $iHeight) $cLabel = GUICtrlCreateLabel('Label-Test', 10, 20, 250) $cToggleButton = GUICtrlCreateButton('Anzeigen', 10, 80, 250) GUICtrlSetState($cBackgoundImage, $iControlDisableFlag) GUICtrlSetState($cLabel, $iControlHideFlag) GUICtrlSetFont($cLabel, 13) GUISetState(@SW_SHOW, $hGui) EndFunc Func _ToggleLabel() If GUICtrlGetState($cLabel) == $iControlHideFlag + $iControlEnableFlag Then GUICtrlSetState($cLabel, $iControlShowFlag) GUICtrlSetData($cToggleButton, 'Verstecken') Else GUICtrlSetState($cLabel, $iControlHideFlag) GUICtrlSetData($cToggleButton, 'Anzeigen') EndIf EndFunc
Ich hoffe das bei dir das Standardbild "C:\Windows\Web\Wallpaper\Windows\img0.jpg" existiert, ansonsten nehm eines auf deinem Rechner 😀 .
Viele Grüße
Sven -
Dann anders herum, hier ein Code-Beispiel (normales Label):
AutoIt
Alles anzeigen#AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 #AutoIt3Wrapper_Run_Au3Stripper=y #Au3Stripper_Parameters=/sf /sv /mo /rm /rsln Opt('MustDeclareVars', 1) Global Const $iGuiCloseFlag = -3 Global Const $iControlShowFlag = 16 Global Const $iControlHideFlag = 32 Global Const $iControlEnableFlag = 64 Global $cLabel, $cToggleButton _CreateGui() While True Switch GUIGetMsg() Case $iGuiCloseFlag Exit Case $cToggleButton _ToggleLabel() EndSwitch WEnd Func _CreateGui() Local Const $hGui = GUICreate('Test', 270, 150) $cLabel = GUICtrlCreateLabel('Label-Test', 10, 20, 250) $cToggleButton = GUICtrlCreateButton('Anzeigen', 10, 80, 250) GUICtrlSetState($cLabel, $iControlHideFlag) GUICtrlSetFont($cLabel, 13) GUISetState(@SW_SHOW, $hGui) EndFunc Func _ToggleLabel() If GUICtrlGetState($cLabel) == $iControlHideFlag + $iControlEnableFlag Then GUICtrlSetState($cLabel, $iControlShowFlag) GUICtrlSetData($cToggleButton, 'Verstecken') Else GUICtrlSetState($cLabel, $iControlHideFlag) GUICtrlSetData($cToggleButton, 'Anzeigen') EndIf EndFunc
Kannst du dieses Beispiel soweit erweitern, dass der Flackereffekt auftritt?
Viele Grüße
Sven -
Kannst du dir bitte casi4712 , mal die Zeit nehmen und ganz in Ruhe beschreiben, was du eigentlich erreichen möchtest?
Dein Beispiel Skript ist nicht wirklich brauchbar, doch ich glaube wenn du langsam, Stück für Stück definierst, was du möchtest (auch unbedingt mit dem Gesamtziel), dann können wir dir ggf. ein Beispiel (Code) aufbauen/zeigen, den du dann für dich validieren kannst. Also bei dem du dann sagen kannst, ob es genau das ist was du willst und brauchst oder eben nicht.
So kommen wir ggf. besser ans Ziel, als mit diesem Code-Beispiel bisher. Der Inhalt deines ersten posts #1 reicht mir persönlich nicht aus, zu verstehen was du brauchst und möchtest.
Bitte formuliere es ganz in Ruhe voll aus, dann wird dir sicherlich gut und zügig geholfen, Danke 🤝 .
Viele Grüße
Sven -
Hi casi4712 ,
kannst du bitte erstmal die etlichen Fehler im Skript beheben, die dir der AutoIt syntax checker (Au3Check.exe) sagt, wenn du #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6 als erste Zeile deinem Skript hinzufügst und dann [STRG]+[F5] (Au3Check) ausführst? Ich hatte gerade damit begonnen, aber das ist mir ehrlich gesagt zu viel Aufwand/habe die Zeit gerade nicht.
Außerdem hat dein Beispiel nur bedingt viel mit deinem beschriebenen Problem zu tun, soweit ich erkennen konnte.Viele Grüße
Sven -
Okay, verstanden Werner, dann fällt mir ohne richtiges Testen (setzt voraus ich hätte das Programm installiert, dein Skript etc. - zu viel Aufwand), leider auch nichts mehr ein 😔 .
Viele Grüße
Sven -
Du meinst wenn du dein Programm ausführst, ohne die _shellExecuteHidden() Variante, also nicht versteckt, dann kannst du derzeit mit dem dropdown arbeiten und wenn du im "verstecktem Modus" arbeitest, dann geht das nicht?
Oder geht es so oder so nicht?
Viele Grüße
Sven -
Hi Windi ,
alles gut, ich habe ja extra geschrieben das du mich auf eine witzige Art und Weise fertig machst - also alles gut 😀 .
Kaputt habe ich mich nicht gelacht, war eher ein Schmunzeln. Das du kein englisch kannst, ist auch kein Problem, deswegen sind wir ja hier auch im deutschen Forum.
Bzgl. translator, ja klar, da bekommt man manchmal seltsames übersetzt. Naja.
Wenn mich irgendwas wirklich nerven würde, würde ich mich nicht so bemühen zu antworten oder Quellcode bereitstellen, daher habe ich bereits Mitleid bzw. Verständnis trifft es eher, Werner 😀 . Angenehmen Tag heute, bis zu nächsten Frage dann (vielleicht in einem neuen Thread).
Viele Grüße
Sven -
Hi Swiffer ,
warum muss was anderes ran? Du kannst deinen gesetzten Timer auch neu setzen TimerInit() und dann erneut per TimerDiff() abfragen.
Hier mal eine abgeänderte Variante deines Beispiels:
AutoIt
Alles anzeigenSleep(3000) HotKeySet('{F10}', '_Exit') While True _A('e') _B('f') WEnd Func _Exit() Exit EndFunc Func _A($sCharacter) _DoStuff($sCharacter) EndFunc Func _B($sCharacter) _DoStuff($sCharacter) EndFunc Func _DoStuff($sCharacter) Local Const $hTimer = TimerInit() Local Const $iTimeout = 5 * 1000 While True If TimerDiff($hTimer) >= $iTimeout Then ExitLoop EndIf Send($sCharacter) Sleep(1000) WEnd EndFunc
Ergebnis: eeeeefffffeeeefffffeeeeefffffeeeeefffffeeeeeff..
Viele Grüße
Sven -
[...] der 2. Code hat funktioniert. Mit dem 1. weiß ich nicht wohin??? [...]
Ist ehrlich gesagt auch egal, denn die zweite Variante ist die sicherere 👍 .
Wo finde ich die udf.
Du machst mich fertig Werner, auf eine witzige Art und Weise 🤣 . Du hast die UDF doch selbst verlinkt: englisches Forum.
UDF:AutoIt
Alles anzeigen#include <WinAPIEx.au3> ; #FUNCTION# ==================================================================================================================== ; Name ..........: ShellExecuteHidden ; ; Description ...: runs a process on another winApi-desktop, so that none of its windows ever get visible, but can be automated by window messages and other technologies. ; The difference to shellExecute( ... , ... , @SW_HIDE ) is, that no just the first, but any windows from the created process will stay totaly isolated from user input and graphics ; ; Syntax ........: ShellExecuteHidden($filepath[, $parameters = "" [, $returnType = 1 [, $waitingOption = -1 ]]]) ; ; Parameters ....: $filepath - the file to run ; ; $returnType = 0 >> returns window handle of toplevel window of the started process ; even if its window is "hidden" (would not be visible on normal desktop) ; = 1 >> returns window handle of toplevel window of the started process ; = 2 >> returns process id (PID) of the started process ; ; ; $waitingOption = -2 >> dont wait (not recommended for window handles, as they need some time to appear even if the program is loading fast) ; = -1 >> wait 1000 milliseconds for windows to "appear" but dont wait for processes to finish (compromise) ; = 0 >> wait for the process to finish or the window to appear ; = <x> >> wait <x> milliseconds for the process to finish or the window to appear (see "$returnType" ) ; ; Return values .: windowHandle or ProcessID ; Author ........: Bluesmaster ; Modified ......: 2013 - 11 - 09 ; Remarks .......: ; Related .......: ShellExecute, _WinAPI_CreateDesktop ; Link ..........: http://msdn.microsoft.com/en-us/library/windows/desktop/ms687098(v=vs.85).aspx ; Example .......: Yes ; =============================================================================================================================== Func _shellExecuteHidden($filepath, $parameters = "", $returnType = 1, $waitingOption = -1) ; 1 - Create Desktop ;Global Const $GENERIC_ALL = 0x10000000 $hNewDesktop = _WinAPI_CreateDesktop("ShellExecuteHidden_Desktop", $GENERIC_ALL) ; 2 - Start Process $tProcess = DllStructCreate($tagPROCESS_INFORMATION) $tStartup = DllStructCreate($tagSTARTUPINFO) DllStructSetData($tStartup, 'Size', DllStructGetSize($tStartup)) DllStructSetData($tStartup, 'Desktop', _WinAPI_CreateString("ShellExecuteHidden_Desktop")) Local $pid If _WinAPI_CreateProcess($filepath, $parameters, 0, 0, 0, 0x00000200, 0, 0, DllStructGetPtr($tStartup), DllStructGetPtr($tProcess)) Then $pid = DllStructGetData($tProcess, 'ProcessID') Else Return -1 EndIf ; 3 - Return Process If $returnType = 2 Then If $waitingOption > -1 Then ProcessWaitClose($pid, $waitingOption) Return $pid EndIf ; 4 - Return WindowHandle If $waitingOption = -1 Then Sleep(1000) ElseIf $waitingOption > 0 Then Sleep($waitingOption) EndIf While True ; keep searching for the window $aWindows = _WinAPI_EnumDesktopWindows($hNewDesktop, $returnType) ; $returnType = 0 >> means also list hidden windows If IsArray($aWindows) Then For $i = 1 To $aWindows[0][0] ;~ MsgBox( 0 , '' , $curPID & " " & $pid & " " & $hWnd & " " & $aWindows[$i][0] ) $hWnd = $aWindows[$i][0] If $pid = WinGetProcess($hWnd) Then ; same process? Do ; searching through parent windows ... $hLast = $hWnd ; cache it for not loosing it when desktop is reached $hWnd = _WinAPI_GetParent($hLast) Until $hWnd = 0 ; ... until root/ desktop is reached $hWnd = $hLast Return $hWnd ; return the toplevel-window of the process EndIf Next EndIf If $waitingOption = 0 Then ; keep searching for the window until it appears ( in worst case endless ) Sleep(200) Else Return -1 EndIf WEnd EndFunc ;==>_shellExecuteHidden
Beispiel von Bluesmaster (Author):
AutoIt
Alles anzeigen; EXAMPLE 1 ( principle ): ; 1 - open a programm with @SW_HIDE ShellExecute(@ComSpec, "/c start notepad.exe", "", "", @SW_HIDE) WinWaitActive("[CLASS:Notepad]") ControlSend("[CLASS:Notepad]", "", "Edit1", "As you can see, you cannot prevent an hidden started application " & @LF & "from opening another window that gets visible...") MsgBox(0, '', "I understand. show me the version with appstart on hidden desktop") WinKill("[CLASS:Notepad]") ; 2 - do the same routine with "_shellExecuteHidden" $hWinHiddenApp = _shellExecuteHidden(@ComSpec, "/c start notepad.exe") ShellExecute("taskmgr.exe") MsgBox(0, '', "...´ok look in your taskmanager now. There should be a new notepad.exe entry but no window is visible.") ; 3 - close hidden application WinKill($hWinHiddenApp) ; EXAMPLE 2 ( interaction ): ; 1 - start hidden application MsgBox(0, '', "Now we start an editor on the hidden desktop and interact with it programmaticly") $hWinHiddenApp = _shellExecuteHidden(@SystemDir & "\notepad.exe") ; 2 - send to hidden application ControlSend($hWinHiddenApp, "", "Edit1", "di{BS}eb{BS}mk{BS}os{BS}") ; 3 - receive information from hidden application MsgBox(0, '', "Text in the editor on hidden desktop: " & @LF & @LF & ControlGetText($hWinHiddenApp, "", "Edit1")) ; 4 - close hidden application WinKill($hWinHiddenApp)
Viel Erfolg Werner 🤞 .
Viele Grüße
Sven -
Entweder du nutzt den capabilities JSON string wie folgt:
AutoIt
Alles anzeigenGlobal $sCapabilities = _ '{' & _ ' "capabilities": {' & _ ' "alwaysMatch": {' & _ ' "browserName": "firefox",' & _ ' "acceptInsecureCerts": true,' & _ ' "moz:firefoxOptions": {' & _ ' "args": [' & _ ' "--headless"' & _ ' ]' & _ ' }' & _ ' }' & _ ' }' & _ '}'
oder besser noch du nutzt die _WD_CapabilitiesAdd() function. Dies sieht dann so aus und ist empfohlen damit man beim JSON bspw. keinen Tippfehler machst 😀 :
AutoIt
Alles anzeigenGlobal $sCapabilities = _CreateFirefoxDriverCapabilities() Func _CreateFirefoxDriverCapabilities() _WD_CapabilitiesStartup() _WD_CapabilitiesAdd('alwaysMatch', 'firefox') _WD_CapabilitiesAdd('browserName', 'firefox') _WD_CapabilitiesAdd('acceptInsecureCerts', True) _WD_CapabilitiesAdd('args', '--headless') Return _WD_CapabilitiesGet() EndFunc
Viele Grüße
Sven -
Achso 🤣 . Allerdings hat _MouseTrap() erstmal nichts mit der Funktion _shellExecuteHidden() zu tun.
Dies war sicherlich nur ein Beispiel von dir, um zu sagen das du keine Lust auf Experimente hast - verstehe.
Na gut, wenn du mit deinen zwei Fenstern leben kannst und willst, dann okay. Falls nicht, versuche _shellExecuteHidden() gern, da ist keine große Magie dabei.
Einfach _shellExecuteHidden($sPath & 'ITConv.exe') aufrufen und im Taskmanager siehst du das die Instanz läuft, aber eben nicht sichtbar. Nun solltest du deine Einstellungen im Programm machen können, ohne das die beiden angesprochenen Fenster aufpoppen.
Viele Grüße
Sven -
Hi Windi ,
was genau bekommst du denn nicht hin, bzgl. _shellExecuteHidden()? Die Funktion sieht sehr vielversprechend aus 😀 .
Der Eintrag ist zwar vom Nov. 2013, doch das sollte auch weiterhin noch genauso funktionieren.
Kannst du mit dem Beispiel zum thread post nicht deine ITConv.exe starten oder wo liegt das Problem?
Wäre doch toll wenn auch deine zwei letzten Fenster (Modale) nicht mehr kurz aufpoppen oder 😀 ?!Viele Grüße
Sven -
Bestenfalls könntest du den "ITN Converter" über eine API oder über die CLI steuern, doch es scheint weder noch und keine Dokumentation zu geben 😔 .
Bleibt wahrscheinlich nur die ControlClick() bzw. ControlHide() oder eben die anderen vorgeschlagenen Varianten.
Viele Grüße
Sven -
Hi Windi ,
um besser beurteilen zu können warum die Child-Fenster trotz @SW_HIDE sichtbar sind, bräuchten wir die Informationen des AutoIt Info Tools "Au3Info_x64.exe".
Aber abgesehen davon, und das folgende ist keine schöne und robuste Variante, kannst du per WinMove($sWinTitle, '', -3000, -3000) die aufpoppenden Modale außerhalb des Sichtbereiches schieben. Ansonsten kannst du die Modale ggf. per WinSetTrans($sWinTitle, '', 0) unsichtbar machen.All dies wäre nur ein Notnagel, doch für bessere Varianten fehlen, zumindest mir, mehr insights.
Viele Grüße
Sven -
Hi Windi ,
wie genau stellst du dir das vor? Zum einem habe ich bspw. nicht ITNConv.exe installiert und habe dies auch nicht vor, zum anderen verstehe ich nicht was du vor hast.
Bitte beschreibe ein wenig mehr, was du machen willst. Dann kann dir besser geholfen werden, Danke 🤝 .- An welcher Stelle deine Code snippets funktioniert etwas nicht so wie du erwartest?
- Was ist das Gesamtziel? Ggf. kann man deine Anforderung auch völlig anders angehen, doch dazu benötigt es mehr Infos.
Viele Grüße
Sven