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. TheDeath24

Beiträge von TheDeath24

  • Start, Logon, Logoff und Shutdown

    • TheDeath24
    • 15. März 2018 um 15:47
    Zitat von Lashandan

    TheDeath24

    Willkommen im Thema ;)

    CheckMK ist eine feine Sache und wir planen auch es in Betrieb zu nehmen - allerdings für ein breiteres Monitoring.

    Was ich allerdings schaffen will, ist eine einfache Webansicht mit allen Rechnern, die online sind, mit den dazugehörigen Benutzern etc.

    Somit kannst du pfeilschnell den Rechner finden und musst dich nicht erst durch CheckMK wuseln.

    Aber dennoch Danke für deinen Beitrag - CheckMK ist wirklich ein geniales Tool.

    Alles anzeigen

    Wir nutzen das bei uns in der Firma. Und wir haben extra im Büro einen Fernsehr mit der Weboberfläche von CheckMK, dort dargestellt mit 2 Spalten.
    Links: Allgemeine Netzwerkinfos Rechts: PC´s die Online sind und welcher User online ist und wer sich auf dem Terminalserver eingeloggt hat.
    Wir haben das seit 2 Jahren und sind immer noch nicht am ende mit einrichten.

  • Start, Logon, Logoff und Shutdown

    • TheDeath24
    • 13. März 2018 um 22:11

    Hallo zusammen,

    ich weis zwar nicht ob der Hinweis hier angebracht ist, aber es gibt eine Software die ich nutze für genau so welche Sachen. Sie nennt sich CheckMK und ist kostenfrei. Erfordert aber einen Server. Ich nutze dafür meinen BananaPi.

    Hier ein paar Beispiele:

    - User die sich einloggen

    - Wann der PC ausgeschaltet wurde

    - Wann er wieder online war

    - CPU Auslastung

    - RAM Auslastung

    - Aktuelle Prozesse die Offen sind

    usw.

    Damit kann man fast alles Tracken! Und das was es noch nicht fertig als Plugin gibt kann man sich selber auch über cmd befehle auslesen und in den Plugin Ordner legen.

    Ich nutze das für meine Unterschiedlichen Server und wenn es Probleme gibt lasse ich mir per die Info´s bei kritischen Fehlern per Email senden.

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 12. März 2018 um 05:17
    Zitat von alpines

    Die ist nämlich schon viele viele Jahre alt und in dutzenden Versionen gepostet worden, dass man da nur den Überblick verlieren kann.

    Ich habe auch alleine 5 unterschiedliche Versionen gefunden! :/

    Macht dann auch wenig Sinn diese zu verwenden. Zusätzlich ist es ja mit der UDF nicht möglich 64bit Adressen auszulesen!

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 13:29

    Es geht nun auch nach einem Neustart!

    Zitat von alpines

    Ob das bei allen OSsen dann noch funktioniert weiß ich nicht.

    Ja geht bei beiden sind halt nur andere offset´s.

    Aber die ImageBase errechnen ist das selbe!

    Hier der Code für Windows 8/8.1 und Windows 10.

    C
    #AutoIt3Wrapper_UseX64=y
    #RequireAdmin
    #include <ProcessConstants.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <_GUICtrlBatterieLevel.au3>
    #include <WindowsConstants.au3>
    #include <TrayConstants.au3>
    #include <WinAPIProc.au3>
    #include <WinAPIError.au3>
    
    Opt("GUIOnEventMode",1)
    Opt("TrayMenuMode", 3)
    SetError(1, 2)
    HotKeySet("{F10}", "_showgui")
    Global $hGui = GUICreate('Logitech G933 Akku', 72, 120, @DeskTopWidth - 80, @DeskTopHeight - 170, $WS_POPUP, Bitor($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    GUISetBkColor(0xF2F2F2)
    GUISetOnEvent ($GUI_EVENT_PRIMARYDOWN, "Drag" )
    Global $idBatterieLevel = _GUICtrlBatterieLevel_Create(0, 0, 0)
    GUISetState(@SW_HIDE, $hGui)
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xF2F2F2)
    Local $idExit = TrayCreateItem("Exit")
    ;~ WinSetTrans*($hGui, "", 170)
    While 1
       Switch GUIGetMsg()
          Case $GUI_EVENT_CLOSE
                _CloseGui()
       EndSwitch
       Switch TrayGetMsg()
          Case $idExit
             _CloseGui()
       EndSwitch
       Sleep(100)
    WEnd
    Func _showgui()
       _GUICtrlBatterieLevel_SetData($idBatterieLevel, _readpointer())
       GUISetState(@SW_SHOW, $hGui)
       sleep(3000)
       GUISetState(@SW_HIDE, $hGui)
    EndFunc
    
    Func Drag()
          dllcall("user32.dll","int","SendMessage","hWnd", $hGui,"int",$WM_NCLBUTTONDOWN,"int", $HTCAPTION,"int", 0)
       EndFunc
    
    Func _readpointer()
    
    if @OSVersion = "WIN_8" or @OSVersion = "WIN_81" Then
    ;~ Local $iBase = 0x007FF73117D9C8 ;---Windows 8 64bit - LGS 8.96.88 x64
    Dim $aiOffsets[6]
    $aiOffsets[0] = 0x100D9C8
    $aiOffsets[1] = 0x18
    $aiOffsets[2] = 0x20
    $aiOffsets[3] = 0x28
    $aiOffsets[4] = 0x10
    $aiOffsets[5] = 0x20
    
    ElseIf @OSVersion = "WIN_10" Then
    
    ;~ Local $iBase = 0x00007FF7A758D9C8 ;---Windows 10 64bit - LGS 8.96.88 x64
    Dim $aiOffsets[5]
    $aiOffsets[0] = 0x0100D9C8
    $aiOffsets[1] = 0x38
    $aiOffsets[2] = 0x20
    $aiOffsets[3] = 0x20
    $aiOffsets[4] = 0x18
    
    EndIf
    
    
    Local $iPid = ProcessExists("LCore.exe")
    Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, True, $iPid)
    Local $ergbenis
    Local $tNewStruct = DllStructCreate("INT_PTR")
    Local $pNewStruct = DllStructGetPtr($tNewStruct)
    Local $tNewStruct2 = DllStructCreate("INT")
    Local $pNewStruct2 = DllStructGetPtr($tNewStruct2)
    Local $iRead = 0
    $tstruct=_WinAPI_GetModuleInformation($hProcess, _WinAPI_GetModuleHandle("LCore.exe"))
    If @error or @extended Then
       msgbox(0,"Error", _winapi_getlasterror() & " : " & _winapi_getlasterrormessage())
       Exit
    EndIf
    
    DllStructSetData($tNewStruct, 1, DllStructGetData($tstruct, 'EntryPoint') - "0x9B5454") ;--Hier wird der EntryPoint aus CheatEngine nochmal abgezogen weil die WinAPI schon ImageBase und EntryPoint verrechnet!
    
    For $i=0 to UBound($aiOffsets) -1
          if $i = UBound($aiOffsets) -1 Then
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct2, DllStructGetSize($tNewStruct2), $iRead)
             $ergbenis=DllStructGetData($tNewStruct2, 1)
          Else
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct, DllStructGetSize($tNewStruct), $iRead)
          EndIf
       Next
    
    _WinAPI_CloseHandle($hProcess)
    if $ergbenis > 0 and  $ergbenis <= 100 Then
       Return $ergbenis
    Else
       Return 0
    EndIf
    EndFunc
    
    
    
    Func _CloseGui()
        GUIDelete($hGui)
        Exit
    EndFunc
    Alles anzeigen
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 12:59
    Zitat von alpines

    Achso, jetzt sehe ich wie CE auf die preferred ImageBase kommt!

    Das ist die AutoIt ImageBase - EntryPoint. Die WinAPI gibt dir allerdings die Summe beider als EntryPoint zurück.

    Schau mal ob du einfach 0x9B5454 von deiner ausgelesenen ImageBase subtrahieren kannst, dann solltest du auf den selben Wert kommen.

    Ob das bei allen OSsen dann noch funktioniert weiß ich nicht.

    Ernsthaft! Vielen Dank

    Habe auch gleich mal was gespendet für die Community hier! Ist echt Super.

    Ich probiere das gleich mal auf dem anderem Rechner aus. Ich gebe dann nochmal Feedback.

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 12:33
    Zitat von alpines

    Ist es vielleicht die "ptr BaseOfDll" statt "ptr EntryPoint"?

    Code
    $tstruct=_WinAPI_GetModuleInformation($hProcess, _WinAPI_GetModuleHandle("LCore.exe"))

    Leider steht bei BaseOfDll nix drin.

    Bilder

    • EntryPoint.jpg
      • 22,1 kB
      • 277 × 215
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 12:04
    Zitat von alpines

    Was sagt dir denn CE, was die Base des Programms ist?

    Leider was anderes:|

    Und wenn man die CE-ImageBase Adresse mit dem offset verrechnet stimmt auch alles.

    Bilder

    • EntryPoint.jpg
      • 22,14 kB
      • 277 × 215

    Dateien

    CE LCore ImageBase.jpg 72,05 kB – 0 Downloads
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 11:49
    Zitat von alpines

    Ja Kollege, so wird das garantiert nichts werden :D

    $tagMODULEINFO beinhaltet die Struktur des DllStructs welches von _WinAPI_GetModuleInformation gefüllt wird.

    Das DllStruct selbst wird von der Funktion selber zurückgegeben, schau doch mal in die Hilfe.

    Sorry dann habe ich das falsch interpretiert.

    Bekomme nun ein EntryPoint. Doch komme durch den Offset nicht auf die Erwartete Adresse.

    Bilder

    • EntryPoint.jpg
      • 18,76 kB
      • 277 × 200
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 10:50
    Zitat von alpines

    Was gibt dir die Funktion denn als EntryPoint im Struct zurück?

    Zero, also nichts.

    AutoIt
    _WinAPI_GetModuleInformation($hProcess)
    If @error or @extended Then
       msgbox(0,"Error", _winapi_getlasterror() & " : " & _winapi_getlasterrormessage())
    EndIf
    
    MsgBox(0, "EntryPoint" , DllStructGetData($tagMODULEINFO, 'EntryPoint'))

    Bilder

    • EntryPoint.jpg
      • 5,78 kB
      • 154 × 155
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 10:40
    Zitat von alpines

    Wird die Base überhaupt richtig ausgelesen?

    AutoIt
    _WinAPI_GetModuleInformation($hProcess)
    If @error or @extended Then
       msgbox(0,"Error", _winapi_getlasterror() & " : " & _winapi_getlasterrormessage())
    EndIf

    Da wird keine Error ausgespuckt wenn du das meinst?

    Bilder

    • Meldung.png
      • 2,45 kB
      • 293 × 155
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 11. März 2018 um 03:15
    Zitat von alpines

    Deine Baseadresse ist auf dem Bild angezeigt, sie lautet "LCore.exe"+0x0100D9C8

    "LCore.exe" ist in deinem Fall die ImageBase des Programms, die Adresse im Speicher an dem dein Programm mehr oder weniger "anfängt".

    Du kriegst diese mit _WinAPI_GetModuleInformation, darauf addierst du dann den statischen Offset 0x0100D0C8.

    Die Info die du suchst ist "ptr EntryPoint", das ist deine ImageBase.

    Dann sollte das auch auf unterschiedlichen Betriebssystemen funktionieren.

    Ok, leider habe ich keine Beispiele zu dieser Funktion gefunden.

    Ich hätte gedacht es sollte so gehen. Aber bekomme keinen Wert zurück.

    AutoIt
    Func _readpointer()
    
    Dim $aiOffsets[6]
    $aiOffsets[0] = 0x0100D9C8
    $aiOffsets[1] = 0x0
    $aiOffsets[2] = 0x38
    $aiOffsets[3] = 0x20
    $aiOffsets[4] = 0x20
    $aiOffsets[5] = 0x18
    
    
    Local $iPid = ProcessExists("LCore.exe")
    Local $hProcess = _WinAPI_OpenProcess(0x00020410, True, $iPid)
    Local $ergbenis
    Local $tNewStruct = DllStructCreate("INT_PTR")
    Local $pNewStruct = DllStructGetPtr($tNewStruct)
    Local $tNewStruct2 = DllStructCreate("INT")
    Local $pNewStruct2 = DllStructGetPtr($tNewStruct2)
    Local $iRead = 0
    _WinAPI_GetModuleInformation($hProcess)
    DllStructSetData($tNewStruct, 1, DllStructGetData($tagMODULEINFO, 2))
    
    For $i=0 to UBound($aiOffsets) -1
          if $i = UBound($aiOffsets) -1 Then
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct2, DllStructGetSize($tNewStruct2), $iRead)
             $ergbenis=DllStructGetData($tNewStruct2, 1)
          Else
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct, DllStructGetSize($tNewStruct), $iRead)
          EndIf
       Next
    
    _WinAPI_CloseHandle($hProcess)
    if $ergbenis > 0 and  $ergbenis <= 100 Then
       Return $ergbenis
    Else
       Return 0
    EndIf
    EndFunc
    Alles anzeigen
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 18:28

    Scheint als hätte ich ein anderes Problem. Der Basepointer ändert sich nach jedem Neustart !?!

    Da ich auf meinem Server der 24/7 läuft es getestet habe ist es mir nicht aufgefallen.

    Deswegen war der Basepointer auch anders als beim anderen.

    Aber das kann man doch nicht als Basepointer nehmen?

    Wie den Screenshot´s zu entnehmen ist wird er Grün angezeigt.

    Bin ein bisschen verwirrt.

    Dateien

    LCore.exe+offset.jpg 49,2 kB – 0 Downloads Dynamischer Basepointer.jpg 191,03 kB – 0 Downloads
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 17:42
    Zitat von alpines

    Du könntest ja mal einen Pattern Search probieren.

    Schau dir die Umgebung um die Prozentanzeige im RAM mit dem Memory Viewer in CE an und such nach Strukturen die dort sind.

    Wenn du z.B. vor dem Prozentwert eine Sequenz an speziellen Bytes findest, dann kannst du nach der suchen statt über Pointerarithmetik dorthin zu gelangen.

    Du kannst z.B. immer 1024 Bytes in das DllStruct lesen und dann gucken ob du dort deine Sequenz findest (achte dann aber darauf ob es nicht zufällig am Rand liegt) und dann hast du es auch schon.

    Ok das hört sich auch interessant an. Glaube aber da muss ich mir erstmal was zu durchlesen und probieren.

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 13:53
    Zitat von alpines

    Verwendest du dort auch die 64-Bit Variante von der Software?

    Ja beide Versionen gleich und auch 64bit.

    Zitat von alpines

    Wie schaut denn der Pointer dort aus?

    Windows 10 x64 - LGS 8.96.88 x64 = 0x007FF7A3F5D9C8

    Windows 8 x64 - LGS 8.96.88 x64 = 0x007FF73117D9C8

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 13:27

    Hallo nochmal eine Frage,

    leider funktioniert es auf einem anderen Rechner mit der gleichen Version nicht. Liegt nicht am Script sondern an dem Basepointer.

    Hätte eigentlich erwartet das er gleich ist und sich nur ändert wenn die Software Version sich ändert.

    1. Windows 8 x64 - LGS 8.96.88

    2. Windows 10 x64 - LGS 8.96.88

    Oder liegt es am Betriebssystem?

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 11:34

    Hey alles gute Anregungen.

    Ich habe es nun so gelöst das ich bei dem Drücken von F10 unten rechts über der Taskleiste den Akkustand anzeigt bekomme für 3 Sekunden.

    Permanent war doch nervig. Ich habe das ganze Gui noch Transparent gemacht so das man nur die Batterie sieht. :)

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    #RequireAdmin
    #include <ProcessConstants.au3>
    #include <WinAPI.au3>
    #include <GUIConstantsEx.au3>
    #include <_GUICtrlBatterieLevel.au3>
    #include <WindowsConstants.au3>
    #include <TrayConstants.au3>
    Opt("GUIOnEventMode",1)
    Opt("TrayMenuMode", 3)
    
    
    HotKeySet("{F10}", "_showgui")
    
    Global $hGui = GUICreate('Logitech G933 Akku', 72, 120, @DeskTopWidth - 80, @DeskTopHeight - 170, $WS_POPUP, Bitor($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
    GUISetBkColor(0xF2F2F2)
    GUISetOnEvent ($GUI_EVENT_PRIMARYDOWN, "Drag" )
    Global $idBatterieLevel = _GUICtrlBatterieLevel_Create(0, 0, 0)
    GUISetState(@SW_HIDE, $hGui)
    _WinAPI_SetLayeredWindowAttributes($hGui, 0xF2F2F2)
    Local $idExit = TrayCreateItem("Exit")
    
    ;~ WinSetTrans*($hGui, "", 170)
    
    While 1
       Switch GUIGetMsg()
          Case $GUI_EVENT_CLOSE
                _CloseGui()
    
       EndSwitch
    
       Switch TrayGetMsg()
          Case $idExit
             _CloseGui()
       EndSwitch
    
       Sleep(100)
    
    WEnd
    
    
    Func _showgui()
       _GUICtrlBatterieLevel_SetData($idBatterieLevel, _readpointer())
       GUISetState(@SW_SHOW, $hGui)
       sleep(3000)
       GUISetState(@SW_HIDE, $hGui)
    EndFunc
    
    Func Drag()
          dllcall("user32.dll","int","SendMessage","hWnd", $hGui,"int",$WM_NCLBUTTONDOWN,"int", $HTCAPTION,"int", 0)
    EndFunc
    
    Func _readpointer()
    
    Dim $aiOffsets[6]
    $aiOffsets[0] = 0x0
    $aiOffsets[1] = 0x18
    $aiOffsets[2] = 0x20
    $aiOffsets[3] = 0x28
    $aiOffsets[4] = 0x10
    $aiOffsets[5] = 0x20
    
    Local $iPid = ProcessExists("LCore.exe")
    Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, True, $iPid)
    
    Local $iBase = 0x007FF73117D9C8
    Local $ergbenis
    
    Local $tNewStruct = DllStructCreate("INT_PTR")
    Local $pNewStruct = DllStructGetPtr($tNewStruct)
    Local $tNewStruct2 = DllStructCreate("INT")
    Local $pNewStruct2 = DllStructGetPtr($tNewStruct2)
    Local $iRead = 0
    
    DllStructSetData($tNewStruct, 1, $iBase)
    
    For $i=0 to 5
          if $i = 5 Then
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct2, DllStructGetSize($tNewStruct2), $iRead)
             $ergbenis=DllStructGetData($tNewStruct2, 1)
          Else
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct, DllStructGetSize($tNewStruct), $iRead)
          EndIf
    Next
    
    _WinAPI_CloseHandle($hProcess)
    
    if $ergbenis > 0 and  $ergbenis <= 100 Then
       Return $ergbenis
    Else
       Return 0
    EndIf
    
    EndFunc
    
    Func _CloseGui()
        GUIDelete($hGui)
        Exit
    EndFunc
    Alles anzeigen

    Bilder

    • Akkuanzeige.jpg
      • 15,49 kB
      • 215 × 245
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 10:19
    Zitat von Oscar

    Dafür habe ich mal eine UDF geschrieben: _GUICtrlBatterieLevel

    Hey Supi. Das sieht doch genau nachdem aus was ich brauche. Ich schau mir das nachher mal an. Danke dir.

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 10:15
    Zitat von alpines

    Freut mich, dass am Ende doch alles funktioniert hat :)

    Vielleicht möchtest du das ganze ja noch ein bisschen aufhüpschen (Akkustand auf Desktop zeichnen mit Gdi+) oder ähnliches?

    Genau irgendwie auf dem Desktop bringen wollte ich das noch, weis nur noch nicht wie am Schlausten. Taskleiste ist doof den da ist das Spiel als Vollbild drüber und im Fenster anzeigen muss ich mal sehen.
    Wenn ich da was fertiges habe dann Poste ich das hier nochmal.

  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 10. März 2018 um 10:00
    Zitat von alpines

    Mit Datentypen meinte ich das rechnen und dem hinzufügen von dem "0x" etc.

    Da AutoIt nur Variant als Datentyp hat verrechnet er einige Sachen als String und dann scheitert das ganze auch direkt.

    Aber warum versuchst du denn den Wert aus dem DllStruct in "0x" & Hex($ergebnis + $aiOffsets[$i]) umzuwandeln?

    AutoIt ist es egal ob in einem DllStruct der Wert als Hex oder Integer eingetragen wird.

    Also nimm als $iBase lieber DllStructGetData($tNewStruct, 1) + $aOffset[$i], das müsste eigentlich auch funktionieren.

    Hey alpines,

    erstmal vielen Dank für deine Geduld mit mir auf einem neuen Terrain. Ich habe einiges gelernt.

    Hier natürlich auch noch das Endergebnis:

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    #RequireAdmin
    
    #include <ProcessConstants.au3>
    #include <WinAPI.au3>
    
    Dim $aiOffsets[6]
    $aiOffsets[0] = 0x0
    $aiOffsets[1] = 0x18
    $aiOffsets[2] = 0x20
    $aiOffsets[3] = 0x28
    $aiOffsets[4] = 0x10
    $aiOffsets[5] = 0x20
    
    Local $iPid = ProcessExists("LCore.exe")
    Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, True, $iPid)
    
    Local $iBase = 0x007FF73117D9C8
    
    Local $tNewStruct = DllStructCreate("INT_PTR")
    Local $pNewStruct = DllStructGetPtr($tNewStruct)
    Local $tNewStruct2 = DllStructCreate("INT")
    Local $pNewStruct2 = DllStructGetPtr($tNewStruct2)
    Local $iRead = 0
    
    DllStructSetData($tNewStruct, 1, $iBase)
    
    For $i=0 to 5
          if $i = 5 Then
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct2, DllStructGetSize($tNewStruct2), $iRead)
             MsgBox(0, "Ausgelesene Adresse", "Akkustand: " & DllStructGetData($tNewStruct2, 1) & "%" )
          Else
             _WinAPI_ReadProcessMemory($hProcess, DllStructGetData($tNewStruct, 1) + $aiOffsets[$i], $pNewStruct, DllStructGetSize($tNewStruct), $iRead)
             MsgBox(0, "Ausgelesene Adresse", HEX(DllStructGetData($tNewStruct, 1)))
          EndIf
    Next
    Alles anzeigen

    Bei mir Funktioniert das ganze nur Kompiliert durch die Präprozessor Angabe 64bit. ->

    Code
    #AutoIt3Wrapper_UseX64=y

    Das ganze dient nun zum Auslesen eines Logitech G933 Wireless Headset´s. Die Logitech Gaming Software Version ist 8.96.88. Sollte jemand Interesse daran haben kann man nur/wahrscheinlich mit dieser Version den Akku-stand auslesen.

    Vielen Dank für die tolle Unterstützung!

    Bilder

    • Ausgelesener Akkustand.jpg
      • 7,79 kB
      • 209 × 155
  • Basepointer auslesen mit NomadMemory.au3 oder WinAPI.au3

    • TheDeath24
    • 9. März 2018 um 15:26
    Zitat von alpines

    Ich weiß nicht ob AutoIt die Datentypen richtig handlet aber das schaut richtig aus :)

    Geht leider nicht. Bekomme nicht den Wert raus.
    Wegen den Datentypen weiß nicht ob du das gemeint hast aber ich habe nochmal was geändert. Geht leider auch dann nicht.

    Der letzte ausgelesene Wert muss in ein int. Dann kommt die 100 auch raus wenn man direkt die Adresse eingibt.
    Leider aber nicht vom Basepointer + offset.

    AutoIt
    #AutoIt3Wrapper_UseX64=y
    #RequireAdmin
    
    #include <ProcessConstants.au3>
    #include <WinAPI.au3>
    
    Dim $aiOffsets[6]
    $aiOffsets[0] = 0x0
    $aiOffsets[1] = 0x18
    $aiOffsets[2] = 0x20
    $aiOffsets[3] = 0x28
    $aiOffsets[4] = 0x10
    $aiOffsets[5] = 0x20
    
    Local $iPid = ProcessExists("LCore.exe")
    Local $hProcess = _WinAPI_OpenProcess($PROCESS_ALL_ACCESS, True, $iPid)
    
    Local $iBase = 0x007FF73117D9C8
    
    Local $tNewStruct = DllStructCreate("INT_PTR")
    Local $pNewStruct = DllStructGetPtr($tNewStruct)
    Local $tNewStruct2 = DllStructCreate("INT")
    Local $pNewStruct2 = DllStructGetPtr($tNewStruct2)
    Local $iRead = 0
    
    For $i=0 to 5
       if $i = 0 Then
          _WinAPI_ReadProcessMemory($hProcess, $iBase, $pNewStruct, DllStructGetSize($tNewStruct), $iRead)
          $ergebnis=DllStructGetData($tNewStruct, 1)
          MsgBox(0, "Ausgelesene Adresse", hex($ergebnis))
          $iBase='0x' & Hex($ergebnis+$aiOffsets[$i])
          MsgBox(0, "Neue Adresse", $iBase)
       Else
          _WinAPI_ReadProcessMemory($hProcess, $iBase, $pNewStruct2, DllStructGetSize($tNewStruct2), $iRead)
          $ergebnis=DllStructGetData($tNewStruct2, 1)
          if $i = 5 Then
             MsgBox(0, "Ausgelesene Adresse", $ergebnis)
          Else
             MsgBox(0, "Ausgelesene Adresse", hex($ergebnis))
             $iBase='0x' & Hex($ergebnis+$aiOffsets[$i])
             MsgBox(0, "Neue Adresse", $iBase)
          EndIf
       EndIf
    Next
    Alles anzeigen

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™