Okay, danke für eure Hilfe...
Ich merke, ich hab noch einiges zu lernen GDI ist noch ein bömischen Dorf für mich
Okay, danke für eure Hilfe...
Ich merke, ich hab noch einiges zu lernen GDI ist noch ein bömischen Dorf für mich
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)
#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
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:
!>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)
#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
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
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
#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
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.
_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
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.
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 :-/
Ich hasse dieses rumgesochere im Nebel 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 Mal einen Lasttest durchführen
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"
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
Hier schon mal ein kleiner Anfang....
Edit: war noch ein kleiner Fehler drin...
Die Datei wird immer neu aufgebaut, also greift auch bei Änderugnen.
#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
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
Habs jetzt neu erstellt und es klappt aufgrund der der _TCPFileTransfer.au3 --> modifiziert mit Dateinamen ...
#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
#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
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....
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?
Ich werde mir das morgen nochmal genauer Anschauen und ein paar Prüfungen mehr einbauen. Melde mich dann..
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
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.
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:
#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:
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