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

Beiträge von Aaron3569

  • Problem mit scrolling bei $WS_EX_LAYERED child windows

    • Aaron3569
    • 4. Oktober 2023 um 18:13

    Kanashius danke für die Antwort, leider wie bereits MojoeB erwähnte, flackert nun das komplette Bild, zumindest clippt es so nicht mehr raus, ist ja mal ein Fortschritt. Ich denke aber nicht das es an zu Langsamer Hardware liegt (10900K / 2080ti)

  • Problem mit scrolling bei $WS_EX_LAYERED child windows

    • Aaron3569
    • 4. Oktober 2023 um 16:24

    Hallo, ich habe folgendes Problem: Wenn ich ein Child Window über _WinAPI_UpdateLayeredWindowEx mit einem Bild versehe, scheint es beim Scrollen des Parent Windows Clipping Probleme zu geben. Es kommt immer wieder vor das bei einem scroll der Inhalt des Child Windows dann für einen kurzen Moment außerhalb des Parent Windows zu sehen ist. Könnt ihr den Beispielcode mal ausprobieren und sehen ob ihr das auch habt? ladet einfach eine beliebige Bilddatei , am besten eine etwas größere um den Effekt bessere zu sehen und dann einfach starten und schnell hoch und runter scrollen, entsprechend sollte dann irgendwann das Bild oben oder unten "raus clippen". Es ist sehr random also dauert es manchmal ein paar scrolls. Jemand eine Idee? leider habe ich keinen weg gefunden es sauber zu clippen wie es sonst ist wenn man normale Child Windows benutzt.

    C
    #include <GUIConstantsEx.au3>
    #Include <WindowsConstants.au3>
    #include <WinAPIConv.au3>
    #include <GuiScrollBars.au3>
    #include <GDIPlus.au3>
    #include <WinAPISysWin.au3>
    
    GUIRegisterMsg($WM_MOUSEWHEEL, "_WM_MOUSEWHEEL")
    
    $hParent = GUICreate("Test", 900, 500, -1, -1)
    GUISetState(@SW_SHOW, $hParent)
    
    _GDIPlus_Startup()
    $hImage = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\texture.jpg")
    $hChild = GUICreate("Child", 150, 150, 0, 0, $WS_CHILD, $WS_EX_LAYERED, $hParent)
    _WinAPI_UpdateLayeredWindowEx($hChild, -1, -1, _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage), 255, true)
    GUISetState(@SW_SHOW, $hChild)
    
    _GUIScrollBars_Init($hParent, -1, 100)
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
    
        EndSwitch
    WEnd
    
    
    Func _WM_MOUSEWHEEL($hwnd, $Msg, $wParam, $lParam)
    
        Local $iCurScrollPos = _GUIScrollBars_GetScrollInfoPos($hWnd, $SB_VERT)
    
        Switch  _WinAPI_HiWord($wParam) / 120
            Case -1
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iCurScrollPos + 5)
    
            Case 1
                _GUIScrollBars_SetScrollInfoPos($hWnd, $SB_VERT, $iCurScrollPos - 5)
        EndSwitch
    
    EndFunc
    Alles anzeigen
  • "Taskleiste im Desktopmodus automatisch ausblenden" mit AutoIt Triggern?

    • Aaron3569
    • 19. September 2021 um 16:14

    Guten Tag, ich würde gerne die im Titel stehende Windows Funktion mit Autoit Triggern. Ich suche einen Weg die Taskleiste ausblenden zu lassen, jedoch soll diese wieder erscheinen sobald ich mit der Maus an die ursprüngliche Position der Taskleiste gehe, also genau so wie es die genannte Funktion tut. Bis jetzt habe ich leider nur die Möglichkeit gefunden die Taskleiste komplett verschwinden zu lassen, natürlich wäre es möglich mit einem kleinen Script einfach die Maus Position abzufragen und entsprechend die Taskleiste wieder anzeigen zu lassen, jedoch würde es mich interessieren ob es möglich ist die Windows Funktion direkt zu triggern. ^^

    Edit: Lösung gefunden, hier ein kurzes Beispiel:

    AutoIt
    Global Const $ABM_GETSTATE = 0x04
    Global Const $ABM_SETSTATE = 0x0000000a
    
    Global Const $ABS_ALWAYSONTOP = 0x2
    Global Const $ABS_AUTOHIDE = 0x1
    
    
    Global $pabd = DllStructCreate("dword;int;uint;uint;int;int;int;int;int")
    DllStructSetData($pabd, 1, DllStructGetSize($pabd)) ;cbSize
    DllStructSetData($pabd, 2, ControlGetHandle("Start", "", "Shell_TrayWnd")) ;hWnd
    
    
    
    
    
    _SetTrackbarState($ABS_AUTOHIDE)
    
    ConsoleWrite("Taskbar im Autohide Mode: " &  _GetTrackbarState() & @CRLF )
    
    
    Sleep(2000)
    
    
    _SetTrackbarState($ABS_ALWAYSONTOP)
    
    ConsoleWrite("Taskbar im Autohide Mode: " &  _GetTrackbarState() & @CRLF )
    
    
    
    Func _SetTrackbarState($iTrackbarState)
    
        DllStructSetData($pabd, 9, $iTrackbarState)
        SHAppBarMessage($ABM_SETSTATE, $pabd)
    
    EndFunc   ;==>_SetTrackbarState
    
    Func _GetTrackbarState()
    
        Return SHAppBarMessage($ABM_GETSTATE, $pabd)
    
        ; returns False wenn Taskbar ist sichtbar , returns 1 wenn Taskbar ist im Autohide Mode.
    
    EndFunc   ;==>_GetTrackbarState
    
    
    
    Func SHAppBarMessage($Message, ByRef $pabd)
    
        $lResult = DllCall("shell32.dll", "int", "SHAppBarMessage", "int", $Message, "ptr", DllStructGetPtr($pabd))
        If Not @error Then
            If $lResult[0] Then
                Return $lResult[0]
            EndIf
        EndIf
        SetError(1)
        Return False
    
    EndFunc   ;==>SHAppBarMessage
    Alles anzeigen
  • Scrolling und Child GUIs

    • Aaron3569
    • 19. Mai 2021 um 18:25

    Guten Abend,

    ich versuche gerade eine Möglichkeit zu finden die es erlaubt ein Fenster in einem anderen einzubetten welches sich dann wie ein herkömmliches Guictrl verhält, also beim Scrollen durch das Parent Window darf sich das Child Window nicht bewegen. Das habe ich soweit mit folgendem Code hinbekommen, leider verschwindet die Child GUI beim bewegen / minimieren des Parents. Ich denke es hat mit den GUI Styles zu tun ? würde mich über Hilfe freuen :thumbup:

    C
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <GuiScrollBars.au3>
    
    HotKeySet("{RIGHT}", "ScrollRight")
    HotKeySet("{LEFT}", "ScrollLeft")
    
    $hParent = GUICreate("Parent", 1300, 800, -1, -1)
    GUICtrlCreateButton("Button", 150, 150, 150, 50)
    GUISetState()
    
    
    $hChild = GUICreate("Child", 100, 100, -1,-1, $WS_CHILD , $WS_EX_MDICHILD, $hParent)
    GUISetBkColor(0x000000)
    GUISetState()
    
    
    
    _GUIScrollBars_Init($hParent, 10000)
    
    
    
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
    
        EndSwitch
    WEnd
    
    
    
    Func ScrollRight()
        _GUIScrollBars_SetScrollInfoPos($hParent, $SB_HORZ, _GUIScrollBars_GetScrollInfoPos($hParent, $SB_HORZ) + 5)
    EndFunc
    
    Func ScrollLeft()
        _GUIScrollBars_SetScrollInfoPos($hParent, $SB_HORZ, _GUIScrollBars_GetScrollInfoPos($hParent, $SB_HORZ) - 5)
    EndFunc
    Alles anzeigen
  • benötige Rat bei der visuellen Umsetzung eines Projektes

    • Aaron3569
    • 17. Mai 2021 um 20:30

    guten Abend,

    Ich Arbeite gerade an einem Projekt bei welchem ich nun an einem Punkt angekommen bin, wo ich eine Art Blueprint - System ähnlich wie bei der Unreal Engine ,umsetzen möchte.

    Falls euch das System nicht bekannt ist , es geht lediglich um eine Art Visuelles Scripten, wo Blöcke welche meist Funktionen repräsentieren über Eingang und Ausgang Pins verfügen und so mit weiteren Blöcken verbunden werden.

    Meine Frage wäre hier wie man das am besten Grafisch umsetzen könnte. Mit GDI + bin ich mir nicht sicher ob das von der Performance her hinhaut . Ich Arbeite nebenher auch an einer aktuellen OpenCV UDF mit OpenGL Support , vielleicht gibt es aber auch bessere Lösungen.

    Es geht lediglich um die Core Mechaniken , also das anzeigen der Blöcke sowie das Verbinden, das ganze ist dann natürlich nicht Statisch sondern die GUI soll dann auch Scrollbar sein.


    würde mich auf die ein oder andere Idee freuen :)

  • brauche Hilfe beim Return von einem DLL Call

    • Aaron3569
    • 24. Juni 2019 um 21:28

    Vielen dank für die Aufklärung ! Die Deklaration außerhalb der Funktion scheint das Problem schon gelöst zu haben, nun funktioniert alles problemlos mit dem Code:

    Code
    $hDll = DllOpen("VR_API.dll")
    
    $intptr = DllCall($hDll, "int*:cdecl", "GetMyIntegers")
    
    $struct = DllStructCreate("int[3]",$intptr[0])
    
    $myInteger = DllStructGetData($struct, 1, 1)
    ConsoleWrite("1 = " & $myInteger & @LF)
    
    $myInteger = DllStructGetData($struct, 1, 2)
    ConsoleWrite("2 = " & $myInteger & @LF)
    
    $myInteger = DllStructGetData($struct, 1, 3)
    ConsoleWrite("3 = " & $myInteger & @LF)
    Alles anzeigen

    Ist diese Methode dann so okay, oder sollte ich doch lieber eine deiner oben genanten Optionen benutzen? :)

  • brauche Hilfe beim Return von einem DLL Call

    • Aaron3569
    • 24. Juni 2019 um 20:23

    Guten Abend,

    Ich habe eine Simple DLL Funktion die einen Array zurückgibt:

    Code
    extern "C" __declspec(dllexport) int *GetMyIntegers()
    {
        int myIntegers[3];
    
        myIntegers[0] = 10;
        myIntegers[1] = 20;
        myIntegers[2] = 30;
    
        return myIntegers;
    }

    Da es sich hier um ein Array handelt ist es mit dem Rückgabewert bei einem DllCall ja nicht so einfach wie mit einem einfach int z.b... Ich habe nun schon ein paar Dinge versucht die ich so im Internet finden konnte, leider noch erfolglos.. hier mal mein aktueller Versuch:

    Code
    $hDll = DllOpen("VR_API.dll")
    
    
    $intptr = DllCall($hDll, "int*:cdecl", "GetMyIntegers")
    
    $struct = DllStructCreate("int[3]",$intptr[0])
    
    
    $myInteger = DllStructGetData($struct, 1, 1)
    ConsoleWrite("1 = " & $myInteger & @LF)
    
    $myInteger = DllStructGetData($struct, 1, 2)
    ConsoleWrite("2 = " & $myInteger & @LF)
    
    $myInteger = DllStructGetData($struct, 1, 3)
    ConsoleWrite("3 = " & $myInteger & @LF)
    Alles anzeigen

    OutPut der Console:

    1 = 0

    2 = 18183192

    3 = 339

    2 und 3 ändern sich aber Regelmäßig mit jedem Aufruf... So Habe ich es auch probiert , bekomme jedoch nur 0 raus:

    Code
    $hDll = DllOpen("VR_API.dll")
    
    $struct = DllStructCreate("int[3]")
    
    $intptr = DllCall($hDll, "int*:cdecl", "GetMyIntegers", "int", DLLStructGetPtr($struct))
    
    
    $myInteger = DllStructGetData($struct, 1, 1)
    ConsoleWrite("1 = " & $myInteger &  @LF)
    
    $myInteger = DllStructGetData($struct, 1, 2)
    ConsoleWrite("2 = " & $myInteger &  @LF)
    
    $myInteger = DllStructGetData($struct, 1, 3)
    ConsoleWrite("3 = " & $myInteger &  @LF)
    Alles anzeigen

    Würde mich sehr über Hilfe Freuen :)

  • Benötige Hilfe bei einem DLL - Call

    • Aaron3569
    • 23. Juni 2019 um 22:40

    Ja es funktioniert jetzt tatsächlich !

    vielen dank , das hat mir sehr viel weitergeholfen!

  • Benötige Hilfe bei einem DLL - Call

    • Aaron3569
    • 23. Juni 2019 um 22:28

    Der DllCall Fehlercode also "00F5801A0" ist der Rückgabewert der Funktion , es ist eine selbstkompilierte 32 Bit DLL.. Ich scheine nun auch zum ersten mal das Script ausführen zu können ohne einen Absturz, es sieht nicht groß anders aus:

    Code
    $hDll = DllOpen("Dll6.dll")
    ConsoleWrite("DllOpen Handle = " & $hDll)
    
    
    $aReturn1 = DllCall($hDLL, "ptr:cdecl", "init_OpenVR")
    ConsoleWrite("init_OpenVr - @error=" & @error)
    
    
    $aReturn2 = DllCall($hDLL, "none:cdecl", "ProcessVREvents", "ptr", $aReturn1[0])
    ConsoleWRite("ProcessVREvents - @error=" & @error)

    Ich habe in der DLL Funktion "ProcessVREvents" ja einen cout von dem Parameter, dieser zeigt er mir nun auch in der AutoIt Console an

  • Benötige Hilfe bei einem DLL - Call

    • Aaron3569
    • 23. Juni 2019 um 22:16

    Ich bin gerade noch am Testen hier mal das was die Console mit dem Code oben ausgegeben hat:

    Code
    DllOpen Handle = 1init_OpenVr - @error=00F5801A0
    ProcessVREvents - @error=0+>22:15:40 AutoIt3.exe ended.rc:0
  • Benötige Hilfe bei einem DLL - Call

    • Aaron3569
    • 23. Juni 2019 um 21:53

    Alles klar, nun danke für das hinweisen

    Die Dokumentation von OpenVR : https://github.com/ValveSoftware/…I-Documentation

    Hier mal meine DLL:

    C
    #include <iostream>
    #include <Windows.h>
    #include <openvr.h>
    #include "Utils.h"
    
    
    
    using namespace std;
    
    vr::IVRSystem* vr_context;
    
    
    
    // VR Init
    
    extern "C" __declspec(dllexport) vr::IVRSystem* init_OpenVR()
    
    {
    
    vr::HmdError err;
    
    vr_context = vr::VR_Init(&err, vr::EVRApplicationType::VRApplication_Background);
    
    return vr_context;
    
    }
    
    
    
    
    // Versuche zu callen mit dem Rückgabewert von VR Init
    
    extern "C" __declspec(dllexport) void ProcessVREvents(vr::IVRSystem* Placeholder)
    
    {
    
    cout << Placeholder << endl;
    
    }
    Alles anzeigen


    Autoit:

    ;Hier der Call für die erste Funktion / Funktioniert auch Problemlos / Rückgabe sollte hier passen

    $aReturn = DllCall($hDLL, "ptr", "init_OpenVR")

    ;Hier nun der einfache Versuch die zweite Funktion zu callen mit Rückgabewert von oben als Parameter

    DllCall($hDLL, "NONE", "ProcessVREvents", "ptr", $aReturn[0])


    Resultat: Autoit stürzt ab : "Autoit v3 Script funktioniert nicht mehr"


    Freue mich auf jeglicher Art von Hilfe

  • Benötige Hilfe bei einem DLL - Call

    • Aaron3569
    • 23. Juni 2019 um 20:18

    Guten Abend,

    Ich bin nun schon etwas an einer Sache dran und würde mich sehr freuen wenn jemand mir "die Augen öffnen könnte"..

    Ich möchte eine eine DLL schreiben um mit OpenVR zu kommunizieren.

    Wem OpenVR nichts sagt: mithilfe von OpenVR lässt sich z.b. die Position der Controller bzw des VR Headsets auslesen.

    Nun möchte ich die Funktionen in einer DLL zusammenfassen und mit AutoIt callen, das funktioniert auch soweit.

    Das erste was man callen muss um weitere Funktionen der DLL nutzen zu können ist ein sogenannter : "VR_Init" ,

    VR_Init gibt ein Pointer zurück der benötigt wird um alle weiteren Funktionen nutzen zu können.

    Das heißt wenn ich jetzt in Autoit den ersten DLL Call mache, also: "VR_Init", dann bekomme ich den Pointer als Rückgabewert.

    Nun möchte ich eine weitere Function callen die diesen Pointer benötigt, also mache ich wieder einen DLL Call und gebe als Paramter den Pointer mit,.

    Nun das Problem: Autoit stürzt jedes mal ab, sobald ich eine entsprechende Funktion Calle, also eine Funktion die diesen Pointer als Parameter benötigt.

    Das Problem liegt wahrscheinlich daran das der Pointer auf eine Class zeigt, und Autoit mit dem Typ nichts anfangen kann oder?

    Würde mich sehr über eine Antwort freuen

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™