Dann suche halt weiter oben ![]()
Verändere den Wert für $y_start = ... , mach ihn etwas kleiner (so 10 - 20 Pixel)
Beiträge von BugFix
-
-
der text in spalte 1 kopiert wird
Kopieren oder Verschieben?standardmäßig soll eine zeile markiert sein und beim scrollen dann jeweils die markierung hoch oder runterlaufen.
Das widerspricht der obigen Funktion. Mit dem Wechsel der Markierung würde die Aktion zum Verschieben/Kopieren in Spalte 1 veranlaßt. -
das grün liegt außerhalb des symbols
Probiere aus, in welchem Abstand es liegt und ziehe diesen Abstand vom $match ab (also z.B. $match[0] -30 ). Der Y-Wert dürfte passen. -
Hi,
3 nützliche "Helferlein":_GetRegSubKeys($HKEY)
Ermittelt die Unterschlüssel für den übergebenen Schlüssel_GetRegRights($HKEY)
Ermittelt die Rechte des Abfragenden für den übergebenen Schlüssel_GetRegValues($HKEY)
Ermittelt alle Namen, Typen und Werte in einem gegebenen SchlüsselSpoiler anzeigen
[autoit]#include<Array.au3>
[/autoit] [autoit][/autoit] [autoit]
$ar = _GetRegSubKeys('HKLM\Software')
_ArrayDisplay($ar, "SubKeys von Software")
MsgBox(0, 'Rechte für Software', _GetRegRights('HKLM\Software'))
$ar = _GetRegValues('HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\Autoit')
If IsArray($ar) Then
_ArrayDisplay($ar)
Else
MsgBox(0, '', 'Fehler')
EndIf
;========================================================================================
; Function Name: _GetRegSubKeys($HKEY)
; Description: Ermittelt die Unterschlüssel für den übergebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array mit den Unterschlüsseln
; Fehler Leerstring (keine Unterschlüssel vorhanden oder Schlüssel existiert nicht)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegSubKeys($HKEY)
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $arrSubKeys = '', $subkey
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
$oReg.EnumKey ($HKEY, $strKeyPath, $arrSubKeys)
Return $arrSubKeys
EndFunc ;==>_GetRegSubKeys;========================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Function Name: _GetRegRights($HKEY)
; Description: Ermittelt die Rechte des Abfragenden für den übergebenen Schlüssel
; Parameter(s): $HKEY der zu prüfende Registryschlüssel
; Return Value(s): String mit Auflistung der Rechte:
; Q Key Query Value
; S Key Set Value
; C Key Create Sub Key
; D Delete
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegRights($HKEY)
Local $bHasAccessRight, $sRights = ''
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0001, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'Q'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0002, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'S'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x0004, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'C'
$oReg.CheckAccess($HKEY, $strKeyPath, 0x00010000, $bHasAccessRight)
If $bHasAccessRight = True Then $sRights &= 'D'
Return $sRights
EndFunc ;==>_GetRegRights;========================================================================================
[/autoit]
; Function Name: _GetRegValues($HKEY)
; Description: Ermittelt alle Namen, Typen und Werte in einem gegebenen Schlüssel
; Parameter(s): $HKEY der Registryschlüssel
; Return Value(s): Erfolg Array[i][0] = Name
; Array[i][1] = Typ
; Array[i][2] = Wert
; Fehler Leerstring (Schlüssel existiert nicht oder ist ohne Einträge)
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;========================================================================================
Func _GetRegValues($HKEY)
Local $oMyError = ObjEvent("AutoIt.Error","MyErrFunc")
If StringInStr($HKEY, '\') Then
If StringRight($HKEY, 1) = '\' Then
$HKEY = StringTrimRight($HKEY, 1)
Local $strKeyPath = ''
Else
Local $strKeyPath = StringRight($HKEY, StringLen($HKEY)-StringInStr($HKEY, '\') )
$HKEY = StringLeft($HKEY, StringInStr($HKEY, '\')-1)
EndIf
Else
Local $strKeyPath = ''
EndIf
Select
Case $HKEY = "HKEY_LOCAL_MACHINE" Or $HKEY = "HKLM"
$HKEY = 0x80000002
Case $HKEY = "HKEY_USERS" Or $HKEY = "HKU"
$HKEY = 0x80000003
Case $HKEY = "HKEY_CURRENT_USER" Or $HKEY = "HKCU"
$HKEY = 0x80000001
Case $HKEY = "HKEY_CLASSES_ROOT" Or $HKEY = "HKCR"
$HKEY = 0x80000000
Case $HKEY = "HKEY_CURRENT_CONFIG" Or $HKEY = "HKCC"
$HKEY = 0x80000005
EndSelect
Local $oReg = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
Local $arrValueNames, $arrValueTypes, $strValue
$oReg.EnumValues($HKEY, $strKeyPath, $arrValueNames, $arrValueTypes)
$OEvent = ObjEvent($oReg, "EnumValues")
If Not IsArray($arrValueNames) Then Return ''
Local $arOut[UBound($arrValueNames)][3]
For $i = 0 To UBound($arrValueNames) -1
$arOut[$i][0] = $arrValueNames[$i]
Switch $arrValueTypes[$i]
Case 1
$arOut[$i][1] = 'REG_SZ'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 2
$arOut[$i][1] = 'REG_EXPAND_SZ'
$oReg.GetExpandedStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 3
$arOut[$i][1] = 'REG_BINARY'
$oReg.GetBinaryValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 4
$arOut[$i][1] = 'REG_DWORD'
$oReg.GetStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
Case 7
$arOut[$i][1] = 'REG_MULTI_SZ'
$oReg.GetMultiStringValue($HKEY, $strKeyPath, $arrValueNames[$i], $strValue)
EndSwitch
$arOut[$i][2] = $strValue
Next
Return $arOut
EndFunc ;==>_GetRegValues
Func MyErrFunc()
Return
Endfunc -
Wenn es so, wie in deiner Zeichnung ist, liegt ja das Farbsymbol neben dem eigentlichen Icon.
Also mußt du doch Pixelweise scannen (wie von mir am Anfang empfohlen) um das erste Grün, das wohl über dem richtigen Icon liegt, auch zu erwischen. -
Oder guggst du hier.
Aber auch in SciTE ( Alt+W ) -
dass er das symbol rechts nebendran bewegt und nicht das bei dem die grüne fläche aufpopt
Das liegt wohl daran, dass das grüne Feld nicht über dem eigentlichen Icon, sondern rechts daneben erscheint. Dann setze das Raster auf 5 Pixel herunter, dann ist die Chance größer, dass der über dem richtigen Icon liegende Bereich erwischt wird.ich hätte aber gerne, dass sie weiter läuft und er das gesammte raster absuchet
Grundsätzlich kein Problem, entferne ExitLoop aus der Schleife und probiere. -
Ist eine xml-Datei, sollte nicht allzu schwierig sein, dass zu erstellen. Ist halt nur einiges an Arbeit

-
Hm, wenn ich da die WS raus mach, findet StringRegExp doch keinen Match mehr.
Stimmt, ich dachte auch mehr an nur die Umbrüche.
Wie gehst du vor? Alles in ein Array listen und iterieren oder zeilenweise einlesen und prüfen? -
Na dann eben in 10-er Pixelblöcken die Maus setzen und jeweils den Bereich 10x10 rechts von der Maus scannen:
[autoit]Global $x_start = 100, $x_end = 300, $y_start = 100, $y_end = 200
[/autoit]
Global $x_ziel = 400, $y_ziel = 500, $color = 0x66FF00, $match
For $i = $x_start To $x_end Step 10
For $k = $y_start To $y_end Step 10
MouseMove($i, $k, 5)
$match = PixelSearch($i, $k, $i+10, $k+10,$color)
If IsArray($match) Then
MouseClickDrag('left', $match[0], $match[1], $x_ziel, $y_ziel, 1)
ExitLoop(2)
EndIf
Next
Next -
Schau in der Hilfe zu GUICreate(), dort findest du Styles und Extended-Styles. Einfach den Links folgen.
-
Vielleicht kannst du ja mal dein Pattern posten.
Vielleicht besteht ein Problem bei Zeilenumbrüchen, entferne die einfach mal vor dem Check (StringStripWS). -
War mir schon klar, aber das Springen im 50 Pixel-Takt ist Quatsch.
ZitatDu müßtest dann die Maus Pixel für Pixel bewegen und jedesmal scannen ob das Symbol auftaucht.
Deshalb auch mein obiges Bsp.
-
Vielleicht bringt es dir was die Prozesseigenschaften auszuwerten.
Mal ein Bsp. für die ersten 5 Durchläufe, die Daten aller Prozesse im 2 Sekunden-Takt:Spoiler anzeigen
[autoit]$strComputer = "."
[/autoit] [autoit][/autoit] [autoit]
$objWMIService = ObjGet("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$objRefresher = ObjCreate("WbemScripting.SWbemRefresher")
$colItems = $objRefresher.AddEnum _
($objWMIService, "Win32_PerfFormattedData_PerfProc_Process").objectSet
$objRefresher.Refresh
$str = ''For $i = 1 to 5
[/autoit]
For $objItem in $colItems
$str &= "Caption: " & $objItem.Caption & @LF
$str &= "Creating Process ID: " & $objItem.CreatingProcessID & @LF
$str &= "Description: " & $objItem.Description & @LF
$str &= "Elapsed Time: " & $objItem.ElapsedTime & @LF
$str &= "Handle Count: " & $objItem.HandleCount & @LF
$str &= "ID Process: " & $objItem.IDProcess & @LF
$str &= "I/O Data Bytes Per Second: " & $objItem.IODataBytesPersec & @LF
$str &= "I/O Data Operations Per Second: " & $objItem.IODataOperationsPersec & @LF
$str &= "I/O Other Bytes Per Second: " & $objItem.IOOtherBytesPersec & @LF
$str &= "I/O Other Operations Per Second: " & $objItem.IOOtherOperationsPersec & @LF
$str &= "I/O Read Bytes Per Second: " & $objItem.IOReadBytesPersec & @LF
$str &= "I/O Read Operations Per Second: " & $objItem.IOReadOperationsPersec & @LF
$str &= "I/O Write Bytes Per Second: " & $objItem.IOWriteBytesPersec & @LF
$str &= "I/O Write Operations Per Second: " & $objItem.IOWriteOperationsPersec & @LF
$str &= "Name: " & $objItem.Name & @LF
$str &= "Page Faults Per Second: " & $objItem.PageFaultsPersec & @LF
$str &= "Page File Bytes: " & $objItem.PageFileBytes & @LF
$str &= "Page File Bytes Peak: " & $objItem.PageFileBytesPeak & @LF
$str &= "Percent Privileged Time: " & $objItem.PercentPrivilegedTime & @LF
$str &= "Percent Processor Time: " & $objItem.PercentProcessorTime & @LF
$str &= "Percent User Time: " & $objItem.PercentUserTime & @LF
$str &= "Pool Nonpaged Bytes: " & $objItem.PoolNonpagedBytes & @LF
$str &= "Pool Paged Bytes: " & $objItem.PoolPagedBytes & @LF
$str &= "Priority Base: " & $objItem.PriorityBase & @LF
$str &= "Private Bytes: " & $objItem.PrivateBytes & @LF
$str &= "Thread Count: " & $objItem.ThreadCount & @LF
$str &= "Virtual Bytes: " & $objItem.VirtualBytes & @LF
$str &= "Virtual Bytes Peak: " & $objItem.VirtualBytesPeak & @LF
$str &= "Working Set: " & $objItem.WorkingSet & @LF
$str &= "Working Set Peak: " & $objItem.WorkingSetPeak & @LF
ConsoleWrite( $str & @CRLF & @CRLF)
$str = ''
Sleep (2000)
$objRefresher.Refresh
Next
NextEdit:
Evtl. bringt dich ja das Auflisten der Threads/ ~status weiter.
Auflisten kannst du so:Spoiler anzeigen
[autoit]$objDictionary = ObjCreate("Scripting.Dictionary")
[/autoit] [autoit][/autoit] [autoit]
$strComputer = "."
$objWMIService = ObjGet("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colProcesses = $objWMIService.ExecQuery("Select * from Win32_Process")For $objProcess in $colProcesses
[/autoit] [autoit][/autoit] [autoit]
$objDictionary.Add ($objProcess.ProcessID, $objProcess.Name)
Next$colThreads = $objWMIService.ExecQuery ("Select * from Win32_Thread")
[/autoit] [autoit][/autoit] [autoit]For $objThread in $colThreads
[/autoit]
$intProcessID = Int($objThread.ProcessHandle)
$strProcessName = $objDictionary.Item($intProcessID)
ConsoleWrite( $strProcessName & @TAB & $objThread.ProcessHandle & _
@TAB & $objThread.Handle & @TAB & $objThread.ThreadState & @CRLF)
Next -
Ich verstehe nicht, welchen Sinn das hier haben soll:
[autoit]for $i = 2 to 5
[/autoit]
MouseMove ( $xcords[$i] , $ycords[$i]) ; <- soll die koordinaten checken gegebenenfalls das symbol verschieben
call ("checkgreen")
sleep ( 100)
Next
Das Prüfen der Koordinaten (Auffinden Symbol) erledigst du doch mit Pixelsearch. Wozu willst du da auf einer Waagerechten in 50 Pixel Abständen rumspringen, um dann doch jedesmal denselben Bereich abzusuchen ?
Du müßtest dann die Maus Pixel für Pixel bewegen und jedesmal scannen ob das Symbol auftaucht.Edit:
[autoit]
Also ich glaube, du suchst sowas:Global $x_start = 100, $x_end = 300, $y_start = 100, $y_end = 200
[/autoit]
Global $x_ziel = 400, $y_ziel = 500, $color = 0x66FF00
For $i = $x_start To $x_end
For $k = $y_start To $y_end
MouseMove($i, $k, 1)
If PixelGetColor($i, $k) = $color Then
MouseClickDrag('left', $i, $k, $x_ziel, $y_ziel, 1)
ExitLoop(2)
EndIf
Next
Next -
Zitat von Protokollbeschreibung OSCAR
Der FLAP-Header beginnt mit dem hexadezimalen Wert 2A zur Erkennung des FLAP-Pakets. Es folgt ein Channel (siehe unten), eine Sequenznummer zur Fehlererkennung und die Größe der angehängten Daten.
Darum sagte ich ja, du mußt erstmal das Protokoll nachbauen. Den Receive zerlegen in die einzelnen Protokollbestandteile und entsprechend reagieren.Edit: Anscheinend hast du noch nicht danach gesucht, hier das offengelegte OSCAR Protokoll
-
Spinne, es ist empörend, dass du uns das Teil so lange verschwiegen hast.

Nee, ernsthaft, sieht gut aus - vielleicht können wir alternativ zur ShoutBox eine ScriptBox auf der Basis einbauen
Edit:
Nachdem ich die Posts getrennt habe, hier nochmal der Link zu Gobby -
Du mußt dir das Protokoll nachbauen. Wenn du dann die Startsequenz sendest bekommst du ein Receive. Das mußt du auswerten. Dann wirst du auch die angeforderten User/PW-Sequenzen entdecken. Ist aber recht anspruchsvoll. Und vergiß nicht MD5-Checksumme, sonst bekommst du eh keine Verbindung.
Personalisiere doch einfach einen bestehenden Client. -
oder so:
[autoit]Global $start = False
[/autoit][autoit][/autoit][autoit]
HotKeySet('^1', '_start_stop')Func _start_stop()
[/autoit][autoit][/autoit][autoit]
$start = Not $start
If $start Then
AdlibEnable('_leer', 50)
Else
AdlibDisable()
EndIf
EndFuncFunc _leer()
[/autoit]
Send('{SPACE}')
EndFunc -
Eine etwas andere Möglichkeit wäre, dass du deinen Kumpel per VNC direkt auf deinen PC zugreifen lassen kannst. Dann arbeitet zwar auch immer nur einer, aber der andere ist live dabei und sieht es und kann reagieren.
Und per TeamSpeak könnt ihr euch abstimmen