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

Beiträge von eukalyptus

  • 2 Cursor Positionen in SciTE

    • eukalyptus
    • 14. November 2020 um 20:27

    Eigentlich ein cooles Feature!

    Tja - Ich bin wohl doch schon etwas aus der Übung! 8)

  • 2 Cursor Positionen in SciTE

    • eukalyptus
    • 14. November 2020 um 20:09

    Ahh! Danke!

    Das hilft schonmal enorm zu wissen, dass es die STRG Taste ist.

    Keine Katze - wahrscheinlich ein pöser Geist :)

    thx

  • 2 Cursor Positionen in SciTE

    • eukalyptus
    • 14. November 2020 um 19:40

    Hallo Allerseits!

    Seit kurzem nervt mich folgendes Phänomen:

    Hin und wieder hab ich plötzlich 2 Cursor in SciTE, welche gleichzeitig in unterschiedlichen Zeilen schreiben.

    Egal, ob das nun ein nützliches Feature sei, oder seit Urzeiten schon so funktioniert - ich würde das gerne abstellen.

    Vielleicht kann mir ja jemand sagen, wodurch dieses Feature getriggert wird u wie ich es deaktivieren kann.

    Hier ein kurzes Video dazu: Untitled.7z

    Vielen Dank!

  • Frame aus Video extrahieren

    • eukalyptus
    • 23. März 2020 um 11:38

    Frames ohne Umweg über die Festplatte:

    C
    #include <GDIPlus.au3>
    #include <Memory.au3>
    #include <Array.au3>
    #include <Date.au3>
    
    
    _FFMPEG_Test("test.mp4", 3000, 5)
    
    Func _FFMPEG_Test($sFile, $iOffset = 0, $iFrames = 1, $iW = -1, $iH = -1)
        Local Const $tagBITMAPFILEHEADER = "struct;align 2;word bfType;dword bfSize;word bfReserved1;word bfReserved2;dword bfOffBits;endstruct;"
    
        Local $tBMPHEADER = DllStructCreate($tagBITMAPFILEHEADER & $tagBITMAPINFO)
        Local $tBMPHEADER_B = DllStructCreate("byte[" & DllStructGetSize($tBMPHEADER) & "];", DllStructGetPtr($tBMPHEADER))
    
        Local $sCMD = 'ffmpeg -y'
    
        If $iOffset Then
            Local $_iH, $_iM, $_iS
            _TicksToTime($iOffset, $_iH, $_iM, $_iS)
            $iOffset = Mod($iOffset, 1000)
            Local $sOffset = StringFormat("%02s:%02s:%02s.%03s", $_iH, $_iM, $_iS, $iOffset)
            $sCMD &= ' -ss ' & $sOffset
        EndIf
        $sCMD &= ' -i "' & $sFile & '"'
    
        If $iW > 1 Or $iH > 1 Then $sCMD &= ' -vf "scale=' & $iW & ':' & $iH & '"'
    
        $sCMD &= ' -vframes ' & $iFrames & ' -update true -vcodec bmp -pix_fmt bgra -f image2 -'
    
        ConsoleWrite("> CMD: " & $sCMD & @CRLF)
    
        Local $aBMP[$iFrames + 1][3] = [[0]]
        Local $bData, $bTmp, $sErr, $iLen
        Local $hPID = Run($sCMD, @ScriptDir, @SW_HIDE, BitOR(0x2, 0x4))
        While 1
            $bTmp = StdoutRead($hPID, False, True)
            If @error Then ExitLoop
    
            If BinaryLen($bTmp) Then
                $bData = Binary($bData & $bTmp)
    
                While 1
                    DllStructSetData($tBMPHEADER_B, 1, $bData)
    
                    $iLen = BinaryLen($bData)
                    If $iLen < $tBMPHEADER.bfSize Then ExitLoop
    
                    $aBMP[0][0] += 1
                    If $aBMP[0][0] >= UBound($aBMP) Then ReDim $aBMP[$aBMP[0][0] + 1][3]
                    $aBMP[$aBMP[0][0]][0] = BinaryMid($bData, 1, $tBMPHEADER.bfSize)
                    $aBMP[$aBMP[0][0]][1] = $tBMPHEADER.biWidth
                    $aBMP[$aBMP[0][0]][2] = $tBMPHEADER.biHeight
    
                    $bData = BinaryMid($bData, $tBMPHEADER.bfSize + 1, $iLen)
                WEnd
            EndIf
    
            $sErr = StderrRead($hPID)
            If $sErr Then ConsoleWrite($sErr)
    
            Sleep(10)
        WEnd
    
        _ArrayDisplay($aBMP)
    
    
        _GDIPlus_Startup()
        Local $iData, $hData, $pData, $tData, $pStream, $hImage
        For $i = 1 To $aBMP[0][0]
            $iData = BinaryLen($aBMP[$i][0])
            $hData = _MemGlobalAlloc($iData, $GMEM_MOVEABLE)
            $pData = _MemGlobalLock($hData)
            $tData = DllStructCreate("byte[" & $iData & "]", $pData)
            DllStructSetData($tData, 1, $aBMP[$i][0])
            _MemGlobalUnlock($hData)
            $pStream = _WinAPI_CreateStreamOnHGlobal($hData)
    
            $hImage = _GDIPlus_ImageLoadFromStream($pStream)
            _GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\_test_" & StringFormat("%02s", $i) & ".png")
    
            _WinAPI_ReleaseStream($pStream)
            _GDIPlus_ImageDispose($hImage)
        Next
        _GDIPlus_Shutdown()
    
    EndFunc   ;==>_FFMPEG_Test
    Alles anzeigen

    lgE

  • Mehr Daten, als Partition groß ist! wtf...

    • eukalyptus
    • 20. März 2020 um 10:26

    Vielen Dank!

    Ich finde Gefallen an Hardlinks.

    Z.B. hab ich ca 25 ffmpeg.exe verstreut und das sind in Summe 1.5GB

    So kann ich mir jetzt etwas zusätzlichen Platz schaffen :thumbup:

  • Mehr Daten, als Partition groß ist! wtf...

    • eukalyptus
    • 18. März 2020 um 15:31

    Das is es!

    Es sind Hardlinks!

    Kannte ich bis jetzt nicht wirklich.

    NTFSLinksView kann das anzeigen.

    Desweiteren hab ich entdeckt, dass man mit "mklink" ganz einfach HardLinks erstellen kann.

    Vielen Dank

  • Mehr Daten, als Partition groß ist! wtf...

    • eukalyptus
    • 18. März 2020 um 13:15

    Wow Danke für das Tool!

    Cache.png

    Sofort ins Auge fällt, dass hier 3 gleich aussehende, riesige Blöcke angezeigt werden.

    Es handelt sich hier um die Cache-Speicher von 3 fast identischen Videoprojekten (nur die Reihenfolge der Clips sind unterschiedlich, der Cache ist immer gleich).

    Heißt das nun, dass NTFS doppelte Dateien nur einmal speichert!?

  • Mehr Daten, als Partition groß ist! wtf...

    • eukalyptus
    • 18. März 2020 um 12:38

    Hallo Allerseits!

    Ich hab folgendes, seltsames Phänomen.

    Ich hab eine Partition NTFS formatiert, welche 807GB groß ist. Davon sind laut Eigenschaften 708GB belegt. So weit so gut!

    Wenn ich nun im Explorer alle Dateien und Ordner markiere und mir die Eigenschaften anzeigen lasse, habe ich 954GB Daten gespeichert.

    Also mehr gespeichert, als eigentlich Platz hat.

    ChkDsk meldet keine Fehler.

    Data.png

    Hier noch eine Anzeige in Linux:

    Data2.png

    Kann mir das bitte jemand erklären.

    Vielen Dank!

  • FaceDetection UDF

    • eukalyptus
    • 25. Juni 2019 um 09:54

    Ich hab ein BUG gefunden: siehe 1 Post!

  • FaceDetection UDF

    • eukalyptus
    • 24. Juni 2019 um 06:45

    That´s cool!

    I quick added a control window, to test the parameters

    C
    #include "FaceDetection.au3"
    #include <GUIConstantsEx.au3>
    ;#include <Array.au3>
    
    ;HotKeySet("{ESC}", "_Exit")
    Opt("GUIOnEventMode", 1)
    
    
    Global $Width = 640, $Height = 480, $hGraphics
    ;--------------------------------------------------------------------------
    ; variables required for dshow escapi
    Local $tagSimpleCapParams = "ptr mTargetBuf;" & "int mWidth;" & "int mHeight;"
    Local $tSimpleCapParams = DllStructCreate($tagSimpleCapParams)
    Local $tTargetBuf = DllStructCreate("BYTE[" & $Width*$Height*4 & "]")
    Global $pTargetBuf = DllStructGetPtr($tTargetBuf)
    DllStructSetData($tSimpleCapParams, 1, $pTargetBuf)
    DllStructSetData($tSimpleCapParams, 2, $Width)
    DllStructSetData($tSimpleCapParams, 3, $Height)
    Local $pSimpleCapParams = DllStructGetPtr($tSimpleCapParams)
    Local $device = 0 ;change this number to select dshow device
    
    ;---------------------------------------------------------------------------
    ;Escapi init
    Global $hGui = GUICreate("WebCam FaceDetection", $Width, $Height)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState(@SW_SHOW,$hGui)
    
    Global $hGui_Ctrl = GUICreate("Ctrl", 320, 240, 10, 10, -1, -1, $hGui)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    
    Global $iMode = 1, $fScale = 1.2, $iNeighbor = 1, $iMinObjW = 20, $iMaxObjW = 0, $bDoLM = True
    
    Global $cRB_Mode = GUICtrlCreateRadio("Mode 1", 10, 10, 60, 20)
    GUICtrlSetOnEvent(-1, "_SetMode")
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateRadio("Mode 2", 80, 10, 60, 20)
    GUICtrlSetOnEvent(-1, "_SetMode")
    GUICtrlCreateRadio("Mode 3", 150, 10, 60, 20)
    GUICtrlSetOnEvent(-1, "_SetMode")
    GUICtrlCreateRadio("Mode 4", 230, 10, 60, 20)
    GUICtrlSetOnEvent(-1, "_SetMode")
    
    GUICtrlCreateLabel("Scale", 5, 40, 60, 20)
    GUICtrlCreateSlider(70, 40, 180, 20)
    GUICtrlSetLimit(-1, 50, 11)
    GUICtrlSetData(-1, 12)
    GUICtrlSetOnEvent(-1, "_SetScale")
    Global $cIP_Scale = GUICtrlCreateInput("1.2", 260, 40, 50, 20, 0x0800)
    
    GUICtrlCreateLabel("Min Neighb", 5, 70, 60, 20)
    GUICtrlCreateSlider(70, 70, 180, 20)
    GUICtrlSetOnEvent(-1, "_SetNeighbor")
    GUICtrlSetLimit(-1, 20)
    GUICtrlSetData(-1, 1)
    Global $cIP_MinN = GUICtrlCreateInput("1", 260, 70, 50, 20, 0x0800)
    
    GUICtrlCreateLabel("Min ObjW", 5, 100, 60, 20)
    GUICtrlCreateSlider(70, 100, 180, 20)
    GUICtrlSetOnEvent(-1, "_SetMinObjW")
    GUICtrlSetLimit(-1, 400)
    GUICtrlSetData(-1, 20)
    Global $cIP_MinW = GUICtrlCreateInput("20", 260, 100, 50, 20, 0x0800)
    
    GUICtrlCreateLabel("Max ObjW", 5, 130, 60, 20)
    GUICtrlCreateSlider(70, 130, 180, 20)
    GUICtrlSetOnEvent(-1, "_SetMaxObjW")
    GUICtrlSetLimit(-1, 400)
    Global $cIP_MaxW = GUICtrlCreateInput("0", 260, 130, 50, 20, 0x0800)
    
    GUICtrlCreateCheckbox("Do LandMarks", 10, 160, 100, 20)
    GUICtrlSetOnEvent(-1, "_SetLandMark")
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUISetState()
    
    local $_escapi_Dll = DllOpen("escapi.dll")
    $return = DllCall($_escapi_Dll,"int","initCOM")
    $return = DllCall($_escapi_Dll,"int","countCaptureDevices")
    ;Consolewrite("Number of devices = " & $return[0] & @CRLF)
    $return = DllCall($_escapi_Dll,"int:cdecl","initCapture", "int", $device, "ptr", $pSimpleCapParams)
    ;---------------------------------------------------------------------------
    _GDIPlus_Startup()
    
    
    
    
    
    While 1
    $hGfx = _GDIPlus_GraphicsCreateFromHWND($hGui)
    ;Get frame
    DllCall($_escapi_Dll,"none:cdecl","doCapture", "int", $device)
    Do
    $return = DllCall($_escapi_Dll,"int:cdecl","isCaptureDone", "int", $device)
    Until $return[0] = 1
    
    $hBitmap = _WinAPI_CreateBitmap($Width, $Height , 1 , 32 , $pTargetBuf)
    Local $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
    $hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
    
    Global $hPen = _GDIPlus_PenCreate(0xAAFF0000, 2)
    Global $hPen2 = _GDIPlus_PenCreate(0xAA00FF00, 1)
    
    Global $aFaces = _FD_Detect($hImage, $iMode, $fScale, $iNeighbor, $iMinObjW, $iMaxObjW, $bDoLM)
    For $i = 1 To $aFaces[0][0]
        _GDIPlus_GraphicsDrawRect($hGraphics, $aFaces[$i][0], $aFaces[$i][1], $aFaces[$i][2], $aFaces[$i][3], $hPen)
        If $bDoLM And UBound($aFaces, 2) > 6 Then
            For $j = 0 To 67
                _GDIPlus_GraphicsDrawEllipse($hGraphics, $aFaces[$i][6 + $j * 2], $aFaces[$i][7 + $j * 2], 4, 4, $hPen2)
            Next
        EndIf
    Next
    
    _GDIPlus_GraphicsDrawImageRect($hGfx, $hImage, 0, 0, $Width, $Height)
    
    Sleep(10) ; <---- needed or your webcam will run glowing hot.
    
    _GDIPlus_BitmapDispose($hImage)
    _WinAPI_DeleteObject($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_PenDispose($hPen2)
    WEnd
    
    
    
    
    Func _SetMode()
        $iMode = @GUI_CtrlId - $cRB_Mode + 1
    EndFunc
    
    Func _SetScale()
        $fScale = GUICtrlRead(@GUI_CtrlId) / 10
        GUICtrlSetData($cIP_Scale, $fScale)
    EndFunc
    
    Func _SetNeighbor()
        $iNeighbor = GUICtrlRead(@GUI_CtrlId)
        GUICtrlSetData($cIP_MinN, $iNeighbor)
    EndFunc
    
    Func _SetMinObjW()
        $iMinObjW = GUICtrlRead(@GUI_CtrlId)
        GUICtrlSetData($cIP_MinW, $iMinObjW)
    EndFunc
    
    Func _SetMaxObjW()
        $iMaxObjW = GUICtrlRead(@GUI_CtrlId)
        GUICtrlSetData($cIP_MaxW, $iMaxObjW)
    EndFunc
    
    Func _SetLandMark()
        $bDoLM = (GUICtrlRead(@GUI_CtrlId) = 1)
    EndFunc
    
    
    
    ;--------------------------------------------------------------------------
    Func _Exit()
       _GDIPlus_PenDispose($hPen)
       _GDIPlus_GraphicsDispose($hGfx)
       _GDIPlus_ImageDispose($hImage)
       _GDIPlus_Shutdown()
       DllCall($_escapi_Dll,"none:cdecl","deinitCapture", "int", 0)
       GUIDelete($hGui)
       Exit
    EndFunc
    
    ;-----------------------------------------------------------------
    Alles anzeigen
  • FaceDetection UDF

    • eukalyptus
    • 23. Juni 2019 um 17:18

    Hallo Allerseits!

    Auf der Suche nach einer Möglichkeit, Gesichter zu erkennen, bin ich über das hier gestolpert: https://github.com/ShiqiYu/libfacedetection

    Und daraus ist vorerst mal eine kleine UDF entstanden.

    Funktioniert mit 32 und 64Bit.

    Ich hab selber noch nicht viel ausprobiert und kann daher auch nicht viel über die Parameter sagen - am besten mit großen und kleinen, vielen und wenigen usw... Gesichtern ausprobieren.

    Trotzdem viel Spaß!


    LandMarks:

    LandMarks.jpeg


    EDIT: Bugs behoben!

    Dateien

    FaceDetect.7z 2,62 MB – 1.018 Downloads
  • GDI+ Lightning / Blitz Effekt

    • eukalyptus
    • 18. Mai 2017 um 20:23

    Danke für euer Feedback!

  • GDI+ Lightning / Blitz Effekt

    • eukalyptus
    • 17. Mai 2017 um 22:00

    Hallo liebe Freunde der brotlosen Kunst.

    Selten, aber doch mach ich noch was mit AutoIt.

    inspiriert von dem hier: https://gamedevelopment.tutsplus.com/tutorials/how-…s--gamedev-2681
    hab ich versucht das nachzubasteln. Das Resultat ist zwar ein anderes, aber dennoch ergeben sich ganz hübsche Effekte.

    Lightning1.pngLightning2.pngLightning3.pngLightning4.png


    Download: Lightning.7z


    Viel Spaß!
    E

  • GDI+ Rotating Earth build 2017-03-17

    • eukalyptus
    • 22. März 2017 um 09:16

    Sehr schönes Script!

    deaktiviere mal die Drawfunktion der Erde und lass nur die Wolken anzeigen -> aus diesem Effekt kann man bestimmt nochwas machen.

    evtl kannst du die Geschwindigkeit noch etwas erhöhen, wenn du die Scheiben folgendermassen zeichnest:

    AutoIt
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode", 1)
    
    
    Global $iWidth = 620
    Global $iHeight = 620
    Global $hGui = GUICreate("GDI+", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    
    
    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $hBmp_Buffer = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Global $hGfx_Buffer = _GDIPlus_ImageGetGraphicsContext($hBmp_Buffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGfx_Buffer, 2)
    _GDIPlus_GraphicsClear($hGfx_Buffer, 0xFF000000)
    GUIRegisterMsg($WM_PAINT, "WM_PAINT")
    GUISetState()
    
    
    _Draw()
    
    
    While Sleep(10)
    WEnd
    
    
    
    
    Func _Draw($iSteps = 18)
    	_GDIPlus_GraphicsClear($hGfx_Buffer, 0xFF000000)
    	Local $hBrush = _GDIPlus_BrushCreateSolid(0x0500FF00)
    	Local $hBrush2 = _GDIPlus_BrushCreateSolid(0xFF00FF00)
    
    
    	Local $fPI2 = ATan(1) * 2
    	Local $fA, $fX
    	For $i = 0 To $iSteps - 1
    		$fA = $i / $iSteps * $fPI2
    		$fX = Cos($fA) * 300
    		_GDIPlus_GraphicsFillEllipse($hGfx_Buffer, 310 - $fX, 310 - $fX, $fX * 2, $fX * 2, $hBrush)
    		_GDIPlus_GraphicsFillEllipse($hGfx_Buffer, 310 + $fX, 310 + Sin($fA) * 300, 4, 4, $hBrush2)
    	Next
    
    
    	_GDIPlus_BrushDispose($hBrush)
    	_GDIPlus_BrushDispose($hBrush2)
    	_GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
    EndFunc   ;==>_Draw
    
    
    
    
    Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
    	_GDIPlus_GraphicsDrawImage($hGraphics, $hBmp_Buffer, 0, 0)
    	Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_PAINT
    
    
    Func _Exit()
    	_GDIPlus_GraphicsDispose($hGfx_Buffer)
    	_GDIPlus_BitmapDispose($hBmp_Buffer)
    	_GDIPlus_GraphicsDispose($hGraphics)
    	_GDIPlus_Shutdown()
    	Exit
    EndFunc   ;==>_Exit
    Alles anzeigen


    Zumindest stell ich mir vor, dass man mit weniger Zeichenoperationen ein ähnlich gutes Ergebnis bekommt...
    (vielleicht lieg ich aber auch nur komplett daneben...)

    lgE

  • Musik über ein Simuliertes Mikrofon ausgeben

    • eukalyptus
    • 23. Juli 2016 um 09:04

    Manche Soundkarten können das. Ich glaub, das hieß meistens "What you hear" oder "wavemix". Damit konnte man aufnehmen, was über die Lautsprecher rauskam.

    Wenn nicht, dann braucht man einen virtuellen Audiotreiber der das dann übernimmt.
    Ich arbeite tatsächlich grad an sowas - wird aber noch einige Zeit dauern bis das fertig ist.
    Weiters beschränke ich die erste Version auf CD-Standard (44100Hz 16Bit Stereo)

    Für den Fall, dass man nur mit AutoIt eine Wav-Datei virtuell abspielen und an ein anderes Programm weiterleiten will, wäre das Vorhaben sogar noch einfacher, weil der Treiber nur die "Eingangs-Seite" darstellen muss...
    Dies werd ich zumindest als erstes mal umsetzen.

  • Prog übergibt Parameter an seine 1 Instanz (mehrere Dateien via Kontext-Menü)

    • eukalyptus
    • 6. Juli 2016 um 16:06

    Mittlerweile würd ich das mit NamedPipes lösen:

    AutoIt
    If $CmdLine[0] = 0 And @Compiled Then
    	RegWrite("HKEY_CLASSES_ROOT\*\shell\TestContext\command", "", "REG_SZ", '"' & @AutoItExe & '" "%1"')
    	RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer", "MultipleInvokePromptMinimum", "REG_DWORD", 10000)
    
    
    	;RegDelete("HKEY_CLASSES_ROOT\*\shell\TestContext")
    	;RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer", "MultipleInvokePromptMinimum", "REG_DWORD", 15)
    EndIf
    
    
    
    
    #include <Misc.au3>
    #include <WinAPI.au3>
    #include <NamedPipes.au3>
    
    
    
    
    If $CmdLine[0] <> 1 Then Exit
    
    
    Global $sUniqueName = "testcontext"
    
    
    Global $sPipeName = "\\.\pipe\" & $sUniqueName
    Global $hMutex = _Singleton($sUniqueName, 1)
    
    
    
    
    Switch $hMutex
    	Case 0
    		#NoTrayIcon
    		Global $tCmdLine = DllStructCreate("char[" & StringLen($CmdLine[1]) & "];")
    		DllStructSetData($tCmdLine, 1, $CmdLine[1])
    		Global $iWritten
    		Global $hPipe = _NamedPipes_CreateNamedPipe($sPipeName, 2, 2, 0, 1, 1, 0)
    		_NamedPipes_ConnectNamedPipe($hPipe)
    		_WinAPI_WriteFile($hPipe, $tCmdLine, DllStructGetSize($tCmdLine), $iWritten)
    		_NamedPipes_DisconnectNamedPipe($hPipe)
    		_WinAPI_CloseHandle($hPipe)
    		Exit
    
    
    	Case Else
    		Global $iErrorCnt, $iRead, $iCnt = 1
    		Global $sInput = "001 " & $CmdLine[1] & @CRLF
    		Global $tInput = DllStructCreate("char[10];")
    		Global $tOutPut = DllStructCreate("char[4096];")
    
    
    		While $iErrorCnt < 10
    			_NamedPipes_CallNamedPipe($sPipeName, $tInput, DllStructGetSize($tInput), $tOutPut, DllStructGetSize($tOutPut), $iRead)
    			If _WinAPI_GetLastError() Then
    				$iErrorCnt += 1
    				Sleep(10)
    			Else
    				$iCnt += 1
    				$sInput &= StringFormat("%03s", $iCnt) & " " & DllStructGetData($tOutPut, 1) & @CRLF
    				$iErrorCnt = 0
    			EndIf
    		WEnd
    
    
    		GUICreate("TextContext", 800, 640)
    		GUICtrlCreateLabel($sInput, 0, 0, 800, 640)
    		GUISetState()
    
    
    		While GUIGetMsg() <> -3
    		WEnd
    
    
    EndSwitch
    Alles anzeigen

    Aus irgendeinem Grund funktioniert der TimeOut-Parameter bei _NamedPipes_CallNamedPipe nicht, deshalb der kleine Workaround mit ErrorCnt..


    Es gibt aber noch eine weitere Möglichkeit:
    Eine Verknüpfung in "Send To" erstellen. (Im Explorer "shell:sendto" eingeben)

    Dann reicht ein ganz simples Script:

    AutoIt
    #include <Array.au3>
    _ArrayDisplay($CmdLine)
  • Übersetzung nach FreeBasic

    • eukalyptus
    • 3. Juni 2016 um 07:14

    Dazu bräuchte ich auch das AutoIt-Script dazu...

    Du kannst die FB-DLL mit Print debuggen, z.b.: Print "> " & c & " " & pPen[c] & " " & pfX[c - 1]
    Das wird dann direkt in die Konsole von SciTE geschrieben

  • Übersetzung nach FreeBasic

    • eukalyptus
    • 2. Juni 2016 um 17:34

    Entweder du packst alles in eine Struct "float X[" & iCntX * iCntY & "]; float Y[" & iCntX * iCntY & "];

    oder du machst es auf diese Weise:

    AutoIt
    Global $hDll = DllOpen(@ScriptDir & "\Test.dll")
    
    
    _Test()
    
    
    Func _Test($iCnt = 10, $iCntY = 5)
    	Local $sTag = "struct; float X[" & $iCnt & "]; float Y[" & $iCnt & "]; float Z[" & $iCnt & "]; endstruct; "
    	Local $tStruct = DllStructCreate("ptr Struct[" & $iCntY & "];")
    	Local $aStruct[$iCntY + 1]
    
    
    	For $y = 1 To $iCntY
    		$aStruct[$y] = DllStructCreate($sTag)
    		DllStructSetData($tStruct, 1, DllStructGetPtr($aStruct[$y]), $y)
    	Next
    
    
    	DllCall($hDll, "none", "_Test", "struct*", $tStruct, "uint", $iCnt, "uint", $iCntY)
    
    
    
    
    
    
    
    
    	For $y = 1 To $iCntY
    		For $i = 1 To $iCnt
    			ConsoleWrite("> " & $y & "/" & $i & " = " & StringFormat("%.1f   %.1f   %.1f", $aStruct[$y].X(($i)), $aStruct[$y].Y(($i)), $aStruct[$y].Z(($i))) & @CRLF)
    		Next
    	Next
    EndFunc   ;==>_Test
    Alles anzeigen
    Code
    Extern "Windows-MS"
    
    
    Sub _Test(pStruct As Any Ptr Ptr, iCnt As UInteger, iCntY As UInteger) Export
    	Dim As Single Ptr pX, pY, pZ
    
    	For y As UInteger = 0 To iCntY-1
    		pX = pStruct[y]
    		pY = pStruct[y] + (iCnt * SizeOf(Single))
    		pZ = pStruct[y] + (iCnt * 2 * SizeOf(Single))
    
    		For i As UInteger = 0 To iCnt-1
    			pX[i] = y * 10000 + i
    			pY[i] = y * 20000 + i
    			pZ[i] = y * 30000 + i
    		Next
    	Next
    
    End Sub
    
    
    End Extern
    Alles anzeigen
  • Übersetzung nach FreeBasic

    • eukalyptus
    • 2. Juni 2016 um 13:55

    Nein - du musst zunächst dein Script umbauen, dass statt Arrays nur Structs verwendet werden.
    Kommst du mit GDIPlus in FreeBasic klar, oder soll ich ein kurzes Beispiel basteln?

  • Übersetzung nach FreeBasic

    • eukalyptus
    • 2. Juni 2016 um 07:48

    Um die dynamische Struct in FreeBasic anzusprechen, kannst du mit Pointern arbeiten:

    Hier zwei Möglichkeiten:

    AutoIt
    Global $hDll = DllOpen(@ScriptDir & "\Test.dll")
    
    
    _Test_1()
    
    
    _Test_2()
    
    
    
    
    Func _Test_1($iCnt = 100)
    	Local $tStruct = DllStructCreate("struct; float X[" & $iCnt & "]; float Y[" & $iCnt & "]; float Z[" & $iCnt & "]; endstruct; ")
    	DllCall($hDll, "none", "_Test_1", "struct*", $tStruct, "uint", $iCnt)
    	For $i = 1 To $iCnt
    		ConsoleWrite("> " & StringFormat("% 4s   %.1f   %.1f   %.1f", $i, $tStruct.X(($i)), $tStruct.Y(($i)), $tStruct.Z(($i))) & @CRLF)
    	Next
    EndFunc   ;==>_Test_1
    
    
    
    
    Func _Test_2($iCnt = 100)
    	Local $tStruct = DllStructCreate("struct; float X[" & $iCnt & "]; float Y[" & $iCnt & "]; float Z[" & $iCnt & "]; endstruct; ")
    	DllCall($hDll, "none", "_Test_2", "struct*", DllStructGetPtr($tStruct, "X"), "struct*", DllStructGetPtr($tStruct, "Y"), "struct*", DllStructGetPtr($tStruct, "Z"), "uint", $iCnt)
    	For $i = 1 To $iCnt
    		ConsoleWrite("+ " & StringFormat("% 4s   %.1f   %.1f   %.1f", $i, $tStruct.X(($i)), $tStruct.Y(($i)), $tStruct.Z(($i))) & @CRLF)
    	Next
    EndFunc   ;==>_Test_2
    Alles anzeigen
    Code
    Extern "Windows-MS"
    
    
    Sub _Test_1(pStruct As Any Ptr, iCnt As UInteger) Export
    	Dim As Single Ptr pX, pY, pZ
    	pX = pStruct
    	pY = pStruct + (iCnt * SizeOf(Single))
    	pZ = pStruct + (iCnt * 2 * SizeOf(Single))
    
    	For i As UInteger = 0 To iCnt-1
    		pX[i] = 10000 + i
    		pY[i] = 20000 + i
    		pZ[i] = 30000 + i
    	Next
    End Sub
    
    
    Sub _Test_2(pX As Single Ptr, pY As Single Ptr, pZ As Single Ptr, iCnt As UInteger) Export	
    	For i As UInteger = 0 To iCnt-1
    		pX[i] = 10000 + i
    		pY[i] = 20000 + i
    		pZ[i] = 30000 + i
    	Next
    End Sub
    
    End Extern
    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™