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

Beiträge von KriZza

  • Speicherleck / AutoIT Hardcrash bei laden von binären Bilddateien

    • KriZza
    • 6. September 2016 um 09:51

    Okay, danke für eure Hilfe...

    Ich merke, ich hab noch einiges zu lernen ;) GDI ist noch ein bömischen Dorf für mich :)

  • Speicherleck / AutoIT Hardcrash bei laden von binären Bilddateien

    • KriZza
    • 5. September 2016 um 17:33

    Vielen Dank für deine schnelle Antwort! :)

    Danke für deinen Tipp, da macht es durchaus Sinn sich detailliert das Changelog anzuschauen.
    Kurz noch zu der Timer-Sache, die hab ich extra auf 1 gesetzt damit man den Fehler schnellstmöglich provozieren kann. Der steht sonst auf 500ms und der Fehler kommt dann immer nach ca. einer Stunde.

    "_GDIPlus_BitmapCreateFromMemory" klappt auf jeden Fall schon einmal. Was aber nicht klappt ist die Speicherfreigabe mit BitmapDispose oder ImageDispose. Hier bekomme ich direkt einen Crash. Muss ich noch deklarieren was für ein Format der binäre String hat? Oder mein Control als Grafik deklarieren?

    Hier mal auf die schnelle das Skript mit BitmapCreateFromMemory (Speicherfreigabe auskommentiert)


    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <Memory.au3>
    #include <Constants.au3>
    #include <APIConstants.au3>
    #include <WinAPIEx.au3>
    #include <GDIPlus.au3>
    Global $Bmp_Logo
    Global $pic = "0xFFD8FFE000104A46494600010101006000600000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C303134" & _
    "34341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC0" & _
    "0011080045006F03012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D010203000411051221314106135" & _
    "16107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A92" & _
    "939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F010003010101010101010101000000000" & _
    "0000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434E125F11718191A26272829" & _
    "2A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD" & _
    "2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F43F0F476371A4DA241A3586C8ADA2DC64857712541EE3DFD6B50D8C276FFC49B4B1C7CDFBA4E3E9C5647851" & _
    "99747CA3EC6F220C367FD85ADDDD330E2EB3EDB8FF0085525A5C4EE34585893CE97A6A0EE0C2991FA5595D2F4EC67FB274F39E47EE13FC29D6D2AA902493730E98C9AB5E6AFF00B5FF007C9A2C172AFF0065E9FF0" & _
    "0F408B0FF00BF09FE14874DD395493A4586075FDC2FF855EA8E74596DE48DC651D4AB0F5078345905CA89A769D20529A35890C32316E9C8FCA9DFD9563FF404B2FF00BF09FE1459E9D0E9D149158DA98813B87CE4" & _
    "F38C7727D2A6265C054C72410339C71CD0D2BE809BB6A51F2B46DFB3FB374EDD9C63C84EBF954E34CB0270345B2CFF00D704FF000AB6824E59D09939C3638A512DC023CC3B41F503FC693B741E854FECAB1FFA025" & _
    "97FDF84FF000A3FB2AC7FE80965FF007E13FC2ADA4B741097049C7040039FCE93CE9FCADE3249E70481B690157FB2AC7FE80965FF0080E9FE14A9A569E5C03A2D9007BFD9D3FC2AC3CB73B772B30F98F18078A485" & _
    "A49258E4954BB2B1D8781D41CD311CB783235974F457195FB3C271FF00005AE8F33F4B711951D986306B9EF0467EC31FA7D9E2CFFDF0B5D14B03846F2E57F60339CFE1551DAC0C7AFDA304385C9E8CBD054B87FEF" & _
    "8FF00BE6A92DC3A12AEED9538CB77FD2AD89E2C03E628CFA9A7664DD10FDA18C8F1AB0DC879E073EFD7F0A7EF9361661F20EA70063F5A85994BEE0D95F6A953849B9E88BFCEA1B2922CBC2F7080661684E0E369E4" & _
    "7D73527D993733796996CE793CE6B28118EA78A3B0393EB486688B4DB26E558C00723AFE348C9042E3708D5BA8CB1AA0AC83AE79071569BE49AD413D7FA9A009E211094F97E5EFC73863D29ED29DED1A9432019DA" & _
    "0F354E690477BB893C376A74D2C62E564704A119C7E14011C5752C92DC46F6EC3CA048391F376C8AB70B6F287CBDBF363EF67B1AAA0B0BB99A385A42C8C0E0E3BF152DABCA5D55EDD917767248F43403D5E872DE0" & _
    "9FF8F24E7A5BC5C7FC016BAB6018608C835CAF823FE3C17FEBDE1FFD016BAAAA4265792D622A4E76F724F354641B5CC6B965EC4569C85C6368E0F538C9150BDBC6F21674959BB91C0356ADD497E4410E5A143B40C" & _
    "83C63A73565492B2E17AA2FE1CD401638C2A0C8001C063CF7A7875CB00C3050679AC8B18338238A067A714D52983C8EA7BD2AB217392383C73ED400B8385E9C0AB4EDBE7B5C0EC3F9D55CC617823F3F6A9F72F9F6" & _
    "C770E9EBEF4005C296BA20773E99A59223248A819570A012DC76F4A19946A00EE1F7BAE6A47F2DF51504839F7F6A007DB0C5CC83D33FCEACBFDE8FFDEFE86ABDBFFC7DCBF53FCEAC3FDE8FFDEFE868038AF047FC7" & _
    "8A7FD7BC5FF00A02D7532063190B9DDDB158BA169B2268B632420C65ED6225978CFC82B4C5ADD6465A5C77C3D52690AC519649A299D55CAE58903763F1A4135C7FCF57EBCFCDDAAFF00D81C60EE9CF73C83CD3D6C" & _
    "64CE0493A81FED0A7A770B1523FB2C8ECF2A1DC3B9CE0FEA6A422C08E1579E9C1A9CD84BCE1E6E4FF7874A4FECF97FE7A4BF98A7602A95B36DD911124F07CB3C500DB05FF96617B7EE6AF8B5942E324FFC0579A3E" & _
    "CD371C9C63A6D5A561953C9B494A868A3DC471F7973F91A5FECFB43D228FF00EFE37F8D5F4B423EFC99FA2014F16883A311F403FC2A5D80CEFECEB6FF009E09FF007DBFF8D28D3EDD4E442A0FB3BFF8D687D9C7FC" & _
    "F46FD28FB38FF9E8DFA51A08A91DBAC4DB91707FEBA39FEB53442537419A4CA76403A7152FD9C7FCF46FD283088C6EDEE71DB028BA03E75B0F89BE224B3B3847D88A8B389D7F7072382B8FBDFEC8AB6DF157C431C" & _
    "59F234D6C7ADBB73FF8F51452190FFC2DEF117FCFAE97FF007E1BFF008AA2CBE2DF892F35BB5B13069691CD288CB0B66247CB9CFDFA28A4F613D8AE3E317898D899FECFA56E168D718FB3363224D98FBFD31525CF" & _
    "C5EF12C17AF6E21D2C859D22CFD99BA326ECFDFEB451551D69DFCFFCC5276A96FEBA0ABF173C4C74E86EBC9D2B749652DCEDFB2B601490A01F7FA1C66A78BE2AF8924BA68BCBD3005BAB6833F666CE255249FBFD4" & _
    "628A29C9593F4FD0E8515CB4FCDBFCCA56FF18BC4D34F731B5BE9404514B2022D9B928703F8EA3D5BE34789AC2F04315AE9254A06F9ADDB3CFF00C0E8A2A56C67256651FF0085EBE2AFF9F3D1FF00F019FF00F8BA" & _
    "D1B6F8C7E279AD44C6DF4A049C605B37FF00174514D0A3ABFBFF0026599BE2D789A0B759D63D2F27903ECADC700FF7E9F71F193C5B06E651A59DAB1B0DD6ADFC48A4FF001FFB545143262F43FFD9"
    
    
    $timer = TimerInit()
    Dim $DemoPicture[10]
        Local $hGUI = GUICreate("Example",1200)
    	  For $i = 1 To 9
    		$DemoPicture[$i] = GUICtrlCreatePic("",10+120,10 ,111,69)
    	  Next
        GUISetState(@SW_SHOW, $hGUI)
        While 1
    		If TimerDiff($timer) > 1 Then
    			_Set_PreviewPic()
    			$timer = TimerInit()
    		EndIf
    
    
    		Switch GUIGetMsg()
    			Case $GUI_EVENT_CLOSE
    			Exit
    		EndSwitch
        WEnd
    
    
    
    
    ;===================================================================================================
    Func _Set_PreviewPic()
    	  For $i = 1 to 9
    		  _GDIPlus_Startup()
    		Global $Bmp_Logo = _GDIPlus_BitmapCreateFromMemory(Binary($pic), True)
    		_WinAPI_DeleteObject(GUICtrlSendMsg($DemoPicture[$i -1], 0x0172, 0, $Bmp_Logo))
    ;~ 		_GDIPlus_BitmapDispose($Bmp_Logo)
    		_GDIPlus_Shutdown()
    	Next
    EndFunc
    Alles anzeigen
  • Speicherleck / AutoIT Hardcrash bei laden von binären Bilddateien

    • KriZza
    • 5. September 2016 um 15:01

    Hallo zusammen,

    ich erstelle dieses Thema neu da der Basis-Thread leider geschlossen ist. Leider habe ich bei der Funktion "Load_BMP_From_Mem" immer noch ein Speicherleck, bzw. ein Hardcrash der AutoIT.exe. Hat jemand (vll @UEZ wenn du das liest) eine Idee woran das liegen könnte? Ich such mir hier schon einen Wolf :(

    Eingesetzte AutoIT Version 3.3.14.2 / 3.3.15.0
    Fehler:

    Code
    !>14:51:13 AutoIt3.exe ended.rc:-1073741819
    +>14:51:13 AutoIt3Wrapper Finished.
    >Exit code: 3221225477


    Anbei ein Beispiel-Script (Der Fehler tritt alle 3-10 Minuten auf)

    AutoIt
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <WinAPI.au3>
    #include <Memory.au3>
    #include <Constants.au3>
    #include <APIConstants.au3>
    #include <WinAPIEx.au3>
    #include <GDIPlus.au3>
    Global $pic = "0xFFD8FFE000104A46494600010101006000600000FFDB004300080606070605080707070909080A0C140D0C0B0B0C1912130F141D1A1F1E1D1A1C1C20242E2720222C231C1C2837292C303134" & _
    "34341F27393D38323C2E333432FFDB0043010909090C0B0C180D0D1832211C213232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232FFC0" & _
    "0011080045006F03012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D010203000411051221314106135" & _
    "16107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A737475767778797A838485868788898A92" & _
    "939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F010003010101010101010101000000000" & _
    "0000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0156272D10A162434E125F11718191A26272829" & _
    "2A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD" & _
    "2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00F43F0F476371A4DA241A3586C8ADA2DC64857712541EE3DFD6B50D8C276FFC49B4B1C7CDFBA4E3E9C5647851" & _
    "99747CA3EC6F220C367FD85ADDDD330E2EB3EDB8FF0085525A5C4EE34585893CE97A6A0EE0C2991FA5595D2F4EC67FB274F39E47EE13FC29D6D2AA902493730E98C9AB5E6AFF00B5FF007C9A2C172AFF0065E9FF0" & _
    "0F408B0FF00BF09FE14874DD395493A4586075FDC2FF855EA8E74596DE48DC651D4AB0F5078345905CA89A769D20529A35890C32316E9C8FCA9DFD9563FF404B2FF00BF09FE1459E9D0E9D149158DA98813B87CE4" & _
    "F38C7727D2A6265C054C72410339C71CD0D2BE809BB6A51F2B46DFB3FB374EDD9C63C84EBF954E34CB0270345B2CFF00D704FF000AB6824E59D09939C3638A512DC023CC3B41F503FC693B741E854FECAB1FFA025" & _
    "97FDF84FF000A3FB2AC7FE80965FF007E13FC2ADA4B741097049C7040039FCE93CE9FCADE3249E70481B690157FB2AC7FE80965FF0080E9FE14A9A569E5C03A2D9007BFD9D3FC2AC3CB73B772B30F98F18078A485" & _
    "A49258E4954BB2B1D8781D41CD311CB783235974F457195FB3C271FF00005AE8F33F4B711951D986306B9EF0467EC31FA7D9E2CFFDF0B5D14B03846F2E57F60339CFE1551DAC0C7AFDA304385C9E8CBD054B87FEF" & _
    "8FF00BE6A92DC3A12AEED9538CB77FD2AD89E2C03E628CFA9A7664DD10FDA18C8F1AB0DC879E073EFD7F0A7EF9361661F20EA70063F5A85994BEE0D95F6A953849B9E88BFCEA1B2922CBC2F7080661684E0E369E4" & _
    "7D73527D993733796996CE793CE6B28118EA78A3B0393EB486688B4DB26E558C00723AFE348C9042E3708D5BA8CB1AA0AC83AE79071569BE49AD413D7FA9A009E211094F97E5EFC73863D29ED29DED1A9432019DA" & _
    "0F354E690477BB893C376A74D2C62E564704A119C7E14011C5752C92DC46F6EC3CA048391F376C8AB70B6F287CBDBF363EF67B1AAA0B0BB99A385A42C8C0E0E3BF152DABCA5D55EDD917767248F43403D5E872DE0" & _
    "9FF8F24E7A5BC5C7FC016BAB6018608C835CAF823FE3C17FEBDE1FFD016BAAAA4265792D622A4E76F724F354641B5CC6B965EC4569C85C6368E0F538C9150BDBC6F21674959BB91C0356ADD497E4410E5A143B40C" & _
    "83C63A73565492B2E17AA2FE1CD401638C2A0C8001C063CF7A7875CB00C3050679AC8B18338238A067A714D52983C8EA7BD2AB217392383C73ED400B8385E9C0AB4EDBE7B5C0EC3F9D55CC617823F3F6A9F72F9F6" & _
    "C770E9EBEF4005C296BA20773E99A59223248A819570A012DC76F4A19946A00EE1F7BAE6A47F2DF51504839F7F6A007DB0C5CC83D33FCEACBFDE8FFDEFE86ABDBFFC7DCBF53FCEAC3FDE8FFDEFE868038AF047FC7" & _
    "8A7FD7BC5FF00A02D7532063190B9DDDB158BA169B2268B632420C65ED6225978CFC82B4C5ADD6465A5C77C3D52690AC519649A299D55CAE58903763F1A4135C7FCF57EBCFCDDAAFF00D81C60EE9CF73C83CD3D6C" & _
    "64CE0493A81FED0A7A770B1523FB2C8ECF2A1DC3B9CE0FEA6A422C08E1579E9C1A9CD84BCE1E6E4FF7874A4FECF97FE7A4BF98A7602A95B36DD911124F07CB3C500DB05FF96617B7EE6AF8B5942E324FFC0579A3E" & _
    "CD371C9C63A6D5A561953C9B494A868A3DC471F7973F91A5FECFB43D228FF00EFE37F8D5F4B423EFC99FA2014F16883A311F403FC2A5D80CEFECEB6FF009E09FF007DBFF8D28D3EDD4E442A0FB3BFF8D687D9C7FC" & _
    "F46FD28FB38FF9E8DFA51A08A91DBAC4DB91707FEBA39FEB53442537419A4CA76403A7152FD9C7FCF46FD283088C6EDEE71DB028BA03E75B0F89BE224B3B3847D88A8B389D7F7072382B8FBDFEC8AB6DF157C431C" & _
    "59F234D6C7ADBB73FF8F51452190FFC2DEF117FCFAE97FF007E1BFF008AA2CBE2DF892F35BB5B13069691CD288CB0B66247CB9CFDFA28A4F613D8AE3E317898D899FECFA56E168D718FB3363224D98FBFD31525CF" & _
    "C5EF12C17AF6E21D2C859D22CFD99BA326ECFDFEB451551D69DFCFFCC5276A96FEBA0ABF173C4C74E86EBC9D2B749652DCEDFB2B601490A01F7FA1C66A78BE2AF8924BA68BCBD3005BAB6833F666CE255249FBFD4" & _
    "628A29C9593F4FD0E8515CB4FCDBFCCA56FF18BC4D34F731B5BE9404514B2022D9B928703F8EA3D5BE34789AC2F04315AE9254A06F9ADDB3CFF00C0E8A2A56C67256651FF0085EBE2AFF9F3D1FF00F019FF00F8BA" & _
    "D1B6F8C7E279AD44C6DF4A049C605B37FF00174514D0A3ABFBFF0026599BE2D789A0B759D63D2F27903ECADC700FF7E9F71F193C5B06E651A59DAB1B0DD6ADFC48A4FF001FFB545143262F43FFD9"
    
    
    $timer = TimerInit()
    Dim $DemoPicture[10]
        Local $hGUI = GUICreate("Example",1200)
    	  For $i = 1 To 9
    		$DemoPicture[$i] = GUICtrlCreatePic("",10+120,10 ,111,69)
    	  Next
        GUISetState(@SW_SHOW, $hGUI)
        While 1
    		If TimerDiff($timer) > 1 Then
    			_Set_PreviewPic()
    			$timer = TimerInit()
    		EndIf
    
    
    		Switch GUIGetMsg()
    			Case $GUI_EVENT_CLOSE
    			Exit
    		EndSwitch
        WEnd
    
    
    
    
    ;===================================================================================================
    Func _Set_PreviewPic()
    	  For $i = 1 to 9
    		Global $Bmp_Logo = Load_BMP_From_Mem(Binary($pic), True)
    		_WinAPI_DeleteObject(GUICtrlSendMsg($DemoPicture[$i -1], 0x0172, 0, $Bmp_Logo))
    		_WinAPI_DeleteObject($Bmp_Logo)
    	Next
    EndFunc
    
    
    
    
    ;======================================================================================
    ; Function Name:		Load_BMP_From_Mem
    ; Description:			Loads a image which is saved as a binary string and converts it to a bitmap or hbitmap
    ;
    ; Parameters:    		$mem_image:		the binary string which contains any valid image which is supported by GDI+
    ; Optional:  				$hHBITMAP:		if false a bitmap will be created, if true a hbitmap will be created
    ;
    ; Remark:					hbitmap format is used generally for GUI internal images
    ;
    ; Requirement(s):		GDIPlus.au3, Memory.au3
    ; Return Value(s):	Success: handle to bitmap or hbitmap, Error: 0
    ; Error codes:			1: $mem_image is not a binary string
    ;
    ; Author(s):				UEZ
    ; Additional Code:	thanks to progandy for the MemGlobalAlloc and tVARIANT lines
    ; Version:					v0.95 Build 2011-06-11 Beta
    ;=======================================================================================
    
    
    Func Load_BMP_From_Mem($mem_image, $hHBITMAP = False)
    	If Not IsBinary($mem_image) Then Return SetError(1, 0, 0)
    	Local $declared = True
    	If Not $__g_hGDIPDll Then
    		_GDIPlus_Startup()
    		$declared = False
    	EndIf
    	Local Const $memBitmap = Binary($mem_image) ;load image  saved in variable (memory) and convert it to binary
        Local Const $len = BinaryLen($memBitmap) ;get length of image
        Local Const $hData = _MemGlobalAlloc($len, $GMEM_MOVEABLE) ;allocates movable memory  ($GMEM_MOVEABLE = 0x0002)
        Local Const $pData = _MemGlobalLock($hData) ;translate the handle into a pointer
        Local $tMem = DllStructCreate("byte[" & $len & "]", $pData) ;create struct
        DllStructSetData($tMem, 1, $memBitmap) ;fill struct with image data
        _MemGlobalUnlock($hData) ;decrements the lock count  associated with a memory object that was allocated with GMEM_MOVEABLE
        Local $hStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $pData, "int", True, "ptr*", 0)
    	$hStream = $hStream[3]
        Local $hBitmap = DllCall($__g_hGDIPDll, "uint", "GdipCreateBitmapFromStream", "ptr", $hStream, "int*", 0) ;Creates a Bitmap object based on an IStream COM interface
        $hBitmap = $hBitmap[2]
        Local Const $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
        DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $hStream, "dword", 8 + 8 * @AutoItX64, _
    										   "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT)) ;release memory from $hStream to avoid memory leak
        $tMem = 0
        If $hHBITMAP Then
            Local Const $hHBmp = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap)
            _GDIPlus_BitmapDispose($hBitmap)
    		If Not $declared Then _GDIPlus_Shutdown()
            Return $hHBmp
        EndIf
    	If Not $declared Then _GDIPlus_Shutdown()
        Return $hBitmap
    EndFunc   ;==>Load_BMP_From_Mem
    Alles anzeigen
  • Filtertext vom Header / Listview auslesen

    • KriZza
    • 10. Februar 2016 um 09:28

    Hier ist die Lösung - Listview Filtervon LarsJ aus dem englischen AutoIT - Forum.

    Bei weitem nicht einfach, aber das kann doch durchaus sehr praktisch sein. Vielleicht benötigt der ein oder andere ja auch mal dieses Szenario.

    Ich bin auf jeden Fall sehr happy :)

  • Filtertext vom Header / Listview auslesen

    • KriZza
    • 9. Februar 2016 um 17:22

    Hi zusammen,

    ich stecke aktuell leider bei einer Standard- Windowsfunktion fest leider fehlt die gewünschte Funktion in AutoIT. Ich würde gerne den Filtertext einer Listview auslesen und weiterverarbeiten. Leider klappt das auslesen ganz und gar nicht. Vielleicht mag mal jemand drüber schauen, der sich damit auskennt?

    Viele Grüße
    KriZza

    AutoIt
    #include <Constants.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIListView.au3>
    #include <WinAPI.au3>
    
    
    $gui = GUICreate("listview filter", 400, 250, -1, -1)
    $listview = GUICtrlCreateListView("col0|col1|col2", 10, 10, 380, 230)
    GUICtrlSendMsg(-1, 0x101E, 0, 125)
    GUICtrlSendMsg(-1, 0x101E, 1, 125)
    GUICtrlSendMsg(-1, 0x101E, 2, 125)
    GUICtrlCreateListViewItem("blue|green|blue", $listview)
    GUICtrlCreateListViewItem("red|blue|green", $listview)
    GUICtrlCreateListViewItem("green|red|red", $listview)
    GUICtrlCreateListViewItem("blue|green|blue", $listview)
    GUICtrlCreateListViewItem("red|blue|green", $listview)
    GUICtrlCreateListViewItem("green|red|red", $listview)
    GUICtrlCreateListViewItem("blue|green|blue", $listview)
    GUICtrlCreateListViewItem("red|blue|green", $listview)
    GUICtrlCreateListViewItem("green|red|red", $listview)
    GUICtrlCreateListViewItem("blue|green|blue", $listview)
    GUICtrlCreateListViewItem("red|blue|green", $listview)
    GUICtrlCreateListViewItem("green|red|red", $listview)
    GUISetState()
    
    
    ;Use of lock/unlock and begin/end update is just to cause repainting so the filterbar is fully visible
    GUISetState(@SW_LOCK, $gui)
    
    
    _GUICtrlListView_BeginUpdate($listview)
    
    
    ;Add the filter bar to the header control
    $header = _GUICtrlListView_GetHeader($listview)
    $styles = _WinAPI_GetWindowLong($header, $GWL_STYLE)
    _WinAPI_SetWindowLong($header, $GWL_STYLE, BitOR($styles, $HDS_FILTERBAR))
    
    
    ;Use of lock/unlock and begin/end update is just to cause repainting so the filterbar is fully visible
    _GUICtrlListView_EndUpdate($listview)
    GUISetState(@SW_UNLOCK, $gui)
    
    
    _GUICtrlHeader_EditFilter($header, 0)
        Send("Filter 1")
    
    
    ;Register WM_NOTIFY to handle $HDN_FILTERBTNCLICK messages
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    
    
    Sleep(1000)
    MsgBox(0,"",_GUICtrlHeader_GetFilterText($header, 0))
    ;Loop GUI until exit
    Do
        $msg = GUIGetMsg()
    
    
    Until $msg = $GUI_EVENT_CLOSE
    
    
    
    
    
    
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
        Local $hWndFrom, $iIDFrom, $iCode
        Local $tNMHDR, $tNMHEADER, $tNMHDFILTERBTNCLICK, $tHDTEXTFILTER, $tNMHDDISPINFO
        Local $iHeaderItem, $tItem
        Local $HDFT_ISSTRING = 0x0
        Local $HDFT_ISNUMBER = 0x1
    
    
        $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $header
                Switch $iCode
                    Case $HDN_FILTERBTNCLICK ; Notifies the header control's parent window when the filter button is clicked or in response to an $HDM_SETITEM message
                        $tNMHDFILTERBTNCLICK = DllStructCreate($tagNMHDFILTERBTNCLICK, $ilParam)
                        $tHDTEXTFILTER = DllStructCreate($tagHDTEXTFILTER, $ilParam)
                        $column = DllStructGetData($tNMHDFILTERBTNCLICK, "Item")
                        $text = DllStructGetData($tHDTEXTFILTER, "Text")
                        MsgBox(0, "Msg", "Filter button click for column " & $column & @CRLF & _
                               "Text: " & $text)
    
    
                        ;Return True  ; An $HDN_FILTERCHANGE notification will be sent to the header control's parent window
                        ; This notification gives the parent window an opportunity to synchronize its user interface elements
                        Return False ; If you do not want the notification sent
                    Case $HDN_FILTERCHANGE ; Notifies the header control's parent window that the attributes of a header control filter are being changed or edited
                        ;$tNMHEADER = DllStructCreate($tagNMHEADER, $ilParam)
                        ; no return value
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    
    Func _GUICtrlHeader_GetFilterText($hWnd, $iIndex)
    	Local $bUnicode = _GUICtrlHeader_GetUnicodeFormat($hWnd)
    
    
    	Local $tBuffer
    	If $bUnicode Then
    		$tBuffer = DllStructCreate("wchar Text[4096]")
    	Else
    		$tBuffer = DllStructCreate("char Text[4096]")
    	EndIf
    	Local $tItem = DllStructCreate($tagHDTEXTFILTER)
    	DllStructSetData($tItem, "TextMax", 4096)
    	If _WinAPI_InProcess($hWnd, $__g_hHDRLastWnd) Then
    		DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer))
    		_SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $tItem, 0, "wparam", "struct*")
    	Else
    		Local $iItem = DllStructGetSize($tItem)
    		Local $tMemMap
    		Local $pMemory = _MemInit($hWnd, $iItem + DllStructGetSize($tBuffer), $tMemMap)
    		Local $pText = $pMemory + $iItem
    		DllStructSetData($tItem, "Text", $pText)
    		_MemWrite($tMemMap, $tItem, $pMemory, $iItem)
    		If $bUnicode Then
    			_SendMessage($hWnd, $HDM_GETITEMW, $iIndex, $pMemory, 0, "wparam", "ptr")
    		Else
    			_SendMessage($hWnd, $HDM_GETITEMA, $iIndex, $pMemory, 0, "wparam", "ptr")
    		EndIf
    		_MemRead($tMemMap, $pText, $tBuffer, DllStructGetSize($tBuffer))
    		_MemFree($tMemMap)
    	EndIf
    	Return DllStructGetData($tBuffer, "Text")
    EndFunc   ;==>_GUICtrlHeader_GetItemText
    Alles anzeigen
  • Schlimmer Fehler - Programm friert sporadisch nach gewisser Zeit ein - Timer in While-Schleife

    • KriZza
    • 2. Dezember 2015 um 14:53

    Hallo zusammen,

    wollte euch nur kurz auf den neusten Stand bringen. Der Übeltäter ist gefunden. Das Standard-Debugging hat mir leider nichts gebracht. Evtl weil das Skript zu groß ist?! (Durch das Debugging ist das Programm auch eingefroren -.-) Da der Fehler leider in nicht nachvollziehbaren Abständen und nicht durch Aktionen nachgestellt werden konnte, musste alles auf den Prüfstand gestellt werden. Es tut mir an der Stelle leid, dass ich euch auch hab "im Nebel rumstochenern" lassen.

    Kurz zum Ergebnis: Ich habe in einem Timer alle 30 Sekunden ein _FTP_ProgressDownload gemacht. Das findet der Arbeitsspeicher wohl nicht so toll, obwohl in der FTPEx ordnungsgemäß FileOpen und FileClose aufgerufen werden.

    Diese Funktion mit anderen Parametern habe ich 10 mal am Stück aufgerufen und das alle 30 Sekunden. Dadurch ist das Programm im Laufe der Zeit weggefreezed.

    AutoIt
    _FTP_ProgressDownload($hConn7, @ScriptDir & "\CODE\TMPDATA\ERRORSTATES\CLIENTCACHE\ERROR." & $IPRECHNER01, "/TCFTP/" & $IPRECHNER01 & "/ERROR.data")
    If Not @error Then _FTP_FileDelete($hConn7, "/TCFTP/" & $IPRECHNER01 & "/ERROR.data")


    Viele Grüße
    KriZza

  • Schlimmer Fehler - Programm friert sporadisch nach gewisser Zeit ein - Timer in While-Schleife

    • KriZza
    • 20. Oktober 2015 um 11:45

    So, mit den ganzen Debug-Varianten bin ich leider nicht weiter gekommen.

    Nochmal kurz zum Fehler selber:
    Ich habe eine Hauptanwendung in der viele Grafiken stetig aktualisiert werden. Sporadisch ist das Programm eingefrohren / (friert evtl. noch ein). Es gibt keine großartigen Bewegungen mehr im Taskmanager, wobei die RAM und CPU Auslastung, auch bei dem Freeze sehr gering ist. Passiert dieses Phänomen verschwinden die Grafiken bei einem Mouseover. Interaktionen mit dem Programm sind auch nicht mehr möglich.

    2 Dinge habe ich geändert und der Fehler ist bislang nicht mehr aufgetaucht
    1: Update auf 3.3.14.1 von 3.3.12.0 --> seitdem werden auch die Controls bei mir richtig positioniert das war vorher nicht der Fall
    2: Ich lasse mir für 10 Rechner Desktopvorschaugrafiken anzeigen. In diese Funktion war ein globales "_GDIPlus_Startup()" und "_GDIPlus_Shutdown()" drin. Das lasse ich nun für jeden Rechner einzeln laufen, also 10 mal "_GDIPlus_Startup()" und "_GDIPlus_Shutdown()".

    Meint ihr das GDI Funktionen so ein verhalten verursachen können? Der Debug hat mir auch hier kein Aufschluss gegeben.

  • Schlimmer Fehler - Programm friert sporadisch nach gewisser Zeit ein - Timer in While-Schleife

    • KriZza
    • 16. Oktober 2015 um 16:37

    Super vielen Dank für den Tipp / die Tipps. Dann werde ich mich mal auf die Suche machen ...
    Nur mal kurz eine Kennzahl, im Hauptscript sind 1246 IniRead´s hinterlegt.. Das wird auf jeden Fall dauern :/

    meint ihr ein "_FTP_ProgressUpload" / "_FTP_ProgressDownload" gehört auch dazu?

    Bei dem Skript zum Testen ist wirklich nach 4 GB schluss. Bei meinem Skript sieht´s so aus, als würde er über den Taskmanager den Speicher wieder freigeben :-/

  • Schlimmer Fehler - Programm friert sporadisch nach gewisser Zeit ein - Timer in While-Schleife

    • KriZza
    • 16. Oktober 2015 um 10:11


    Der bleibt auch beim Debug- Leider immer bei unterschiedlichen Stellen stehen. Ich knalle mir aus irgendwelchen Gründen den Speicher scheinbar voll. Diese Meldung kommt immer, seitdem ich den Debug aktiv habe. :/

  • Schlimmer Fehler - Programm friert sporadisch nach gewisser Zeit ein - Timer in While-Schleife

    • KriZza
    • 15. Oktober 2015 um 13:14

    Ich hasse dieses rumgesochere im Nebel :P und das geht schon seit Wochen so.

    Ich bin echt dankbar für jeden Tipp.

    Ich nutze nur einen Bruchteil von Scite. DebugTrace oder Tracelines waren noch nicht dabei. Danke Andy, ich probiere es aus und berichte.

    Edit... Du meinst den Modus wo der mir jede Zeile in die Console schreibt? Bin mal gespannt. Das Grundscript hat 35.000 Zeilen Grundcode und habe noch 5-6 Untermodule die Parallel mitlaufen :D Mal einen Lasttest durchführen :D

  • Schlimmer Fehler - Programm friert sporadisch nach gewisser Zeit ein - Timer in While-Schleife

    • KriZza
    • 15. Oktober 2015 um 09:50

    Moin moin zusammen,

    habe eine kurze Frage. Ich habe eine sehr sehr komplexe Software erstellt und habe nachdem ich viele Funktionen in letzter Zeit eingebaut habe, das Problem, dass die GUI nach gewisser Zeit sporadisch einfriert. Ich kann diesen Fehler nicht nachstellen.

    Ich habe nun die vermutung das es am Timer / bzw. den Timern liegt die ich in der Scheife eingebaut habe.

    Frage in die Runde: Hat jemand ein Skript laufen, bei dem mehrere Timer in der Schleife laufen und welche Erfahrungen habt ihr damit gemacht? Ist es möglich das zwei Timer sich in die Quere kommen können und dann zum Freeze führen?

    Grüße,
    KriZza


    Anbei nur mal ein kleiner Ausschnitt der "While-Schleife"

    AutoIt
    While 1
    	$msg = GUIGetMsg(1)
    
    
    	If TimerDiff($iTimer1) > 1000 Then ; Alle 1 Sekunden
    		Global $readshowname = RegRead("HKEY_CURRENT_USER\Software\TTC-Viewer", "SHOWNAME")
    		$readlogin1 = RegRead("HKEY_CURRENT_USER\Software\TTC-Viewer", "LoginNameActive")
    		If IniRead(@ScriptDir & "\CODE\TMPDATA\STATES\userdata.cw1", $readlogin1, "ActiveProfile", "") = "---" Then
    			WinSetTitle($main_form, "", $Titlename & " | Benutzer: " & $readshowname & " | Schulungsprofil: ---")
    		Else
    			WinSetTitle($main_form, "", $Titlename & " | Benutzer: " & $readshowname & " | " & _
    					"Schulungsprofil: " & $READPROFILE & " (" & IniRead(@ScriptDir & "\DATA\USERS\" & $readlogin1 & "\PROFILES\" & $READPROFILE, "GlobalInfo", "Date", "") & "-" & _
    					IniRead(@ScriptDir & "\DATA\USERS\" & $readlogin1 & "\PROFILES\" & $READPROFILE, "GlobalInfo", "DateEnd", "") & ")")
    		EndIf
    		_checkribbon($iTimer2)
    ;~ 		_checkipadress()
    		$iTimer1 = TimerInit()
    
    
    	EndIf
    
    
    	If TimerDiff($iTimer2) > 2000 Then ; Alle 2 Sekunden
    		If $STATEMINIM = 0 Then
    			_refreshroutine()
    			_getthumbnails()
    		EndIf
    		$iTimer2 = TimerInit()
    	EndIf
    
    
    	If TimerDiff($iTimer5) > 5000 Then ; Alle 5 Sekunden
    		If ProcessExists("TC-GetContent.exe") = False Then ShellExecute(@ScriptDir & "\APPS\TC-GETCONTENT\TC-GetContent.exe")
    
    
    		$READMAXENTRIESOFERROR = GUICtrlRead($MAXNUMERSOFERRORENTRIES)
    		if $READMAXENTRIESOFERROR > 0 Then
    			$COUNTALLLINESINERROR = _FileCountLines(@ScriptDir & "\CODE\ERROR.log")
    			If $COUNTALLLINESINERROR > $READMAXENTRIESOFERROR Then
    				$todeleteentries = $COUNTALLLINESINERROR - $READMAXENTRIESOFERROR
    				for $i= 1 to $todeleteentries
    					_FileWriteToLine(@ScriptDir & "\CODE\ERROR.log", $READMAXENTRIESOFERROR,"",1)
    				Next
    			EndIf
    		EndIf
    		_checkclientstateinfo()
    		$iTimer5 = TimerInit()
    	EndIf
    
    
    	If TimerDiff($iTimer3) > 10000 Then ; Alle 10 Sekunden
    		_uploadsignoflife()
    		_downloadsrvmsgs()
    		If IniRead(@ScriptDir & "\CODE\TMPDATA\STATES\pos.cw1", "Change", "Value", "0") = "1" Then
    			_Ribbon_Destroy($oRibbFramework, $oApp, $oHandlers)
    			_Ribbon_Create($main_form, $hRibInstance, $sResName, $oRibbFramework, $oApp, $oHandlers)
    			IniWrite(@ScriptDir & "\CODE\TMPDATA\STATES\pos.cw1", "Change", "Value", "0")
    		EndIf
    
    
    		_checkerrors()
    		$SIZEOFERROR = FileGetSize(@ScriptDir & "\CODE\ERROR.log")
    		$CHACESIZEOFERROR = IniRead(@ScriptDir & "\CODE\TMPDATA\STATES\sizeoferror", "INFO", "VALUE", "")
    		If $SIZEOFERROR <> $CHACESIZEOFERROR Then
    			If IniRead(@ScriptDir & "\DATA\USERS\" & $readlogin1 & "\userconfig.cw1", "SETTINGS", "ERRORLOGAUTOUPDATE", "1") = "1" Then
    				_refresherrorlog()
    				IniWrite(@ScriptDir & "\CODE\TMPDATA\STATES\sizeoferror", "INFO", "VALUE", FileGetSize(@ScriptDir & "\CODE\ERROR.log"))
    			EndIf
    		EndIf
    		$iTimer3 = TimerInit()
    	EndIf
    
    
    	If TimerDiff($iTimer4) > 30000 Then ; Alle 30 Sekunden
    		__checkupdate()
    		_gettcclienterrors()
    
    
    
    
    		If IniRead(@ScriptDir & "\CODE\TMPDATA\UPDATEINFO\update.cw1", "WARTUNG", "Value", "0") = "1" Then
    			$flaglock3 = IniRead(@ScriptDir & "\CODE\TMPDATA\UPDATEINFO\update.cw1", "WARTUNG", "flag", "")
    			$titlelock3 = IniRead(@ScriptDir & "\CODE\TMPDATA\UPDATEINFO\update.cw1", "WARTUNG", "title", "")
    			$msglock3 = IniRead(@ScriptDir & "\CODE\TMPDATA\UPDATEINFO\update.cw1", "WARTUNG", "message", "")
    			$timelock3 = IniRead(@ScriptDir & "\CODE\TMPDATA\UPDATEINFO\update.cw1", "WARTUNG", "time", "")
    			TrayTip($titlelock3,$msglock3,$timelock3,$flaglock3)
    		EndIf
    		$iTimer4 = TimerInit()
    	EndIf
    Alles anzeigen
  • Benötige hilfe zu, IniWrite; Section; Key

    • KriZza
    • 17. Juli 2015 um 09:36

    Hier schon mal ein kleiner Anfang....

    Edit: war noch ein kleiner Fehler drin...

    Die Datei wird immer neu aufgebaut, also greift auch bei Änderugnen.

    AutoIt
    #include <File.au3>
    
    
    _FileCreate(@ScriptDir & "\convert.txt")
    $fileopen = FileOpen(@ScriptDir & "\convert.txt",10)
    $readnames = IniReadSectionNames(@ScriptDir & "\test.ini")
    If Not @error Then
    	For $i = 1 To $readnames[0]
    		$readsectioncontent = IniReadSection(@ScriptDir & "\test.ini",$readnames[$i])
    		   If Not @error Then
    				For $i2 = 1 To $readsectioncontent[0][0]
    					FileWrite($fileopen,"["&$readnames[$i]&"]"&" "&$readsectioncontent[$i2][0] & " = " &$readsectioncontent[$i2][1] & @CRLF)
    				Next
    			EndIf
    	Next
    EndIf
    FileClose($fileopen)
    Alles anzeigen
  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 19. Juni 2015 um 17:55

    Doch nicht erledigt. Unfassbar: jetzt gehen jegliche Dateiformate nur nichts mit "String" --- > .txt, .ini oder ähnliches.

    Kann mal bitte jemand über das Script schauen und gucken woran das liegen könnte?

    Danke,
    Chris

  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 19. Juni 2015 um 10:29

    Habs jetzt neu erstellt und es klappt aufgrund der der _TCPFileTransfer.au3 --> modifiziert mit Dateinamen ...

    AutoIt: Receive
    #include <WinAPI.au3>
    
    
    $MainPath = RegRead("HKEY_CURRENT_USER\Software\TTC-CLIENT", "MainPath")
    Global $DATATRANSPORT = IniRead($MainPath & "\CODE\client_config.cw1","FILETRANS","TCPPort","5103")
    
    
    
    
    TCPStartup()
    $sock = TCPListen(@IPAddress1,$DATATRANSPORT)
    Do
    	$ssock = TCPAccept($sock)
    Until $ssock <> -1
    
    
    While 1
    	$RECNAME = TCPRecv($ssock,1024)
    	If $RECNAME <> "" Then
    		If StringInStr($RECNAME,"||") Then
    			$RECNAME = StringTrimLeft($RECNAME,2)
    			$FileSave = FileSaveDialog("TC-Client | Dateiübertragung",@DesktopDir,"Alle Dateien (*.*)",0,$RECNAME)
    			If @error Then
    				Exit
    			Else
    				$rFileRecv = _TCPFileRecv($ssock, $FileSave)
    				Sleep(1000)
    				TCPShutdown()
    				Exit
    			EndIf
    		Else
    			Sleep(1000)
    			TCPShutdown()
    			Exit
    		EndIf
    	EndIf
    WEnd
    
    
    
    
    Func _TCPFileRecv($sock, $rFile, $offset = 0, $DataSize = 1024)
    	Local $i, $x, $lpszBuff, $nBytes, $rBuff, $hFile
    	$nBytes = 0
    	$lpszBuff = DllStructCreate("byte["&$DataSize&"]")
    	$hFile = _WinAPI_CreateFile($rFile,3,4,4)
    	If $hFile = 0 Then
    		_WinAPI_CloseHandle($hFile)
    		SetError(1)
    		SetExtended($nBytes)
    		Return 0
    	EndIf
    	While 1
    		If _WinAPI_SetFilePointer($hFile, $offset, 0) = -1 Then
    			_WinAPI_CloseHandle($hFile)
    			SetError(2)
    			SetExtended($nBytes)
    			Return 0
    		EndIf
    		$rBuff = ""
    		$rBuff = TCPRecv($sock, $DataSize)
    		If $rBuff <> "" Then
    			If @error = -1 Then
    				_WinAPI_CloseHandle($hFile)
    				SetError(3)
    				SetExtended($nBytes)
    				Return 0
    			EndIf
    			If $rBuff = @CRLF&@CRLF Then
    				ExitLoop
    			Else
    				DllStructSetData($lpszBuff, 1, $rBuff)
    				$x = StringLen(BinaryToString($rBuff))
    				If _WinAPI_WriteFile($hFile, DllStructGetPtr($lpszBuff), $x, $i) = False Then
    					_WinAPI_CloseHandle($hFile)
    					SetError(4)
    					SetExtended($nBytes)
    					Return 0
    				Else
    					$nBytes += $i
    					$offset += $i
    				EndIf
    			EndIf
    		EndIf
    	WEnd
    	_WinAPI_CloseHandle($hFile)
    	SetExtended($nBytes)
    	Return $nBytes
    EndFunc ;==> _TCPFileRecv
    Alles anzeigen
    AutoIt: Senden
    #include <WinAPI.au3>
    
    
    
    
    $CheckR01 = @IPAddress1
    $CheckDataTransPort = 5103
    
    
    $GetDataName = FileOpenDialog("TC",@DesktopDir,"Alle Dateien (*.*)")
    If @error Then
    	Exit
    Else
    	TCPStartup()
    	$sock = TCPConnect($CheckR01,$CheckDataTransPort)
    	$sFile = StringTrimLeft($GetDataName,StringInStr($GetDataName,"\",-1,-1))
    	$Sendname = TCPSend($sock, "||"&$sFile)
    	If not @error Then
    		$sFileSend = _TCPFileSend($sock, $GetDataName)
    		Do
    			Sleep(10)
    		Until FileGetSize($GetDataName) = $sFileSend
    			Sleep(100)
    		TCPShutdown()
    		Exit
    	Else
    		Sleep(100)
    		TCPShutdown()
    		Exit
    	EndIf
    
    
    
    
    EndIf
    
    
    
    
    Func _TCPFileSend($sock, $sFile, $offset = 0, $DataSize = 1024)
    	Local $i, $lpszBuff, $nBytes, $sBuff, $hFile, $nFileSize
    	$nFileSize = FileGetSize($sFile)
    	$nFileSize -= $offset
    	If $nFileSize < $DataSize Then $DataSize = $nFileSize
    	$nBytes = 0
    	$lpszBuff = DllStructCreate("byte["&$DataSize&"]")
    	$hFile = _WinAPI_CreateFile($sFile,2,2,2)
    	If $hFile = 0 Then
    		_WinAPI_CloseHandle($hFile)
    		SetError(1)
    		SetExtended($nBytes)
    		Return 0
    	EndIf
    	While $nFileSize > 0
    		If _WinAPI_SetFilePointer($hFile, $offset, 0) = -1 Then
    			_WinAPI_CloseHandle($hFile)
    			SetError(2)
    			SetExtended($nBytes)
    			Return 0
    		EndIf
    		DllStructSetData($lpszBuff,1,"")
    		If _WinAPI_ReadFile($hFile, DllStructGetPtr($lpszBuff), $DataSize, $i) = False Then
    			_WinAPI_CloseHandle($hFile)
    			SetError(3)
    			Return 0
    		Else
    			$sBuff = DllStructGetData($lpszBuff, 1)
    			$i = TCPSend($sock, $sBuff)
    			If $i = 0 Then
    				_WinAPI_CloseHandle($hFile)
    				SetError(4)
    				SetExtended($nBytes)
    				Return 0
    			Else
    				$nBytes += $i
    				$offset += $i
    				$nFileSize -= $i
    			EndIf
    		EndIf
    	WEnd
    	_WinAPI_CloseHandle($hFile)
    
    
    	TCPSend($sock, @CRLF&@CRLF)
    	SetExtended($nBytes)
    	Return $nBytes
    EndFunc ;==> _TCPFileSend
    Alles anzeigen
  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 19. Juni 2015 um 08:21

    Naja, meine Annahme beruht darauf, das ich alles übertragen kann (jpg, bmp, 10 MB große Textdateien, zip-Dateien usw.) nur halt keine exe -Dateien. Da wird mir immer was abgeschnitten! Heute habe ich etwas Zeit dafür. Mal schauen....

  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 18. Juni 2015 um 16:58

    So, bei bisschen konnte ich mir das bestehende Script anschauen. Mich wundert das bei euch ".exe" - Dateien funktionieren, da hier beim Empfang sofort von Binary in String konvertiert wird. Damit zerhaue ich mir doch die .exe oder?

  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 9. Juni 2015 um 17:37

    Ich werde mir das morgen nochmal genauer Anschauen und ein paar Prüfungen mehr einbauen. Melde mich dann..

  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 9. Juni 2015 um 10:32

    ne, die funktioniert nicht. "Keine gültige Win32 Anwendung" oder so. Ja über die Eigenschaften. Die Originaldatei hat dann z.B. 800 KB die neue 700 KB

  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 9. Juni 2015 um 08:48

    Wow, okay :/ ne nix außergewöhnliches. Win 8.1, gleiche Platte, gleiche Partition (zum Testen) sonst über TCP, klar. Beides geht nicht.

    Das Problem hab ich aber auch nur wenn ich ausführbare Dateien senden/empfangen möchte, also z.B. selbst kompilierte mit AutoIT. Sonsige Dateien, .txt .doc .jpg funktioniert alles.

  • TCP - Datenübertragung -- Ausführbare Dateien gehen nicht

    • KriZza
    • 8. Juni 2015 um 08:08

    Guten morgen zusammen,

    ich habe von @GtaSpider die Skript-Basis genutzt (folgender Thread) um Dateien per TCP zu senden / empfangen. Leider Funktionieren keine ".exe"-Dateien. Beim Empfänger ist die Datei um einen gewissen Grad kleiner. Hat einer eine Idee woran das liegen kann?

    Datei senden:

    AutoIt
    #NoTrayIcon
    
    
    #Include <File.au3>
    
    
    AutoItSetOption("GUICloseOnESC", 1) ;ändern auf 0 wenn fertig
    AutoItSetOption("TrayAutoPause", 0)
    AutoItSetOption("TrayIconHide", 1)
    
    
    TCPStartup()
    
    
    $CheckR01 = @IPAddress1 ;Empfänger
    
    
    
    
    $GetDataName = @ScriptDir & "\text.exe" ;Datei
    
    
    _FileSend($GetDataName,$CheckR01)
    
    
    
    
    
    
    Func _FileSend($sFile, $IP, $PORT = 5103,$iSplash=0, $iWaitWhileConnected = 1)
    	Local $iMainSocket = -1, $sBuff, $iFileOp,$sRecv
    
    
    	If Not FileExists($sFile) Then Return SetError(1,0,-1)
    	If $iSplash Then $iSplash = SplashTextOn('','Try To Connect...',200,20,-1,-1,1)
    	TCPStartup()
    
    
    	If Number($iWaitWhileConnected) = 1 Then
    		While $iMainSocket = -1
    			$iMainSocket = TCPConnect($IP, $PORT)
    		WEnd
    	Else
    		$iMainSocket = TCPConnect($IP, $PORT)
    		If @error Then Return SetError(2, 0, -1)
    	EndIf
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Read File...')
    	$iFileOp = FileOpen($sFile, 16)
    	If @error Then Return SetError(3,0,-1)
    	$sBuff = Binary(StringTrimLeft($sFile,StringInStr($sFile,"\",-1,-1))&",")&FileRead($iFileOp)
    	FileClose($iFileOp)
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Sending File...')
    	While BinaryLen($sBuff)
    		$iSendReturn = TCPSend($iMainSocket, $sBuff)
    		If @error Then Return SetError(4, 0, -1)
    		TrayTip('',$iSendReturn,1)
    		$sBuff = BinaryMid ($sBuff, $iSendReturn + 1, BinaryLen ($sBuff) - $iSendReturn)
    	WEnd
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Succesfull!')
    	TCPCloseSocket($iMainSocket)
    	TCPShutdown()
    	Sleep(1000)
    	SplashOff()
    	Return 1
    EndFunc
    Alles anzeigen


    Datei empfangen:

    AutoIt
    Global $DATATRANSPORT = 5103
    
    
    _FileReceive("", @IPAddress1, $DATATRANSPORT)
    
    
    Func _FileReceive($sFileName = '', $IP = @IPAddress1, $PORT = 5103,$iSplash=0)
    	Local $iMainSocket, $iAccSocket = -1, $sBuff, $sRecv = "", $i = 0, $iFirstWhile = True
    	Local Const $TCP_RECEIVELEN = 4096
    	TCPStartup()
    
    
    	$iMainSocket = TCPListen($IP, $PORT)
    	If @error Then Return SetError(1,0,-1)
    	If $iSplash Then $iSplash = SplashTextOn('','Wait For Incoming...',200,20,-1,-1,1)
    	While $iAccSocket = -1
    		$iAccSocket = TCPAccept($iMainSocket)
    		Sleep(50)
    	WEnd
    	$sBuff = Binary ($sBuff)
    
    
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Incoming...')
    
    
    	While $sRecv = ""
    		$sRecv = TCPRecv($iAccSocket, 2048, 1)
    		$sRecv = BinaryToString ($sRecv)
    	WEnd
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Receive File...')
    	While $sRecv <> ""
    		If StringInStr($sRecv, ',') And $iFirstWhile = True Then
    			$sTmp = StringLeft($sRecv, StringInStr($sRecv, ",") - 1)
    			$savedata = FileSaveDialog("TC-Client | Dateiübertragung",@DesktopDir,"Alle Dateien (*.*)",0,$sTmp)
    			$sRecv = StringTrimLeft($sRecv, StringLen($sTmp) + 1)
    			If StringLen($sFileName) < 1 Then $sFileName = $sTmp
    			$iFirstWhile = False
    		EndIf
    		$sBuff &= $sRecv
    		$sRecv = BinaryToString (TCPRecv($iAccSocket, 2048, 1))
    		If @error Then ExitLoop
    	WEnd
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Write To File...')
    	If FileExists($savedata) Then
    		$sTmp = StringSplit($savedata, ".")
    		If $sTmp[0] < 2 Then
    			While 1
    				$i += 1
    				If Not FileExists($savedata & "(" & $i & ")") Then
    					$savedata = $savedata & "(" & $i & ")"
    					ExitLoop
    				EndIf
    			WEnd
    		Else
    			While 1
    				$i += 1
    				If Not FileExists($sTmp[1] & "(" & $i & ")" & $sTmp[2]) Then
    					$savedata = $sTmp[1] & "(" & $i & ")." & $sTmp[2]
    					ExitLoop
    				EndIf
    			WEnd
    		EndIf
    	EndIf
    	$iFileOp = FileOpen($savedata, 16 + 2)
    	If @error Then Return SetError(2,0,-1)
    	FileWrite($iFileOp, $sBuff)
    	If @error Then Return SetError(3,0,-1)
    	FileClose($iFileOp)
    	If $iSplash Then ControlSetText($iSplash,'','Static1','Succesfull!')
    	TCPCloseSocket($iAccSocket)
    	TCPShutdown()
    	Sleep(1000)
    	Return 1
    EndFunc   ;==>_FileReceive
    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™