1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Yjuq

Beiträge von Yjuq

  • Simulation von Strg Taste alle 4 Minuten

    • Yjuq
    • 16. Oktober 2014 um 21:58

    Wozu? Wenn es auf deinem PC jetzt läuft und du damit leben kannst ist doch alles in bester Ordnung. :D

  • Simulation von Strg Taste alle 4 Minuten

    • Yjuq
    • 16. Oktober 2014 um 20:20
    Zitat von bazii

    [...] In der Autoithilfe habe ich nichts mit "Strg" gefunden [...]


    Glaub ich dir nicht ^^

    https://www.autoit.de/dokumentation/functions/Send.htm

    Und jetzt lies es dir nochmal in ruhe durch. Da steht alles drin wie du ein [Strg]-Tastendruck sendest.
    Und dann schau dir mal die Funktionen TimerInit() und TimerDiff() an.

    Viel Glück :)

  • Suche lustige Lade Texte

    • Yjuq
    • 15. Oktober 2014 um 16:21

    Fehler beim Verbinden mit der Tastatur. Bitte [Enter] drücken um fortzufahren.

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Like oder nicht Like - das ist die Frage!

    • Yjuq
    • 14. Oktober 2014 um 19:50

    Naja, ich finde es nicht so gut, genauso wie die drz. angezeigten punkte in den profilen. Dadurch besteht eine gefahr dass früher oder später eine art "wettkampf" raus wird. Merke ich schon langsam an mir selbst. Ich versuche drz. Andy in sachen assembler durchaus nachzueifern und "besser" als er zu werden. Mittlerweile bin ich schon fast abhängig vin dem forum hier, mind. jede stunde muss ich gucken was hier das drz. thema ist und ob ich was dazu beitragen kann. Wenn jetzt auch noch diese like geschichte dazu kommt könnte ich dazu neigen überheblicher zu werden.

    Ich habe das jetzt nur aus meiner perspektive beschrieben weil ich nicht für andere sprechen kann. Aber vllt. Weiß ja der eine oder andere user wie und was ich damit meine.

    Naja, ich bin dagegen weils sich auf mich negativ auswirken könnte. ^^

    Gesendet von meinem HTC Desire HD A9191 mit Tapatalk 2

  • Forum-Umstellung Problemsammlung

    • Yjuq
    • 14. Oktober 2014 um 13:19

    Hey, vielleicht wäre es ganz gut die Suche etwas farblich zu markieren. Man könnte Sie sonst ganz leicht übersehen. - Gefixt

  • GUIOnEventMode verursacht CPU Last 25% -> Bug?

    • Yjuq
    • 13. Oktober 2014 um 02:08

    Sofern du das sleep in der leeren while schleife nicht vergessen hast.

    Das kann ich so nicht bestätigen. Hab maximal mal zwischendurch 10%, aber sonst konstant bei ca. 5% wenn man nicht hunderte an prozessen auf hat.

  • Kommunikation Skripte untereinander

    • Yjuq
    • 13. Oktober 2014 um 01:45

    Jetzt wo du's sagst, auf das mit MemAlloc bin ich nicht gekommen. Prinzipiell könnte man so 4 byte in der dll reservieren und dort den pointer zu den per MemAlloc reservierten speicher hinein schreiben. So hätte jeder prozess direkt den passenden pointer und man kann locker den speicher dynamisch verändern. Ob das aber dann immernoch so einfach via dllstruct funktioniert, müsste man mal ausprobieren.

    €dit: {
    Hab's ausprobiert, der reservierte speicher via GlobalAlloc sowie VirtualAlloc wollen zum erbrechen nicht mit dllstruct's angesprochen werden. Auch nicht wenn man den speicher direkt in der dll anforder. Hab sogar aus verzweiflung versucht die prozedur welche den speicher anfordert auch mit shareable zu kennzeichnen. Nützt nichts, aber ich hab's mir sowieso schon gedacht. Naja ^^
    }

    Und das mit dem tool hätte sich dann so auch erledigt, da ja dann nur eine einzige dll mit 4 byte reservierten speicher erforderlich ist. Aber ansonst: paar nullen mehr hinein schreiben (wie du's so schön gesagt hast). Aber trzd. muss man dann den header noch anpassen (wenn ich mich richtig errinnere), sollte aber so gehen.

    Achja, mich würde das schon interessieren wenn man 10 mb an daten reserviert aber nur 1 mb nutzt. Bei meiner download geschwindigkeit bin ich froh wenn entwickler bytesparend programmieren würden. xD

    [Kann es sein dass wir solangsam vom eigentlichen thema abschweifen?]

  • Kommunikation Skripte untereinander

    • Yjuq
    • 12. Oktober 2014 um 22:57

    Der asm code muss mit der FASM.exe (flat assembler -> http://www.flatassembler.net) kompiliert werden. Der benötigte speicherbereich MUSS vor dem kompilieren angegeben werden, das spãter dynamisch zu machen ist so leider nicht möglich. Reserviere dir also genug speicher.

    Ich arbeite aber gerade an einem tool der solch eine dll erstellt. Schließlich hat nicht jeder asm erfahrung oder lust das selber zu kompilieren. Das tool wird dann in autoit geschrieben sein, wird aber noch ein bisschen dauern bis es fertig ist. So hat dann jeder die möglichkeit diese art der kommunikation zu nutzen.

  • CheatEngine PointerSearch

    • Yjuq
    • 12. Oktober 2014 um 00:50

    Ja, das problem hatte ich auch sonst mit der funktion aus der udf immer. Daher hab ich mir selber ne funktion geschrieben, kann die aber erst morgen hochladen. :x

  • Kommunikation Skripte untereinander

    • Yjuq
    • 11. Oktober 2014 um 14:49

    In C/C++ kann man solch einen Datenbereich mit #pragma data_seg(".shared") realisieren. Gleiches prinzip den du bei dem Assemblercode angewendet hast.

  • Kommunikation Skripte untereinander

    • Yjuq
    • 11. Oktober 2014 um 04:26

    Basierend auf Andy's Assemblercode habe ich selber nun eine kleine einfache DLL geschrieben. In ihr werden 10 Byte an Speicher reserviert (Für eine einfache 10 Zeichen lange Nachricht). Mit der Funktion „GetPtr“ kann der Pointer für den Speicher gelesen werden. Mithilfe einer Struktur lässt sich dies in AutoIt nun ganz simple ansprechen. Der Pointer des Speicherbereiches wird einfach an die Strukur übergeben.

    Im Anhang befindet sich ein Beispielskript sowie die nötige DLL + Quelltext. Das Beispielskript ruft sich selber nochmals über den Interpreter auf. Beim ersten Aufruf wird die Nachricht in den Speicherbereich geschrieben, beim zweiten Aufruf in einer MessageBox ausgegeben. Danach geschieht das Selbe nur in anderer Richtung. Das soll verdeutlichen das wirklich nur ein Speicherbereich genutzt wird. Man kann also von mehreren Prozessen problemlos darauf zugreifen.

    Andy:
    Gute Arbeit von dir, ich habe lediglich ein wenig (oder fast alles :x) bei dir abgeguckt und die kleine Sache mit „shareable“ eingepflanzt. Ziemlich interessant was so alles möglich ist. Die Lorbeeren gehören dir xD

    Dateien

    SharedMemory.zip 1,16 kB – 412 Downloads
  • Kommunikation Skripte untereinander

    • Yjuq
    • 11. Oktober 2014 um 01:15

    Andy, du musst die Datensektion noch mit shareable global verfügbar machen:

    Code
    section '.data' data readable writable shareable

    So funktioniert das dann auch.

  • Kommunikation Skripte untereinander

    • Yjuq
    • 10. Oktober 2014 um 18:04

    Achso, ich ging davon aus das es möglich sein sollte den speicherplatz dynamisch anzufordern. Das wäre natûrlich eine herausforderung. Aber wenn du sagst "so viel speicher wird bereitgestellt und nicht mehr" dann sollte das einfacher sein. Naja, in den meisten fällen ist 1 MB schon mehr als genug. Bin mal gespannt was dabei herum kommt. Stellst du dann auch den sourcecode der dll zur verfügung?

  • Kommunikation Skripte untereinander

    • Yjuq
    • 10. Oktober 2014 um 15:13

    Ach Andy, soll das heißen dass du das mit der DLL in Angriff nehmen willst? Wäre auf jedenfall durchaus interessant das mal umzusetzen. Jedoch wüsste ich nicht wie genau das nun funktionieren soll. Hatte dazu bisher nur mal ein C++ code dazu gesehen. Scheint mir durchaus kompliziert zu sein. Und ob das sinnvoller ist als den benötigten Speicher direkt im Skript zu reservieren (_WinApi_MemGlobalAlloc) sei mal dahingestellt. Aber bestimmt klärst du mich noch auf. ^^

  • Kommunikation Skripte untereinander

    • Yjuq
    • 10. Oktober 2014 um 00:08

    Also, du hast nun einen Eimer voll an Möglichkeiten von uns bekommen. Ich glaube auch nicht dass es mehr Möglichkeiten gibt. Was mir noch einfällt wäre "File Mapping" Wenn ich auf MSDN das richtig verstandn habe, dann werden die Daten erst von einer Datei ins RAM geholt, dort wird der Speicher gemeinsam genutzt. Ist z.B. sinnvoll wenn man von einer CD die Daten nur einmal im RAM haben will, und alle Progamme mit den Daten arbeiten können. Dann gibts noch "Shared Memory", da wird der Speicher ebenfalls gemeinsam genutzt, Andy hatte ja schon ein Beispielskript dazu geschrieben. Naja, ansonsten bleibt noch das gedönse über die Standard-Datenströme, TCP und Named Pipe.

    Eine Sache gibt's aber noch, ist aber ziemlich kompliziert. Es ist möglich globale Variablen in eine DLL zu verpacken. Da musst du aber erst einen eigenen Datenbereich in der DLL benennen und kannst nur vordefinierte Variablen nutzen. Außerdem sprengt es sowieso den Zweck von DLL's und ist eher eine (ich nenn es jetzt mal so) "abstrakte" Idee. Jedoch möglich.

    Nun ja, genug Möglichkeiten hast du ja jetzt, ich glaube auch das wir solangsam alles an Möglichkeiten abgeklappert haben. Such dir was aus und werde zufrieden. ^^

  • Kommunikation Skripte untereinander

    • Yjuq
    • 9. Oktober 2014 um 13:23

    Gute Frage, es gibt ja von Windows vordefinierte Umgebungsvariablen. Deren Inhalt lässt sich auch ändern. Daraus schließe ich mal, dass sie auf der Festplatte gespeichert sind. Ob AutoIt das ebenfalls tut weiß ich nicht, aber da gehe ich mal von aus. Vllt. Kann dir jemand anderes mehr dazu sagen.

    Zu dem Std-Streams:
    Es gibt 3 Standard-Datenströme, den stdin stream, stdout stream und stderr stream. Über diesen 3 Datenströmen ist es möglich Daten zu übergeben. Für weitere Erklärungen siehe Wikipedia. Die Streams kann man für Interprozesskommunikation schön missbrauchen. ^^

    Hab dazu auch mal hier nen Thread aufgemacht, da müsste sich auch ein Beispielcode dazu befinden. Bin aber gerade suchfaul, aber ich schreib dir vllt. später ein Beispiel.

    [autoit]

    If Not $CmdLine[0] Then ; Prüft ob schon eine Instanz des Skriptes offen ist
    $iPID = Run(@AutoItExe & ' ' & @ScriptFullPath & ' make', '', @SW_HIDE, 0x1) ; Startet eine neue Instanz des Skriptes mit aktivierten Stdin-Stream
    StdinWrite($iPID, 'Message ;)') ; Sendet die Nachricht in den Stdin-Stream des anderen Prozesses
    StdioClose($iPID) ; Schließt alle Std-Streams
    Else
    MsgBox(0x40000, '', ConsoleRead()) ; Liest den Stdin-Stream aus
    EndIf

    [/autoit]
  • Kommunikation Skripte untereinander

    • Yjuq
    • 8. Oktober 2014 um 13:28

    Nun ja, dürfte aber nicht so einfach werden. Das 2te Skript kann nämlich nicht via DllStruct darauf zugreifen. Da müsste dann mit den Funktionen _WinApi_ReadProcessMemory() und _WinApi_WriteProcessMemory hantiert werden.

    €dit: @Homer:
    Wenn du mit Umgebungsvariablen arbeiten willst, musst du die Skripte die darauf zugreifen sollen mit Run starten. Dann kannst du auch gleich die Std-Streams (hoffentlich heißen die so xd) verwenden.

  • Prüfen ob AdlibRegister registriert ist

    • Yjuq
    • 6. Oktober 2014 um 15:28

    Eigentlich braucht man's nicht, aber es gibt da ne simple Möglichkeit sich das Feature selber zu programmieren:

    Spoiler anzeigen
    [autoit]

    ConsoleWrite('+ Start' & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    AdlibRegisterPlus('f', Default)

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(2500)

    [/autoit] [autoit][/autoit] [autoit]

    If AdlibRegisterPlus('f') Then
    ConsoleWrite(True & @CRLF)
    AdlibUnRegister('f')
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(2500)

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite('! Ende' & @CRLF)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func AdlibRegisterPlus($sFunction, $iTime = 0)
    Static $asFunction[1] = [0]
    Local $i

    [/autoit] [autoit][/autoit] [autoit]

    If $iTime = 0 Then
    For $i = 1 To $asFunction[0]
    If $sFunction = $asFunction[$i] Then Return True
    Next
    Else
    $asFunction[0] += 1
    ReDim $asFunction[$asFunction[0] +1]
    $asFunction[$asFunction[0]] = $sFunction
    Return AdlibRegister($sFunction, $iTime)
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func f()
    Static $i

    [/autoit] [autoit][/autoit] [autoit]

    $i += 1

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite($i & @CRLF)
    EndFunc

    [/autoit]
  • Kommunikation Skripte untereinander

    • Yjuq
    • 6. Oktober 2014 um 15:07

    Schnitzel:
    Ich versteh deine Reaktion nicht. Was ist denn so verwerflich daran die registery für globale variablen zu missbrauchen? Es gibt ne eigene sektion extra für softwaren. Da drin kannste alles nach herzenslust ändern, löschen, überschreiben und haste net gesehen. Das nimmt keinen einfluss auf das eigentliche betriebssystem. Nur wenn du an der falschen stelle rumhantierst wir's unter umständen kritisch :p

  • Kommunikation Skripte untereinander

    • Yjuq
    • 6. Oktober 2014 um 12:22

    Naja, Alternativ einfach die Registery zumüllen. Damit solltes auch getan sein ^^

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™