Beiträge von Bitnugger
-
-
_WinAPI_GetWindow
Parameter
$hWnd Handle des Fensters. Das ermittelte Fenster-Handle ist relativ zu diesem Fenster, basierend auf den Wert im uCmd Parameter.$hWnd Handle des Fensters. Das ermittelte Fenster-Handle ist relativ zu diesem Fenster, basierend auf dem Wert im $iCmd Parameter.
$GW_HWNDNEXT - Das ermittelte Handle identifiziert das Fenster direkt unter dem angegebenen Fenster, das in der Z-Anordnung ist.$GW_HWNDNEXT - Das ermittelte Handle identifiziert das Fenster, das in der Z-Anordnung direkt unter dem angegebenen Fenster ist.
$GW_HWNDPREV - Das ermittelte Handle identifiziert das Fenster direkt über dem angegebenen Fenster, das in der Z-Anordnung ist.$GW_HWNDPREV - Das ermittelte Handle identifiziert das Fenster, das in der Z-Anordnung direkt über dem angegebenen Fenster ist.
Danke water !
-
Kann man den HFS als Dienst laufen lassen?
Warum möchtest du das denn?
Schau mal hier:
http://nssm.cc/ ; Open Source
https://www.coretechnologies.com/products/Alway…AsAService.html ; ~50 $
-
_WinAPI_EnumWindowsTop
C; AutoIt 3.3.14.5 #include <Array.au3> #include <WinAPI.au3> Local $aWinList = _WinAPI_EnumWindowsTop() ; Listet alle Top-Level Fenster auf _ArrayDisplay($aWinList, '$aWinList')
Return Value
Returns an array with the following format:
[0][0] - Number of rows in array (n)
[1][0] - Window handle
[1][1] - Window class name
[n][0] - Window handle
[n][1] - Window class name
Tatsächlich liefert die Funktion aber:
[0][0] - Number of top-level windows found
[0][1] - Number of rows in array (n) ; ist immer eine durch 64 teilbare Zahl
[1][0] - Window handle
[1][1] - Window class name
[n][0] - Window handle
[n][1] - Window class name
Bsp.: Wenn [0][0] = 65, dann ist [0][1] = 128, wobei dann die Zeilen 66 - 128 leer sind.
Korrekt wäre, wenn die Funktion die leeren Zeilen im Array vor der Rückgabe eliminiert würde.
AutoIt; AutoIt 3.3.14.5 #include <Array.au3> #include <WinAPI.au3> Local $aWinList = _WinAPI_EnumWindowsTop() _ArrayDisplay($aWinList, '$aWinList - BAD') _ArrayDelete($aWinList, $aWinList[0][0] +1 & '-' & $aWinList[0][1] -1) ; Leere Zeilen aus Array löschen $aWinList[0][1] = '' ; Wird nicht benötigt, da die korrekte Anzahl der Zeilen bereits in $aWinList[0][0] steht _ArrayDisplay($aWinList, '$aWinList - OK')
-
-
BugFix - wäre schön, wenn du hier deine Anleitung zur Installation für scoop, NIM, usw. posten würdest.
Bei mir scheitert es schon bei der Installation von scoop:
Scoop is already installed... das ist gelogen... es wurde lediglich das Verzeichnis angelegt, das aber leer ist. Nachdem ich es gelöscht hatte, konnte ich die kürzere Variante testen, die aber auch nicht funktionierte.
Ahh, es liegt an eset - der hat den Link in Quarantäne gestellt!
-
ConsoleWrite(StringRegExpReplace($sBody, "(?s).*strong title=""(.+?)"".+", "\1") & @CRLF)
So ähnlich hatte ich es versucht, nur hatte ich da kein ? hinter (.+?).
So funktioniert es.
AutoItLocal $sBody = BinaryToString(InetRead('http://www.imdb.com/title/tt1399103/')) ConsoleWrite('> StringRegExp: ' & StringRegExp($sBody, '(?U).*strong title="(.+)".*', 1)[0] & @CRLF) ConsoleWrite('- StringRegExpReplace: ' & StringRegExpReplace($sBody, "(?s).*strong title=""(.+?)"".+", "\1") & @CRLF) ConsoleWrite('- StringRegExpReplace: ' & StringRegExpReplace($sBody, '(?s).*strong title="(.+?)".+', '\1') & @CRLF) ;> StringRegExp: 6.2 based on 376,129 user ratings ;- StringRegExpReplace: 6.2 based on 376,129 user ratings ;- StringRegExpReplace: 6.2 based on 376,129 user ratings
Danke!
-
Was/Womit willst du denn replacen?
Ich möchte das StringRegExpReplace dasselbe Ergebnis liefert, dass ich mit StringRegExp bekomme.
StringRegExp: 6.2 based on 376,127 user ratings
StringRegExpReplace: 6.2 based on 376,127 user ratings
Nur bekomme ich das Pattern nicht hin...
-
-
Jemand ne idee was ich falsch mache.
Ja, hier machst du was falsch, aber daran allein liegt es nicht. Die Funktion _WinAPI_GetWindow liefert nicht das Ergebnis, dass ich erwartet habe.
local $hLastWindow = _WinAPI_GetWindow ( $hGUi, $GW_HWNDNEXT +1)
Mit +1 wolltest du wohl das vorletzte aktive Window ermitteln... das ginge dann so:
CodeLocal $hLastWindow = _WinAPI_GetWindow($hGUi, $GW_HWNDNEXT) Local $hLastLastWindow = _WinAPI_GetWindow($hLastWindow, $GW_HWNDNEXT)
Ich habe hier aber mal etwas mit _WinAPI_SetWinEventHook gebastelt... evtl. hilft dir das weiter, wobei ich denke, dass es mit VNC-Anwendungen nicht funktioniert, aber so bekommst du schon mal das zuletzt aktive Window.
AutoIt: _WinAPI_SetWinEventHook_Test.au3
Alles anzeigen;-- TIME_STAMP 2020-04-24 05:34:47 v 0.1 #Region ;************ Includes ************ #Include <EditConstants.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <GuiEdit.au3> #include <WinAPIProc.au3> #include <WinAPISys.au3> #EndRegion ;************ Includes ************ Run(@SystemDir & '\notepad.exe') Run(@SystemDir & '\notepad.exe') If Not WinWait('[CLASS:Notepad]', '', 3) Then Exit 1 Global $g_aPos = WinGetPos('[ACTIVE]') WinMove('[ACTIVE]', '', $g_aPos[0] - 150, $g_aPos[1] + 150) Global $g_hEventProc = DllCallbackRegister('_EventProc', 'none', 'ptr;dword;hwnd;long;long;dword;dword') Global $g_hEventHook = _WinAPI_SetWinEventHook($EVENT_OBJECT_FOCUS, $EVENT_OBJECT_FOCUS, DllCallbackGetPtr($g_hEventProc)) HotKeySet('{ESC}', 'OnAutoItExit') OnAutoItExitRegister('OnAutoItExit') Global $hGUI = GUICreate("Example", 300, 200) Global $idInsert1 = GUICtrlCreateButton("Insert1", 10, 10, 85, 25) Global $idInsert2 = GUICtrlCreateButton("Insert2", 10, 50, 85, 25) Global $idInsert3 = GUICtrlCreateButton("Insert3", 10, 90, 85, 25) Global $idReplace1 = GUICtrlCreateButton("Replace1", 100, 10, 85, 25) Global $idReplace2 = GUICtrlCreateButton("Replace2", 100, 50, 85, 25) Global $idReplace3 = GUICtrlCreateButton("Replace3", 100, 90, 85, 25) Global $idAppend1 = GUICtrlCreateButton("Append1", 190, 10, 85, 25) Global $idAppend2 = GUICtrlCreateButton("Append2", 190, 50, 85, 25) Global $idAppend3 = GUICtrlCreateButton("Append3", 190, 90, 85, 25) Global $idPrevWindow = GUICtrlCreateLabel('Prev Window: ', 10, 125, 280, 50), $hPrevWindow = ControlGetHandle($hGUI, '', $idPrevWindow) Global $_idClose = GUICtrlCreateButton("Exit", 210, 175, 85, 25) Global $iMsg, $g_aPrevWindow[1][2], $hEdit Global $g_aInsert = [@ScriptFullPath, @ScriptName, @WorkingDir], $iIndex, $aSel, $iSel GUISetState(@SW_SHOW, $hGUI) While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE, $_idClose ExitLoop Case $idInsert1 To $idAppend3 If IsHWnd($g_aPrevWindow[0][1]) Then $hEdit = $g_aPrevWindow[0][1] Switch $iMsg Case $idInsert1 To $idInsert3 ; Text an Caret-Position einfügen $iIndex = $iMsg - $idInsert1 $aSel = _GUICtrlEdit_GetSel($hEdit) $iSel = $aSel[0] >= $aSel[1] ? $aSel[0] : $aSel[1] _GUICtrlEdit_InsertText($hEdit, StringFormat('Insert%s: %s', $iIndex + 1, $g_aInsert[$iIndex]), $iSel) Case $idReplace1 To $idReplace3 ; Selektierten Text ersetzen, oder wenn kein Text selektiert ist, Text an Caret-Position einfügen $iIndex = $iMsg - $idReplace1 _GUICtrlEdit_ReplaceSel($hEdit, StringFormat('Replace%s: %s', $iIndex + 1, $g_aInsert[$iIndex])) Case $idAppend1 To $idAppend3 ; Text hinter dem letzen Zeichen anfügen $iIndex = $iMsg - $idAppend1 _GUICtrlEdit_AppendText($hEdit, StringFormat('Append%s: %s', $iIndex + 1, $g_aInsert[$iIndex])) EndSwitch EndIf EndSwitch WEnd Func OnAutoItExit() _WinAPI_UnhookWinEvent($g_hEventHook) DllCallbackFree($g_hEventProc) While ProcessExists('notepad.exe') ProcessClose('notepad.exe') WEnd Exit EndFunc ;==>OnAutoItExit Func _EventProc($hEventHook, $iEvent, $hWnd, $iObjectID, $iChildID, $iThreadId, $iEventTime) #forceref $hEventHook, $iObjectID, $iChildID, $iThreadId, $iEventTime Switch $iEvent Case $EVENT_OBJECT_FOCUS Local $sFullPath = _WinAPI_GetWindowFileName($hWnd), $sName = StringRegExpReplace($sFullPath, '.+\\(.+)$', '\1'), $sTitle = WinGetTitle(_WinAPI_GetAncestor($hWnd, $GA_ROOT)) Switch $sName Case 'notepad.exe' ControlSetText($hPrevWindow, '', '', 'Prev Window:' & @LF & $sFullPath & @LF & '$hWnd = ' & $hWnd) ConsoleWrite(StringFormat('+ Case $EVENT_OBJECT_FOCUS + $hWnd:%s, $sTitle:"%s", $iObjectID:%s, $iChildID:%s, $iThreadId:%s, $iEventTime:%s, $sFullPath:"%s"\n', $hWnd, $sTitle, $iObjectID, $iChildID, $iThreadId, $iEventTime, $sFullPath)) If $iChildID = 0 Then If $hWnd = _WinAPI_GetAncestor($hWnd, $GA_ROOT) Then Local $hEdit = ControlGetHandle($hWnd, '', '[CLASS:Edit; INSTANCE:1]') $g_aPrevWindow[0][0] = $hWnd $g_aPrevWindow[0][1] = $hEdit EndIf EndIf Case Else If $sName = '' Then $g_aPrevWindow[0][0] = '' $g_aPrevWindow[0][1] = '' EndIf ConsoleWrite(StringFormat('- Case $EVENT_OBJECT_FOCUS - $hWnd:%s, $sTitle:"%s", $iObjectID:%s, $iChildID:%s, $iThreadId:%s, $iEventTime:%s, $sFullPath:"%s"\n', $hWnd, $sTitle, $iObjectID, $iChildID, $iThreadId, $iEventTime, $sFullPath)) EndSwitch EndSwitch EndFunc ;==>_EventProc
-
Bei der Eingabe eines neuen Datensatze
ns werden mir die Felder angezeigt, allerdings nicht in der gesamten Übersicht.Mit "gesamten Übersicht" meinst du wohl das Listview, denke ich. Wenn dem so ist, wird es wohl daran liegen, dass die Spaltenbreite der hinzugefügten Spalten auf 0 gesetzt wird.
In der Listview-Datenbank.au3 im Anhang habe ich mal zwei Spalten (Geschlecht, Alter) hinzugefügt und an einigen Stellen noch die nötigen Änderungen gemacht.
Vergleiche auch mal die Listview-Datenbank-Beispiel.ini mit der bei dir gespeicherten.
-
hat jemand eine idee wie man das lösen könnte ?
Schau dir dazu die Function _WinAPI_GetWindow an. ; ==>> $GW_HWNDNEXT - The retrieved handle identifies the window below the specified window in the Z order.
-
-
Wenn es dir gegen den Strich geht, dass User dir Fragen stellen, bei denen du offensichtlich nicht erkennen kannst, dass sie für eine zielführende Antwort relevant/wichtig sind, hättest du deine Frage nicht in der Rubrik Hilfe & Unterstützung stellen dürfen, sondern besser in der Rubrik Programmieranfragen mit/ohne Gegenleistung.
sind wir denn hierim Kindergarten? welcher erwachsene ohne absolut Fehlendes selbstbewusstsein muss andere gängelng indem er Fehler anderer korrigiert was doch absolut nicht gefragt ist.
Damit auch andere User von den Antworten/Lösungen zu deinen Fragen profitieren können, was übrigens der tiefere Sinn eines Forums ist, ist es wichtig, dass zumindest der Titel deiner Anfrage verständlich ist, damit andere User ihn mit der Suchfunktion des Forums finden können. Aus meiner Sicht hat er Dir damit ergo nur etwas Arbeit abgenommen.
Wenn ich einen SPrachkurs will geh ich babbel oder logopäde.
Es geht hier nicht um Sprachen, sondern um Rechtschreibung - deine ist übrings absolut erbärmlich!
Bei deinem Auftreten würde ich Dir nicht mal für viel Geld helfen wollen!
-
Habe deine Hinweise umgesetzt und nun doch eine komplexe UDF erstellt.
Super!
C&P-Fehler?
Func __AM_GetFromAccArray(ByRef $_aAccTmp, $_index, $_vAsk, $_sAction='getID') ; $_sAction: 'getHK', 'getHK'
Soll wohl...
Func __AM_GetFromAccArray(ByRef $_aAccTmp, $_index, $_vAsk, $_sAction='getID') ; $_sAction: 'getID', 'getHK'
-
If $aAccelerators[$i][0] = $_HotKey Then Return SetError(1,0,0)
Da ein Accelerator ja an eine GUI gebunden ist, kannst du hier nicht einfach nur prüfen, ob der Accelerator bereits verwendet wird. Du musst prüfen, ob der Accelerator bereits für das angegebene Fenster verwendet wird.
Zudem sollten Accelerators für ein Fenster wieder aus dem Array gelöscht werden, wenn das Fenster oder das Control nicht (mehr) existiert. Du musst dir also nicht nur die Accelerators merken, sondern auch die Handles der Fenster, zu denen sie gehören.
$_HotKey ...wäre $_Accelerator hier nicht passender?
Was passiert übrigens mit dem Accelerator, wenn ich ein Dummy Control mit GUICtrlDelete($ID_1) eliminiere (und danach z.B. ein Edit Controls erzeuge)?
-
Bilde ich mir das nur ein, oder hakt es mit _GDIPlus_GraphicsSetSmoothingMode weniger?
AutoItFunc _Example_1() ... _GDIPlus_Startup() $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGui) _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY) ;Sets the graphics object rendering quality (antialiasing) ...
Bei mir ruckelt es übrigens nicht!
Ich hatte erst überlegt, die Punkte des Umfangs zu berechnen und zu speichern.
Evtl. geht das mit ..., _GDIPlus_PathAddEllipse, _GDIPlus_PathIsVisiblePoint
-
Bei mir laufen auch beide Bsp. fehlerfrei. Unschön ist nur noch, dass der Mauszeiger sich an den nicht ganz runden Stellen festhakt und bei einem flachen Bewegungswinkel der Maus nicht in die entsprechende Richtung rutscht, aber das ist wohl nur schwer zu berechnen.
Win10 x64 Pro, AutoIt 3.3.14.5
Wenn die Maus in Pfeilrichtung bewegt wird: Links im Bild hakt die Maus an dieser Stelle... rechts im Bild die Position, bis wo sie rutschen sollte.
Ich benutze AutotoIt 3.3.14.5 zusammen mit:
Hihi...
-
Hehe... is ja mal very cool!
Ist die Maus bei Aktivieren der Funktion außerhalb des Kreises, wird sie bei der ersten Mausbewegung in den Kreis bewegt ...
Besser fände ich, wenn die Maus direkt bei Aktivierung an den Innenrand des Kreises bewegt wird... evtl. auch als optionalen Parameter mit angeben.
Gar nicht gut finde ich, dass die Maus beim Versuch den Kreis zu verlassen, in die Mitte des Kreises bewegt wird.
-
This function does not stop the screen saver from executing.
Dies bedeutet doch lediglich, dass der Bildschirmschoner nicht vom System ausgeführt wird, solange der Thread noch läuft... wobei aber nicht verhindert wird, dass er ausgeführt wird, wenn ein beliebiger Prozess ihn startet.