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. Homer J. S.

Beiträge von Homer J. S.

  • Unterscheiden ob Software im Vordergrund oder im Hintergrund läuft

    • Homer J. S.
    • 19. April 2025 um 14:12

    Hallo Zusammen,
    ich stehe mal wieder vor ein Problem. Ich nutze die Software "File Systems for Windows by Paragon Software". Diese kann Linux Dateisysteme in Windows bereitstellen. Allerdings gibt es einen hacken, den ich probiere zu umgehen. Diese Software nutz einen Dienst, der der Software erlaubt exklusive auf ein Laufwerk zuzugreifen. Wenn dieser Dienst läuft, dann kann kein anderes Tool Raw auf z.B. die SD-Karte zugreifen, um diese zu flashen. Daher wollte ich ein AuoIt-Skript schreiben, der den Dienst erst startet, dann das Programm ausführt und beim schließen des Programm den Dienst auch wieder stoppt. Es funktioniert auch soweit alles, bis zur Erkennung, ob die Software geschlossen ist. Leider schließt der X-Button die Software nicht, sondern diese begibt sich nur in den Hintergrund und bleibt als Systray-Icon vorhanden. Eine Abfrage mit WinGetState bringt auch keinen Erfolg, da schon beim nutzen eines x-beliebigen Button die Software ihren Status ändert und nicht wiederherstellt.

    Die einzige Möglichkeit wie ich dies unterscheiden könnte, wäre zu prüfen ob die Software im Vordergrund (siehe im Anhang Vordergrund.png) oder im Hintergrund (siehe im Anhang Hintergrund.png) läuft. Hat einer eine Idee, wie ich dies in AutoIt abbilden kann?

    Link zur Software: https://www.paragon-software.com/home/linuxfs-windows/

    Vielen Dank für eure Unterstützung!

    Gruß
    Homer J. S.

    Bilder

    • Hintergrund.PNG
      • 28,02 kB
      • 1.355 × 339
    • Vordergrund.PNG
      • 16,51 kB
      • 1.371 × 191
  • Windows Benutzeranmeldung über AutoIt

    • Homer J. S.
    • 19. September 2022 um 14:48

    Hallo Zusammen,

    ich habe mal wieder ein Problem, was ich hoffe mit euch lösen zu können.

    Ich würde gerne mit AutoIt eine Windows Benutzeranmeldung realisieren. Dafür habe ich ein AutoIt-Programm was als Dienst (System-User-Rechte) mit Windows startet. Allerdings habe ich noch keinen Befehl/Programm gefunden, um einen definierten Benutzer mit Passwort auf dem Speerbildschirm anzumelden.

    Hat einer eine Idee, wie man dies bewerkstelligen könnte?

    Vielen Dank schonmal für eure Hilfe.

    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 11. Februar 2022 um 22:24
    Zitat von Andy

    Hast du Win10 auf einer SSD installiert? Ich wollte einen meiner Rechner mit einer SSD upgraden und hätte dann eine übrig.

    Das wäre für Win10 jedenfalls nötig denke ich.

    Hast du da ein spezielles Image verwendet?

    Ich habe ein Windows 11 Arm preview installiert, wie es oben in dem verlinkten Video zu sehen ist. Als Speichermedium habe ich aus Platzgründen (Abmessungen) einen USB 3.0 Stick von SanDisk geholt. Eine SSD mit USB-Adapter soll aber noch schneller sein.


    Hier mein "quick and dirty"-Code für die Temperatur auszulesen. Wenn es meine Zeit erlaubt, dann will ich noch eine UDF mit mehr Funktionen erstellen. Nochmals vielen Dank für deine Hilfe!

    AutoIt
    ;################################################################################################################################################
    ; Include
    ;################################################################################################################################################
    #include <WinAPIFiles.au3>
    #include <WinAPIHObj.au3>
    
    
    ;------------------------------------------------------------------------------------------------------------------------------------------------
    ; Connection to device >> Create Handle
    ;------------------------------------------------------------------------------------------------------------------------------------------------
    Global $hDevice = _WinAPI_CreateFileEx ('\\.\RPIQ', $OPEN_EXISTING, BitOR($GENERIC_READ , $GENERIC_WRITE), BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_OVERLAPPED)
    If (@error) Then
        MsgBox(16, 'Error', '_WinAPI_CreateFileEx')
        _EXIT()
    EndIf
    
    ;------------------------------------------------------------------------------------------------------------------------------------------------
    ; Create structure
    ;------------------------------------------------------------------------------------------------------------------------------------------------
    $TAG_REQUEST=0x00000000
    $TAG_ID_GET_TEMPERATURE=0x00030006
    $MAILBOX_HEADER='struct;ULONG TotalBuffer; ULONG RequestResponse; ULONG TagID; ULONG ResponseLength; ULONG Request;endstruct'
    $MAILBOX_GET_TEMP=DllStructCreate($MAILBOX_HEADER &';  ULONG TemperatureId; ULONG Value;  ULONG EndTag')
    DllStructSetData($MAILBOX_GET_TEMP, "TotalBuffer", DllStructGetSize($MAILBOX_GET_TEMP))
    DllStructSetData($MAILBOX_GET_TEMP, "RequestResponse", $TAG_REQUEST)
    DllStructSetData($MAILBOX_GET_TEMP, "TagID", $TAG_ID_GET_TEMPERATURE)
    DllStructSetData($MAILBOX_GET_TEMP, "ResponseLength", 8)
    DllStructSetData($MAILBOX_GET_TEMP, "Request", $TAG_REQUEST)
    DllStructSetData($MAILBOX_GET_TEMP, "TemperatureId", 0)
    DllStructSetData($MAILBOX_GET_TEMP, "Value", 0)
    DllStructSetData($MAILBOX_GET_TEMP, "EndTag", 0)
    
    ;------------------------------------------------------------------------------------------------------------------------------------------------
    ; Communication DeviceIoControl >> Read temperature
    ;------------------------------------------------------------------------------------------------------------------------------------------------
    If _WinAPI_DeviceIoControl($hDevice, IOCTL_MAILBOX_PROPERTY(), DllStructGetPtr($MAILBOX_GET_TEMP), DllStructGetSize($MAILBOX_GET_TEMP), DllStructGetPtr($MAILBOX_GET_TEMP), DllStructGetSize($MAILBOX_GET_TEMP)) Then
        MsgBox(0, "Temperature", Round((DllStructGetData($MAILBOX_GET_TEMP, "Value")/1000)))
        _EXIT('HANDLE')
    Else
        MsgBox(16, "Error", "_WinAPI_DeviceIoControl")
        _EXIT('HANDLE')
    EndIf
    
    
    ;================================================================================================================================================
    ; Function: IOCTL_MAILBOX_PROPERTY
    ; >> Link/Source: https://github.com/driver1998/PiMon/blob/master/src/rpiq.h
    ;================================================================================================================================================
    Func IOCTL_MAILBOX_PROPERTY()
    
        ;>> Variables/Constants:
        Local Const $FILE_DEVICE_RPIQ=2836
        Local Const $RPIQ_FUNC_MAILBOX_PROPERTY=2008
        Local Const $METHOD_BUFFERED = 0x00
        ;Local Const $METHOD_INDIRECT = 0x01
        ;Local Const $METHOD_OUTDIRECT = 0x02
        ;Local Const $METHOD_NEITHER = 0x03
        Local Const $FILEACCESS_ANY = 0x00 ; Request all access.
        ;Local Const $FILEACCESS_READ = 0x01 ; Request read access. Can be used with FILE_WRITE_ACCESS.
        ;Local Const $FILEACCESS_WRITE = 0x02; Request write access. Can be used with FILE_READ_ACCESS.
        ;Local Const $FILEACCESS_READWRITE = 0x03
    
        Return CTL_CODE($FILE_DEVICE_RPIQ, $RPIQ_FUNC_MAILBOX_PROPERTY, $METHOD_BUFFERED, $FILEACCESS_ANY)
    
    EndFunc
    
    ;================================================================================================================================================
    ; Function: CTL_CODE
    ; Link/Source: https://www.autoitscript.com/forum/topic/135436-solved-c-deviceiocontrol-function-communication-in-autoit/
    ;================================================================================================================================================
    Func CTL_CODE($Devicetype, $Function, $Method, $Access)
    
        Return BitOR(BitShift($Devicetype,-16),BitShift($Access,-14),BitShift($Function,-2),$Method)
    
    EndFunc
    
    ;================================================================================================================================================
    ; Function: EXIT
    ;================================================================================================================================================
    Func _EXIT($Parameter="NONE")
    
        If ($Parameter='HANDLE') Then _WinAPI_CloseHandle($hDevice)
        Exit
    
    EndFunc
    Alles anzeigen


    Gruß

    Homer J. S.

    PS: Ich setze das Thema auf gelöst :thumbup:

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 11. Februar 2022 um 11:23

    Andy :

    Ich glaube ich habe es am Laufen :party: . Allerdings habe ich erst heute Abend Zeit das ganze nochmals zu testen. Ich schreibe später dann nochmal. Vielen lieben Dank bis dahin schon mal :thumbup: .

    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 11. Februar 2022 um 10:28

    Andy :

    Ich bin nicht so bewandert mit Strucs und Pointern. Ich habe mal das Struct in der Struct erstellt - Stimmt das so?


    AutoIt
    #cs
    typedef struct _MAILBOX_HEADER {
        ULONG TotalBuffer;
        ULONG RequestResponse;
        ULONG TagID;
        ULONG ResponseLength;
        ULONG Request;
    } MAILBOX_HEADER, *PMAILBOX_HEADER;
    #ce
    
    $_MAILBOX_HEADER='struct;ULONG TotalBuffer; ULONG RequestResponse; ULONG TagID; ULONG ResponseLength; ULONG Request;endstruct'
    
    
    #cs
    #define TAG_ID_GET_TEMPERATURE 0x00030006
    typedef struct _MAILBOX_GET_TEMPERATURE
    {
        MAILBOX_HEADER Header;
        ULONG TemperatureId;
        ULONG Value;
        ULONG EndTag;
    } MAILBOX_GET_TEMPERATURE;
    #ce
    
    $_MAILBOX_GET_TEMPERATURE=DllStructCreate($_MAILBOX_HEADER &';  ULONG TemperatureId; ULONG Value;  ULONG EndTag')
    Alles anzeigen


    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 11. Februar 2022 um 08:57

    Andy :
    Sorry für die späte Antwort und danke für den Link. Jetz bin ich schonmal ein Stück weiter:

    AutoIt
    #include <WinAPIFiles.au3>
    #include <WinAPIHObj.au3>
    
    $FILE_DEVICE_RPIQ=2836
    $RPIQ_FUNC_MAILBOX_PROPERTY=2008
    
    #region Method Constants
    Global Const $METHOD_BUFFERED = 0x00
    Global Const $METHOD_INDIRECT = 0x01
    Global Const $METHOD_OUTDIRECT = 0x02
    Global Const $METHOD_NEITHER = 0x03
    #endregion Method Constants
    
    #region Access
    Global Const $FILEACCESS_ANY = 0x00 ; Request all access.
    Global Const $FILEACCESS_READ = 0x01 ; Request read access. Can be used with FILE_WRITE_ACCESS.
    Global Const $FILEACCESS_WRITE = 0x02; Request write access. Can be used with FILE_READ_ACCESS.
    Global Const $FILEACCESS_READWRITE = 0x03
    #endregion Access
    
    
    ;>> Ursprünglicher C-Code (data.c)
    ;HANDLE hDevice = CreateFileW(RPIQ_USERMODE_PATH, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)
    
    $RPIQ_USERMODE_PATH='\\.\RPIQ'
    $hDevice = _WinAPI_CreateFileEx ($RPIQ_USERMODE_PATH, $OPEN_EXISTING, BitOR($GENERIC_READ , $GENERIC_WRITE), BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_OVERLAPPED)
    If (@error) Then
        MsgBox(16, 'Error', @extended)
        Exit
    Else
        MsgBox(0, 'Handle', $hDevice)
    EndIf
    
    ;>> Ursprünglicher C-Code (data.c)
    ;DeviceIoControl(hDevice, IOCTL_MAILBOX_PROPERTY, (LPVOID)(&mailbox), sizeof(mailbox), (LPVOID)(&mailbox), sizeof(mailbox), &bytesReturned, 0);
    ;_WinAPI_DeviceIoControl($hDevice, IOCTL_MAILBOX_PROPERTY(), $pInBuffer = 0 [, $iInBufferSize = 0 [, $pOutBuffer = 0 [, $iOutBufferSize = 0]]]] )
    
    _WinAPI_CloseHandle($hDevice)
    Exit
    
    
    ;================================================================================================================================================
    ; Function: IOCTL_MAILBOX_PROPERTY
    ;================================================================================================================================================
    
    ;>> Link:
    ;https://github.com/driver1998/PiMon/blob/master/src/rpiq.h
    
    ;>> Original:
    ;#define IOCTL_MAILBOX_PROPERTY \
    ;    CTL_CODE(FILE_DEVICE_RPIQ, RPIQ_FUNC_MAILBOX_PROPERTY, METHOD_BUFFERED, FILE_ANY_ACCESS)
    
    Func IOCTL_MAILBOX_PROPERTY
        Return CTL_CODE($FILE_DEVICE_RPIQ, $RPIQ_FUNC_MAILBOX_PROPERTY, $METHOD_BUFFERED, $FILEACCESS_ANY)
    EndFunc
    
    
    ;================================================================================================================================================
    ; Function: CTL_CODE
    ;================================================================================================================================================
    
    ;>> Link:
    ;https://www.autoitscript.com/forum/topic/135436-solved-c-deviceiocontrol-function-communication-in-autoit/
    
    ;>> Original:
    ;CTL_CODE(FILE_DEVICE_RPIQ, RPIQ_FUNC_MAILBOX_PROPERTY, METHOD_BUFFERED, FILE_ANY_ACCESS)
    
    Func CTL_CODE($Devicetype, $Function, $Method, $Access)
        Return BitOR(BitShift($Devicetype,-16),BitShift($Access,-14),BitShift($Function,-2),$Method)
    EndFunc
    Alles anzeigen

    Der Aufruf vom Handle sollte funktionieren (Handle wird zurückgegeben). Jetzt bin ich am Aufruf von _WinAPI_DeviceIoControl dran.


    AutoIt
    ;>> Ursprünglicher C-Code (data.c)
    ;DeviceIoControl(hDevice, IOCTL_MAILBOX_PROPERTY, (LPVOID)(&mailbox), sizeof(mailbox), (LPVOID)(&mailbox), sizeof(mailbox), &bytesReturned, 0);
    _WinAPI_DeviceIoControl($hDevice, IOCTL_MAILBOX_PROPERTY(), $pInBuffer = 0 [, $iInBufferSize = 0 [, $pOutBuffer = 0 [, $iOutBufferSize = 0]]]] )

    Was theoretisch schon mal gehen sollte, ist "hDevice" und "IOCTL_MAILBOX_PROPERTY". Jetzt kommt die "mailbox"-Geschichte, woran ich bisher scheitere.

    In dem File "rpiq.h" stehen aber die Definitionen drin. Hier der Link:

    PiMon/rpiq.h at master · driver1998/PiMon
    A simple hardware monitor for your Raspberry Pi running Windows. - PiMon/rpiq.h at master · driver1998/PiMon
    github.com


    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 9. Februar 2022 um 21:58
    Zitat von Andy

    Halte mich/uns mit diesem Projekt bitte auf dem Laufenden, ich habe einen Raspi 400 zum rumspielen und experimentieren.

    Sorry, das habe ich vorhin überlesen.

    >> Allgmeine Infos zu Windows 11 Arm auf einem Raspberry PI 4: <<

    Hardware Voraussetzung:

    - Raspberry PI 4 oder 400 mit mindestens 4GB Ram
    - USB 3.0-Stick >=64GB oder besser USB-HDD für Betriebssystem (mein Test mit einer SD-Karte waren erschreckend langsam)

    - Kühler für den Prozessor ist pflicht (der PI hat wohl deutlich mehr mit Windows zu tuen wie mit einem Raspberry Pi OS)

    >> Link Prozessor Kühler:

    JOY-IT Armor Case "BLOCK ACTIVE" für den Raspberry Pi 4B
    Das Armor Gehäuse "BLOCK ACTIVE" für den Raspberry Pi® 4 B ist Ihr idealer Partner wenn es hart auf hart kommt und richtig heiß wird. Das auf Aluminium…
    www.pollin.de

    Software Voraussetzung:

    - Aktuelle Firmware auf dem PI für USB-Boot zu ermöglichen

    Einschränkungen:

    - Kein natives WLAN bisher möglich -> Dies betrifft den Adapter intern wie auch USB Dongle

    - Windows läuft bisher ausschließlich im Testmodus, da die Treiber nicht zertifiziert sind

    >> Link Videotutorial:

    Windows 11 Installation auf Raspberry Pi 4 / 400 - Schritt für Schritt
    Windows 11 Insider Preview gibt es auch für ARM Prozessoren. Da bietet es sich an, dies einmal auf einem Rapberry Pi 4 / 400 zu installieren. Die genaue Anle...
    www.youtube.com

    >> Link UUP dump:

    UUP dump
    Download UUP files from Windows Update servers with ease. This project is not affiliated with Microsoft Corporation.
    uupdump.net

    >> Link Wor-Projekt:

    Home | Windows on Raspberry

    >> Link RPi-Windows-Drivers (ARM64):

    GitHub - worproject/RPi-Windows-Drivers: Windows on ARM device drivers for the Raspberry Pi single-board computer.
    Windows on ARM device drivers for the Raspberry Pi single-board computer. - GitHub - worproject/RPi-Windows-Drivers: Windows on ARM device drivers for the…
    github.com

    >> Link FTDI-Drivers (ARM64):

    D2XX Drivers - FTDI

    >> Link PI Hardware Monitor:

    1 - https://www.worproject.ml/downloads#pimon

    2 - https://github.com/driver1998/PiMon


    Ich hoffe, ich konnte dir bzw. anderen einen guten Einstieg in Windows PI Welt geben?!

    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 9. Februar 2022 um 21:11
    Zitat von Andy

    das solltest du hinbekommen, das ist ein ganz simpler API-Aufruf mit entsprechenden Parametern. Die Parameter sind imho. alle im Programm als Konstanten definiert.

    So, das habe ich schon mal vorbereitet. Allerdings bin ich mir mit dem Parameter [RPIQ_USERMODE_PATH] unsicher.

    Hier mein Code:

    AutoIt
    #include <WinAPIFiles.au3>
    #include <WinAPIHObj.au3>
    
    ;>> Ursprünglicher C-Code (data.c)
    ;HANDLE hDevice = CreateFileW(RPIQ_USERMODE_PATH, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)
    
    $RPIQ_USERMODE_PATH='\\.\C:\RPIQ_USERMODE_PATH.txt'
    $hDevice = _WinAPI_CreateFileEx ($RPIQ_USERMODE_PATH, $CREATE_ALWAYS, BitOR($GENERIC_READ , $GENERIC_WRITE), BitOR($FILE_SHARE_READ, $FILE_SHARE_WRITE), $FILE_FLAG_OVERLAPPED)
    If (@error) Then
        MsgBox(16, 'Error', @extended)
        Exit
    Else
        MsgBox(0, 'Handle', $hDevice)
    EndIf
    
    
    ;Platzhalter weiterer Code…
    
    
    _WinAPI_CloseHandle($hDevice)
    Exit
    Alles anzeigen
    Zitat von Andy

    ich lese mich derweil mal in das Interface-Gedöns ein. Da ist allerlei wg. Endianess und Alignment gefordert...

    Das hört sich nach viel Arbeit an. Vielen Dank schon mal...


    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 9. Februar 2022 um 19:47
    Zitat von Andy

    Hast du denn mal das vorliegende Programm compiliert und laufen lassen? Funktioniert es denn?

    Jein, ich habe es fertig kompiliert bei https://www.worproject.ml/downloads#pimon gedownloadet und dann erfolgreich getestet - Also es funktioniert.


    Was ich bisher herausgefunden habe ist, dass dies über "Microsoft's RPIQ driver for communicating with VC Mailbox in Windows" läuft. Dazu habe ich folgenden Link gefunden:

    Mailbox property interface · raspberrypi/firmware Wiki
    This repository contains pre-compiled binaries of the current Raspberry Pi kernel and modules, userspace libraries, and bootloader/GPU firmware. - Mailbox…
    github.com

    Hier ist ein Ausschnitt aus dem Beispiel von dem “data.c“ File:

    Code
    ULONG GetTemperature() {
        ULONG value = 0;
    
        HANDLE hDevice = CreateFileW(
            RPIQ_USERMODE_PATH, GENERIC_READ | GENERIC_WRITE,
            FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0
        );
        if (hDevice == INVALID_HANDLE_VALUE) return value;
    
        DWORD bytesReturned;
    
        MAILBOX_GET_TEMPERATURE mailbox;
        INIT_MAILBOX_GET_TEMPERATURE(&mailbox);
        BOOL status = DeviceIoControl(hDevice, IOCTL_MAILBOX_PROPERTY,
            (LPVOID)(&mailbox), sizeof(mailbox),
            (LPVOID)(&mailbox), sizeof(mailbox), &bytesReturned, 0);
        if (status) value = mailbox.Value;
    
        CloseHandle(hDevice);
        return value;
    }
    Alles anzeigen


    ...aber so wirklich schlau werde ich daraus nicht :Face:.

    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 9. Februar 2022 um 18:11

    Hallo Andy,
    vielen Dank für deine Antwort bzw. deinen Lösungsvorschlag. Allerding glaube ich, dass du mich missverstanden hast. Das Windows 11 ARM läuft auf dem PI selbst und auf diesem möchte ich in meiner eigenen GUI die Temperatur anzeigen. Das Ganze funktioniert wohl über IOCTL bzw. “_WinAPI_DeviceIoControl“, wie ich dem “data.c“ File von meinem Link oben entnommen habe.

    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 9. Februar 2022 um 16:48

    Hallo MojoeB,

    ein paar Skripte habe ich schon erfolgreich getestet. In meinen Tests enthalten waren bisher GUI-Skripte und Skripte mit Kommunikation über TCP/IP. Allerdings darf man von dem Raspberry PI 4 keine Höchstleistungen erwarten, aber für viele Aufgaben ist er absolut ausreichend.

    Gruß

    Homer J. S.

  • IOCTL - Prozessortemperatur Raspberry PI 4 - Windows 11 ARM

    • Homer J. S.
    • 8. Februar 2022 um 22:05

    Hallo Zusammen,

    ich benötige eure Hilfe für das Auslesen der Prozessortemperatur eines Rasberry PI4 mit Windows 11 ARM. Es gibt hierfür schon ein Monitor-Tool auf GitHub, was dies über IOCTL bewerkstelligt. Die genaue Beschreibung der Befehle stehen in folgender Datei:

    PiMon/data.c at master · driver1998/PiMon
    A simple hardware monitor for your Raspberry Pi running Windows. - PiMon/data.c at master · driver1998/PiMon
    github.com

    Allerdings habe ich keinen Plan, wie ich dies mit AutoIt umsetzten könnte. Daher hoffe ich, das einer von euch mir unter die Arme greifen kann/möchte.

    Vielen Dank schonmal für eure Unterstützung!

    Gruß

    Homer J. S.

  • 2Programm - 1Array

    • Homer J. S.
    • 8. Mai 2019 um 09:49

    Hallo Lanealine,

    ich hatte mal eine ähnliche Aufgabe und die Lösung war die Kommunikation über einen reservierten Teil des Arbeitsspeichers. Das Thema findest du unter folgendem Link (interessant für dich ab Post #19):

    Link: Kommunikation skripte untereinander

    Gruß

    Homer J. S.

  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 12. April 2019 um 18:12

    alpines: Ich musste beruflich kurzfristig verreisen, deshalb sorry für die späte Antwort.

    Zitat von alpines

    Was du übergibst ist ein void**. Schau dir an was in den Funktionen davon als Buffer verwendet wird (ich schätze mal int[] oder char[] respektive byte[])

    Du hattest mal wieder Recht. Ich habe es jetzt wie folgt erfolgreich umgesetzt:

    Code
    $DllHandle... (sollte klar sein)
    
    $ID=X    ;X = Hardware I2C Port
    $Addr=X  ;X = 7-Bit I2C Adresse
    
    $WByteCnt=0 ;Es muss eine 0 zum lesen sein!
    $RByteCnt=1 ;Empfangsbreite (Byte)
    $RBufLen=1  ;Empfangsbreite (Byte) => Selbe länge wie $RByteCnt!
    
    $tWBuffer=DllStructCreate("byte["& $WByteCnt &"]")
    $pWBuffer=DllStructGetPtr($tWBuffer, 1)
    
    $tRBuffer=DllStructCreate("byte["& $RByteCnt &"]")
    $pRBuffer=DllStructGetPtr($tRBuffer, 1)
    
    $DllResult=DllCall($DllHandle, "uint:cdecl", "EApiI2CWriteReadRaw", "uint", $ID, "uint", $Addr, "ptr", $pWBuffer, "uint", $WByteCnt, "ptr", $pRBuffer, "uint", $RBufLen, "uint", $RByteCnt)
    Alles anzeigen

    Vielen Dank für deine Hilfe/Unterstützung!

    Gruß

    Homer J. S.

    PS: Ich setzte das Thema wieder auf gelöst

  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 9. April 2019 um 22:47
    Zitat von alpines

    Dein Parametertyp vom 1. Parameter ist "unit". Du hast einen Tippfehler drin.

    Upps, wie peinlich. Dies habe ich soeben geändert und jetzt gibt mir die DLL "EAPI_STATUS_INVALID_PARAMETER" zurück ;(.


    Gruß

    Homer J. S.

  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 9. April 2019 um 22:26

    Hallo Zusammen,

    ich bin ein gutes Stück weiter gekommen mit dieser DLL. Allerdings habe ich ein Problem mit dem Aufruf der Funktion “EApiI2CWriteReadRaw“. Es wäre schön, wenn mir nochmal eine(r) auf die Sprünge helfen könnte.

    Hier der Aufruf aus der Dokumentation:

    Code
    EApiStatus_t EAPI_CALLTYPE EApiI2CWriteReadRaw (__IN EApiId_t Id, __IN uint8_t Addr, __INOPT void* pWBuffer, __IN uint32_t WriteBCnt, __OUTOPT void *pRBuffer, __IN uint32_t RBufLen, __IN uint32_t ReadBCnt)

    Hier mein Aufruf mit AutoIt (Auszug):

    Code
    $tWBuffer=DllStructCreate("ptr")
    $pWBuffer=DllStructGetPtr($tWBuffer, 1)
    DllStructSetData($tWBuffer, 1, Null)
    $tRBuffer=DllStructCreate("ptr")
    $pRBuffer=DllStructGetPtr($tRBuffer, 1)
    $DllResult=DllCall($DllHandle, "uint:cdecl", "EApiI2CWriteReadRaw", "unit", 0, "byte", 0xA0, "ptr", $pWBuffer ,"uint", 0, "ptr", $pRBuffer, "uint", 1, "uint", 1)

    Wenn ich dieses so Aufrufe, dann gibt mir @error eine 1 zurück.

    Link zu Dokumentation aus Post #9 (ab Seite 10): Dokumentation


    Vielen Dank schonam für eure Hilfe!

    Gruß

    Homer J. S.

  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 22. März 2019 um 10:33
    Zitat von alpines

    Dein Parametertyp für $pBuflen ist "uint_ptr*", das wäre (wenn das überhaupt möglich ist in AutoIt, was es nicht ist) ein Pointer vom Pointer. Es darf aber nur ein einfacher Pointer sein -> "uint_ptr", "uint*" oder "ptr" nutzen!

    Du solltest für das Initialize und UnInitialize ebenfalls :cdecl nutzen, da diese auch API Calls sind und keine Std Calls.

    Das habe ich jetzt auch umgesetzt. An dem Problem mit der Bufferlänge hat sich nichts geändert. Allerdings ist das auch nicht wirklich ein Problem, da ich die Bufferlänge auch selbst nach dem Empfang ermitteln kann. Daher stelle ich jetzt das Thema auf gelöst. Vielen Dank für deine professionelle Hilfe!

    Gruß

    Homer J. S.

  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 21. März 2019 um 20:30

    alpines :

    Hier ist mein vollständiger Testcode:

    Spoiler anzeigen
    C
    ;===============================================================================
    ;Includes
    ;===============================================================================
    #include <array.au3>
    
    
    ;===============================================================================
    ;Initialisieren
    ;===============================================================================
    $DllHandle=0
    OnAutoItExitRegister("OnAutoItExit")
    
    
    ;===============================================================================
    ;Deklaration
    ;===============================================================================
    CONST $DllPath=@ScriptDir & "\aaeonEAPI.dll"
    CONST $EAPI_STATUS_NOT_INITIALIZED=0x0FFFFFFFF
    CONST $EAPI_STATUS_INVALID_PARAMETER=0x0FFFFFEFF
    CONST $EAPI_STATUS_UNSUPPORTED=0x0FFFFFCFF
    CONST $EAPI_STATUS_ERROR =0x0FFFFF0FF
    CONST $EAPI_STATUS_SUCCESS=0
    CONST $EAPI_ID_BOARD_NAME_STR=1
    
    
    ;===============================================================================
    ;Dll: Existenz überprüfen
    ;===============================================================================
    If Not FileExists($DllPath) Then
     MsgBox(16, "Error", "Funktion: FileExists - aaeonEAPI.dll")
     Exit
    EndIf
    
    
    ;===============================================================================
    ;Dll: Öffnen
    ;===============================================================================
    $DllHandle=DllOpen($DllPath)
    If (@error) Then
     MsgBox(16, "Error", "Funktion: DllOpen" &@CRLF & "Fehlernummer: " &@error)
     Exit
    EndIf
    
    
    ;===============================================================================
    ;Dll Call: Initialisierung
    ;Original: EApiStatus_t EAPI_CALLTYPE EApiLibInitialize (void)
    ;===============================================================================
    $DllResult=DllCall($DllHandle, "uint", "EApiLibInitialize")
    If (@error) Then
     MsgBox(16, "Error", "Funktion: DllCall EApiLibInitialize" &@CRLF & "Fehlernummer: " &@error)
     Exit
    EndIf
    
    
    ;===============================================================================
    ;Dll Call: Read Board Name
    ;Original: EApiStatus_t EAPI_CALLTYPE EApiBoardGetStringA
    ;          (__IN EApiId_t Id, __OUT char * pBuffer, __INOUT uint32_t * pBufLen)
    ;===============================================================================
    
    $tBuffer=DllStructCreate("char[128]")
    $pBuffer=DllStructGetPtr($tBuffer, 1)
    
    $tBuflen=DllStructCreate("uint")
    $pBuflen=DllStructGetPtr($tBuflen, 1)
    DllStructSetData($tBuflen, 1, 128)
    
    $DllResult=DllCall($DllHandle, "uint:cdecl", "EApiBoardGetStringA", "uint", $EAPI_ID_BOARD_NAME_STR, "ptr", $pBuffer, "uint_ptr*" ,$pBuflen)
    If (@error) Then
     MsgBox(16, "Error", "Funktion: DllCall EApiBoardGetStringA: EAPI_ID_BOARD_NAME_STR" &@CRLF & "Fehlernummer: " &@error)
     Exit
    EndIf
    If ($DllResult[0]=$EAPI_STATUS_SUCCESS) Then
     ;_ArrayDisplay($DllResult)
     MsgBox(0, "tBuffer", DllStructGetData($tBuffer, 1))
     MsgBox(0, "tBuflen", DllStructGetData($tBuflen, 1))
    EndIf
    
    
    ;===============================================================================
    ;Dll Call: Reinitialisierung
    ;Original: EApiStatus_t EAPI_CALLTYPE EApiLibUnInitialize (void)
    ;===============================================================================
    $DllResult=DllCall($DllHandle, "uint", "EApiLibUnInitialize")
    If (@error) Then
     MsgBox(16, "Error", "Funktion: DllCall EApiLibUnInitialize" &@CRLF & "Fehlernummer: " &@error)
     Exit
    EndIf
    
    
    ;===============================================================================
    ;Funktion: OnAutoItExit
    ;===============================================================================
    Func OnAutoItExit()
     If ($DllHandle<>0) Then
      DllClose($DllHandle) ;Dll: Schliessen
     EndIf
    EndFunc
    Alles anzeigen

    BugFix :

    Zitat von BugFix

    Häufig verwenden Dll folgenden Mechanismus: Aufruf der Dll mit allen Parametern und als Bufferlänge null (Wert "0" oder "Null"), dann wird die Bufferlänge auf den erforderlichen Wert gesetzt. Den Wert verwende ich dann um meinen Buffer auf die richtige Länge zu setzen und rufe dann die Dll korrekt auf. Ggf. muss zur Länge 1 addiert werden, falls der Buffer einen null-terminierten String halten soll (sowas steht in der Doku).

    Danke für die Idee, aber leider funktioniert es nicht. Aber im Anhang findest du die PDF mit der Dokumentation, falls du mal drüber schauen möchtest...


    Gruß

    Homer J. S.

    Dateien

    aaeonEAPI.pdf 1,03 MB – 1.645 Downloads
  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 21. März 2019 um 15:27
    Zitat von alpines

    Vielleicht passt er auch die Buffergröße an, übergib mal einen sehr kleinen Buffer und schau dir an was er zurückgibt und was in *pBuffer und *pBufferLen drinsteht.

    Ich habe mal folgendes getestet:

    Test 1:

    Buffer= char[20]

    Buflen = 1 (Vorbelegung)

    Rückgabewert Buffer = String mit 5 Zeichen (müssen 5 Zeichen sein)

    Rückgabewert Buflen = 1

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)

    Test 2:

    Buffer= char[1]

    Buflen = 20 (Vorbelegung)

    Rückgabewert Buffer = String mit 1 Zeichen (müssten 5 Zeichen sein)

    Rückgabewert Buflen = 20

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)

    Test 3:

    Buffer= char[1]

    Buflen = 1 (Vorbelegung)

    Rückgabewert Buffer = String mit 1 Zeichen (müssten 5 Zeichen sein)

    Rückgabewert Buflen = 1

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)

    Test 4:

    Buffer= char[1]

    Buflen = / (Keine Vorbelegung)

    Rückgabewert Buffer = String mit 1 Zeichen (müssten 5 Zeichen sein)

    Rückgabewert Buflen = 0

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)

    Test 5:

    Buffer= char[20]

    Buflen = / (Keine Vorbelegung)

    Rückgabewert Buffer = String mit 5 Zeichen (müssen 5 Zeichen sein)

    Rückgabewert Buflen = 0

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)


    Es sieht ein wenig so aus, als ob die DLL nicht das macht, was sie sollte - Oder?

    Gruß

    Homer J. S.

  • Problem mit DllCall (aaeonEAPI.dll)

    • Homer J. S.
    • 21. März 2019 um 13:33

    alpines:

    Vielen Dank für deine Unterstützung - Dein Code funktioniert einwandfrei :party:

    Jetzt verstehe ich ein wenig mehr, was die Kommunikation mit DLL´s angeht. Somit habe ich mich auch an das Auslesen der Boardinformationen gemacht. Dies funktioniert auch schon, allerdings ändert die DLL die Bufferlänge nicht. Laut Dokumentation ist das eine “__INOUT“ Funktion und daher habe ich “by reference“ angegeben, aber die Bufferlänge bleibt bei meiner Vorgabe. Vieleicht hast du ja noch einen Tipp für mich?

    Ausschnitt aus meinem Code:
    Code
    CONST $EAPI_STATUS_SUCCESS=0
    CONST $EAPI_ID_BOARD_NAME_STR=1
    
    $tBuffer=DllStructCreate("char[128]")
    $pBuffer=DllStructGetPtr($tBuffer, 1)
    
    $tBuflen=DllStructCreate("uint")
    $pBuflen=DllStructGetPtr($tBuflen, 1)
    DllStructSetData($tBuflen, 1, 128)
    
    $DllResult=DllCall($DllHandle, "uint:cdecl", "EApiBoardGetStringA", "uint", $EAPI_ID_BOARD_NAME_STR, "ptr", $pBuffer, "uint_ptr*" ,$pBuflen)
    If (@error) Then
     MsgBox(16, "Error", "Funktion: DllCall EApiBoardGetStringA: EAPI_ID_BOARD_NAME_STR" &@CRLF & "Fehlernummer: " &@error)
     Exit
    EndIf
    If ($DllResult[0]=$EAPI_STATUS_SUCCESS) Then
     MsgBox(0, "tBuffer", DllStructGetData($tBuffer, 1))
     MsgBox(0, "tBuflen", DllStructGetData($tBuflen, 1))
    EndIf
    Alles anzeigen



    Zitat von alpines

    Den Code habe ich nicht gesäubert, und er sieht ehrlich gesagt ziemlich beschissen aus, du solltest ihn sauberer schreiben.

    Das dieser nicht wunderschön ist, das war/ist mir bewusst. Ich teste am Anfang immer ein wenig rum und dann wird es ins reine geschrieben. Zudem wollte ich später wahrscheinlich eine UDF daraus machen.


    Gruß

    Homer J. S.

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™