Wie meinst du das? Und wie willst du das Bild benutzen?
Zeig' mal einen Screenshot.
Gruß,
UEZ
Wie meinst du das? Und wie willst du das Bild benutzen?
Zeig' mal einen Screenshot.
Gruß,
UEZ
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:
#include <GDIplus.au3>
#include <GUIConstantsEx.au3>
#Include <Memory.au3>
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)
Global $hWnd = GUICreate("Display image from memory by UEZ 2010", $iWidth, $iHeight)
GUISetState(@SW_SHOW)
Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
_GDIPlus_GraphicsDrawImageRect ($hGraphics, $hImage, 0, 0, $iWidth, $iHeight);copy bitmap to GUI
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
Func WM_ERASEBKGND($hWnd, $uMsgm, $wParam, $lParam)
_GDIPlus_GraphicsDrawImageRect ($hGraphics, $hImage, 0, 0, $iWidth, $iHeight)
Return True
EndFunc ;==>WM_ERASEBKGND
;======================================================================================
; 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
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
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:
#include-once
#include<Memory.au3>
#include<GDIp.au3>
; #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
; #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
; #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
; #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
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
_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)
Do
Until GUIGetMsg() = -3
WinSetTitle($gui, "", "Now using _GUICtrlStatic_SetImage")
_WinAPI_RedrawWindow($gui)
$iLabel = GUICtrlCreateLabel("", 0, 0, 193, 184)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
_GUICtrlStatic_SetImage($iLabel, $hBitmap)
Do
Until GUIGetMsg() = -3
Ich hoffe, das hilft dir.
Gruß,
UEZ
Ich habe den Code von StringSplitW() aktualisiert; den $max_width habe ich entfernt, wird jetzt berechnet.
Gruß,
UEZ
Anscheinend darf die Höhe + Breite eines 2D Arrays nicht größer als 0x5EFA sein.
Gruß,
UEZ
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
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:
#include <Array.au3>
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
; #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
Gruß,
UEZ
Probiere es mal damit:
#include <Array.au3>
$file = FileOpenDialog("Select a CSV file", "", "File (*.csv)")
If @error Then Exit
$csv = FileRead($file)
$aCSV = StringSplitW($csv, ";")
_ArrayDisplay($aCSV)
; #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
Gruß,
UEZ
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
#include <GuiRichEdit.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
$Color_RGB = 0xABCDEF ;RGB
$Color_BGR = 0xEFCDAB ;BGR
$GUI = GUICreate("test")
GUISetBkColor($Color_RGB, $GUI)
GUICtrlCreatePic("test.jpg", 0, 0, 400, 400)
$Size = WinGetClientSize($GUI)
$GUI2 = GUICreate("SBot Manager Client", $Size[0], $Size[1], 0, 0, 0x80000000, 0x00080000 + 0x00000040, $GUI)
GUISetBkColor($Color_RGB, $GUI2)
GUICtrlCreateEdit("Edit", 5, 5, 195, 390)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetBkColor(-1, $Color_RGB)
$RichEdit = _GUICtrlRichEdit_Create($GUI2, "RichEdit", 205, 5, 190, 390)
_GUICtrlRichEdit_SetBkColor($RichEdit, $Color_BGR)
_GUICtrlRichEdit_SetCharColor($RichEdit, 0xFFFFFF)
_WinAPI_SetLayeredWindowAttributes($GUI2, $Color_RGB)
[/autoit] [autoit][/autoit] [autoit]GUISetState(@SW_SHOW, $GUI)
GUISetState(@SW_SHOW, $GUI2)
While Sleep(50)
If GUIGetMsg() = -3 Then Exit
WEnd
3) der Titel SBot Manager Client ist nicht gerade ideal, um hier Hilfe zu bekommen!
Gruß,
UEZ
Falls es euch interessiert:
#include-once
#include <GDIPlus.au3>
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
; #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
;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)
; Read TIFF file header (8 bytes)
Local $tData = DllStructCreate('ushort Order;ushort Type;dword Offset')
_WinAPI_ReadFile($hFile, DllStructGetPtr($tData), 8, $Bytes)
; 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)
; 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)
; 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
EndFunc
[/autoit]Dank an Yashied für seine Erläuterungen!
Fehlt noch die Farbtiefe von JPG Bildern (ist nicht immer 24 bit!)
Gruß,
UEZ
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
ZitatAlles anzeigen
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.
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. ![]()
Gruß,
UEZ
Schaue mal hier rein: http://www.autoitscript.com/forum/topic/97241-3d-pie-chart
Gruß,
UEZ
Alles anzeigenEtwa so?:
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
$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)$graphic = _GDIPlus_GraphicsCreateFromHWND($Gui)
[/autoit]
$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
Schönes Beispiel! ![]()
Hab's mal ein bissl gestrafft:
#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
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
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
Ladebildschirm 1 sieht aus schön aus!
Gruß,
UEZ
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
name22: das stimmt nicht ganz!
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <GDIPlus.au3>
#include <WinAPI.au3>
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)
$hWnd = GUICreate("Test", 300, 100, Default, Default, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_TOPMOST)
GUISetState()
$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)
_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphics = _GDIPlus_GraphicsCreateFromHDC($hDC_Buffer)
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)
DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $hGraphics, "int", 4)
$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)
;~ $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)
_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
Func _Exit()
_WinAPI_ReleaseDC($hWnd, $hDC_Window)
_WinAPI_DeleteDC($hDC_Buffer)
_WinAPI_DeleteObject($hGDI_Bitmap)
_GDIPlus_GraphicsDispose($hGraphics)
_GDIPlus_BrushDispose($hBrush_Text)
;~ _GDIPlus_PathDispose($hPath)
_GDIPlus_StringFormatDispose($hFormat)
_GDIPlus_FontFamilyDispose($hFamily)
_GDIPlus_FontDispose($hFont)
_GDIPlus_Shutdown()
Exit
EndFunc
Gruß,
UEZ ![]()
Das sollte eigentlich recht einfach zu implementieren sein:
#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
Gruß,
UEZ ![]()
Alles anzeigenHey 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-filterswenn ich die lösche, dann funktionierts genauso, was bringen die also?
kann man das irgendwo nachlesen?
Danke
DFPWare
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-filter: startet UPX mit den höchsten Packraten - Nachteil: ziemlich langsam, aber dafür ist die Exe kleiner als mit den Standard Werten.
Gruß,
UEZ
Probiere es mal damit:
;coded by UEZ
#AutoIt3Wrapper_UseX64=n
#include <WindowsConstants.au3>
Opt('MustDeclareVars', 1)
Opt("TrayIconHide", 1)
HotKeySet("{ESC}", "_Exit")
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
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
$PID = Run($dummy_exe)
[/autoit] [autoit][/autoit] [autoit]If $PID = 0 Then
MsgBox(16, "ERROR", "ERROR! Process " & $prg & " not found! Aborting..." & @CRLF)
Exit
EndIf
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()
$ProcHandle = DllCall("kernel32.dll", "hwnd", "OpenProcess", "dword", $Process_All_Access, "int", False, "dword", $PID)
$ProcHandle = $ProcHandle[0]
While True
$CPUTime = _GetProcTime($ProcHandle)
$mem = _ProcessGetMem($ProcHandle) / 1024
$hour = Int($CPUTime / 10000000 / 3600)
$minutes = Int($CPUTime / 10000000 / 60)
If $minutes < 10 Then $minutes = "0" & $minutes
$seconds = Round((Int($CPUTime / 10000000) / 60 - Int($CPUTime / 10000000 / 60)) * 60, 0)
If $seconds < 10 Then $seconds = "0" & $seconds
$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
$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)
Sleep(1000)
If Not ProcessExists($PID) Then _Exit()
WEnd
Func MemoWrite($sMessage = "")
GUICtrlSetData($iMemo, $sMessage)
EndFunc ;==>MemoWrite
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
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
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
Func Remove_Last_Comma($str)
If StringRight($str, 2) = ", " Then $str = StringMid($str, 1, StringLen($str) - 2)
Return $str
EndFunc ;==>Remove_Last_Comma
Func _Exit()
DllCall("kernel32.dll", "int", "CloseHandle", "int", $ProcHandle)
DllCall("psapi.dll", "int", "CloseHandle", "hwnd", $ProcHandle)
ProcessClose($PID)
Exit
EndFunc ;==>_Exit
Es wird ein Dummy AU3 erstellt, kompiliert und gestartet und dessen CPU Auslastung gemessen.
Sollte auch auf Win7 x64 laufen.
Gruß,
UEZ
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
#include <GUIConstantsEx.au3>
$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()
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
Func _WinAPI_GetCurrentProcessID()
Local $aResult = DllCall("kernel32.dll", "dword", "GetCurrentProcessId")
If @error Then Return SetError(@error, @extended, 0)
Return $aResult[0]
EndFunc ;==>_WinAPI_GetCurrentProcessID
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
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
Gruß,
UEZ
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
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
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
; Run the GUI until the dialog is closed
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
GUIDelete()
Man benötigt dazu die WinAPIEx.au3!
Gruß,
UEZ