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

Beiträge von funkey

  • Listview Subitem handle oder Text auslesen bei besonderen Anzeigeeinstellungen

    • funkey
    • 19. September 2012 um 08:20

    ListviewItems haben afaik nur AutoIt-intern in von AutoIt erzeugten GUIs eine Control-ID. Das dient nur zum Erleichterten bedienen der Elemente. Diese ID kann auch nicht mit AutoIt v3 Window Info ausgelesen werden.

  • _ListView2HTMLTable

    • funkey
    • 18. September 2012 um 18:08

    Danke Oscar, sehr nette Funktion.
    Hat Ähnlichkeiten mit der Version aus meinem CSV-Editor, ist aber besser! :thumbup:

  • Mausposition innerhalb eines Fensters

    • funkey
    • 17. September 2012 um 16:55

    Danke für Antworten?
    Es gibt ja nicht mal eine Frage!
    Aber man kann im Window Info Tool unter Options den Coord Mode umschalten ;)

  • _StringWidth, Breite eines Labels herausfinden (vor dem Erstellen)

    • funkey
    • 15. September 2012 um 17:00

    Die gleiche Variante hab ich auch schon einige Male gesehen.
    Das ganze funktioniert so nur, wenn du die Schriftart nicht verändern willst, denn sonnst brauchst du noch GuiSetFont().
    Im englischen Forum und auch hier gibt es sicher über 10 Threads, die sich mit den Längen von Strings befassen.

  • TAB in Editbox

    • funkey
    • 14. September 2012 um 16:03

    Man muss im Edit-Feld nur Strg-Tab drücken. Das ist Standard-Windows Funktionalität. ;)

  • Hilfe mit UDP Broadcast

    • funkey
    • 13. September 2012 um 07:20

    Hey, danke! Die Idee war sehr gut! Das ganze läuft dank _Ws2_GetLocalPort() innerhalb von wenigen Sekunden durch.
    Aber leider bekomme ich nur auf Win7 nur Ports von 49153 bis 65534 und auf WinXP von 1026 bis 5000!? Auch mit #RequireAdmin. Schade.

    Eine Lösung könnte sein, die Daten direkt RAW ins Netzwerk zu schicken. Also in meinem Fall alle 50 Bytes, nur 8 davon sind ja im Datenpaket. nur leider weiß ich noch nicht wie.

  • UDP-Broadcast - Problem Source-Port

    • funkey
    • 12. September 2012 um 14:22

    Ist zwar schon länger her, hab aber hier eine Alternativlösung um den lokalen Port zu erhalten:

    Spoiler anzeigen
    [autoit]

    UDPStartup()

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

    Global $aSock = UDPOpen("255.255.255.255" , 17009, 1)
    UDPSend($aSock, "")

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

    Global $iPortLocal = _Ws2_GetLocalPort($aSock[1])
    ConsoleWrite($iPortLocal & @CRLF)

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

    Global $netstat = _getDOSOutput("netstat -aonp udp")
    Global $sourceport_array = StringSplit(StringMid($netstat, StringInStr($netstat, '*:*' & @AutoItPID)-5, 5), ':')
    Global $sourceport = $sourceport_array[$sourceport_array[0]]

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

    ConsoleWrite($sourceport & @CRLF)

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

    UDPCloseSocket($aSock)
    UDPShutdown()

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

    Func _Ws2_GetLocalPort($iSocket)
    ;funkey
    Local $hDLL = DllOpen("Ws2_32.dll")
    Local $tagIN_ADDR = "ulong S_addr;"
    Local $tagSOCKADDR_IN = "short sin_family;ushort sin_port;ptr sin_addr;char sin_zero[8];"
    Local $tIn_Addr = DllStructCreate($tagIN_ADDR)
    Local $tName = DllStructCreate($tagSOCKADDR_IN)
    DllStructSetData($tName, "sin_addr", DllStructGetPtr($tIn_Addr))

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

    Local $aRes = DllCall($hDLL, "int", "getsockname", "uint", $iSocket, "struct*", $tName, "int*", 512)
    Local $aRes2 = DllCall($hDLL, "ushort", "ntohs", "ushort", DllStructGetData($tName, 2))

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

    DllClose($hDLL)
    Return $aRes2[0]
    EndFunc

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False) & @CR
    If @error Then ExitLoop
    WEnd
    Return StringStripWS($text, 8) ;Modifiziert @ Homer J. S.
    EndFunc

    [/autoit]
  • Hilfe mit UDP Broadcast

    • funkey
    • 12. September 2012 um 13:16

    Hallo, danke für eure Antworten!
    @m-obi: Das werde ich später noch testen, aber dafür braucht man eben WinPcap, und das wollte ich nicht extra installieren.

    Homer J. S.: Die Suche habe ich benutzt, aber dieser Thread ist mir entgangen. Leider hilft mir das auch nicht, weil sich die Geräte anscheinend nur zurückmelden, wenn der Destination-Port der richtige ist. Also ich bekomme immer noch keine Antwort von den Geräten, auf keinem Port. Schade.

  • Anzeige in Symbolleiste

    • funkey
    • 12. September 2012 um 09:33

    Hab mal ein Beispiel von prog@ndy umgebaut.
    Das könnte man als Notlösung verwenden, ist aber nicht ganz ideal

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <GDIplus.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <Constants.au3>

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

    #region NotifyIcon Constants
    Select
    Case @OSBuild < 2195
    $tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[64];"
    Case Else
    $tagNOTIFYICONDATAW_TEMP = "DWORD cbSize; HWND hWnd; UINT uID; UINT uFlags; UINT uCallbackMessage; ptr hIcon; WCHAR szTip[128];" & _
    "DWORD dwState; DWORD dwStateMask; WCHAR szInfo[256]; UINT uTimeout; WCHAR szInfoTitle[64]; DWORD dwInfoFlags;"
    EndSelect

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

    Global Const $tagNOTIFYICONDATAW = $tagNOTIFYICONDATAW_TEMP
    Global Const $tagNOTIFYICONDATA = $tagNOTIFYICONDATAW

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

    Global Const $NIN_BALLOONSHOW = $WM_USER + 2
    Global Const $NIN_BALLOONHIDE = $WM_USER + 3
    Global Const $NIN_BALLOONTIMEOUT = $WM_USER + 4
    Global Const $NIN_BALLOONUSERCLICK = $WM_USER + 5

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

    Global Const $NIM_ADD = 0x00000000
    Global Const $NIM_MODIFY = 0x00000001
    Global Const $NIM_DELETE = 0x00000002
    Global Const $NIM_SETFOCUS = 0x00000003
    Global Const $NIM_SETVERSION = 0x00000004

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

    Global Const $NIF_MESSAGE = 0x00000001
    Global Const $NIF_ICON = 0x00000002
    Global Const $NIF_TIP = 0x00000004
    Global Const $NIF_STATE = 0x00000008
    Global Const $NIF_INFO = 0x00000010
    Global Const $NIF_GUID = 0x00000020
    Global Const $NIF_REALTIME = 0x00000040
    Global Const $NIF_SHOWTIP = 0x00000080

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

    Global Const $NIS_VISIBLE = 0x00000000
    Global Const $NIS_HIDDEN = 0x00000001
    Global Const $NIS_SHAREDICON = 0x00000002

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

    Global Const $NIIF_NONE = 0x00000000
    Global Const $NIIF_INFO = 0x00000001
    Global Const $NIIF_WARNING = 0x00000002
    Global Const $NIIF_ERROR = 0x00000003
    Global Const $NIIF_USER = 0x00000004
    Global Const $NIIF_NOSOUND = 0x00000010
    Global Const $NIIF_LARGE_ICON = 0x00000010
    Global Const $NIIF_RESPECT_QUIET_TIME = 0x00000080
    Global Const $NIIF_ICON_MASK = 0x0000000F

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

    Global Const $WM_TRAYICONPROC = $WM_USER + 100

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

    Global Const $HWND_For_TrayNotifications = GUICreate(@ScriptName & "TrayMsgWin", 1, 1, 0, 0, 0, 0, -3)
    #endregion NotifyIcon Constants

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

    ; function to add / modify / delete NotfyIcon
    Func _Shell_NotifyIcon($dwMessage, ByRef $lpdata)
    ; Prog@ndy
    Local $ptr
    If IsDllStruct($lpdata) Then
    $ptr = DllStructGetPtr($lpdata)
    Else
    $ptr = Ptr($lpdata)
    EndIf
    Local $result = DllCall("shell32.dll", "int", "Shell_NotifyIconW", "dword", $dwMessage, "ptr", $ptr)
    If @error Then Return SetError(1, @error, 0)
    Return SetError($result[0] = 0, 0, $result[0])
    EndFunc ;==>_Shell_NotifyIcon

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

    ; function to create an Icon from a GDIplus-Bitmap
    Func _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
    ; Prog@ndy
    Local $result = DllCall($ghGDIPDLL, "int", "GdipCreateHICONFromBitmap", "ptr", $hBitmap, "ptr*", 0)
    If @error Then Return SetError(1, @error, 0)
    Return SetError($result[0], 0, $result[2])
    EndFunc ;==>_GDIPlus_BitmapCreateHICONFromBitmap

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

    ; Ereignisse für die TrayIcons
    GUIRegisterMsg($WM_TRAYICONPROC, "TRAYICONPROC")

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

    ; GDIPlus starten
    _GDIPlus_Startup()

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

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics(16, 16, $hGraphics)
    _GDIPlus_GraphicsDispose($hGraphics)

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

    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hBitmap)

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

    Global $hBrushText = _GDIPlus_BrushCreateSolid(0xFF000000)
    Global $BrushBackground = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $BrushBackground)

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

    Global $hFormat = _GDIPlus_StringFormatCreate()
    Global $hFontFamily = _GDIPlus_FontFamilyCreate("Arial")
    Global $hFont = _GDIPlus_FontCreate($hFontFamily, 10, 0)
    Global $tLayout = _GDIPlus_RectFCreate()

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

    Global $sLauftext = StringFormat("%s:%s:%s", @HOUR, @MIN, @SEC)

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

    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sLauftext, $hFont, $tLayout, $hFormat)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sLauftext, $hFont, $aInfo[0], $hFormat, $hBrushText)

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

    OnAutoItExitRegister("OnAutoItExit")

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

    $hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap) ; Icon aus Bitmap erstellen

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

    $ICON_ID = 333

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

    $NOTIFYICONDATAW = DllStructCreate($tagNOTIFYICONDATAW) ; Daten für das Icon
    DllStructSetData($NOTIFYICONDATAW, 1, DllStructGetSize($NOTIFYICONDATAW))
    DllStructSetData($NOTIFYICONDATAW, "hWnd", $HWND_For_TrayNotifications)
    DllStructSetData($NOTIFYICONDATAW, "uID", $ICON_ID) ; ID für das Icon
    DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP, $NIF_MESSAGE)) ; welche Eigenschaften sollen gesetzt werden
    DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon) ; Icon-Handle setzen
    DllStructSetData($NOTIFYICONDATAW, "szTip", $sLauftext) ; Tooltip setzen
    DllStructSetData($NOTIFYICONDATAW, "uCallbackMessage", $WM_TRAYICONPROC) ; die WindowMessage zum Empfangen von Ereignissen festelgen

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

    _Shell_NotifyIcon($NIM_ADD, $NOTIFYICONDATAW) ; Das Icon erzeugen

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

    _WinAPI_DestroyIcon($hIcon) ; Das Icon wieder löschen. Das TrayIcon hat eine Kopie davon erhalten.
    DllStructSetData($NOTIFYICONDATAW, "uFlags", BitOR($NIF_ICON, $NIF_TIP)) ; Die gleiche Struktur wird später auch verwendet, aber nur, um
    ; das Icon und den tooltip zu ändern.

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

    AdlibRegister("_Marquee", 50)

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

    While 1
    Sleep(23000)
    WEnd

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

    Func OnAutoItExit()
    AdlibUnRegister()
    ; Aufräumen
    _Shell_NotifyIcon($NIM_DELETE, $NOTIFYICONDATAW) ; das TrayIcon löschen
    ; GDIPlus freigeben
    _GDIPlus_BrushDispose($BrushBackground)
    _GDIPlus_BrushDispose($hBrushText)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFontFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()
    EndFunc ;==>OnAutoItExit

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

    Func _Marquee()
    Local Static $x = 0, $Text = $sLauftext
    $x -= 1
    _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 16, 16, $BrushBackground)

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

    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $Text, $hFont, $tLayout, $hFormat)
    If $x <= -DllStructGetData($aInfo[0], 3) + 4 Then
    $x = 16
    $Text = $sLauftext
    DllStructSetData($NOTIFYICONDATAW, "szTip", $Text)
    EndIf
    DllStructSetData($aInfo[0], 1, $x)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $Text, $hFont, $aInfo[0], $hFormat, $hBrushText)

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

    ; Das Icon erzeugen
    $hIcon = _GDIPlus_BitmapCreateHICONFromBitmap($hBitmap)
    ; Das Icon setzen
    DllStructSetData($NOTIFYICONDATAW, "hIcon", $hIcon)
    ; Das TrayIcon erhält eine Kopie.
    _Shell_NotifyIcon($NIM_MODIFY, $NOTIFYICONDATAW)
    ; Das Icon löschen
    _WinAPI_DestroyIcon($hIcon)
    EndFunc ;==>_Marquee

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

    Func TRAYICONPROC($hwnd, $uMsg, $wParam, $lParam)
    ; Ereignisse für das TrayIcon
    Local $uTrayMsg = _WinAPI_LoWord($lParam)
    Local $nID = _WinAPI_HiWord($lParam)
    Switch $uTrayMsg
    Case $NIN_BALLOONSHOW
    ConsoleWrite("Balloon show" & @CRLF)
    Case $NIN_BALLOONHIDE
    ConsoleWrite("Balloon hide" & @CRLF)
    Case $NIN_BALLOONTIMEOUT
    ConsoleWrite("Balloon timeout" & @CRLF)
    Case $NIN_BALLOONUSERCLICK
    ConsoleWrite("Balloon userclick" & @CRLF)
    Case $WM_LBUTTONUP
    ConsoleWrite("left mousebutton Up" & @CRLF)
    Case $WM_RBUTTONUP
    ConsoleWrite("right mousebutton Up" & @CRLF)
    Case $WM_LBUTTONDOWN
    ConsoleWrite("left mousebutton Down, set new value" & @CRLF)
    $sLauftext = StringFormat("%s:%s:%s", @HOUR, @MIN, @SEC)
    Case $WM_RBUTTONDOWN
    ConsoleWrite("right mousebutton Down" & @CRLF)
    Case $WM_CONTEXTMENU
    ConsoleWrite("Context Menu" & @CRLF)
    Case $WM_LBUTTONDBLCLK
    ConsoleWrite("left mousebutton doubleclick" & @CRLF)
    Exit
    EndSwitch
    Return _WinAPI_DefWindowProc($hwnd, $uMsg, $wParam, $lParam)
    EndFunc ;==>TRAYICONPROC

    [/autoit]
  • Internes Control - Status setzen

    • funkey
    • 11. September 2012 um 20:35

    OK. Ich mache es dann aber meistens so:

    [autoit]

    Local $aResult = DllCall("user32.dll", "hwnd", "GetWindow", "hwnd", $_hCtrl, "uint", 5) ; 5 = $GW_CHILD

    [/autoit]


    Außerdem sollte

    [autoit]

    If Not IsDeclared("GW_CHILD") Then Global Const $GW_CHILD = 5

    [/autoit]


    funktionieren, tut es aber nicht!? Es kommt die 'previously declared' Meldung!

  • Internes Control - Status setzen

    • funkey
    • 11. September 2012 um 20:19

    Kann man sicher mal brauchen, danke. Für die 'Magic Number' 5 solltest du vielleicht $GW_CHILD verwenden, damit das ganze leichter verständlich wird.

  • Vorbereitung auf zu erwartende Änderung in neuer AutoIt-Version

    • funkey
    • 11. September 2012 um 20:00

    Da gibt es viele Anwendungsgebiete dafür. Ambesten du liest dir das ganze im englischen Forum ab hier oder so durch:
    http://www.autoitscript.com/forum/topic/13…_40#entry979069

  • Vorbereitung auf zu erwartende Änderung in neuer AutoIt-Version

    • funkey
    • 11. September 2012 um 19:50

    Ich begrüße jede Weiterentwicklung von AutoIt. Wenn ich länger was mit C mache, dann vergesse ich bereits jetzt die $-Zeichen in AutoIt. Ich werde das neue Feature immer einsetzen, sobald eine neue Stable damit herauskommt.

    Ich dachte, $a und a sollten komplett unterschiedliche Variablen sein? Ansonsten kommt es sicher zu Verwirrungen.

  • Hilfe mit UDP Broadcast

    • funkey
    • 11. September 2012 um 18:42

    Hallo,
    ich habe eine Software, die verschiedene Modbus/TCP-Server im Netzwerk finden kann. Diese Funktionalität hätte ich gerne in AutoIt nachgebaut, nur eben bisher ohne Erfolg.
    Ich habe Wireshark benutzt um zu sehen wie das Programm das macht. Und zwar wird via UDP-Broadcast eine 8-Byte Meldung an 255.255.255.255 geschickt. Danach melden sich die einzelnen Geräte nacheinander und schicken ihre Konfiguration (IP, Subnet, Gateway) und ihre Produktnummer zurück. Der PC hat den Port 17009, das Modbus-Gerät 17008.
    Wenn ich nun das ganze mit AutoIt versuche, dann ist der ausgehende Port immer ein anderer, deswegen vermute ich, dass ich nichts von den Geräten zurückerhalte. Kann ich irgendwie den ausgehenden Port bestimmen? Mit UDPBind scheint es nicht zu funktionieren.

    Hier noch eines meiner Test-Versuchsskripte:

    Spoiler anzeigen
    [autoit]

    UDPStartup()

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

    Global $ThisPCIP = @IPAddress1

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

    Global $aSocket2 = UDPBind($ThisPCIP, 17009)
    If @error <> 0 Then
    ConsoleWrite("error opening $aSocket2, @error = " & @error & @CRLF)
    Exit
    EndIf

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

    Global $ThatPCIP = "255.255.255.255" ;broadcast

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

    Global $aSocket = UDPOpen($ThatPCIP, 17008, 1)
    If @error <> 0 Then
    ConsoleWrite("error opening $socket" & @CRLF)
    Exit
    EndIf

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

    If UDPSend($aSocket, Binary("0x3101FFFFFFFFFFFF")) = 0 Then
    MsgBox(0, "ERROR", "Error while sending UDP message: " & @error)
    Exit
    EndIf

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

    $data = UDPRecv($aSocket2, 512)
    If $data <> "" Then
    MsgBox(0, "UDP DATA", $data, 1)
    EndIf

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

    UDPCloseSocket($aSocket)
    UDPCloseSocket($aSocket2)
    UDPShutdown()

    [/autoit]

    Hat irgendwer eine Idee, oder zumindest mehr Erfahrung damit? Muss ich die Funktionen aus Ws2_32.dll wrappen, um zum Ziel zu gelangen?

    Danke für eure Hilfe!

  • Dll erstellen und mit AutoIt nutzen - FreeBasic Tutorial

    • funkey
    • 8. September 2012 um 20:21

    Danke progandy für die Erinnerung, das vergesse ich immer wieder.

  • Dll erstellen und mit AutoIt nutzen - FreeBasic Tutorial

    • funkey
    • 7. September 2012 um 13:13

    Ich hätte das so gemacht:

    AutoIt
    [autoit]

    Global $strdll = "Freebasic_DLL.dll"

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

    $hDll = DllOpen($strdll)

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

    $a = DllStructCreate("double;double;double;double")

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

    $ptrA = DllStructGetPtr($a)
    $aRet= DllCall($hDll, "none", "f_inTest", "double", 1,"double", 2,"double", 3,"double", 4, "ptr", $ptrA)

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

    ConsoleWrite(DllStructGetData($a, 1) & @CRLF)
    ConsoleWrite(DllStructGetData($a, 2) & @CRLF)
    ConsoleWrite(DllStructGetData($a, 3) & @CRLF)
    ConsoleWrite(DllStructGetData($a, 4) & @CRLF)

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

    $b = DllStructCreate("double;double;double;double")
    $ptrB = DllStructGetPtr($b)
    $arrPtrB = DllCall($hDll, "none", "f_Test", "ptr", $ptrA, "ptr", $ptrB)

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

    ConsoleWrite(DllStructGetData($b, 1) & @CRLF)
    ConsoleWrite(DllStructGetData($b, 2) & @CRLF)
    ConsoleWrite(DllStructGetData($b, 3) & @CRLF)
    ConsoleWrite(DllStructGetData($b, 4) & @CRLF)

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

    DllClose($hDll)

    [/autoit]
    Freebasic_DLL
    Code
    Extern "Windows-MS"
    
    
    TYPE testtype
        x1 AS DOUBLE
        x2 AS DOUBLE
        x3 AS DOUBLE
        x4 AS DOUBLE
    END TYPE
    
    
    SUB f_inTest(BYVAL y1 AS DOUBLE, BYVAL y2 AS DOUBLE, BYVAL y3 AS DOUBLE, BYVAL y4 AS DOUBLE, ByRef z AS testtype) Export
        z.x1 = y1 + 1
        z.x2 = y2 + 1
        z.x3 = y3 + 1
        z.x4 = y4 + 1
        'RETURN z
    END Sub 
    
    
    SUB f_Test(BYREF z1 AS testtype, BYREF z2 AS testtype)   Export
        z2.x1 = z1.x1 - 1
        z2.x2 = z1.x2 - 1
        z2.x3 = z1.x3 - 1
        z2.x4 = z1.x4 - 1
        'RETURN z2
    END Sub 
    
    
    END Extern
    Alles anzeigen
  • GUICtrlGetState gibt 0 zurück

    • funkey
    • 7. September 2012 um 07:09

    Bei MenuItems wird der State mir GuiCtrlRead ausgelesen.

    [autoit]

    #include <GUIConstantsEx.au3>

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

    $hGui = GUICreate('Test', 600, 400)
    $idButton = GUICtrlCreateButton('test', 10, 10, 100, 20)

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

    $cContext = GUICtrlCreateContextMenu($idButton)
    $cTest = GUICtrlCreateMenuItem("blabla", $cContext)

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

    GUISetState()

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

    MsgBox(0, 'Test', BitAND(GUICtrlRead($cTest), $GUI_ENABLE) = $GUI_ENABLE)

    [/autoit]
  • Dll erstellen und mit AutoIt nutzen - FreeBasic Tutorial

    • funkey
    • 6. September 2012 um 10:29
    Zitat von Strahleman


    habs jetzt hinbekommen, dass über ByRef die ermittelte Struktur an Autoit übergeben wird. Aber kann ich auch diese erstellten Strukturen wieder von Autoit an die DLL zur Weiterverarbeitung zurückübergeben und eine neu berechnete Struktur dann von der DLL erhalten?

    Natürlich kann man das. Einfach Struktur erstellen (DllStructCreate) und den Pointer der Funktion übergeben (DllStructGetPtr).
    Und wenn du von einer Funktion einen Pointer erhältst, dann kannst du diesen auch gleich direkt der nächsten Funktion übergeben.

  • Dll erstellen und mit AutoIt nutzen - FreeBasic Tutorial

    • funkey
    • 4. September 2012 um 22:48

    Alles was nicht dem Standard entspricht, muss in AutoIt ein Pointer zu einer DLLStruct sein. Am besten ist dann aber auch nicht direkt den Rückgabewert zu verwenden, sondern z.B. den ersten oder letzten Parameter ByRef zu übergeben. Dann hast du auch keine Probleme mit dem 'wer allokiert den Speicher und wer gibt ihn wieder frei'.

  • GUI erstellen (mit Spezialanforderungen)

    • funkey
    • 4. September 2012 um 20:48

    Hier eine UDF zum Durchklicken von progandy:
    [ gelöst ] On Top, durchsichtige und trotzdem durchklicken?


    Edit: Mal ein kleines 'fieses' Beispiel ;)

    Spoiler anzeigen
    [autoit]

    ;### UDF Start
    #include-once
    #include <Winapi.au3>
    #include <WindowsConstants.au3>

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

    If Not IsDeclared("GWL_EXSTYLE") Then Global $GWL_EXSTYLE = -20

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

    ;===============================================================================
    ;
    ; Function Name: _Win_SetClickThrough($hWnd,$noclic = True)
    ; Description:: Makes a window to not receive mouse input
    ; Parameter(s): $title -> Title or hWnd of Window
    ; $text [Optional] -> Text in Window
    ; $noclic [Optional] -> If False, the window regains MouseInput otherwise it will loose it, defalut: True
    ; Requirement(s): <WINApi.au3>
    ; Return Value(s): Success: 1, Error0 and @error
    ; @error Values: 1 -> Window does not exist
    ; 2 -> Error in Setting the Styles
    ; Author(s): Prog@ndy
    ;
    ;===============================================================================
    ;
    Func _Win_SetClickThrough($title, $text = "", $noclic = True)
    Local $hWnd = WinGetHandle($title, $text)
    If @error Then Return SetError(1, 0, 0)
    If $noclic Then
    _WinAPI_SetWindowLong($hWnd, $GWL_EXSTYLE, BitOR(_WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE), $WS_EX_TRANSPARENT))
    If @error Then Return SetError(2, 0, 0)
    WinSetTrans($hWnd, "", 255) ; Sets the Layered Attribute, but still shows the window :)
    If @error Then Return SetError(2, 0, 0)
    Else
    _WinAPI_SetWindowLong($hWnd, $GWL_EXSTYLE, BitAND(_WinAPI_GetWindowLong($hWnd, $GWL_EXSTYLE), BitNOT($WS_EX_TRANSPARENT)))
    If @error Then Return SetError(2, 0, 0)
    EndIf
    Return 1
    EndFunc ;==>_Win_SetClickThrough
    ;### UDF END

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

    Global $hGui = GUICreate("", 120, 20, @DesktopWidth - 120, 0, $WS_POPUP, $WS_EX_TOPMOST)
    GUISetBkColor(0xFF0000)
    GUICtrlCreateLabel("Klick mich ;", 0, 0, 120, 20, 0x201)

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

    GUISetState()

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

    _Win_SetClickThrough($hGui)

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

    Do
    Until GUIGetMsg() = -3

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

    _Win_SetClickThrough($hGui, "", 0)

    [/autoit]

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™