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

Beiträge von UEZ

  • Bilder in Skript einbauen + benutzen ohne entpacken

    • UEZ
    • 5. Mai 2011 um 14:59

    Wie meinst du das? Und wie willst du das Bild benutzen?

    Zeig' mal einen Screenshot.

    Gruß,
    UEZ

  • Bilder in Skript einbauen + benutzen ohne entpacken

    • UEZ
    • 5. Mai 2011 um 14:48

    Aldi Nord oder Süd?

    Na egal, du musst das Bild in ein Binärstring umwandeln und in dein Skript einfügen. Anschließend kannst du es in deine GUI verwenden.


    Beispiel:

    Spoiler anzeigen
    [autoit]


    #include <GDIplus.au3>
    #include <GUIConstantsEx.au3>
    #Include <Memory.au3>

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

    Opt("MustDeclareVars", 1)
    _GDIPlus_Startup()
    Global $hStream, $nMsg
    Global $hImage = Load_BMP_From_Mem(Background_PIC())
    ;~ Global $hImage = Load_BMP_From_Mem(InetRead("http://www.autoitscript.com/forum/public/style_images/autoit/logo.png")) ;to load an image from the net
    Global $iWidth = _GDIPlus_ImageGetWidth($hImage)
    Global $iHeight = _GDIPlus_ImageGetHeight($hImage)

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

    Global $hWnd = GUICreate("Display image from memory by UEZ 2010", $iWidth, $iHeight)
    GUISetState(@SW_SHOW)

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

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    _GDIPlus_GraphicsDrawImageRect ($hGraphics, $hImage, 0, 0, $iWidth, $iHeight);copy bitmap to GUI

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

    GUISetState()

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

    GUIRegisterMsg(0x0014, "WM_ERASEBKGND")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    _MemGlobalFree($hStream)
    GUIDelete($hWnd)
    Exit
    EndSwitch
    WEnd

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

    Func WM_ERASEBKGND($hWnd, $uMsgm, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImageRect ($hGraphics, $hImage, 0, 0, $iWidth, $iHeight)
    Return True
    EndFunc ;==>WM_ERASEBKGND

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

    ;======================================================================================
    ; 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 $ghGDIPDll 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($ghGDIPDll, "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

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

    Func Background_PIC()
    Local $bitmap_data = '0xFFD8FFE000104A46494600010101004800480000FFDB004300191113161310191614161C1B191E253E29252222254C373A2D3E5A505F5E595057566470907A646A886C56577DAA7E889499A1A2A161'
    $bitmap_data &= '78B0BDAF9CBB909EA19AFFDB0043011B1C1C252125492929499A6757679A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9AFF'
    $bitmap_data &= 'C0001108015C016003012200021101031101FFC4001F0000010501010101010100000000000000000102030405060708090A0BFFC400B5100002010303020403050504040000017D0102030004110512'
    $bitmap_data &= '2131410613516107227114328191A1082342B1C11552D1F02433627282090A161718191A25262728292A3435363738393A434445464748494A535455565758595A636465666768696A73747576777879'
    $bitmap_data &= '7A838485868788898A92939495969798999AA2A3A4A5A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE1E2E3E4E5E6E7E8E9EAF1F2F3F4F5F6F7F8F9FAFFC4001F0100'
    $bitmap_data &= '030101010101010101010000000000000102030405060708090A0BFFC400B51100020102040403040705040400010277000102031104052131061241510761711322328108144291A1B1C109233352F0'
    $bitmap_data &= '156272D10A162434E125F11718191A262728292A35363738393A434445464748494A535455565758595A636465666768696A737475767778797A82838485868788898A92939495969798999AA2A3A4A5'
    $bitmap_data &= 'A6A7A8A9AAB2B3B4B5B6B7B8B9BAC2C3C4C5C6C7C8C9CAD2D3D4D5D6D7D8D9DAE2E3E4E5E6E7E8E9EAF2F3F4F5F6F7F8F9FAFFDA000C03010002110311003F00EA68A28A004A28A2800A28A2800A5A4A'
    $bitmap_data &= '5A0028A28A004A28A2800A28240EA69BBFD066801D41351EE27BFE5556FAF61B180CB3B703A0EEC7B01401667B986DE26965915235EAC7A5625C78AEDD09104124A47F788407F99AE7B53D4E7D465DD2'
    $bitmap_data &= '9DB1A9F9630785FF001354A803725F14DFB83E5A4318F50A49AAAFAFEA8DD6E88FF763518FD2B368A00BA757D44FFCBECDF9D31B53BF63CDEDC7E0E4555A075A00B6BA95F29E2F2E3FEFE1353C7AE6A7'
    $bitmap_data &= '19C2DDB30FF69437F4ACEA2803723F146A083E7481FEA841FE75761F16A9C09ECD87A98DF3FA1C572FC7B51C1A00EE6D35FB0BB2144A6273D1651B73F8F4FD6B4B7003920579A62B474DD66EEC18287F'
    $bitmap_data &= '361EF1BFF43401DDD15474FBF86FE1F36DDC823EF23755356BCDC1C30FCA8024A2915837439A5A0028A28A005A28A2800A4A5A4A0028A28A0028A28A005A28A2800A28A280128A28A0028A28A0029692'
    $bitmap_data &= '96800A2929ACDD875A0071200E698589E9C52753CD18A004C7AF34BDA8FD4D183DFF004A00648E11493FCEB94D512E754BD6F223792388EC1B06467B9CD758D1238C32823DEA1FB05991836B0919CE0A'
    $bitmap_data &= 'E6803935F0EEA2DFF2EEA31EB22FF8D35F41D453ADA93D7EEB03FD6BAB3A5D8B74B645FF00772BFCA9A74E8F9F26E6EA127AEC9B3FCF3401C54D657101C4B04A9F55355F83DFF5AEF0C1A8A488D1DEAC'
    $bitmap_data &= '88A0FEEE48F696FA919FE5542E4DC04C5DE8D14E0B75800231FCF3401C9E3EB4015B922685712948DE7B66E9B88F941F7CD6348BE5BB28656C7F129C834806D1467D28CD300E28E0D3A18659DF6428D2'
    $bitmap_data &= '31E81466B52DFC397F2E0C8A9003FDF6E7F21401918EB4B9E3AD7556DE17B440A6E659256EA557E51FE35A7058DA5B0FDC5B4687D76E4FE668038ED3E5BBB5B84B8B68A4623A8542430F4E95DBC122DD'
    $bitmap_data &= '40B22065DC39561823EB4E2EDEA69849EB9A000A9539FE54E595875E6981A918D005A4915FA1E7D29D54B383FD6A549F1C3F23D6802CD1480E46472296800A4A5A4A0028A28A0028A28A005A28A2800A'
    $bitmap_data &= '28A280128A28A0028A28A0028E9413819351925B9ED400A589E9D29296933D81E7F41400BD3AD2633D7F2A31F9D2D001DA92968C134009453B6FA9A5C0A00652F3EF4EA280198F6A4E8734FA69EB4015'
    $bitmap_data &= '6EECADAED4ADCC0AD9EA7186FCEB9DD43C392C21A4B3732A01928DF787F8D755D3A5318E07F9E2901C3D969B757EE5204FBBC3337017EBFE15D1D97872CE001AE337127BF0A3E83BD6BC0010C400096C'
    $bitmap_data &= '9C0EA6949A602468912EC891635FEEAA8028CD19A4CD002E69B45266800348682690D001466933499A0043D699BB1F5F4A71A8DA80268E5287E53F81AB71CAB20E3AFA5660247B9A9164C1C838228034'
    $bitmap_data &= 'A8A861B80FF2B70DFCEA6A0028A28A0028A28A005A28A2800A28A280128A28A00290900734A4E064D46492727F0A0009C9E68A290B7200EA68017D875EFED4A38A4030296800A0734019A7018A004005'
    $bitmap_data &= '2D2D2500145149400B4945140013519A731A650014C90E14D3B3514BF74F7A0096D8E54FD694D36D0E51B9CF3413400519A4CD266801690D266933400B9A69A0D25002D349A0D21A0009A6B52D34D003'
    $bitmap_data &= '0D3738A7B546C2901223E78EF572DEE338473F43594CE55B1F954B1CCADD68036851556DA7FE073F4356A98051451400B451450025145140051453246C0C7734008CD93EC2A392548C12C6B3B53D5A1B'
    $bitmap_data &= '31B3EF49FDD1D6B98BDD42E2F09DEF84FEE2F02803A4BBD76DA2C8594337A20DD8AB9A64C6EA13704150C70A1860815CB6856AB7178C6540F1428CECBD89ED9AEAF4C4D9A6DB0F540C7F1E6802D5039A'
    $bitmap_data &= '29C06280140C51451400514525001451484E2800CD2134D249A4CD0004D2134526680026A298FCA79C53F3514C7E5340135A1FDD367D683D6996847932633D7BD29340066933452668016928CD250019'
    $bitmap_data &= 'A4CD04D26680026909A334D2680026909A0D3734800D34D2E6909A0086E14B44C17EF8195FC2B2A1D4A39387055BB8F4AD763DC76AE5F518FCABE9D40C0DD91F43CD0074305D74C36E5FD7F0ADAB2B95'
    $bitmap_data &= '9D319F997D6B82B7B97881C1CE3A035B7A7DFF009843C6C43AF634C475945456F309E1590719EA3D0D4B40C28A28A0028A28A004AC6D7B5316716C8F99DFF415A97532C10B3B1E00AE0AF6E5AEAE5E67'
    $bitmap_data &= 'E72703DA9010BBB3B16624B1E49A6FB504D14C0DDD1008B48D4AE09DA4AEC0C3E9DABA5B65D96F120FE1451F4E2B06C832F852520A02DB8E5BA01915D12741F4140878E296928A061451450019A2929A'
    $bitmap_data &= 'CD8A0052D8A613413494001A292933400A4D349A290D00213504EDF29A748E14735427B9C920520346CDB30C9FEFFF004A79AA56170A44B1EE059581C679E9570734C029294D21340099A4CD04D25000'
    $bitmap_data &= '4D26683484D0019A426909A69348009A6934134DCD002E6933484D26680063581ADA62ED5FB3A0FD38ADD26B1F5D19F25BEA28032475FD2A4B694C1306EDD0D4541E4FE14C0ECF46BEC3181CFCAE728C'
    $bitmap_data &= '7D6B72B86D3A6DF1019C3271FE15D7E9F73F6980163F3AF0DFE3408B545145030A28A64AC1509F419A00E7FC5179B631021E5BAD72E6AE6AB706E6FA47CE40F94552A402D349A5349D2981D4C40A785B'
    $bitmap_data &= '0BB49F2F71CF41CD6EC4D98D0E7AA839FC2B96B7B9497C377313E4B4202E07A6783F4AE8AC641258DBB7AC4BFCA8116B70A5A652838A063A8A2909A00466C5333413CD25001499A33499A005CD2519A6'
    $bitmap_data &= '3B851C9A0071200AAB7174B1E7904D55BBBE0AA483C0EF59E77CEA6792516F6C33995FF88FA28EE695C092E2F4BB84505D9B85451924D56BC5FB3A117739597A8822C17FF811E82ABCDA90855A2D3A33'
    $bitmap_data &= '02918695B995C7B9FE1FC2B349CD005A86F64864F3136E4F5DDCE6B5ED35A121559015909C63A2D73B4B9A6076E97432AAC4063C6323FCF6A977822B8DB5BD92D81002B29209C8E98F4ADCB4BF591771'
    $bitmap_data &= '753C0620751CE31401AD9A4CD4492065073D69D9A40389A6934134D2680149A693484D21340013484D14C2680149A4CD25266800CD65EB7FEA61FF007CFF002AD326B2B5C384817D4B1FE5480C8A0D14'
    $bitmap_data &= '7639AA027B297CAB85CF46F94D74FA5DC7952A9FE13C115C88EA2B7EC65CAA93F43408EC0515574F94CB6E013F32F06AD50303D2B375BB9F22CA420F27815A24E0126B97F144E7747083D064D26073C4'
    $bitmap_data &= 'D3694D211C50021A4CD21A298134170F0A4A8A7E49576B0AEB3C3B7225D2D10FDE898A91E80F23F9D71C0648007278E2BADD0348B8B4065B8936190730819FA13E86811B218519A6B5BB0FBAC3F1A8CA'
    $bitmap_data &= 'CA9D54E3DB9A064E1A94B66AAF9D86C1EA3B5384C0D004A69A4D37CC1EB4D2E2801F9A3351EF1EB55E7B908081D690134B3AC6BC91593777C4B8450CCCFC2AA8C926A296792E6468A1DA580CB3B1C246'
    $bitmap_data &= '3D58D519B505B60D1D83B348DC4976C30CC3D17FBA3F5340135C3C564CC6EB6CF720E45B86F9233FED91D4FB0ACBBBBB9EF24DF3C85881851D028F403B5419A298051451400514514005490CD2432078'
    $bitmap_data &= 'DB0C3DB351D1401B363A86E28B2300C0818C76AD68AE15C641AE47A55DB6BF78F89373003822803A6DD49BAA9C574AE3860DEEBEF536EA404D486981A82F8A007134D269A589E9460E32680173494D32'
    $bitmap_data &= '46A46581CF4C734D12B3FF00AB898F3DE801E47358BADCA1AE5631FF002CD79FA9AD9D9707925107A561EA163342CD2B9F3158E4B8EC7DC50053C700D21E45283918A3BD30183AD6AD84986DA7BD65E3'
    $bitmap_data &= '9AB70BF96EADE87F4A04759A54BB650A4F0E31F8D6C0AE6AD64DA432F51C8AE91486504743C8A006CA7803D6B87D726F375190E720715DA4EDCB63F856B80BC7DF732B7AB5219075A1A81DE90D301297'
    $bitmap_data &= 'FA5256EF86F4C1712FDAE750618CE1148FBEDFE02802FF0087B4816EAB7972BFBE6198D0FF0000F53EFF00CAB709A4272793CD1400BB8FAD2F98477A6526680242C8E0875073D6A26B7858E412BEC0F1'
    $bitmap_data &= '4669A4D0044D6B328F94AC9CFF000F155A46647D8D956F46E0D5DDE45299372E1802BEFCD20335E560A7B71D735917776245DC1D92107EF8EAC7D17FC6AE6B76C00F32157DAC312053C01F8D73B24B24'
    $bitmap_data &= '857CC6276A851EC3D2840493DCB489E527C90839080F7F53EA6A0CD2514C028A28A0028A28A0028A28A0028A28A0028A28A009A199E13F21E3392A2B66CAED675C67E6CF4C5608EB562CB719D0062371'
    $bitmap_data &= '00E0E0F5A00E84B0519770A3DE9AB32BB01123CBEE0607E75716D2DA01911EE3EB21DC69249CF41C0F6E29015C4772E08212204F07A9A3ECE9BB3248CC7183CF14A589EB462801CAB1A0C24629779E94'
    $bitmap_data &= 'D145002E49A6E3D4641EA0F7A5A290187A9597D9D84B08FDD31E47F74FA7D2A89E79AEA2445746561956186AE76EED9AD6731B72BFC27D453021C6483528E7BD442A45A00DAD3A4DF146D9E7A1AE9EC1'
    $bitmap_data &= 'F75AA0FEEFCB5C7E96F82E9E8435751A53F0E99EC1BFA1A621D74F88266FF64D704E7249F539AEFA48BCE8DE3E9B948AE065431C8D1B70C84823D297518DA4A28C64F14C0B16166F7D771DBA7058FCC7'
    $bitmap_data &= 'D07735DDC512410AC310C471A8551E9FFEBACCF0ED87D92CBCE7044B380707AAAF61FD6B5280173499A4A280149A6D1494001A69A53486801B4529A69A00A3A9A892DD9480723BD720C3048F438AEDAE'
    $bitmap_data &= '40DB9AE46FA3F2EE9C6EDD9E7E99A5D40AD45145300A28A2800A28A2800A28A2800A28A2800A28A2801455DD2D37DE4791900F41D6A956BE891E58C98E0753401B5339CE2A0EF4AC7269290052D14500'
    $bitmap_data &= '28A2814B400514514000AA9A85A0B980851FBC4F993DFDAAE521F51D7B5007298F51834F43C55DD5AD7CA9C4A8BF24BC9F635453D2802EE9ED8B9C7AAD74DA5BE2751FDE523FAD72B6876DD467EA2BA3'
    $bitmap_data &= 'B06DB24593F30607F034C46BA706B9DF12E944B1BDB75CE7FD6281FAD7424E0FE74EE19707A1A433CE2B4345B1FB6DEA2B7FAB1F331F615B1A9E8311633428C0756541FD2AC6836E21B79A5DB8323EC0'
    $bitmap_data &= '08C7CABFFD7A00D42727A63D3E9494525300A28A4A0033499A0D14001A6D29A6D001484D04D349A4032519435CCEB31E25570A391F330CF35D33F4AC6D6220D6EC4E46DF9B8E9401CF9A28228A601451'
    $bitmap_data &= '4500145145001451450014514500145145002A825801D4FAD745A747E5DB673C91587671EF980C1247207AD74A06C8C28E31498094528A290052D252D30014EC52014B4005145140051DA9690D004375'
    $bitmap_data &= '00B9B778BB9E87DFB573A8B899011804E315D45635FC18D464551F7B0EBC7AFF00FAA80086054B8DED8DABFCEB5B4F04CBBDBBE3354E0809F99B9FAD6ADAA6D03EB401A2DD7F1340349270C7EB40A604'
    $bitmap_data &= '81B14D3CF3499A40722800A6D29A4A00293345250014526683400669A4D0690D2010D21A09A69340086AA5D2074208E0F635689A864E45007253218E4652307351D5FD5A211CC1C646EED54284014514'
    $bitmap_data &= '5300A28A2800A28A2800A28A2800A28A5419603D7F1A00D5D2203BB7118EFD3922B58F26AB584423806076C67D6ACD20168A05140052D145000296814B40094B4B450025069692800A8A640D306E33B4'
    $bitmap_data &= '7352F6A6B60C9F402801635C2D5A88722A2030A054D08CB2FD45005D9C61CFE7518353CE3907F0AAE2980ECD229EBF5A334D0793400E269282692800A4A2933400521345252002690D1484F3400869A6'
    $bitmap_data &= '94D30D0006A37A79A635203335588BDBB1032579AC1652A706BAB9577020D61DD5B796F870DB3F85BA91EDF4A680CFA2A53037F0B2B7D0D37C993FB86980CA29DE549FDC6A3CA7FEE3500368A779727F'
    $bitmap_data &= '71BF2A3CA7FEE1A006D14FF264FEE9A5F25BB951F534011D5BB188BCC0601C0CF350848D7AB827D056B6956E42798DD58E47B52034546140A5C52E3BD1400514B4500252D14B40094EA414B400514B45'
    $bitmap_data &= '002514B450020148012E73DCF14E240524D118C01ED40121FBD562D5732A8FC6ABA8E6AED92E5C9F414016A55CA1F51551B8E6AF5549170C57F114C06669A4E0D2D358F1C50038D25267201A33480292'
    $bitmap_data &= '8A4A002928A4340052134521A00434DA5A4A00434D6A71A6E371A4033031963851C9345B44ACAD348832FF002A83D97FC69251E6B88547CA396352B37181D2802ACDA65A4849F2C29FF64E2AAB68F076'
    $bitmap_data &= '661F8D68939A4A00CD3A447FDF7FCE90E9098E5DBF3E2B4FF1A314019474A4FEFBFE747F64C7FDE6FCEB57146D140197FD9317707FEFAA51A5C23F801FA9AD4DA28DA28033858423AC4B562D87927CA3'
    $bitmap_data &= '8F2CFDC6F7F4AB054531D01183D0D0038D14B192EA77637AF5F71EB4628012968C52814C04A2969714008052D18A5A004A29714B834009453B6D18A008DB3C0E307AD3D4714D037B939C8A9280154568'
    $bitmap_data &= 'D9AE22CFA9AA2832462B51142205F4A007543703A37E15353645DC8453029919A69538A7D21A00893BAFA73450DF2B6E14E201E477A40369297068C1A0069A434EC1A4C5003690D3F148680194869D8C'
    $bitmap_data &= 'D3483400D393D2891844B81F7DB81ED4F00202CC781EB512E6472E4E476C8C520045D8806724F5269314F3C9A4C5301B8A314EA4C52013146297145300A28A2800A2968C500252114EC518A40447E461'
    $bitmap_data &= '205CB0E2A665C8DC07069A47A8A21C29F289273C827F95300C52E38A7151462801B814EC514B40098A2968A0028A5A2801291B85CF7A7E29BD587A0A00455C0A70A5A5028027B44DD2E4F45E6B405416'
    $bitmap_data &= '91ED8B27AB7353D300A28A2802AC8BB5C8A8CD599D72B91D455734011B0E2A1699205CCAC1533F78F6A9DC71587E219088121504976E83BD2036CF63C63D41C83495C8DB6A37D61850C760E0238CAD6C'
    $bitmap_data &= 'DAEBF6D2AA8B856898F52395A606A521A22749937C2EB227F790E7F3A5348069A4A53494001A4C6697AD24ADB138FBCDC0E3A500452B6F608ADC0FBC29C13803B511AE17279CD3E801BB4526DA7D1401'
    $bitmap_data &= '1628C5494628023A29E4518A008F14629F8A5C5003314014FC52D003768A368A751400D22A3914FF0009C1EC6A6C52114008AE244DC33C75A314C04C7203C907822A62280194B4B8A4A0028A5C64FF00'
    $bitmap_data &= '414C9E586D941B8952207A6EEA7E82801F8A503A9E807527A0FAFA5654DAF40A316F1348DD32FC0ACAB9BFBABE0048C4A7FCF34181401D247730CE596070F8382454A38AE7B436315C946C2EEAE8B140'
    $bitmap_data &= '0952C51EF70BEBD698055DB48F0A5C8E4F02802C8000E28A28A6014514500155245DAD8EDDAADD3254DEBC751D28029B74AC7D51034EAC41250607B56D30E2B2B514F9F3480CC619041C63DEAB49671B'
    $bitmap_data &= 'F20153ED5708A6914C0CF58AE2DDF7C12B291D0A9C1AB916B7A8C231304987AC8B93F98E6948A6114017E1F115B380278248C9EA508603F3E6AE47A9E9F2FDDBB45FFAE8A56B05A356FBCA0FD4540D6C'
    $bitmap_data &= '87A023E86803AB37768ABB8DDDBE3DA414C8CF9C7CCDDB958654E3B572124463E7823D7D2BA9D1A713E9917768F31B0CFA74A405C3462968A004A4A7525002514B450025252E28A004A2971462800A4A'
    $bitmap_data &= '5A2800A28A5A004A4A5A2801ACB915564D4ADAD6430DC39565E985CD5C38032C70A3924F615C85DCE6EEF65957F8DB8FA76A00DF7D72C17EEB4B27B2A63F99AA72F884F482D80F432367F4AC91128FBD'
    $bitmap_data &= 'CD386074005005A9B56BF9F8127963182231B41AA62224E59B9F5EB9A7E4934E5E94008B12E7919FAD48050053C0A009EC062E91BA60E338AE857A561D821F3D48CFD456F01C5301F1465DC28FC6B400'
    $bitmap_data &= '00003A0A8ADE3D8BB8FDE6FD2A6A0028A28A0028A28A0028A28A00AF3260E4743FA5676A11E5738AD8650C083D0D67DD2B2828CA194F43DE8030DD6A32B57258F048A81969015D854647356196A365A6'
    $bitmap_data &= '0458A691C53C8A4229010BAE4608CE6A5D22EFEC379B2427ECF37CA4FA1EC6908CD4334618106981D6B0DA70692B3743BE33C5F6498E658972AC7F897FC4569E29005262968A004C514B450025262969'
    $bitmap_data &= '6801B8A2968A004A314B45002514B45002514B51CF3476F0BCD29C220C9F7A00CED76F3C8B7FB3C67F7930C37A85FF00EBD6122EC5ED93E94F9656B99DEE65FBEE7200EDE95196C9A0009A2929545003'
    $bitmap_data &= '8548A29AA2A55F619F7A005029E8B9342AE6ACC517E74C0B7A6C5FBC271D2B6EDE2DCD93F74553D3E07C15518CF2CC7B0F4AD7550A000381400B4514500145145002D14514009451450014D9103AE0D3'
    $bitmap_data &= 'A8A00CABAB6CE481CF7AA0F1E3208AE8648C38F7ACFB9B6CE481CD2032192A265ABB24646460D40C9401519698455965A89969810E29AC38A948A691480AF978A5496162B221DC86BA6B1BB8EFAD9668'
    $bitmap_data &= 'F83D1D7FBADDFF000AE7D973F8D259DD49617226505A338F313FBC3FC45303A8A292391268D6589B7C6C32A47A7F8D3B14804A4A751400DA314B45002514B45002514B45002514B8A314009DF18AE775'
    $bitmap_data &= '6BD17570628DB3045DC7476ABDAC5FF9486DA023CD71F3907EE0F4FAD603B050157A0A00491B2714CA4A5A00515228A6AAF4A9D138A600ABCD4E8849A58E227B55B8A1F6A006471D69D859991F2471F4'
    $bitmap_data &= 'A5B3B3691BA62B6A28D6240AA3FF00AF400B1A2C6A15474A7514500145145002D145140051451400945145001451450014D740C39A752D0067DC5B67B7E3542584A93906B78804608AAF35B06E833401'
    $bitmap_data &= '80E950B256B4F6C57240C8F4AA4F1E33C52028B2D308F6AB4E9CD42CB40109151BA835330A610698126977E6C2529264DB391B80E761FEF0AE8C608054865619520F51EA2B94931C02325BA01CD6A68C'
    $bitmap_data &= 'B756F1B073FB96E911E40FC6901AF8A314D1321EA0A9A5DE87A30A0028A5CAFA8A38F5A004A28E3D45191DC8A0028A42CA3B8A699147A9A007E2B3F52D405B030C0434E4738E420F53EA7DAA6B969A48'
    $bitmap_data &= '5922631923008EB5CECCAD071306CFF78F434010C8D8CE5896639249E49A80D3DDB3CE6A3EBC0A0050326A454269F1444F6AB71407D29811450D5A8E1CF6A9E283DB35761B53C641FA0A00AD1404F41F'
    $bitmap_data &= 'A5695A596F39EC3B9AB56F641797181FDDABAA00000000F41400D8E358D70A31FD69D4514005145140051451400B4514500145145002514514005145140052D252D001494B450031D158723F1AA93D98'
    $bitmap_data &= '61903F1ABB450060CF6AC9CE38AA8F19F4AE99E256F63EB5525B6507E7418F51401CFB478EBC7D6912DA590E11767FB4C39FC16B6C5AC4A73819F7A9156341C103E9480CEB3D35223B8825C9F989E49A'
    $bitmap_data &= 'BEB18518029FB9474A42DF4A00428290C4A7A8A524D19A006F94BE94794B4B45002794BE9486343D69D450037628ED4BB56968A004205432C09229565041EB53519A00C2BAD0D598BC0DB7FD9ED5485A'
    $bitmap_data &= 'F94712C6C873D71B97F3ED5D4E47714D748D87CE463DC50062C16D9008C37B835761B43C647156E2B6877E6284313DD54568456C1797C67D05302A5BD9E718181EA6AFC50AC7D064FAD483A5140052D1'
    $bitmap_data &= '45001494B494005145140051451400B4514500145145002514514005145140052D252D001451450025145140051DA8A2802096DA393D54FB7F85577B5957EE10FF00A1ABF45006531643875653EE2943'
    $bitmap_data &= '83D0D6A544D6D049CB44B9F51C50051068CD4B359C680947907FC0B3FCEB3E491E3FE2DDF51480B79A3354C4EFED4E12B1F4A00B39A3350AB16EA6A4099FE36FD2801DBA90B0F5A516E0FF00CB47FD3F'
    $bitmap_data &= 'C2A54B146FBD2CBF98FF000A0080BD30CAA0E3233E9DEAFA69F6E3EF296FF7989A9E3863887EEE355FA0A00CC8E29E5FBB1B01FDE6E2ACC76001CCCFBFFD91C0ABB450022A855C28007A014B4514C028'
    $bitmap_data &= 'A28A005A28A2800A4A5A4A0028A28A0028A28A005A28A2803FFFD9'
    Return Binary($bitmap_data)
    EndFunc

    [/autoit]

    Diese Methode hat einen Schönheitsfehler: es kann das Bild nicht entladen und somit kann es zu einem Memory Leak kommen, wenn man ständig das Bild lädt!

    Progandy hat dafür einen Workaround:

    Spoiler anzeigen
    [autoit]


    #include-once
    #include<Memory.au3>
    #include<GDIp.au3>

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GDIPlus_ImageLoadFromHGlobal
    ; Description ...: Creates an Image object based on movable HGlobal memory block
    ; Syntax.........: _GDIPlus_ImageLoadFromHGlobal($hGlobal)
    ; Parameters ....: $hGlobal - Handle of a movable HGlobal memory block
    ; Return values .: Success - Pointer to a new Image object
    ; Failure - 0 and either:
    ; |@error and @extended are set if DllCall failed:
    ; | -@error = 1 if could not create IStream
    ; | -@error = 2 if DLLCall to create image failed
    ; |$GDIP_STATUS contains a non zero value specifying the error code
    ; Author ........: ProgAndy
    ; Modified.......:
    ; Remarks .......: After you are done with the object, call _GDIPlus_ImageDispose to release the object resources.
    ; The HGLOBAL will be owned by the image and freed automatically when the image is disposed.
    ; Related .......: _GDIPlus_ImageLoadFromStream, _GDIPlus_ImageDispose
    ; Link ..........:
    ; Example .......:
    ; ===============================================================================================================================
    Func _GDIPlus_ImageLoadFromHGlobal($hGlobal)
    Local $aResult = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "handle", $hGlobal, "bool", True, "ptr*", 0)
    If @error Or $aResult[0] <> 0 Or $aResult[3] = 0 Then Return SetError(1, @error, 0)
    Local $hImage = _GDIPlus_ImageLoadFromStream($aResult[3])
    Local $error = @error
    Local $tVARIANT = DllStructCreate("word vt;word r1;word r2;word r3;ptr data; ptr")
    Local $aCall = DllCall("oleaut32.dll", "long", "DispCallFunc", "ptr", $aResult[3], "dword", 8 + 8 * @AutoItX64, "dword", 4, "dword", 23, "dword", 0, "ptr", 0, "ptr", 0, "ptr", DllStructGetPtr($tVARIANT))
    If $error Then Return SetError(2, $error, 0)
    Return $hImage
    EndFunc ;==>_GDIPlus_ImageLoadFromHGlobal

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MemGlobalAllocFromBinary
    ; Description ...: Greates a movable HGLOBAL memory block from binary data
    ; Syntax.........: _MemGlobalAllocFromBinary($bBinary)
    ; Parameters ....: $bBinary - Binary data
    ; Return values .: Success - Handle of a new movable HGLOBAL
    ; Failure - 0 and set @error:
    ; |1 - no data
    ; |2 - could not allocate memory
    ; |3 - could not set data to memory
    ; Author ........: ProgAndy
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _MemGlobalAlloc, _MemGlobalFree, _MemGlobalLock
    ; Link ..........:
    ; Example .......:
    ; ===============================================================================================================================
    Func _MemGlobalAllocFromBinary(Const $bBinary)
    Local $iLen = BinaryLen($bBinary)
    If $iLen = 0 Then Return SetError(1, 0, 0)
    Local $hMem = _MemGlobalAlloc($iLen, $GMEM_MOVEABLE)
    If @error Or Not $hMem Then Return SetError(2, 0, 0)
    DllStructSetData(DllStructCreate("byte[" & $iLen & "]", _MemGlobalLock($hMem)), 1, $bBinary)
    If @error Then
    _MemGlobalUnlock($hMem)
    _MemGlobalFree($hMem)
    Return SetError(3, 0, 0)
    EndIf
    _MemGlobalUnlock($hMem)
    Return $hMem
    EndFunc ;==>_MemGlobalAllocFromBinary

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MemGlobalAllocFromMem
    ; Description ...: Greates a movable HGLOBAL memory block and copies data from memory
    ; Syntax.........: _MemGlobalAllocFromMem($pSource, $iLength)
    ; Parameters ....: $pSource - Pointer to memorybloc to copy from
    ; $iLength - Length of data to copy
    ; Return values .: Success - Handle of a new movable HGLOBAL
    ; Failure - 0 and set @error:
    ; |1 - invalid $pSource
    ; |2 - invalid $iLength
    ; |3 - could not allocate memory
    ; Author ........: ProgAndy
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _MemGlobalAlloc, _MemGlobalFree, _MemGlobalLock
    ; Link ..........:
    ; Example .......:
    ; ===============================================================================================================================
    Func _MemGlobalAllocFromMem($pSource, $iLength)
    If Not $pSource Then Return SetError(1, 0, 0)
    If $iLength < 1 Then Return SetError(2, 0, 0)
    Local $hMem = _MemGlobalAlloc($iLength, $GMEM_MOVEABLE)
    If @error Or Not $hMem Then Return SetError(3, 0, 0)
    _MemMoveMemory($pSource, _MemGlobalLock($hMem), $iLength)
    _MemGlobalUnlock($hMem)
    Return $hMem
    EndFunc ;==>_MemGlobalAllocFromMem

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GUICtrlStatic_SetImage
    ; Description ...: Sets a HBITMAP to a static control like image or label
    ; Syntax.........: _GUICtrlStatic_SetImage($iCtrlId, $hBitmap)
    ; Parameters ....: $iCtrlId - CtrlId or handle of Control in the current process
    ; $hBitmap - Pointer top Windows HBITMAP
    ; Return values .: Success - 1
    ; Failure - 0 and set @error:
    ; |1 - invalid $pSource
    ; |1 - invalid $pSource
    ; Author ........: ProgAndy, Zedna
    ; Modified.......:
    ; Remarks .......:
    ; Related .......:
    ; Link ..........:
    ; Example .......:
    ; ===============================================================================================================================
    Func _GUICtrlStatic_SetImage($iCtrlId, $hBitmap)
    Local Const $STM_SETIMAGE = 0x0172
    Local Const $IMAGE_BITMAP = 0
    Local Const $SS_BITMAP = 0xE
    Local Const $GWL_STYLE = -16

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

    If IsHWnd($iCtrlId) Then
    If WinGetProcess($iCtrlId) <> @AutoItPID Then Return SetError(1,0,0)
    Else
    $iCtrlId = GUICtrlGetHandle($iCtrlId)
    If Not $iCtrlId Then Return SetError(2,0,0)
    EndIf
    ; set SS_BITMAP style to control
    Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE)
    If @error Then Return SetError(3, 0, 0)
    DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $iCtrlId, "int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
    If @error Then Return SetError(4, 0, 0)
    Local $oldBmp = DllCall("user32.dll", "handle", "SendMessageW", "hwnd", $iCtrlId, "int", $STM_SETIMAGE, "wparam", $IMAGE_BITMAP, "handle", $hBitmap)
    If @error Then Return SetError(5, 0, 0)
    If $oldBmp[0] Then _WinAPI_DeleteObject($oldBmp[0])
    Return 1
    EndFunc

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

    _GDIPlus_Startup()
    $s = Binary(FileRead(RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Examples\GUI\Torus.png"))
    $hMem = _MemGlobalAllocFromBinary($s)
    $hImage = _GDIPlus_ImageLoadFromHGlobal($hMem)
    $gui = GUICreate("Just draw the created image", 300, 300)
    GUISetState()
    $hGRaph = _GDIPlus_GraphicsCreateFromHWND($gui)
    _GDIPlus_GraphicsDrawImage($hGRaph, $hImage, 5, 5)
    _GDIPlus_GraphicsDispose($hGRaph)

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

    Do
    Until GUIGetMsg() = -3

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

    WinSetTitle($gui, "", "Now using _GUICtrlStatic_SetImage")
    _WinAPI_RedrawWindow($gui)

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

    $iLabel = GUICtrlCreateLabel("", 0, 0, 193, 184)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    _GDIPlus_ImageDispose($hImage)
    _GUICtrlStatic_SetImage($iLabel, $hBitmap)

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Ich hoffe, das hilft dir.

    Gruß,
    UEZ

  • CSV-Datei in ein Array einlesen

    • UEZ
    • 5. Mai 2011 um 13:37

    Ich habe den Code von StringSplitW() aktualisiert; den $max_width habe ich entfernt, wird jetzt berechnet.

    Gruß,
    UEZ

  • CSV-Datei in ein Array einlesen

    • UEZ
    • 5. Mai 2011 um 12:49

    Anscheinend darf die Höhe + Breite eines 2D Arrays nicht größer als 0x5EFA sein.

    Gruß,
    UEZ

  • CSV-Datei in ein Array einlesen

    • UEZ
    • 5. Mai 2011 um 12:20

    Da habe ich mit dem max. Wert wohl geirrt! Ersetze mal $max_width mit $max_width = 0x058D

    Ich versuche gerade den Zusammenhang der möglichen Gesamtgröße eines 2D Array herauszufinden! 0x058D funktioniert auch nur bis zu einer bestimmten Dateigröße!

    In deinem Fall reicht es, wenn du $max_width = 0x0F setzt.

    Gruß,
    UEZ

  • CSV-Datei in ein Array einlesen

    • UEZ
    • 5. Mai 2011 um 11:34

    Hmm, ich kenne deine Datei nicht und auch nicht, wie du die Funktion aufrufst! Wie ist denn die genaue Fehlermeldung?

    Hier ein Beispiel mit Tabs getrennte Zeilen:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

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

    Global $gs_dummydata = ""
    $gs_dummydata &= "john" & @TAB & "smith" & @TAB & "12345" & @CRLF
    $gs_dummydata &= "josh" & @TAB & "jones" & @TAB & "34556" & @TAB & "supervisor" & @CRLF
    $gs_dummydata &= "" & @CRLF ; empty line
    $gs_dummydata &= "zach" & @TAB & "marks" & @TAB & "98222" & @TAB & "worker" & @TAB & "extra column not expected" & @CRLF
    $gs_dummydata &= "jake" & @TAB & "warren" & @TAB & "10984" & @TAB & "worker" & @CRLF ; (last line will actually be empty because of CRLF)
    ;~ $gs_dummydata = 'john,smith,12345,"happy",manager,,"abra,ca,da,br,a"'
    MsgBox(0, "Test", $gs_dummydata)
    Global $aS = StringSplitW($gs_dummydata, @TAB)
    _ArrayDisplay($aS)
    Exit

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

    ; #FUNCTION# ========================================================================================================================================
    ; Name ................: StringSplitW()
    ; Version .............: v0.92 build 2013-03-25 beta
    ; Description .......: Splits a string into columns instead of rows as it is done by SplitString(), like a csv file to a 2d array ;)
    ; Syntax ..............: StringSplitW($sString, $sDelimiter, $iWidthLen)
    ; Parameters ........: $sString - string to split
    ; $sDelimiter - the delimter how to split the string
    ; $iWidthLen - length of the row (amount of columns - default is 100)
    ; Return values ....: Success - 2d array
    ; Error 1 - either $sString or $delimter is not set
    ; Error 2 - array width exceeded
    ; Error 3 - error splitting string
    ;
    ; Author ..............: UEZ
    ; Modified ............:
    ; Remarks ............:
    ; Related ..............: StringSplit()
    ; ===================================================================================================================================================
    Func StringSplitW($sString, $sDelimiter = ";", $iWidthLen = 256)
    If $sString = "" Or $sDelimiter = "" Then Return SetError(1, 0, 0)
    Local $chk, $iWidth, $i, $j, $k, $iLen, $iMax = 1, $iMaxWidth
    Local $aPos[1], $l = 0
    Local $aSplit = StringSplit($sString, @LF)
    If @error Then Return SetError(3, 0, 0)
    Local $aVertical[$aSplit[0]][$iWidthLen], $iDelimiterLen = StringLen($sDelimiter) - 1
    For $k = 1 To $aSplit[0]
    $iLen = StringLen($aSplit[$k])
    If $iLen > 1 Then
    $chk = StringReplace($aSplit[$k], $sDelimiter, $sDelimiter)
    $iWidth = @extended
    If $iWidth > $iWidthLen Then Return SetError(2, 0, 0)
    If $iWidth >= $iMax Then $iMax = $iWidth + 1
    Switch $iWidth
    Case 0
    $aVertical[$l][0] = $aSplit[$k]
    Case Else
    Dim $aPos[$iWidth * 2 + 2]
    $j = 1
    $aPos[0] = 1
    For $i = 0 To $iWidth - 1
    $aPos[$j] = StringInStr($aSplit[$k], $sDelimiter, 0, $i + 1) - 1
    $aPos[$j + 1] = $aPos[$j] + 2 + $iDelimiterLen
    $j += 2
    Next
    $aPos[UBound($aPos) - 1] = StringLen($aSplit[$k])
    $j = 0
    For $i = 0 To UBound($aPos) - 1 Step 2
    $aVertical[$l][$j] = StringMid($aSplit[$k], $aPos[$i], $aPos[$i + 1] - $aPos[$i] + 1)
    $j += 1
    Next
    EndSwitch
    $l += 1
    EndIf
    Next
    ReDim $aVertical[$l][$iMax]
    Return $aVertical
    EndFunc

    [/autoit]

    Gruß,
    UEZ

  • CSV-Datei in ein Array einlesen

    • UEZ
    • 4. Mai 2011 um 20:35

    Probiere es mal damit:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    $file = FileOpenDialog("Select a CSV file", "", "File (*.csv)")
    If @error Then Exit
    $csv = FileRead($file)
    $aCSV = StringSplitW($csv, ";")
    _ArrayDisplay($aCSV)

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

    ; #FUNCTION# ========================================================================================================================================
    ; Name ................: StringSplitW()
    ; Version .............: v0.92 build 2013-03-25 beta
    ; Description .......: Splits a string into columns instead of rows as it is done by SplitString(), like a csv file to a 2d array ;)
    ; Syntax ..............: StringSplitW($sString, $sDelimiter, $iWidthLen)
    ; Parameters ........: $sString - string to split
    ; $sDelimiter - the delimter how to split the string
    ; $iWidthLen - length of the row (amount of columns - default is 100)
    ; Return values ....: Success - 2d array
    ; Error 1 - either $sString or $delimter is not set
    ; Error 2 - array width exceeded
    ; Error 3 - error splitting string
    ;
    ; Author ..............: UEZ
    ; Modified ............:
    ; Remarks ............:
    ; Related ..............: StringSplit()
    ; ===================================================================================================================================================
    Func StringSplitW($sString, $sDelimiter = ";", $iWidthLen = 256)
    If $sString = "" Or $sDelimiter = "" Then Return SetError(1, 0, 0)
    Local $chk, $iWidth, $i, $j, $k, $iLen, $iMax = 1, $iMaxWidth
    Local $aPos[1], $l = 0
    Local $aSplit = StringSplit($sString, @LF)
    If @error Then Return SetError(3, 0, 0)
    Local $aVertical[$aSplit[0]][$iWidthLen], $iDelimiterLen = StringLen($sDelimiter) - 1
    For $k = 1 To $aSplit[0]
    $iLen = StringLen($aSplit[$k])
    If $iLen > 1 Then
    $chk = StringReplace($aSplit[$k], $sDelimiter, $sDelimiter)
    $iWidth = @extended
    If $iWidth > $iWidthLen Then Return SetError(2, 0, 0)
    If $iWidth >= $iMax Then $iMax = $iWidth + 1
    Switch $iWidth
    Case 0
    $aVertical[$l][0] = $aSplit[$k]
    Case Else
    Dim $aPos[$iWidth * 2 + 2]
    $j = 1
    $aPos[0] = 1
    For $i = 0 To $iWidth - 1
    $aPos[$j] = StringInStr($aSplit[$k], $sDelimiter, 0, $i + 1) - 1
    $aPos[$j + 1] = $aPos[$j] + 2 + $iDelimiterLen
    $j += 2
    Next
    $aPos[UBound($aPos) - 1] = StringLen($aSplit[$k])
    $j = 0
    For $i = 0 To UBound($aPos) - 1 Step 2
    $aVertical[$l][$j] = StringMid($aSplit[$k], $aPos[$i], $aPos[$i + 1] - $aPos[$i] + 1)
    $j += 1
    Next
    EndSwitch
    $l += 1
    EndIf
    Next
    ReDim $aVertical[$l][$iMax]
    Return $aVertical
    EndFunc

    [/autoit]

    Gruß,
    UEZ

  • Transparente Richedit

    • UEZ
    • 4. Mai 2011 um 13:15

    Drei Dinge:

    1) die Farben haben kein Alpha Kanal, d.h. Farbraum geht von 0x000000 - 0xFFFFFF
    2) die Hintergrundfarbe für Richedit ist nicht RGB, sondern BGR

    Spoiler anzeigen
    [autoit]


    #include <GuiRichEdit.au3>
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>

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

    $Color_RGB = 0xABCDEF ;RGB
    $Color_BGR = 0xEFCDAB ;BGR
    $GUI = GUICreate("test")
    GUISetBkColor($Color_RGB, $GUI)
    GUICtrlCreatePic("test.jpg", 0, 0, 400, 400)

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

    $Size = WinGetClientSize($GUI)
    $GUI2 = GUICreate("SBot Manager Client", $Size[0], $Size[1], 0, 0, 0x80000000, 0x00080000 + 0x00000040, $GUI)
    GUISetBkColor($Color_RGB, $GUI2)

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

    GUICtrlCreateEdit("Edit", 5, 5, 195, 390)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor(-1, $Color_RGB)

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

    $RichEdit = _GUICtrlRichEdit_Create($GUI2, "RichEdit", 205, 5, 190, 390)
    _GUICtrlRichEdit_SetBkColor($RichEdit, $Color_BGR)
    _GUICtrlRichEdit_SetCharColor($RichEdit, 0xFFFFFF)

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

    _WinAPI_SetLayeredWindowAttributes($GUI2, $Color_RGB)

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

    GUISetState(@SW_SHOW, $GUI)
    GUISetState(@SW_SHOW, $GUI2)

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

    While Sleep(50)
    If GUIGetMsg() = -3 Then Exit
    WEnd

    [/autoit]

    3) der Titel SBot Manager Client ist nicht gerade ideal, um hier Hilfe zu bekommen!

    Gruß,
    UEZ

  • Farbtiefe eines TIFF Bildes ermitteln

    • UEZ
    • 3. Mai 2011 um 10:03

    Falls es euch interessiert:

    Spoiler anzeigen
    [autoit]


    #include-once
    #include <GDIPlus.au3>

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

    Local $sFile = FileOpenDialog("Select an image", "", "(*.jpg;*.png;*.bmp;*.gif)")
    If @error Then Exit
    Local $aDimension = Get_Image_Info($sFile)
    If @error Then Exit MsgBox(16, "Error", "An error has occured!", 10)
    MsgBox(0, "Image Information", "Filename: " & $sFile & @LF & @LF & _
    "Width: " & @TAB & @TAB & $aDimension[0] & @LF & _
    "Height: " & @TAB & @TAB & $aDimension[1] & @LF & _
    "DPI: " & @TAB & @TAB & $aDimension[2] & "x" & $aDimension[3] & @LF & _
    "Color Depth: " & @TAB & $aDimension[4] & @LF & _
    "Image Type: " & @TAB & $aDimension[5], 30)
    Exit

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

    ; #FUNCTION# =====================================================================================
    ; Name.............: Get_Image_Info
    ; Description ...: Returns some information of an image from a file
    ; Syntax............: Get_Image_Info($sFile)
    ; Parameters ....: $sFile - filename of the image
    ; Return value ..: Zero based array ->
    ; $iDim[0] = width, $iDim[1] = height, $iDim[2] = DPIx, $iDim[3] = DPIy, $iDim[4] = color depth, $iDim[5] = image type
    ; Requirements .: GDIPlus.au3
    ; Author ...........: UEZ, Yashied (TIF bpp code)
    ; Version ..........: v0.80 build 2011-05-03 Beta
    ; ================================================================================================
    Func Get_Image_Info($sFile)
    If Not FileExists($sFile) Then Return SetError(1, 0, False)
    Local $declared = 1, $iDim[6]
    If Not $ghGDIPDll Then
    _GDIPlus_Startup()
    $declared = 0
    EndIf
    Local $hImage = _GDIPlus_ImageLoadFromFile($sFile)
    Local $hContext = _GDIPlus_ImageGetGraphicsContext($hImage)
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipGetImageDimension", "handle", $hImage, "float*", 0, "float*", 0)
    If @error Then Return SetError(@error, @extended, False)
    $iDim[0] = $aResult[2]
    $iDim[1] = $aResult[3]
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetDpiX", "handle", $hContext, "float*", 0)
    If @error Then Return SetError(@error, @extended, False)
    $iDim[2] = Round($aResult[2], 0)
    $aResult = DllCall($ghGDIPDll, "uint", "GdipGetDpiY", "handle", $hContext, "float*", 0)
    If @error Then Return SetError(@error, @extended, False)
    $iDim[3] = Round($aResult[2], 0)
    _GDIPlus_GraphicsDispose($hContext)
    _GDIPlus_ImageDispose($hImage)
    If Not $declared Then _GDIPlus_Shutdown()
    GetImageInfo($sFile, $iDim)
    Return $iDim
    EndFunc

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

    ;Internal Function
    Func GetImageInfo($sFile, ByRef $iDim)
    Local $tBuffer, $hFile, $nBytes, $bytes2read = 0x24, $sHeader
    $tBuffer = DllStructCreate("byte[" & $bytes2read & "]")
    $hFile = _WinAPI_CreateFile($sFile, 2, 2)
    _WinAPI_SetFilePointer($hFile, 0)
    _WinAPI_ReadFile($hFile, DllStructGetPtr($tBuffer), $bytes2read, $nBytes)
    _WinAPI_CloseHandle($hFile)
    $sHeader = DllStructGetData($tBuffer, 1)
    If StringInStr($sHeader, "0x89504E47") Then ;http://www.w3.org/TR/PNG/#11IHDR
    $iDim[5] = "png"
    Switch DllStructGetData($tBuffer, 1, 0x1A)
    Case 0
    $iDim[4] = DllStructGetData($tBuffer, 1, 0x19) & " bit greyscale"
    Case 2
    $iDim[4] = 3 * DllStructGetData($tBuffer, 1, 0x19) & " bit truecolor"
    Case 3
    $iDim[4] = DllStructGetData($tBuffer, 1, 0x19) & " bit indexed-color"
    Case 4
    $iDim[4] = 3 * DllStructGetData($tBuffer, 1, 0x19) & " bit greyscale with alpha"
    Case 6
    $iDim[4] = 3 * DllStructGetData($tBuffer, 1, 0x19) & " bit truecolor with alpha"
    EndSwitch
    ElseIf Not StringRegExp($sHeader, "0x.+FFE0.+4A46[494600|585800]", 3) Then ;http://en.wikipedia.org/wiki/JPEG_File_Interchange_Format
    $iDim[5] = "jpg"
    $iDim[4] = "24 bit" ;that's is not really true ;)
    ElseIf StringInStr($sHeader, "0x424D") Then ;http://de.wikipedia.org/wiki/Windows_Bitmap
    $iDim[5] = "bmp"
    $iDim[4] = DllStructGetData($tBuffer, 1, 0x1D) & " bit"
    ElseIf Not StringRegExp($sHeader, "0x49492A|0x4D4D2A", 3) Then ;http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf
    $iDim[5] = "tif"
    Local $Bytes, $i, $j, $Count, $Value, $tTag, $BPP
    Local $hFile = _WinAPI_CreateFile($sFile, 2, 2)

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

    ; Read TIFF file header (8 bytes)
    Local $tData = DllStructCreate('ushort Order;ushort Type;dword Offset')
    _WinAPI_ReadFile($hFile, DllStructGetPtr($tData), 8, $Bytes)

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

    ; Read number of tags (NumDirEntries) from the first IDF pointed to by "Offset" member (2 bytes)
    _WinAPI_SetFilePointer($hFile, DllStructGetData($tData, 'Offset'))
    $tData = DllStructCreate('ushort')
    _WinAPI_ReadFile($hFile, DllStructGetPtr($tData), 2, $Bytes)

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

    ; Read all tags from the first IDF (12 * NumDirEntries bytes, the size of each tag = 12 bytes)
    Local $Entries = DllStructGetData($tData, 1)
    Local $tIFD = DllStructCreate('byte[' & (12 * $Entries) & ']')
    Local $pIFD = DllStructGetPtr($tIFD)
    _WinAPI_ReadFile($hFile, $pIFD, 12 * $Entries, $Bytes)

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

    ; Search the necessary tags and read the relevant data (if data size > 4 bytes, the "Value" member contains the offset to this data)
    For $i = 1 To $Entries
    $tTag = DllStructCreate('ushort ID;ushort Type;dword Count;dword Value', $pIFD + 12 * ($i - 1))
    Switch DllStructGetData($tTag, 'ID')
    Case 0x0102 ; BitsPerSample
    $Count = DllStructGetData($tTag, 'Count')
    $Value = DllStructGetData($tTag, 'Value')
    If $Count > 2 Then
    _WinAPI_SetFilePointer($hFile, $Value)
    $tData = DllStructCreate('ushort[' & $Count & ']')
    _WinAPI_ReadFile($hFile, DllStructGetPtr($tData), 2 * $Count, $Bytes)
    For $j = 1 To $Count
    $BPP += DllStructGetData($tData, 1, $j)
    Next
    Else
    $BPP = BitAND($Value, 0xFF)
    EndIf
    EndSwitch
    Next
    _WinAPI_CloseHandle($hFile)
    $iDim[4] = $BPP & " bit"
    ElseIf Not StringRegExp($sHeader, "0x474946383[7|9]61", 3) Then
    $iDim[5] = "gif"
    $iDim[4] = BitAND(DllStructGetData($tBuffer, 1, 0x0B), 7) + 1 & " bit"
    EndIf

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

    EndFunc

    [/autoit]

    Dank an Yashied für seine Erläuterungen!

    Fehlt noch die Farbtiefe von JPG Bildern (ist nicht immer 24 bit!)

    Gruß,
    UEZ

  • Farbtiefe eines TIFF Bildes ermitteln

    • UEZ
    • 2. Mai 2011 um 10:37

    Momentan komme ich nicht weiter, um die Farbtiefe eines TIFF Bildes zu bestimmen.

    Infos zum TIFF Bild: http://partners.adobe.com/public/developer/en/tiff/TIFF6.pdf

    Zitat


    BitsPerSample
    Number of bits per component.
    Tag = 258 (102.H)
    Type = SHORT
    N = SamplesPerPixel
    Note that this field allows a different number of bits per component for each
    component corresponding to a pixel. For example, RGB color data could use a
    different number of bits per component for each of the three color planes. Most RGB
    files will have the same number of BitsPerSample for each component. Even in this
    case, the writer must write all three values.
    Default = 1. See also SamplesPerPixel.

    Alles anzeigen

    Wenn ich mir die Stelle 0x0102, kann ich keine Infos zur Farbtiefe des TIFF Bildes sehen!

    Ich weiß, dass Lazycat ein Tool geschrieben hat: http://www.autoitscript.com/forum/topic/13…f-imagegetinfo/, aber ich blicke momentan da nicht richtig durch. 8|

    Gruß,
    UEZ

  • Tortendiagramm in einer transparenten GUI

    • UEZ
    • 30. April 2011 um 17:38

    Schaue mal hier rein: http://www.autoitscript.com/forum/topic/97241-3d-pie-chart

    Gruß,
    UEZ

  • GDI+ Animationen

    • UEZ
    • 30. April 2011 um 15:20
    Zitat von DFPWare

    Etwa so?:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    $angle = 1
    $r = 1
    $startangle = 0
    Dim $brush[16]
    OnAutoItExitRegister("_EXIT")
    AdlibRegister("_bewege",15)
    $Gui = GUICreate("",100,100)
    _GDIPlus_Startup()
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $brush[1] = _GDIPlus_BrushCreateSolid(0xFF66CCFF)
    $brush[2] = _GDIPlus_BrushCreateSolid(0xEE66CCFF)
    $brush[3] = _GDIPlus_BrushCreateSolid(0xDD66CCFF)
    $brush[4] = _GDIPlus_BrushCreateSolid(0xCC66CCFF)
    $brush[5] = _GDIPlus_BrushCreateSolid(0xBB66CCFF)
    $brush[6] = _GDIPlus_BrushCreateSolid(0xAA66CCFF)
    $brush[7] = _GDIPlus_BrushCreateSolid(0x9966CCFF)
    $brush[8] = _GDIPlus_BrushCreateSolid(0x8866CCFF)
    $brush[9] = _GDIPlus_BrushCreateSolid(0x7766CCFF)
    $brush[10] = _GDIPlus_BrushCreateSolid(0x6666CCFF)
    $brush[11] = _GDIPlus_BrushCreateSolid(0x5566CCFF)
    $brush[12] = _GDIPlus_BrushCreateSolid(0x4466CCFF)
    $brush[13] = _GDIPlus_BrushCreateSolid(0x3366CCFF)
    $brush[14] = _GDIPlus_BrushCreateSolid(0x2266CCFF)
    $brush[15] = _GDIPlus_BrushCreateSolid(0x1166CCFF)

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

    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(100, 100, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    GUISetState()
    Do
    $msg = GUIGetMsg()
    Until $msg = -3
    Func _EXIT()
    _GDIPlus_BrushDispose($brush)
    _GDIPlus_BrushDispose($brushWeiss)
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_Shutdown()
    EndFunc
    Func _bewege()
    $startangle += 2
    If $angle < 360 Then $angle += 3
    If $angle >= 360 Then $angle = 0
    ;~ ConsoleWrite($angle&@CRLF)
    Select
    Case $angle < 24
    $r = 1
    Case $angle >= 24 And $angle < 48
    $r = 2
    Case $angle >= 48 And $angle < 72
    $r = 3
    Case $angle >= 72 And $angle < 96
    $r = 4
    Case $angle >= 96 And $angle < 120
    $r = 5
    Case $angle >= 120 And $angle < 144
    $r = 6
    Case $angle >= 144 And $angle < 168
    $r = 7
    Case $angle >= 168 And $angle < 192
    $r = 8
    Case $angle >= 192 And $angle < 216
    $r = 9
    Case $angle >= 216 And $angle < 240
    $r = 10
    Case $angle >= 240 And $angle < 264
    $r = 11
    Case $angle >= 264 And $angle < 288
    $r = 12
    Case $angle >= 288 And $angle < 322
    $r = 13
    Case $angle >= 322 And $angle < 346
    $r = 14
    Case $angle >= 346 And $angle < 360
    $r = 15
    EndSelect
    _GDIPlus_GraphicsFillRect($buffer, 0, 0, 100, 100, $brushWeiss)
    _GDIPlus_GraphicsFillPie($buffer,0,0,100,100,$startangle,$angle,$brush[$r])
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 100, 100)
    EndFunc

    [/autoit]
    Alles anzeigen

    Schönes Beispiel! :thumbup:

    Hab's mal ein bissl gestrafft:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    $w = 300
    $h = 300
    $angle = 1
    $r = 1
    $startangle = 0
    Dim $brush[16]
    OnAutoItExitRegister("_EXIT")
    $Gui = GUICreate("", $w, $h)
    _GDIPlus_Startup()
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    For $i = 0 To 14
    $brush[$i + 1] = _GDIPlus_BrushCreateSolid("0x" & Hex(0xFF - $i * 0x11, 2) & "66CCFF")
    Next
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics($w, $h, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($buffer, 2)
    GUISetState()
    AdlibRegister("_bewege", 15)
    Do
    $msg = GUIGetMsg()
    Until $msg = -3

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

    Func _EXIT()
    For $i = 1 To 15
    _GDIPlus_BrushDispose($brush[$i])
    Next
    _GDIPlus_BrushDispose($brushWeiss)
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_BitmapDispose($bitmap)
    _GDIPlus_Shutdown()
    EndFunc ;==>_EXIT

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

    Func _bewege()
    $startangle += 2
    $angle = Mod($angle + 3, 360)
    ;~ ConsoleWrite($angle&@CRLF)
    $r = 1 + Floor($angle / 24)
    _GDIPlus_GraphicsFillRect($buffer, 0, 0, $w, $h, $brushWeiss)
    _GDIPlus_GraphicsFillPie($buffer, 0, 0, $w, $h, $startangle, $angle, $brush[$r])
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, $w, $h)
    EndFunc ;==>_bewege

    [/autoit]

    Ladebildschirm 1 sieht aus schön aus!

    Gruß,
    UEZ

  • Tortendiagramm in einer transparenten GUI

    • UEZ
    • 29. April 2011 um 22:56

    Hab's erst auch letztens durch Zufall entdeckt, wie ich die Rotierenden Buchstaben gecodet hatte, da unter Aero StringDraw und _GDIPlus_GraphicsSetSmoothingMode() nicht funzt.

    Gruß,
    UEZ

  • Tortendiagramm in einer transparenten GUI

    • UEZ
    • 29. April 2011 um 21:52

    name22: das stimmt nicht ganz!

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", 300)
    DllStructSetData($tSize, "Y", 100)
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    $tPoint = DllStructCreate($tagPOINT)
    $pPoint = DllStructGetPtr($tPoint)
    DllStructSetData($tPoint, "X", 0)
    DllStructSetData($tPoint, "Y", 0)

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

    $hWnd = GUICreate("Test", 300, 100, Default, Default, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
    GUISetState()

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

    $hDC_Window = _WinAPI_GetDC($hWnd)
    $hDC_Buffer = _WinAPI_CreateCompatibleDC($hDC_Window)
    $hGDI_Bitmap = _WinAPI_CreateCompatibleBitmap($hDC_Window, 300, 100)
    _WinAPI_SelectObject($hDC_Buffer, $hGDI_Bitmap)

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

    _GDIPlus_Startup()

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

    $hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC_Buffer)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
    DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hGraphics, "int", 4)

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

    $hBrush_Text = _GDIPlus_BrushCreateSolid(0xFFFF0000)

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

    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate("Segoe UI")
    $hFont = _GDIPlus_FontCreate($hFamily, 25)
    $tLayout = _GDIPlus_RectFCreate(5, 5)

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

    ;~ $hPath = _GDIPlus_PathCreate()

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hWnd)

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

    ;~ _GDIPlus_PathAddString($hPath, "AutoIt Rocks!", $tLayout, $hFamily, 0, 50, $hFormat)
    ;~ _GDIPlus_GraphicsFillPath($hGraphics, $hPath, $hBrush_Text)

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

    _GDIPlus_GraphicsDrawStringEx($hGraphics, "AutoIt Rocks!", $hFont, $tLayout, $hFormat, $hBrush_Text)

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

    _WinAPI_UpdateLayeredWindow($hWnd, $hDC_Window, 0, $pSize, $hDC_Buffer, $pSource, 0, $pBlend, 2)

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

    While Sleep(1000)
    WEnd

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

    Func _Exit()
    _WinAPI_ReleaseDC($hWnd, $hDC_Window)
    _WinAPI_DeleteDC($hDC_Buffer)
    _WinAPI_DeleteObject($hGDI_Bitmap)

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

    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BrushDispose($hBrush_Text)
    ;~ _GDIPlus_PathDispose($hPath)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_Shutdown()

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

    Exit
    EndFunc

    [/autoit]

    Gruß,
    UEZ ;)

  • Geschwindigkeitsunterschiede

    • UEZ
    • 29. April 2011 um 00:34

    Das sollte eigentlich recht einfach zu implementieren sein:

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    Opt("GUIOnEventMode", 1)
    $fach = 0
    Dim $gegner[80][2]
    For $j = 0 To UBound($gegner) - 1 Step 1
    $gegner[$j][0] = -100
    Next
    OnAutoItExitRegister("_EXIT")
    $Gui = GUICreate("Regen", 500, 500, 100, 100)
    _GDIPlus_Startup()
    $brushSchwarz = _GDIPlus_BrushCreateSolid(0xFFABCDEF)
    $brushWeiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    $graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
    $bitmap = _GDIPlus_BitmapCreateFromGraphics(500, 500, $graphic)
    $buffer = _GDIPlus_ImageGetGraphicsContext($bitmap)
    _GDIPlus_GraphicsSetSmoothingMode($buffer, 2)
    GUISetState()
    GUISetOnEvent(-3, "_Exit")
    AdlibRegister("_gegnerSpawn", 500)
    Do
    For $m = 0 To UBound($gegner) - 1 Step 1
    If $gegner[$m][1] >= 480 Then $gegner[$m][1] = 0
    Next
    For $k = 0 To UBound($gegner) - 1 Step 1
    $gegner[$k][1] += 2
    Next
    $msg = GUIGetMsg()
    _GDIPlus_GraphicsFillRect($buffer, 0, 0, 500, 500, $brushWeiss)
    For $i = 0 To UBound($gegner) - 1 Step 1
    _GDIPlus_GraphicsFillEllipse($buffer, $gegner[$i][0], $gegner[$i][1], 20, 20, $brushSchwarz)
    Next
    _GDIPlus_GraphicsDrawImageRect($graphic, $bitmap, 0, 0, 500, 500)
    Until Not Sleep(20)
    Func _EXIT()
    _GDIPlus_BrushDispose($brushSchwarz)
    _GDIPlus_BrushDispose($brushWeiss)
    _GDIPlus_GraphicsDispose($buffer)
    _GDIPlus_GraphicsDispose($graphic)
    _GDIPlus_Shutdown()
    GUIDelete($Gui)
    Exit
    EndFunc ;==>_EXIT
    Func _gegnerSpawn()
    If $fach <= UBound($gegner) - 2 Then
    $gegner[$fach][0] = Random(0, 480, 1)
    $fach += 1
    $gegner[$fach][1] = 0
    EndIf
    EndFunc ;==>_gegnerSpawn

    [/autoit]

    Gruß,
    UEZ ;)

  • GDI+ Buchstaben Rotation

    • UEZ
    • 26. April 2011 um 17:29
    Zitat von DFPWare

    Hey schönes skript, alle 3

    Ich hab aber mal ne Frage, und zwar hab ich im letzten Skript oben folgende Zeilen gefunden:

    Code
    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3"
    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--brute --crp-ms=999999 --all-methods --all-filters

    wenn ich die lösche, dann funktionierts genauso, was bringen die also?

    kann man das irgendwo nachlesen?

    Danke

    DFPWare

    Alles anzeigen

    Du kannst unter <AutoIt Dir>\SciTE\AutoIt3Wrapper\Directives.au3 die Befehle für den Wrapper einsehen.

    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6: dient dazu, das Skript vor dem Kompilieren auf "Inkonsistenzen" zu prüfen, z.B. nicht verwendete Variablen, Funktionen, etc. werden ausgegeben, also nur Hinweise.

    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/sf /sv /om /cs=0 /cn=0
    : hier wird der Obfuscator angeschmissen und der Source Code gestrafft, z.B. werden Variablen Namen gekürzt. Dabei wird eine neue Datei mit dem Namen <Skriptname>_Obfuscated.au3 erstellt, dass anschließend kompiliert wird. Dient eigentlich nur dazu, das Skript dadurch "schneller" zu machen. Kannst ja mal in diese Datei reinschauen. Ansonsten stehen hier mehr Infos: http://www.autoitscript.com/forum/topic/10…post__p__721154

    #AutoIt3Wrapper_Run_After=del /f /q "%scriptdir%\%scriptfile%_Obfuscated.au3": löscht die temp. Datei <Skriptname>_Obfuscated.au3 anschließend

    #AutoIt3Wrapper_UseUpx=y
    #AutoIt3Wrapper_UPX_Parameters=--brute --crp-ms=999999 --all-methods --all-filt
    er: startet UPX mit den höchsten Packraten - Nachteil: ziemlich langsam, aber dafür ist die Exe kleiner als mit den Standard Werten.

    Gruß,
    UEZ

  • CPU Auslastung Auslesen

    • UEZ
    • 26. April 2011 um 12:38

    Probiere es mal damit:

    Spoiler anzeigen
    [autoit]


    ;coded by UEZ
    #AutoIt3Wrapper_UseX64=n
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)
    Opt("TrayIconHide", 1)
    HotKeySet("{ESC}", "_Exit")

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

    Global Const $Process_All_Access = 0x1F0FFF
    Global $CreateTime = DllStructCreate("dword;dword")
    Global $ExitTime = DllStructCreate("dword;dword")
    Global $KernelTime = DllStructCreate("dword;dword")
    Global $UserTime = DllStructCreate("dword;dword")
    Global $FileTime = DllStructCreate("dword;dword")
    Global $SystemTime = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
    Global $IdleTime = DllStructCreate("dword;dword")
    Global $sUserTime, $sKernelTime, $eUserTime, $eKernelTime
    Global $ret, $hour, $minutes, $seconds, $milliseconds
    Global $ProcHandle, $Process_CPU_Usage
    Global $PID, $CPUTime, $mem, $prg
    Global $logical_cpus = CPU()
    Global $hProc
    Global $GUI, $info

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

    Global $hFile, $au3, $autoit3
    Global $fname = "Dummy.exe"
    Global $dummy_exe = @ScriptDir & "\" & $fname
    Global $dummy_au3 = @ScriptDir & "\" & "Dummy.au3"
    If Not FileExists($dummy_exe) Then
    $hFile = FileOpen($dummy_au3, 2)
    $au3 = "While 1" & @CRLF & "WEnd"
    FileWrite($hFile, $au3)
    FileClose($hFile)
    If @OSArch = "x86" Then
    $autoit3 = '"' & RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\aut2exe\aut2exe.exe" & '"'
    Else
    $autoit3 = '"' & RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\AutoIt v3\AutoIt", "InstallDir") & "\aut2exe\aut2exe.exe" & '"'
    EndIf
    RunWait($autoit3 & ' /in "' & $dummy_au3 & '" /out "' & $dummy_exe & '" /nopack /comp 2')
    EndIf

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

    $PID = Run($dummy_exe)

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

    If $PID = 0 Then
    MsgBox(16, "ERROR", "ERROR! Process " & $prg & " not found! Aborting..." & @CRLF)
    Exit
    EndIf

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

    Global $iMemo, $hDebugGUI
    $GUI = GUICreate("Process Information v0.40 Beta by UEZ - Press ESC to quit! Just do some calculations...", 740, 25, -1, -1, BitOR($WS_CAPTION, $WS_POPUP, $WS_BORDER, $WS_CLIPSIBLINGS))
    $iMemo = GUICtrlCreateEdit("", -1, -1, 820)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
    GUICtrlSetBkColor($iMemo, 0xFFFFFF)
    GUISetState()

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

    $ProcHandle = DllCall("kernel32.dll", "hwnd", "OpenProcess", "dword", $Process_All_Access, "int", False, "dword", $PID)
    $ProcHandle = $ProcHandle[0]

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

    While True
    $CPUTime = _GetProcTime($ProcHandle)
    $mem = _ProcessGetMem($ProcHandle) / 1024
    $hour = Int($CPUTime / 10000000 / 3600)

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

    $minutes = Int($CPUTime / 10000000 / 60)
    If $minutes < 10 Then $minutes = "0" & $minutes

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

    $seconds = Round((Int($CPUTime / 10000000) / 60 - Int($CPUTime / 10000000 / 60)) * 60, 0)
    If $seconds < 10 Then $seconds = "0" & $seconds

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

    $milliseconds = Round((Int($CPUTime / 10000) / 1000 - Int(Int($CPUTime / 10000) / 1000)) * 1000, 0)
    If $milliseconds < 10 Then $milliseconds = "00" & $milliseconds
    If $milliseconds > 9 And $milliseconds < 100 Then $milliseconds = "0" & $milliseconds

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

    $info = @CR & $fname & " | PID: " & $PID & " | CPU time: " & $hour & ":" & $minutes & ":" & $seconds & "." & $milliseconds & " (h:m:s.ms) | Mem usage: " & $mem & " KB | CPU usage: " & $Process_CPU_Usage & " % " & @CR
    MemoWrite($info)

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

    Sleep(1000)
    If Not ProcessExists($PID) Then _Exit()
    WEnd

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

    Func MemoWrite($sMessage = "")
    GUICtrlSetData($iMemo, $sMessage)
    EndFunc ;==>MemoWrite

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

    Func _GetProcTime($ProcessHandle)
    $ret = DllCall("kernel32.dll", "int", "GetProcessTimes", "int", $ProcessHandle, "ptr", DllStructGetPtr($CreateTime), "ptr", DllStructGetPtr($ExitTime), "ptr", DllStructGetPtr($KernelTime), "ptr", DllStructGetPtr($UserTime))
    If $ret[0] = 0 Then
    ConsoleWrite("(" & @ScriptLineNumber & ") : = Error in GetProcessTimes call" & @CRLF)
    SetError(1, 0, $ret[0])
    EndIf
    $sKernelTime = DllStructGetData($KernelTime, 1)
    $sUserTime = DllStructGetData($UserTime, 1)
    $Process_CPU_Usage = Floor(($sKernelTime - $eKernelTime + $sUserTime - $eUserTime) / 100000 / $logical_cpus)
    If $Process_CPU_Usage > 100 Then $Process_CPU_Usage = "100"
    $eKernelTime = $sKernelTime
    $eUserTime = $sUserTime
    Return $sUserTime + $sKernelTime
    EndFunc ;==>_GetProcTime

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

    Func _ProcessGetMem($ProcessHandle) ;get physical memory of the process -> http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
    Local $structPROCESS_MEMORY_COUNTERS, $structPROCESS_MEMORY_COUNTERS_EX, $nSize, $aRet
    If @OSVersion <> "WIN_7" Then
    $structPROCESS_MEMORY_COUNTERS = DllStructCreate("dword cb; dword PageFaultCount; dword_ptr PeakWorkingSetSize; dword_ptr WorkingSetSize; " & _
    "dword_ptr QuotaPeakPagedPoolUsage; dword_ptr QuotaPagedPoolUsage; dword_ptr QuotaPeakNonPagedPoolUsage; " & _
    "dword_ptr QuotaNonPagePoolUsage; dword_ptr PagefileUsage; dword_ptr PeakPagefileUsage") ;http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
    $nSize = DllStructGetSize($structPROCESS_MEMORY_COUNTERS)
    $aRet = DllCall("psapi.dll", "int", "GetProcessMemoryInfo", "hwnd", $ProcessHandle, "ptr", DllStructGetPtr($structPROCESS_MEMORY_COUNTERS), "dword", $nSize) ;call GetProcessMemoryInfo
    If $aRet[0] = 0 Then
    ConsoleWrite("(" & @ScriptLineNumber & ") : = Error in GetProcessMemoryInfo call" & @LF)
    SetError(1, 0, $aRet[0])
    EndIf
    Return DllStructGetData($structPROCESS_MEMORY_COUNTERS, "WorkingSetSize")
    Else
    $structPROCESS_MEMORY_COUNTERS_EX = DllStructCreate("dword cb; dword PageFaultCount; dword_ptr PeakWorkingSetSize; dword_ptr WorkingSetSize; " & _
    "dword_ptr QuotaPeakPagedPoolUsage; dword_ptr QuotaPagedPoolUsage; dword_ptr QuotaPeakNonPagedPoolUsage; " & _
    "dword_ptr QuotaNonPagePoolUsage; dword_ptr PagefileUsage; dword_ptr PeakPagefileUsage; " & _
    "dword_ptr PrivateUsage") ;http://msdn.microsoft.com/en-us/library/…28VS.85%29.aspx
    $nSize = DllStructGetSize($structPROCESS_MEMORY_COUNTERS_EX)
    $aRet = DllCall("Kernel32.dll", "int", "K32GetProcessMemoryInfo", "hwnd", $ProcessHandle, "ptr", DllStructGetPtr($structPROCESS_MEMORY_COUNTERS_EX), "dword", $nSize) ;call GetProcessMemoryInfo
    If $aRet[0] = 0 Then
    ConsoleWrite("(" & @ScriptLineNumber & ") : = Error in GetProcessMemoryInfo call" & @LF)
    SetError(1, 0, $aRet[0])
    EndIf
    ;~ ConsoleWrite("WorkingSetSize: " & Round(DllStructGetData($structPROCESS_MEMORY_COUNTERS_EX, "WorkingSetSize") / 1024, 0) & @CRLF & _
    ;~ "PrivateUsage: " & Round(DllStructGetData($structPROCESS_MEMORY_COUNTERS_EX, "PrivateUsage") / 1024, 0) & @CRLF & @CRLF)
    Return DllStructGetData($structPROCESS_MEMORY_COUNTERS_EX, "PrivateUsage")
    EndIf
    EndFunc ;==>_ProcessGetMem

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

    Func CPU() ;get logical CPU(s)
    Local $sLPSystemInfo = DllStructCreate( "ushort dwOemId;" & _
    "short wProcessorArchitecture;" & _
    "dword dwPageSize;" & _
    "ptr lpMinimumApplicationAddress;" & _
    "ptr lpMaximumApplicationAddress;" & _
    "long_ptr dwActiveProcessorMask;" & _
    "dword dwNumberOfProcessors;" & _
    "dword dwProcessorType;" & _
    "dword dwAllocationGranularity;" & _
    "short wProcessorLevel;" & _
    "short wProcessorRevision")
    Local $aResult = DllCall("Kernel32.dll", "none", "GetSystemInfo", "ptr",DllStructGetPtr($sLPSystemInfo))
    If @error Or Not IsArray($aResult) Then Return SetError(1, 0, 0)
    Return DllStructGetData($sLPSystemInfo, "dwNumberOfProcessors")
    EndFunc ;==>CPU

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

    Func Remove_Last_Comma($str)
    If StringRight($str, 2) = ", " Then $str = StringMid($str, 1, StringLen($str) - 2)
    Return $str
    EndFunc ;==>Remove_Last_Comma

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

    Func _Exit()
    DllCall("kernel32.dll", "int", "CloseHandle", "int", $ProcHandle)
    DllCall("psapi.dll", "int", "CloseHandle", "hwnd", $ProcHandle)
    ProcessClose($PID)
    Exit
    EndFunc ;==>_Exit

    [/autoit]

    Es wird ein Dummy AU3 erstellt, kompiliert und gestartet und dessen CPU Auslastung gemessen.

    Sollte auch auf Win7 x64 laufen.

    Gruß,
    UEZ

    Dateien

    Process_Info.au3 7,75 kB – 545 Downloads
  • Feststellen von welchem Programm mein Programm aufgerufen wurde.

    • UEZ
    • 20. April 2011 um 14:58

    Stimmt, habe ich gar nicht bemerkt: im Prinzip ist die Idee von AspirinJunkie und meine die Gleiche, nur das er WMI benutzt und ich die WinAPI!

    Hier nochmals der Code ohne WinAPIEx.au3

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    $parent_pid = _WinAPI_GetParentProcess(@AutoItPID)
    $filename_parent = _WinAPI_GetProcessFileName($parent_pid)
    Local $msg
    GUICreate("My GUI")
    GUICtrlCreateLabel("This program has been started by:" & @LF & $filename_parent, 10, 50, 400, 100)
    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

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

    Func _WinAPI_CloseHandle($hObject)
    Local $aResult = DllCall("kernel32.dll", "bool", "CloseHandle", "handle", $hObject)
    If @error Then Return SetError(@error, @extended, False)
    Return $aResult[0]
    EndFunc ;==>_WinAPI_CloseHandle

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

    Func _WinAPI_GetCurrentProcessID()
    Local $aResult = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[0]
    EndFunc ;==>_WinAPI_GetCurrentProcessID

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

    Func _WinAPI_GetParentProcess($PID = 0)
    If Not $PID Then
    $PID = _WinAPI_GetCurrentProcessID()
    If Not $PID Then
    Return SetError(1, 0, 0)
    EndIf
    EndIf
    Local $hSnapshot = DllCall('kernel32.dll', 'ptr', 'CreateToolhelp32Snapshot', 'dword', 0x00000002, 'dword', 0)
    If (@error) Or (Not $hSnapshot[0]) Then
    Return SetError(1, 0, 0)
    EndIf
    Local $tPROCESSENTRY32 = DllStructCreate('dword Size;dword Usage;dword ProcessID;ulong_ptr DefaultHeapID;dword ModuleID;dword Threads;dword ParentProcessID;long PriClassBase;dword Flags;wchar ExeFile[260]')
    Local $pPROCESSENTRY32 = DllStructGetPtr($tPROCESSENTRY32)
    Local $Ret, $Result = 0
    $hSnapshot = $hSnapshot[0]
    DllStructSetData($tPROCESSENTRY32, 'Size', DllStructGetSize($tPROCESSENTRY32))
    $Ret = DllCall('kernel32.dll', 'int', 'Process32FirstW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32)
    While (Not @error) And ($Ret[0])
    If DllStructGetData($tPROCESSENTRY32, 'ProcessID') = $PID Then
    $Result = DllStructGetData($tPROCESSENTRY32, 'ParentProcessID')
    ExitLoop
    EndIf
    $Ret = DllCall('kernel32.dll', 'int', 'Process32NextW', 'ptr', $hSnapshot, 'ptr', $pPROCESSENTRY32)
    WEnd
    _WinAPI_CloseHandle($hSnapshot)
    If Not $Result Then
    Return SetError(1, 0, 0)
    EndIf
    Return $Result
    EndFunc ;==>_WinAPI_GetParentProcess

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

    Func _WinAPI_GetProcessFileName($PID = 0)
    If Not $PID Then
    $PID = _WinAPI_GetCurrentProcessID()
    If Not $PID Then
    Return SetError(1, 0, '')
    EndIf
    EndIf
    Local $hProcess = DllCall('kernel32.dll', 'ptr', 'OpenProcess', 'dword', 0x00000410, 'int', 0, 'dword', $PID)
    If (@error) Or (Not $hProcess[0]) Then
    Return SetError(1, 0, '')
    EndIf
    Local $tPath = DllStructCreate('wchar[1024]')
    Local $Ret = DllCall(@SystemDir & '\psapi.dll', 'int', 'GetModuleFileNameExW', 'ptr', $hProcess[0], 'ptr', 0, 'ptr', DllStructGetPtr($tPath), 'int', 1024)
    If (@error) Or (Not $Ret[0]) Then
    $Ret = 0
    EndIf
    _WinAPI_CloseHandle($hProcess[0])
    If Not IsArray($Ret) Then
    Return SetError(1, 0, '')
    EndIf
    Return DllStructGetData($tPath, 1)
    EndFunc ;==>_WinAPI_GetProcessFileName

    [/autoit]

    Gruß,
    UEZ

  • LDAP Abfrage

    • UEZ
    • 20. April 2011 um 12:12

    Schaue dir doch einfach mal das hier an: Active Directory Funktionen "adfunctions.au3" zu einem "echten" UDF machen

    Brauchst das Rad nicht neu erfinden.

    Gruß,
    UEZ

  • Feststellen von welchem Programm mein Programm aufgerufen wurde.

    • UEZ
    • 19. April 2011 um 21:14

    Probiere es mal damit, d.h. lass' mal deine Programme den Code (Exe) unten starten:

    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WinAPIEx.au3>
    $parent_pid = _WinAPI_GetParentProcess(@AutoItPID)
    $filename_parent = _WinAPI_GetProcessFileName($parent_pid)
    Local $msg

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

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered
    GUICtrlCreateLabel("This program has been started by:" & @LF & $filename_parent, 10, 50, 400, 100)
    GUISetState(@SW_SHOW) ; will display an empty dialog box

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    GUIDelete()

    [/autoit]

    Man benötigt dazu die WinAPIEx.au3!

    Gruß,
    UEZ

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™