hast du mal ein packet was du ferig machen würdest... mit den .dll ´s und co .... wollte mir nicht alles händisch zusammen kramen.
Beiträge von WhiteLion
-
-
wenn ich das tool starte, dann bekomme ich einen autoit error - > line 5795
mich würde brennend interessieren wie du (so versteh ich es zumindest)
autoitcode der nicht nativ kompiliert ist zumlaufen bekommst ? so weit ich weiss, geht das gar nicht.edit: $aProcess[$iPID][4] = $objItem.PercentProcessorTime -> G:\Spiele\test123\ActiveGuard.au3 (422) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$aProcess[$iPID][4] = $objItem.PercentProcessorTimeEDIT2:
ohne es wirklich testen zu können noch ein tipp. du solltest nicht den ganzen md5 als signatur nehmen. sonst stößt du schnell an performance - grenzen wenn du 100 mio. hashwerte einträgst. besser wäre gewisse breiche aus dem ram zu dumpen und darauf md5 anzuwenden. ... ist natürlich die frage wie man eine datenbank sinn füllt, denn du müsstest alles von hand machen....
auch packer zu erkennen wäre nötig ... da könnte ich dir mit einer signatur-datenbank dienen. selbige entpacken zu lassen, wäre eigentlich nötig um die erkennung sicherzustellen ... aber schreib mal einen generic entpacker ... oder überhaupt erstmal einen
jetzt weisst du auch warum die antiviren-hersteller so viele leute beschäftigen.Code
Alles anzeigenG:\Spiele\test123\BadBlaster.au3(238,27) : WARNING: $hProgress: possibly used before declaration. GUICtrlSetData($hProgress, ~~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(240,30) : WARNING: $hProgressLBL: possibly used before declaration. GUICtrlSetData($hProgressLBL, ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(353,26) : WARNING: $Progress: possibly used before declaration. GUICtrlSetData($Progress, ~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(354,29) : WARNING: $ProgressLBL: possibly used before declaration. GUICtrlSetData($ProgressLBL, ~~~~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(356,23) : WARNING: $Quit: possibly used before declaration. GUICtrlSetState($Quit, ~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(384,23) : WARNING: $SObj: possibly used before declaration. GUICtrlSetData($SObj, ~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(416,25) : WARNING: $SSObj: possibly used before declaration. GUICtrlSetData($SSObj, ~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(421,28) : WARNING: $SSObjQua: possibly used before declaration. GUICtrlSetData($SSObjQua, ~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(422,34) : WARNING: $ScanGUI: possibly used before declaration. GUISetState(@sw_hide, $ScanGUI) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(427,29) : WARNING: $SSObjDel: possibly used before declaration. GUICtrlSetData($SSObjDel, ~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(534,22) : WARNING: $l: possibly used before declaration. if @error then $l=$l+ ~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(537,12) : WARNING: $ob: possibly used before declaration. $ob=$ob+ ~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(538,47) : WARNING: $zaehl: possibly used before declaration. GUICtrlSetData($Progress, round($ob/$zaehl* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3(540,11) : WARNING: $d: possibly used before declaration. $d=$d+ ~~~~~^ G:\Spiele\test123\BadBlaster.au3(541,11) : WARNING: $s: possibly used before declaration. $s=$s+ ~~~~~^ G:\Spiele\test123\BadBlaster.au3(544,11) : WARNING: $o: possibly used before declaration. $o=$o+ ~~~~~^ G:\Spiele\test123\BadBlaster.au3(211,66) : WARNING: $hProgress: declared global in function only. Prefer top of file. Global $hProgress = GUICtrlCreateProgress(5, 65, 546-120-10, 20) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ G:\Spiele\test123\BadBlaster.au3 - 0 error(s), 17 warning(s)
-
@progandy
okey, danke ...
ich werds mal so versuchenAspirinJunkie
das meiste informationen um die prozesse zu filtern wie....
registrierungs-schlüssel werte, hashwerte, pids, pfade... etc.EDIT: also _ArrayBinarySearch kann ich leider nicht anwenden, dann es sich ja um ein 2D array handelt.
das mit dem durchsuchen des großen arrays statt des kleinen hat einiges gebracht.
Sortiere deine Blockliste <- das könntest du noch mal erklären... was meinst du mit blockliste ? -
okey, das wusste ich nciht ... schätze mal das es bei sleep(1) automatisch auf 10 gesetzt wird.... nun ja, aber was kann ich denn nun machen ? - hat keiner eine idee ?
-
ja, das sleep ist auch nur weil es sonst den prozessor (zumindest einen kern) ... auslastet
mache ich sleep(1), dann gehts auf 6-10% auslastung (was ok wäre), aber der scannvorgang dauert pro durchlauf ca. 30 sekunden. -
oh sry ... hab ich falsch verstanden.
also sinn ist es die aktuell laufenden prozesse (in meinen script: $ProcList = ProcessList()) mit den prozessen aus meinem array was 2300 prozesse beinhaltet ($AppsDirFilesIni[4000][21]) zu vergleichen, wenn ich einen der 2300 prozesse unter den laufenden finde, dann führe ich vergleiche durch um sicher zu gehen, dass es sich auch wirklich um den gesuchten handelt. (die vergleiche sind aber wie gesagt nicht das problem, sondern nur das ständige scannen, was ich ja hier mit _ArraySearch anstelle)
-
Ich weiß nicht genau was dein Programm machen soll.
Daher wäre es vielleicht besser wenn du mal ganz konkret sagst was du am Ende erreichen willst und dann kann man mal schauen ob es an deinem Ansatz oder deiner Umsetzung etwas verbessern kann.
Spontan überblicke ich den Code erstmal nicht so schnell.
Ins Auge fallen mir da aber z.B. die For-Schleife die eine feste Endgröße von 3999 besitzt - sieht spontan ineffektiv aus - allerdings weiß ich ja nicht wofür die ist.Die eigentlich wichtige Frage dabei: Warum weiß du das es das ArraySearch ist was so langsam ist und nicht z.B. die _PidGetPath() oder die _createSHA1HashEditor (welche nicht im Skript dabei liegen)?0
ich weiss es daher, da diese funktionen nur bei einem treffer von _arraysearch ausgeführt werden.
siehe: if @error=0 and $index >= 0 then
das sind max. 2-5 trefferdas array wird auch nicht bis zum ende (3999) durchsucht, sondern nur bis zum letzten eintrag:
siehe: if $AppsDirFilesIni[0][9]-1 >= $x then
okey, das ist optimierbar, drüfte aber wohl kaum das problem lösen
Wie gesagt - beschreib lieber was du erreichen willst anstatt uns deinen komplexen Code zu erklären - dann kann man vielleicht mehr helfen.ich möchte erreichen, dass meine suche schneller vonstatten geht als bislang.
-
hier ein auszug der funktion:
Daraus werden die exe-files (2300) geholt von $AppsDirFilesIni[$x][4]:
$AppsDirFilesIni[4000][21]
[autoit]Func _getProcessInfos($index_StartSearch_AppsDirFilesIni=0)
[/autoit]
_check_GUI_Buttons()
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","IN------------------------------------------------------_getProcessInfos"&@LF)
;if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","_getProcessInfos STARTE BEI INDEX:"&$index_StartSearch_AppsDirFilesIni&@LF)
Local $x
Local $index = 0
;Sleep(10)
$ProcList = ProcessList()
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","INI index:"&$x&" search start from: "&$index_StartSearch_AppsDirFilesIni&@LF)
;_ArrayDisplay($ProcList, "$FileList")
for $x=0+$index_StartSearch_AppsDirFilesIni to 3999
$ExeFileName = $AppsDirFilesIni[$x][18]&$AppsDirFilesIni[$x][4]
;_ArrayDisplay($AppsDirFilesIni, "$FileList")
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","INI index:"&$x&" $ExeFileName:"&$ExeFileName&@LF)
;anzahl der elemente in $AppsDirFilesIni:
Sleep(10)
if $AppsDirFilesIni[0][9]-1 >= $x then
$index = _ArraySearch($ProcList, $ExeFileName, 0, 0, 0, 0, 1, 0)
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","process search - error:"&@error&@LF)
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","process search:"&$index&@LF)
if @error=0 and $index >= 0 then
;$RunningApplication[0] = $ExeFileName
$AppsDirFilesIni[$x][10] = $ProcList[$index][0]
$AppsDirFilesIni[$x][11] = $ProcList[$index][1]
$AppsDirFilesIni[$x][12] = _PidGetPath($ProcList[$index][1])
$AppsDirFilesIni[$x][13] = _createSHA1HashEditor($AppsDirFilesIni[$x][12])
$AppsDirFilesIni[$x][14] = $index
$IndexFound_AppsDirFilesIni = $x
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","INI index:"&$x&" setting continue index to: "&$IndexFound_AppsDirFilesIni&@LF)
; return >= 4 - patch okey, in liste!
; return <> 0 - patch was gefunden, aber falsch -> weitersuchen
; return = 0 nix gefunden
$AppsDirFilesIni[$x][20] = (_regkey_classification($x) + _ApplicationDetectPath($x) + _hash_bewertung($x))
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log"," SUMME der BEWERTUNG $AppsDirFilesIni[$x][20]:"&$AppsDirFilesIni[$x][20]&@LF)
if $AppsDirFilesIni[$x][20] = 1 or $AppsDirFilesIni[$x][20] = 2 or $AppsDirFilesIni[$x][20] = 3 Then
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","AUSKLAMMERN:"&$AppsDirFilesIni[$x][4]&@LF)
$AppsDirFilesIni[$x][18] = 1
EndIf
if $AppsDirFilesIni[$x][20] >= 4 Then
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","OUT-------------------Return:"&$AppsDirFilesIni[$x][20]&"-----------------------------------_getProcessInfos"&@LF)
Return $AppsDirFilesIni[$x][20]
EndIf
;if $debuglog = 1 then FileWrite($ToolTitle&"debug.log", $RunningApplication[0] & " " & $RunningApplication[1] & " "& $RunningApplication[2] &" "& $RunningApplication[3] & " " & $RunningApplication[4] & " "& $RunningApplication[5]& " "& $RunningApplication[6])
EndIf
Else
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","clear RunningApplication array"&@LF)
;$index = ""
$AppsDirFilesIni[$x][10] = ""
$AppsDirFilesIni[$x][11] = ""
$AppsDirFilesIni[$x][12] = ""
$AppsDirFilesIni[$x][13] = ""
$AppsDirFilesIni[$x][14] = ""
$AppsDirFilesIni[$x][20] = ""
$IndexFound_AppsDirFilesIni = ""
EndIf
if $AppsDirFilesIni[0][9]-1 <= $x then
$IndexFound_AppsDirFilesIni = ""
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","OUT-------------------Return:leer-----------------------------------_getProcessInfos"&@LF)
Return ""
EndIf
Next
if $debuglog = 1 then FileWrite($ToolTitle&"debug.log","OUT-------------------Return:leer-----------------------------------_getProcessInfos"&@LF)
$IndexFound_AppsDirFilesIni = ""
return ""
EndFunc -
moinsen mal wieder
leider hab ich ein massives performance wenn ich mein array durchsuche:
ich durchsuche mein array ($ProcList) mit allen laufenden prozessen (meist 50 - 200):
$index = _ArraySearch($ProcList, $ExeFileName, 0, 0, 0, 0, 1, 0)
... das ganze in einer schleife und zwar ist $ExeFileName eine liste die ca. 2300 einträge umfasst.
... dauert bei mir ca 5 sekunden, dann ist aber der prozessor voll ausgelastet, was ich extrem störend
finde, da die anwendung dezent im hintergrund laufen soll ohne das system zu freezen.
baue ich sleeps ein, streckt sich das ganze wie kaugummie...
was kann ich machen ? - gibt es eine performantere alternative zu _ArraySearch ??Gruss aus celle
-
Gibt die neuere der beiden dateien zurück....
ich habs in meinem programm gebraucht, weil ich keine udf gefunden habe ... wers auch braucht, bitte sehr
[autoit]#include <array.au3>
[/autoit][autoit][/autoit][autoit]MsgBox(0, "Ergebnis", "Neuer:" & _file_time_compare("update.sha", "status.tmp"))
[/autoit][autoit][/autoit][autoit][/autoit][autoit]Func _file_time_compare($file1,$file2)
[/autoit]
$1 = FileExists($file1)
$2 = FileExists($file2)
if $1+$2 = 0 Then Return ""
if $1 = 0 Then Return $file2
if $2 = 0 Then Return $file1
$filetime1array = FileGetTime($file1)
$filetime1 = StringReplace(_ArrayToString($filetime1array), "|", "")
$filetime2array = FileGetTime($file2)
$filetime2 = StringReplace(_ArrayToString($filetime2array), "|", "")
$r = $filetime1 - $filetime2
if $r >= 0 Then Return $file1
if $r < 0 Then Return $file2
EndFunc -
guten abend
heute habe ich ein problem mit meiner GUI.
[autoit]
diese reagiert sehr träge und ich dachte, dass ich es damit lösen könnte:AutoItSetOption("GUIOnEventMode",1)
[/autoit]
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_check_GUI_Buttons")das ist der code:
[autoit]
[/autoit][autoit][/autoit][autoit][/autoit]
Func _check_GUI_Buttons()
$aMsg = GUIGetMsg(1)
$msg = $aMsg[0]
if $msg = $GUI_EVENT_CLOSE Or $Msg = $exititem Then
if $aMsg[1] = $Form3 Then
WinSetOnTop($Form3,"",0)
$realyclose = MsgBox(1,"Question","Really close ?")
if $realyclose = 1 Then
_delete_loader_GUI()
$Closed_GUI_by_Manual = 1
EndIf
EndIf
if $aMsg[1] = $SettingsGui Then
GUIDelete($SettingsGui)
$SettingsGui = ""
EndIf
if $aMsg[1] = $Form5 Then
GUIDelete($Form5)
$Form5 = ""
EndIf
if $aMsg[1] = $h8Gui Then
GUIDelete($h8Gui)
$h8Gui = ""
EndIf
endif
if $aMsg[0] <> "" And $aMsg[0] = $PID_GUI Then _enterPID()
if $aMsg[0] <> "" And $aMsg[0] = $enterregistersite Then ShellExecute("http://wwww.n4cer.de/?reg=" & $number)
if $aMsg[0] <> "" And $aMsg[0] = $request_PID_button Then _get_PID_from_PW()
;traymenu
if $aMsg[0] <> "" And $aMsg[0] = $rescanitem Then
_clearApplicationIniArrayEditor()
_clearInformationIniToArrayEditor()
$Closed_GUI_by_Manual = 0
$Timer1 = 9
_delete_loader_GUI()
EndIf
if $aMsg[0] <> "" And $aMsg[0] = $messagesitem Then
ShellExecute("http://wwww.n4cer.de/inbox")
EndIf
if $aMsg[0] <> "" And $aMsg[0] = $settingsitem Then _Settings()
if $aMsg[0] <> "" And $aMsg[0] = $friendsitem Then _create_friendsonline_gui()
if $aMsg[0] <> "" And $aMsg[0] = $aboutitem Then Msgbox(64,"About","blabla .....")
if $aMsg[0] <> "" And $aMsg[0] = $exititem Then Exit
EndFuncvorher hab ich _check_GUI_Buttons() immer in einer schleife abgefragt, die abfragen hab ich noch nicht
entfernt. - kann es daran liegen ? jetzt reagiert die gui nämlich gar nicht mehr -
@progandy
das problem ist nur:
ich brauche noch subtrahieren... und evtl noch weitere
und das array was abgearbeitet wird ist unterschiedlich groß, so dass zwischen
30 und 120 solcher rechnungen pro sekunde durchgeführt werden sollten....Marthog
ich probier das mal aus mit größeren werten ... war gestern zu spät.
EDIT: geht nicht ... alles über 4 byte hängt nullen an und addiert nicht.danke aber schonmal jungens
-
danke für die antworten und das script
also auf die geschwindigkeit kommts leider schon etwas an. ich habe aber schon die bignum.udf gefunden welche das verrechnen von großen dezimalzahlen ermöglicht. leider keine hex .... im grunde wäre mir wohl geholfen, wenn ich große hexzahlen in dezimal und wieder zurück wandeln könnte.... (zumindest meine ich das, ohne alle funktionen durchdacht zu haben die ich ändern müsste....)
edit:
oh super danke... mit dem beispiel wäre es dann mit 32bit/int gelöst....
.... aber was ist mit 64bit ? -
wie denn ?
das geht z.B. nicht:
[autoit]
[/autoit]
$x = "DDDDDDDD"
$y = "11111111"
MsgBox(0,"$result",hex("x0"&$x+"x0"&$y))das schon:
[autoit]
[/autoit]
$x = 0xDDDDDDDD
$y = 0x11111111
MsgBox(0,"$result",hex("x0"&$x+"x0"&$y))
... bringt mir aber nix, da die werte im array ohne "0x" vorliegen und dar pure "davorhängen" wie im beispiel drüber geht ja nicht. zumal es vorkommen kann, das der hexwert größer als 32 bit ist und dann gibts nen bösen crash.wenn ich es vorher per "dec" aus dem array in dezimal wandel, dann es es noch stärker begrenzt, weil man mit dezimalzahlen leider auch nicht unbegrenzt rechnen kann
-
hallo, ich habe in einem array zwei hexwerte die mal so groß sein können:
wert1: "dddddddd"
wert2: "11111111"
das geht schon nicht ... zumindest weiss ich nicht wie...
leider könnte es sogar auch vorkommen, dass mal größere werte (bis 64bit)
addiert werden müssen .... hier dran darf ich gar nicht denken...
leider hab ich keine lösung (nicht mal für das beispiel mit den relativ kleinen werten) gefunden...LG
-
meinen tiefsten respekt .... ich möchte gar nicht wissen wie lange man mit einer sehbehinderung an sowas sitzt. und dann noch so aufgeräumt, damit wir als nicht blinde überhaupt genug verstehen ... behindert hilft nicht behindert eigentlich sollte es umgekehrt sein. xD
-
ups, ja natürlich
edit: habs oben gefixed
-
ich hoffe ich habe dich richtig verstanden ... versuch mal das hier:
[autoit]
[/autoit][autoit][/autoit][autoit]
Opt("TrayMenuMode",1)
$exititem = TrayCreateItem("Beenden")
TraySetState()
Local $timer = 0
While 1
$tmsg = TrayGetMsg()
Select
Case $tmsg = $exititem
Exit
EndSelect
Sleep(20)
$timer +=1
If $timer >= 1500 Then _refresh()
if $timer > 1500 Then $timer = 0
WEndFunc _refresh()
[/autoit]
Local $x=0,$y=0
Local $iMode = Opt("WinTitleMatchMode", 4)
Local $hControl = ControlGetHandle("[CLASS:Shell_TrayWnd]", "", "[CLASSNN:ToolbarWindow321]")
;~ Local $acSize = ($hControl)
;~ For $x = 0 To $acSize[0] Step 5
;~ For $Y = 0 To $acSize[1] Step 5
DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $hControl, "int", 0x0200, "wparam", 0, "lparam", BitOR($Y * 0x10000, BitAND($x, 0xFFFF)))
;~ Next
;~ Next
EndFuncteste mal ob das mit dem refresh noch hinhaut ... sollte alle 30 sekunden sein....
das script ist oben in einer endlosschleife gelandet die ich rausgenommen habe ... mag sein das sie wieder rein muss, allerdings muss man eine schleife auch irgendwann verlassen ... da ich die parameter von sendmessage nicht auf dem schirm habe muss ich erstmal schauen.... wenns trotzdem klappt mit dem refresh, dann kurze nachrich hier posten. -
das update der icons erfolgt per winaip sendmessage ... die ich bin jetzt auch keine experte, in den sendmessage-api-optionen, aber ich denke mal das die optionen schon stimmen.
ich würde dir empfehlen deinen code zu posten, dann kann man andere fehlerquellen entdecken und auch am besten einen aufruf des updates alle 30 sekunden implementieren. -
seit stunden sitze ich hier vor einem problem.... ich versuche eine aufgabe per commandline in den scheduler einzutragen. das mach ich wie follgt:
[autoit]$name="This_is_task_XYZ"
[/autoit][autoit][/autoit][autoit]
;$pfadzurEXE="c:\programme\poke-em"ShellExecute("schtasks.exe",'/create /sc ONSTART /tn '&'"'&$name&'"'&' /tr '&'"\"'&@ScriptFullPath&'"\"'&' /rl HIGHEST',"","",@SW_HIDE)
[/autoit]so weit so unfein ... eh ich rausbekommen hatte, dass man den pfad escapen musste, da sonst bei leerzeichen abgeschnitten wird und gar nix geht, vergingen erst mal 2 tage... in allen beispielen steht nämlich das man den pfad einfach in anführungsstriche setzen muss. ... das scheint zumindest bei mir nicht zu gehen. ich bin mir immer noch unsicher diesbezüglich. denn wenn ich es jetzt so mache wie im script oben, dann wird der pfad zwar bei leerzeichen nicht abgeschnitten(siehe beispiel/bild), aber er wird inklusive der anführungszeichen in den scheduler eingrtragen(siehe beispiel/bild). was offensichtlich dazu führt das die aufgabe nicht ausgeführt wird.... denn alle aufgaben ohne anführungszeichen werden ausgeführt!
der kuriositäten nicht genug: auch wenn ich über den taskscheduler von windows selber einen task über die GUI manuell anlege, dann steht selbiger ebenfalls in anführungszeichen und wird NICHT ausgeführt.
es gibt aber programme die sich auch mitleerzeichen im pfad dort eintragen ... (siehe beispiel/bild /TuneUp) ich frage mich nur "wie" und warum ich diese ganzen probleme habe.... evtl hat jemand von euch noch eine idee !??[Blockierte Grafik: http://img189.imageshack.us/img189/1455/failcg.jpg]