WinWait wäre hier der richtige Befehl. _WinWaitActivate gibt es garnicht.
Beiträge von chip
-
-
Wird nicht funktionieren, da RemoteApp nichts anderes ist als eine Remotedesktopsitzung ist. Sprich um die Excel-UDF zu nutzen müsste das Script auf dem Server laufen auf dem sich die Remoteapp befindet.
-
@meisterlampe00 hast alles richtig verstanden. Bei result[0] werden die letzten vier Zeichen also die Anzahl abgeschnitten damit nur noch die item id übrig bleibt. Damit hast dann im Array itemid und Anzahl.
-
Ich nehme dazu immer das hier: http://www.uwe-sieber.de/usbdlm.html
-
@meisterlampe00 dein Textdatei irritiert mich jetzt etwas. Ist das was bei Ammount steht die realen Werte Ingame? Weil bei Slot 25 mit "5E01" hast du "24065" geschrieben in deinem Text schreibst aber das muss in "15E" gedreht werden was dann "350" wäre.
Wenn ich davon ausgehe, dass das in der Textdatei bei Slot 25 ein Schreibfehler ist, dann sollte es so gehen:
AutoIt
Alles anzeigen$erg = splitslot("02000000000000DF083200") MsgBox(0,"","ItemID = " & $erg[0] & " Amount = " & $erg[1]) Func splitslot($slot) Local $result[2] $amount = StringRight($slot, 4) $left = StringLeft($amount, 2) $right = StringRight($amount, 2) $result[0] = StringTrimRight($slot, 4) $result[1] = Dec($right & $left) Return $result EndFunc ;==>splitslot -
@autoBert sorry aber es nervt gerade wirklich. Das ist ein Game in der Early Access, jede kann davon nach belieben selber einen Server aufsetzen. Wo da eine Gelddruckmaschiene siehst ist mir schleierhaft. Wirkt gerade wirklich so als versuchst mit allen Mitteln recht zu behalten.
@meisterlampe00 kannst mal noch paar Beispiele mit item id und Anzahl posten und welcher dezimalwert da rauskommen soll.
-
Ordne mal bitte deine Gedanken, erst willst einen teil einfügen, dann willst ihn plötzlich ersetzen und nun willst wieder was ganz anderes. Sag mal klar was du nun machen willst. Hier noch ein Versuch und dann bin ich raus aus dem Thread bis mal klar sagst was nun wirklich vor hast. Mit dem Script hast nun zumindest 57 Slots, was laut Screenshots welche ich zu dem Game gefunden habe wohl auch stimmt.:
AutoIt
Alles anzeigen#include <String.au3> #include <Array.au3> $savepath = @ScriptDir $steamid = "76561197990256655" $filetest = FileOpen($savepath & "\" & $steamid & ".ply", 16) $file1 = FileRead($filetest) $erg = Hex($file1) $result = StringRegExp($erg, ".{2}", 3) $index = _ArraySearch($result, "0A", 0) $index = _ArraySearch($result, "0A", $index + 1) While 1 $index = _ArraySearch($result, "02", $index) If @error Then ExitLoop EndIf $slot = "" For $i = $index To $index + 10 $slot &= $result[$i] Next ConsoleWrite($slot & @CRLF) $index += 10 WEnd -
Rechtsklick -> eigenschaften -> Haken bei zulassen setzen
-
Da wird nix doppelt reingepackt sondern schlicht der alte Inventarteil nicht überschreiben. Dein Änderung des zweiten StringBetween von "E5085E" nach "7D0B47" sorgt dafür, dass schon ganz am Anfang ein Treffer ist. Da wird dann das Inventar reingemacht und dann ist es natürlich doppelt drin.
Woher hast die Info, dass diese ply Ascii ist? Das ply-Format kann zwar in Binary und in Ascii vorliegen, aber das ist eben keine ply. Es fehlt der Header usw.
-
Also ich hab mir das nochmal ansgeschaut. Bei mir steht in der geänderten Datei fast das gleiche wie in der Orginal, keine Ahnung warum bei dir das nicht der Fall ist.
Orginal:
Geändert:
Das "BR"" fehlt weil du es ja in dem StringBetween abgeschnitten haben wolltest. Genauso fehlt am Ende ein ganzen Stück weil das auch weg haben wolltest.
Falls du einfach nur den Bereich dazwischen ersetzten willst geht das z.B. so, dann sind die Dateien wieder exakt gleich:
AutoIt
Alles anzeigen#include <String.au3> #include <Array.au3> $savepath = @ScriptDir $steamid = "76561197990256655" $filetest = FileOpen($savepath & "\" & $steamid & ".ply") $file1 = FileRead($filetest) $erg = Hex($file1) $anfangread = _StringBetween($erg, "", "0A0002") $enderead = _StringBetween($erg, "E5085E", "") $inv = FileOpen($savepath & "\Saves\inventory.txt") $invread = StringStripWS(FileRead($inv), 8) FileClose($inv) $endstring = $anfangread[0] & $invread & $enderead[0] $endstring = Binary("0x" & $endstring) $save = FileOpen($savepath & "\geänder.ply", 1) FileWrite($save, $endstring) -
Hexwerte schon per Hand geändert und hat funktioniert. Die Einzelnen Id´s usw muss ich mir dann später zusammen Doktoren.
Das spiel ist eine Weltraum Simulation mit XYZ werten ich denke es wird eine richtige .ply Datei sein.
Die Datei die ich hochgeladen habe ist von meinem Spieler Leer, also kann sie gerne angeschaut werden:)Jetzt geht es erstmal darum es editieren zu können.
Jetzt hab ich erst kapiert was du willst. Hab mal dein Script von oben angepasst:
AutoIt
Alles anzeigen#include <String.au3> #include <Array.au3> $savepath = @ScriptDir $steamid = "76561197990256655" $filetest = FileOpen($savepath & "\" & $steamid & ".ply") $file1 = FileRead($filetest) $erg = Hex($file1) $anfangread = _StringBetween($erg, "425294", "0A0002") $enderead = _StringBetween($erg, "E5085E", "3D95AFDB") $inv = FileOpen($savepath & "\Saves\inventory.txt") $invread = StringStripWS(FileRead($inv), 8) FileClose($inv) $endstring = $anfangread[0] & $invread & $enderead[0] $endstring = Binary("0x" & $endstring) $save = FileOpen($savepath & "\geänder.ply", 1) FileWrite($save, $endstring) -
Erstmal noch zwei Fragen dazu:
1. Ist das ein richtiges ply-File? Sprich ist darin eine Punktwolke gespeichert?
2. Geht das was du vorhast überhaupt so? Sprich hast das ganze mal per Hand mit einem Hexeditor gemacht? -
@meisterlampe00 so simple wie du dir das vorstellst geht das nicht. Schau dir mal das Script an, dort sind eigentlich alle Funktionen die du brauchst: https://www.autoitscript.com/forum/topic/84…edit-functions/
-
Virus? Immerhin gibt es ja für 2000 Server schon seit fast 6 Jahren keinen Sicherheitsupdates mehr.
-
Wir sind hier alle Privatpersonen.
-
Ich habe das jetzt mal kompiliert und erhalte keine Fehlermeldung. Hast du einmal probiert ob eine Neuinstallation von Autoit dein Problem löst?
-
Die IconPosition wir in der Registry unter "HKCU\Software\Microsoft\Windows\Shell\Bags\1\Desktop" im Key "ItemPosXXXxXXX" gespeichert. Sprich du kannst dir auch eine Autoit-Lösung bauen.
-
Das Ergebnis aus "list volume" kannst du aber nicht zu "select disk" verwenden. Da die Volume-Nummern nicht zwingend mit den Disknummer übereinstimmen.
Beispiel:
list disk:
Datentr. Status Größe Frei Dyn GPT
-------- ---------- ------- ------- --- ---
Datenträger 0 Online 698 GB 0 B
Datenträger 1 Online 1864 GB 0 B
Datenträger 2 Online 7396 GB 0 B <- Wechseldatenträgerlist volume:
Volume Bst Bezeichnung DS Typ Größe Status Info
---------- --- ----------- ----- ---------- ------- --------- --------
Volume 0 E DVD-ROM
Volume 1 C NTFS Partition 967 GB Startpatition
Volume 2 NTFS Partition 300 MB Versteckt
Volume 3 FAT32 Partition 100 MB System
Volume 4 NTFS Partition 450 MB Versteckt
Volume 5 D NTFS Partition 1863 GB
Volume 6 F Wechselmed 7395 MB <- WechseldatenträgerWie du siehst ist für den USB-Stick die Datenträgernummer die 2 wenn du nun aber die Volumenummer anschaust ist es die 6 und mit der kannst bei "select disk" nichts anfangen.
-
@S3cret also CPU Priorität erhöhen hat nichts gebracht. Habe jetzt aber mal _Notifications_SetAnimationTime(1) gemacht. Gefühlt wird das verschieben nun nicht langsamer, was wohl direkt schon an der Startgeschwindigkeit liegt. Reicht mir aber.
Dabei ist mir noch kleiner Bug aufgefallen. Wenn man _Notifications_SetAnimationTime(0) setzt werden die GUI unten aus dem Desktop raus geschoben, wenn man ein beliebiges Fenster (nicht das letzte ganz unten) schließt.
-
Kann ich erst morgen machen, aber hier mal ein Ansatz den ich noch gefunden hatte, welcher eigentlich die Forschleife mit dem Pixelweisen verschieben von jedem einzelnen Fenster überflüssig machen sollte:
AutoIt
Alles anzeigen; *** Start added by AutoIt3Wrapper *** #include <WindowsConstants.au3> ; *** End added by AutoIt3Wrapper *** #AutoIt3Wrapper_Add_Constants=n ;~ Global Const $WM_ENTERSIZEMOVE = 0x231, $WM_EXITSIZEMOVE = 0x232 $gp = GUICreate("main gui", 300, 300, 200, 200) GUISetState() $gs = GUICreate("dragged gui", 200, 150, 400, 400) GUISetState() Global $RelPos[2] GUIRegisterMsg($WM_ENTERSIZEMOVE, "setrelpos") GUIRegisterMsg($WM_MOVE, "followme") While 1 If GUIGetMsg() = -3 Then Exit WEnd Func followme($hW, $iM, $wp, $lp) If $hW <> $gp Then Return Local $xypos = WinGetPos($gp);use WingetPos rather than the values in $lP WinMove($gs, "", $xypos[0] - $RelPos[0], $xypos[1] - $RelPos[1]) EndFunc ;==>followme ;When the primary window starts moving we want to know the relative position of the secondary window. Func SetRelPos($hW, $iM, $wp, $lp) If $hW <> $gp Then Return Local $gpp = WinGetPos($gp) Local $gsp = WinGetPos($gs) $RelPos[0] = $gpp[0] - $gsp[0] $RelPos[1] = $gpp[1] - $gsp[1] EndFunc ;==>SetRelPos