Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 10/16/2021 in all areas

  1. I'm happy to be able to help you. for x64 it will work correctly using struct* in all structure parameters. Saludos
    1 point
  2. Your method is great. I use the way to turn off ipv6 manually in Windows Settings, which is quite inconvenient. I have another new experience from you 😍
    1 point
  3. Hello, The answer is probably because of ipv6. [stackoverflow] "I found out that turning off IPV6 protocol in network adapter settings on windows resolved the issue. So it really could be server side compatibility with IPV6. After 20 sec fallback to IPV4 and any next request running good. Just try turning off the IPV6."
    1 point
  4. ok I was wrong I know that i've managed to pull out a whole array at once as a binary string and using that string as an array of sorts. I forgot how limited autoit is when it comes to this kinda stuff. That being said any kinda work around would probably just take longer than actually just pushing the data to the struct. Have you looked into just grabbing the capured image from the clipboard or making whatever modifications to the capture in c# and just putting the modified capture back in the clipboard and using the clipboard as a buffer between the 2 processes? Is the c# a process or a dll? Whatever it is that you have going on theres got to be a better way than returning a bytearray. The speed is in the c# so that process should be quarterbacking and basically sending the autoit script the minimal amount of information possible for it to do whatever it is that you think you need it for. Either that or bare minimum return a handle to the object.
    1 point
  5. In the new versions of the autoit language, constant variables have been added in its reference that disrupt the work of the code and these variables are Global Const $RT_ACCELERATOR = 9 Global Const $RT_ANICURSOR = 21 Global Const $RT_ANIICON = 22 Global Const $RT_BITMAP = 2 Global Const $RT_CURSOR = 1 Global Const $RT_DIALOG = 5 Global Const $RT_DLGINCLUDE = 17 Global Const $RT_FONT = 8 Global Const $RT_FONTDIR = 7 Global Const $RT_GROUP_CURSOR = ($RT_CURSOR + 11) Global Const $RT_ICON = 3 Global Const $RT_GROUP_ICON = ($RT_ICON + 11) Global Const $RT_HTML = 23 Global Const $RT_MANIFEST = 24 Global Const $RT_MENU = 4 Global Const $RT_MESSAGETABLE = 11 Global Const $RT_PLUGPLAY = 19 Global Const $RT_RCDATA = 10 Global Const $RT_STRING = 6 Global Const $RT_VERSION = 16 Global Const $RT_VXD = 20 Since these variables already exist in the code The code has been updated and now it works...thanks. New Project Files New_Resource.zip Resource.au3 #include <Constants.au3> #include <WinAPI.au3> #include <Memory.au3> Func ResGet($ResType,$ResName,$ResLanguage = -1,$ModuleName = "") Local $DataType1 = "LONG",$DataType2 = "LONG" Local $LPVOID,$HRSRC,$ResSize,$HGLOBAL if IsString($ResName) Then $ResName = StringUpper($ResName) $DataType1 = "WSTR" EndIf If IsString($ResType) Then $ResType = StringUpper($ResType) $DataType2 = "WSTR" EndIf if StringLen($ModuleName) Then $HModule = _WinAPI_LoadLibraryEx($ModuleName,$LOAD_LIBRARY_AS_DATAFILE) if $HModule = 0 Then Return SetError(1,0,0) Else $HModule = 0 EndIf if ($ResLanguage <> -1) Then $HRSRC = DllCall("Kernel32.dll","ptr","FindResourceExW","ptr",$HModule, _ $DataType2,$ResType,$DataType1,$ResName,"WORD",$ResLanguage) if @error Or $HRSRC[0] = 0 Then Return SetError(2,0,0) Else $HRSRC = DllCall("Kernel32.dll","ptr","FindResourceW","ptr",$HModule, _ $DataType1,$ResName,$DataType2,$ResType) if @error Or $HRSRC[0] = 0 Then Return SetError(2,0,0) EndIf $HRSRC = $HRSRC[0] $ResSize = DllCall("Kernel32.dll","DWORD","SizeofResource","ptr",$HModule,"ptr",$HRSRC) if (@error Or $ResSize[0] = 0) Then Return SetError(3,0,0) $ResSize = $ResSize[0] $HGLOBAL = DllCall("Kernel32.dll","ptr","LoadResource","ptr",$HModule,"ptr",$HRSRC) if @error Or $HGLOBAL[0] = 0 Then Return SetError(4,0,0) $HGLOBAL = $HGLOBAL[0] $LPVOID = DllCall("Kernel32.dll","ptr","LockResource","ptr",$HGLOBAL) if @error Or $LPVOID[0] = 0 Then $BOOL = DllCall("Kernel32.dll","BOOL","FreeResource","ptr",$HGLOBAL) Return SetError(5,0,0) EndIf $LPVOID = $LPVOID[0] $ByteStruct = DllStructCreate("BYTE[" & $ResSize & "]") _MemMoveMemory($LPVOID,DllStructGetPtr($ByteStruct),$ResSize) $BOOL = DllCall("Kernel32.dll","BOOL","FreeResource","ptr",$HGLOBAL) if ($HModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(0,$ResSize,$ByteStruct) EndFunc Func ResToFile($FileName,$ResType,$ResName,$ResLanguage = -1,$ModuleName = "",$Mode = 10) $ByteStruct = ResGet($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,False) $OpeFile = FileOpen($FileName,$Mode) if @error Then Return SetError(2,0,False) FileWrite($OpeFile,Binary(DllStructGetData($ByteStruct,1))) if @error Then Return SetError(3,0,False) FileClose($OpeFile) Return SetError(0,0,True) EndFunc Func StringResGet($ResType,$ResName,$ResLanguage = -1,$Unicode = False,$ModuleName = "") Local $DtatType = "CHAR" $ByteStruct = ResGet($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,0) $ResSize = @extended $LPVOID = DllStructGetPtr($ByteStruct) if ($Unicode) Then $DtatType = "WCHAR" $ResSize = Int($ResSize/2) EndIf $StrStruct = DllStructCreate($DtatType & "[" & $ResSize & "]",$LPVOID) if @error Then Return SetError(2,0,0) $nString = DllStructGetData($StrStruct,1) Return SetError(0,StringLen($nString),$nString) EndFunc Func ResGetImage($ResType,$ResName,$ResLanguage = -1,$ModuleName = "") Switch $ResType Case $RT_BITMAP $hImage = LoadBitmap($ResName,$ModuleName) if @error Then Return SetError(1,0,0) Return SetError(0,1,$hImage) Case $RT_GROUP_ICON $hImage = LoadIcon($ResName,$ModuleName) if @error Then Return SetError(2,0,0) Return SetError(0,3,$hImage) Case $RT_GROUP_CURSOR $hImage = LoadCursor($ResName,$ModuleName) if @error Then Return SetError(3,0,0) Return SetError(0,5,$hImage) Case Else $ByteStruct = ResGet($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(4,0,0) $ResSize = @extended $hMemory = _MemGlobalAlloc($ResSize,$GHND) if Not($hMemory) Then Return SetError(5,0,0) $hLock = _MemGlobalLock($hMemory) if Not($hLock) Then _MemGlobalFree($hMemory) Return SetError(6,0,0) EndIf _MemMoveMemory(DllStructGetPtr($ByteStruct),$hLock,$ResSize) $lpstream = CreateStreamOnHGlobal($hLock,True) if @error Then _MemGlobalFree($hMemory) Return SetError(7,0,0) EndIf $riid = _WinAPI_GUIDFromString("{7BF80981-BF32-101A-8BBB-00AA00300CAB}") if @error Then _MemGlobalFree($hMemory) Return SetError(8,0,0) EndIf $HRESULT = DllCall("OleAut32.dll","LONG","OleLoadPicture","PTR",$lpstream,"LONG", _ $ResSize,"BOOL",True,"ptr",DllStructGetPtr($riid),"idispatch*",0) if @error Or $HRESULT[0] <> 0 Then _MemGlobalFree($hMemory) Return SetError(9,0,0) EndIf $iPicture = $HRESULT[5] _MemGlobalFree($hMemory) Return SetError(0,Int($iPicture.Type()),Ptr($iPicture.Handle())) EndSwitch ;PICTYPE_UNINITIALIZED (-1) ;The picture object is currently uninitialized. This value is only valid as a return value ;from IPicture::get_Type and is not valid with the PICTDESC structure. ;PICTYPE_NONE = 0 ;A new picture object is to be created without an initialized state. This ;value is valid only in the PICTDESC structure. ;PICTYPE_BITMAP = 1 ;The picture type is a bitmap. When this value occurs in the PICTDESC structure, ;it means that the bmp field of that structure contains the relevant initialization parameters. ;PICTYPE_METAFILE = 2 ;The picture type is a metafile. When this value occurs in the PICTDESC structure, ;it means that the wmf field of that structure contains the relevant initialization parameters. ;PICTYPE_ICON = 3 ;The picture type is an icon. When this value occurs in the PICTDESC structure, ;it means that the icon field of that structure contains the relevant initialization parameters. ;PICTYPE_ENHMETAFILE = 4 ;The picture type is an enhanced metafile. When this value occurs in the PICTDESC structure, ;it means that the emf field of that structure contains the relevant initialization parameters. EndFunc Func LoadBitmap($lpBitmapName,$ModuleName = "") Local $DataType = "LONG" , $TestModule = StringLen($ModuleName) <> 0 if ($TestModule) Then $HModule = _WinAPI_LoadLibraryEx($ModuleName,$LOAD_LIBRARY_AS_DATAFILE) if $HModule = 0 Then Return SetError(1,0,0) Else $HModule = _WinAPI_GetModuleHandle(0) EndIf if IsString($lpBitmapName) Then $lpBitmapName = StringUpper($lpBitmapName) $DataType = "WSTR" EndIf $HBITMAP = DllCall("User32.dll","PTR","LoadBitmapW","PTR",$HModule,$DataType,$lpBitmapName) if @error Or $HBITMAP[0] = 0 Then if ($TestModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(2,0,0) EndIf if ($TestModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(0,0,$HBITMAP[0]) EndFunc Func LoadIcon($lpIconName,$ModuleName = "") Local $DataType = "LONG" , $TestModule = StringLen($ModuleName) <> 0 if ($TestModule) Then $HModule = _WinAPI_LoadLibraryEx($ModuleName,$LOAD_LIBRARY_AS_DATAFILE) if $HModule = 0 Then Return SetError(1,0,0) Else $HModule = _WinAPI_GetModuleHandle(0) EndIf if IsString($lpIconName) Then $lpIconName = StringUpper($lpIconName) $DataType = "WSTR" EndIf $HICON = DllCall("User32.dll","PTR","LoadIconW","PTR",$HModule,$DataType,$lpIconName) if @error Or $HICON[0] = 0 Then if ($TestModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(2,0,0) EndIf if ($TestModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(0,0,$HICON[0]) EndFunc Func LoadCursor($lpCursorName,$ModuleName = "") Local $DataType = "LONG" , $TestModule = StringLen($ModuleName) <> 0 if ($TestModule) Then $HModule = _WinAPI_LoadLibraryEx($ModuleName,$LOAD_LIBRARY_AS_DATAFILE) if $HModule = 0 Then Return SetError(1,0,0) Else $HModule = _WinAPI_GetModuleHandle(0) EndIf if IsString($lpCursorName) Then $lpCursorName = StringUpper($lpCursorName) $DataType = "WSTR" EndIf $HCURSOR= DllCall("User32.dll","PTR","LoadCursorW","PTR",$HModule,$DataType,$lpCursorName) if @error Or $HCURSOR[0] = 0 Then if ($TestModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(2,0,0) EndIf if ($TestModule) Then _WinAPI_FreeLibrary($HModule) Return SetError(0,0,$HCURSOR[0]) EndFunc Func CreateStreamOnHGlobal($hGlobal,$fDeleteOnRelease) $WINOLE = DllCall("Ole32.dll","PTR","CreateStreamOnHGlobal","ptr", _ $hGlobal,"BOOL",$fDeleteOnRelease,"PTR*",0) if @error Or $WINOLE[0] <> 0 Then Return SetError(1,0,0) Return SetError(0,0,$WINOLE[3]) EndFunc Res_Ctrl.au3 #include <Constants.au3> #include <WindowsConstants.au3> #include <WinAPI.au3> #include <Memory.au3> #include "Resource.au3" Global $Global_BackGroundArray[4][1] Func ResCtrlCreatePic($L,$T,$W,$H,$ResType,$ResName, _ $ResLanguage = -1,$ModuleName = "",$Style = 0,$ExStyle = 0) $ImageHandle = ResGetImage($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,0) $ImageType = @extended $ControlID = CtrlCreatePic($ImageHandle,$ImageType,$L,$T,$W,$H,$Style,$ExStyle) if @error Then Return SetError(2,0,0) Return SetError(0,$ImageType,$ControlID) EndFunc Func ResCtrlCreatePicEx($L,$T,$W,$H,$Text,$ResType,$ResName,$ResLanguage = -1, _ $ModuleName = "",$Style = 0,$ExStyle = 0,$FontColor=0,$FontSize=8.5,$FomtWeight=400 _ ,$FontAttribute=2,$Fontname="",$FontQuality=2) $ImageHandle = ResGetImage($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,0) $ImageType = @extended $ControlID = CtrlCreatePicEx($ImageHandle,$ImageType,$L,$T,$W,$H,$Text,$Style, _ $ExStyle,$FontColor,$FontSize,$FomtWeight,$FontAttribute,$Fontname,$FontQuality) if @error Then Return SetError(2,0,0) Return SetError(0,$ImageType,$ControlID) EndFunc Func ResCtrlCreate_Button($L,$T,$W,$H,$ResType,$ResName, _ $ResLanguage = -1,$ModuleName = "",$Style = 0,$ExStyle = 0,$ReSize = False) $ImageHandle = ResGetImage($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,0) $ImageType = @extended if ($ReSize) Then $SizeArray = GetImageSize($ImageHandle) if @error Then DeleteObj($ImageHandle,$ImageType) Return SetError(2,0,0) EndIf $W = $SizeArray[0] $H = $SizeArray[1] EndIf $ControlID = CtrlCreate_Button($ImageHandle,$ImageType,$L,$T,$W,$H,$Style,$ExStyle) if @error Then Return SetError(3,0,0) Return SetError(0,$ImageType,$ControlID) EndFunc Func ResSetBackGroundBmp($hWnd,$ResType,$ResName,$ResLanguage = -1 _ ,$ModuleName = "",$DeletOldImage = True) $hImage = ResGetImage($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,False) Local $ImageType = @extended if ($ImageType <> 1) Then DeleteObj($hImage,$ImageType) $SizeArray = GetImageSize($hImage) if @error Then DeleteObj($hImage,$ImageType) Return SetError(2,0,False) EndIf $BmpWidth = $SizeArray[0] $BmpHeight = $SizeArray[1] SetBackGroundBmp($hWnd,$hImage,$BmpWidth,$BmpHeight,$DeletOldImage) if @error Then DeleteObj($hImage,$ImageType) Return SetError(3,0,False) EndIf Return SetError(0,0,True) EndFunc Func ResSndPlaySound($ResType,$ResName,$ResLanguage = -1,$ModuleName = "",$LOOP = False) $ByteStruct = ResGet($ResType,$ResName,$ResLanguage,$ModuleName) if @error Then Return SetError(1,0,False) $LPVOID = DllStructGetPtr($ByteStruct) SndPlaySound($LPVOID,$LOOP) if @error Then Return SetError(2,0,False) Return SetError(0,0,True) EndFunc Func CtrlCreatePic($ImageHandle,$ImageType,$L,$T,$W,$H,$Style = 0,$ExStyle = 0) Local $SS_ICON_RES = 0x00000003,$SS_ENHMETAFILE_RES = 0x0000000F Local $SS_BITMAP_RES = 0x0000000E,$SS_REALSIZECONTROL_RES = 0x00000040 Switch $ImageType Case 1 ;BITMAP $ImageStyle = BitOR($Style,$SS_BITMAP_RES,$SS_REALSIZECONTROL_RES) Case 4 ;ENHMETAFILE $ImageStyle = BitOR($Style,$SS_ENHMETAFILE_RES,$SS_REALSIZECONTROL_RES) Case 3,5 ;INCON OR CURSOR $ImageStyle = BitOR($Style,$SS_ICON_RES,$SS_REALSIZECONTROL_RES) Case Else Return SetError(1,0,0) EndSwitch $ControlID = GUICtrlCreateLabel("",$L,$T,$W,$H,$ImageStyle,$ExStyle) CtrlSetImage($ControlID,$ImageHandle,$ImageType) if @error Then Return SetError(2,0,0) Return SetError(0,$ImageType,$ControlID) EndFunc Func CtrlCreatePicEx($ImageHandle,$ImageType,$L,$T,$W,$H,$Text,$Style = 0,$ExStyle = 0, _ $FontColor=0,$FontSize=8.5,$FomtWeight=400,$FontAttribute=0,$Fontname="",$FontQuality=2) Local $SS_BITMAP_RES = 0x0000000E,$SS_REALSIZECONTROL_RES = 0x00000040 Local $SS_ICON_RES = 0x00000003,$SS_CENTER_RES = 0x01,$SS_CENTERIMAGE_RES = 0x0200 Local $SS_ENHMETAFILE_RES = 0x0000000F Switch $ImageType Case 1 ;BITMAP $ImageStyle = BitOR($Style,$SS_BITMAP_RES,$SS_REALSIZECONTROL_RES) Case 4 ;ENHMETAFILE $ImageStyle = BitOR($Style,$SS_ENHMETAFILE_RES,$SS_REALSIZECONTROL_RES) Case 3,5 ;INCON OR CURSOR $ImageStyle = BitOR($Style,$SS_ICON_RES,$SS_REALSIZECONTROL_RES) Case Else Return SetError(1,0,0) EndSwitch $ControlID1 = GUICtrlCreateLabel("",$L,$T,$W,$H,$ImageStyle,$ExStyle) CtrlSetImage($ControlID1,$ImageHandle,$ImageType) if @error Then GUICtrlDelete($ControlID1) Return SetError(2,0,0) EndIf $ControlID2 = GUICtrlCreateLabel($Text,$L,$T,$W,$H,BitOR($SS_CENTER_RES,$SS_CENTERIMAGE_RES)) GUICtrlSetColor(-1,$FontColor) GUICtrlSetBkColor(-1,-2);-2 $GUI_BKCOLOR_TRANSPARENT GUICtrlSetFont(-1,$FontSize,$FomtWeight,$FontAttribute,$Fontname,$FontQuality) Return SetError(0,$ImageType,$ControlID1) EndFunc Func DeletePicEx($ControlID) GUICtrlDelete($ControlID) GUICtrlDelete($ControlID + 1) EndFunc Func SetPosPicEx($ControlID,$L,$T,$W,$H) GUICtrlSetPos($ControlID,$L,$T,$W,$H) GUICtrlSetPos($ControlID + 1,$L,$T,$W,$H) EndFunc Func SetStatePicEx($ControlID,$State) GUICtrlSetState($ControlID,$State) GUICtrlSetState($ControlID + 1,$State) EndFunc Func SetStylePicEx($ControlID,$Style,$ExStyle) GUICtrlSetStyle($ControlID,$Style,$ExStyle) EndFunc Func CtrlCreate_Button($ImageHandle,$ImageType,$L,$T,$W,$H,$Style = 0,$ExStyle = 0) Local $BS_ICON_RES = 0x0040,$BS_BITMAP_RES = 0x0080 Switch $ImageType Case 1 ;BITMAP $ImageStyle = BitOR($Style,$BS_BITMAP_RES) Case 3 ;ICON $ImageStyle = BitOR($Style,$BS_ICON_RES) Case Else Return SetError(1,0,0) EndSwitch $ControlID = GUICtrlCreateButton("",$L,$T,$W,$H,$ImageStyle,$ExStyle) CtrlSetImage($ControlID,$ImageHandle,$ImageType) if @error Then Return SetError(2,0,0) Return SetError(0,$ImageType,$ControlID) EndFunc Func CtrlSetImage($ControlID,$ImageHandle,$ImageType,$DeletOldImage = False) ;$ImageType ;$ImageType = 1 ==> BITMAP ;$ImageType = 3 ==> ICON ;$ImageType = 4 ==> ENHMETAFILE ;$ImageType = 5 ==> CURSOR ;$ControlID Of STATIC Control Or Button Control Local $ControHandle = $ControlID,$STM_SETIMAGE_RES = 0x0172,$IMAGE_ENHMETAFILE_RES = 3 Local $IMAGE_BITMAP_RES = 0,$IMAGE_ICON_RES = 1,$IMAGE_CURSOR_RES = 2 , $RthImage = 0 Local $BM_SETIMAGE_RES = 0xF7 if Not IsHWnd($ControlID) Then $ControHandle = GUICtrlGetHandle($ControlID) Local $Class = _WinAPI_GetClassName($ControHandle) Select Case $Class == "Button" Switch $ImageType Case 1 ;BITMAP if ($DeletOldImage) Then $OldImage = CtrlGetOldImage($ControlID) Local $OldImageType = @extended $RthImage = _SendMessage($ControHandle,$BM_SETIMAGE_RES,$IMAGE_BITMAP_RES,$ImageHandle) if ($DeletOldImage And $OldImage <> $ImageHandle _ And $OldImage) Then DeleteObj($OldImage,$OldImageType) Case 3 ;ICON if ($DeletOldImage) Then $OldImage = CtrlGetOldImage($ControlID) Local $OldImageType = @extended $RthImage = _SendMessage($ControHandle,$BM_SETIMAGE_RES,$IMAGE_ICON_RES,$ImageHandle) if ($DeletOldImage And $OldImage <> $ImageHandle _ And $OldImage) Then DeleteObj($OldImage,$OldImageType) Case Else Return SetError(3,0,False) EndSwitch Case $Class == "Static" Switch $ImageType Case 1 ;BITMAP if ($DeletOldImage) Then $OldImage = CtrlGetOldImage($ControlID) Local $OldImageType = @extended $RthImage = _SendMessage($ControHandle,$STM_SETIMAGE_RES,$IMAGE_BITMAP_RES,$ImageHandle) if ($DeletOldImage And $OldImage <> $ImageHandle _ And $OldImage) Then DeleteObj($OldImage,$OldImageType) Case 4 ;ENHMETAFILE if ($DeletOldImage) Then $OldImage = CtrlGetOldImage($ControlID) Local $OldImageType = @extended $RthImage = _SendMessage($ControHandle,$STM_SETIMAGE_RES,$IMAGE_ENHMETAFILE_RES,$ImageHandle) if ($DeletOldImage And $OldImage <> $ImageHandle _ And $OldImage) Then DeleteObj($OldImage,$OldImageType) Case 3 ;ICON if ($DeletOldImage) Then $OldImage = CtrlGetOldImage($ControlID) Local $OldImageType = @extended $RthImage = _SendMessage($ControHandle,$STM_SETIMAGE_RES,$IMAGE_ICON_RES,$ImageHandle) if ($DeletOldImage And $OldImage <> $ImageHandle _ And $OldImage) Then DeleteObj($OldImage,$OldImageType) Case 5 ;CURSOR if ($DeletOldImage) Then $OldImage = CtrlGetOldImage($ControlID) Local $OldImageType = @extended $RthImage = _SendMessage($ControHandle,$STM_SETIMAGE_RES,$IMAGE_CURSOR_RES,$ImageHandle) if ($DeletOldImage And $OldImage <> $ImageHandle _ And $OldImage) Then DeleteObj($OldImage,$OldImageType) Case Else Return SetError(3,0,False) EndSwitch if IsHWnd($ControlID) Then $ControlID = _WinAPI_GetDlgCtrlID($ControlID) $ControHandle = GUICtrlGetHandle($ControlID + 1) if ($ControHandle) Then _WinAPI_RedrawWindow($ControHandle,0,0,$RDW_INVALIDATE) Case Else Return SetError(2,0,False) EndSelect if ($RthImage) Then DeleteObj($RthImage,$ImageType) Return SetError(0,0,True) EndFunc Func CtrlGetOldImage($ControlID) ; Return $OldImage Or Zero ;$ImageType = @extended ;$ImageType = 1 ==> BITMAP ;$ImageType = 3 ==> ICON ;$ImageType = 4 ==> ENHMETAFILE ;$ImageType = 5 ==> CURSOR Local $ControHandle = $ControlID,$STM_GETIMAGE_RES = 0x0173,$IMAGE_ENHMETAFILE_RES = 3 Local $IMAGE_BITMAP_RES = 0,$IMAGE_ICON_RES = 1,$IMAGE_CURSOR_RES = 2 , $OldImage = 0 Local $BM_GETIMAGE_RES  = 0x00F6 if Not IsHWnd($ControlID) Then $ControHandle = GUICtrlGetHandle($ControlID) Local $Class = _WinAPI_GetClassName($ControHandle) Select Case $Class == "Button" $OldImage = _SendMessage($ControHandle,$BM_GETIMAGE_RES,$IMAGE_BITMAP_RES,0) if ($OldImage) Then Return SetError(0,1,$OldImage) $OldImage = _SendMessage($ControHandle,$BM_GETIMAGE_RES,$IMAGE_ICON_RES,0) if ($OldImage) Then Return SetError(0,3,$OldImage) Return SetError(1,0,0) Case $Class == "Static" $OldImage = _SendMessage($ControHandle,$STM_GETIMAGE_RES,$IMAGE_BITMAP_RES,0) if ($OldImage) Then Return SetError(0,1,$OldImage) $OldImage = _SendMessage($ControHandle,$STM_GETIMAGE_RES,$IMAGE_ICON_RES,0) if ($OldImage) Then Return SetError(0,3,$OldImage) $OldImage = _SendMessage($ControHandle,$STM_GETIMAGE_RES,$IMAGE_CURSOR_RES,0) if ($OldImage) Then Return SetError(0,5,$OldImage) $OldImage = _SendMessage($ControHandle,$STM_GETIMAGE_RES,$IMAGE_ENHMETAFILE_RES,0) if ($OldImage) Then Return SetError(0,4,$OldImage) Return SetError(1,0,0) Case Else Return SetError(2,0,0) EndSelect EndFunc Func SetBackGroundBmp($hWnd,$hBmpImage,$BmpWidth,$BmpHeight,$DeletOldImage = True) Local $GuiTest = False , $UBound = UBound($Global_BackGroundArray) For $i = 0 To $UBound - 1 if ($Global_BackGroundArray[$i][0] = $hWnd) Then $GuiTest = True ExitLoop EndIf Next if ($GuiTest = False) Then ReDim $Global_BackGroundArray[$UBound + 1][4] if ($DeletOldImage) And ($Global_BackGroundArray[$i][1]) _ Then _WinAPI_DeleteObject($Global_BackGroundArray[$i][1]) $Global_BackGroundArray[$i][0] = $hWnd $Global_BackGroundArray[$i][1] = $hBmpImage $Global_BackGroundArray[$i][2] = $BmpWidth $Global_BackGroundArray[$i][3] = $BmpHeight GUIRegisterMsg($WM_ERASEBKGND,"WM_ERASEBKGND") _WinAPI_RedrawWindow($hWnd) EndFunc Func RemoveBackGroundBmp($hWnd,$DeletImage = True) Local $GuiTest = False , $UBound = UBound($Global_BackGroundArray) Local $NewBackGroundArray[$UBound - 1][4] For $i = 0 To $UBound - 1 if ($Global_BackGroundArray[$i][0] = $hWnd) Then $GuiTest = True ExitLoop EndIf Next if ($GuiTest = True) Then For $i = 0 To $UBound - 1 if ($Global_BackGroundArray[$i][0] = $hWnd) Then ContinueLoop $NewBackGroundArray[$i][0] = $Global_BackGroundArray[$i][0] $NewBackGroundArray[$i][1] = $Global_BackGroundArray[$i][1] $NewBackGroundArray[$i][2] = $Global_BackGroundArray[$i][2] $NewBackGroundArray[$i][3] = $Global_BackGroundArray[$i][3] Next $Global_BackGroundArray = $NewBackGroundArray Else Return SetError(1,0,False) EndIf _WinAPI_RedrawWindow($hWnd) Return SetError(0,0,True) EndFunc Func WM_ERASEBKGND($hWnd, $Msg, $wParam, $lParam) Local $GuiTest = False , $UBound = UBound($Global_BackGroundArray) Local $BGhWnd = WindowFromDC($wParam) if Not @error Then For $i = 0 To $UBound - 1 if ($Global_BackGroundArray[$i][0] = $BGhWnd) Then $GuiTest = True ExitLoop EndIf Next if ($GuiTest) Then $Pos = WinGetClientSize($BGhWnd) $hdc = _WinAPI_CreateCompatibleDC($wParam) $HGDIOBJ = _WinAPI_SelectObject($hdc,$Global_BackGroundArray[$i][1]) StretchBlt($wParam,0,0,$Pos[0],$Pos[1],$hdc,0,0,$Global_BackGroundArray[$i][2], _ $Global_BackGroundArray[$i][3],$SRCCOPY) $HGDIOBJ = _WinAPI_SelectObject($hdc,$HGDIOBJ) _WinAPI_DeleteDC($hdc) Return True EndIf EndIf EndFunc Func SndPlaySound($Ptr,$LOOP = False) ;File Type Or Format File.wav Local $SND_MEMORY  = 4, $SND_ASYNC = 1 ,$SND_SYNC = 0,$SND_NODEFAULT = 2 , _ $SND_LOOP  = 0x0008 , $SND_NOSTOP = 0x0010 ,$SND_FILENAME = 0x00020000 Local $fuSound = BitOR($SND_MEMORY,$SND_ASYNC,$SND_NODEFAULT) if ($LOOP) Then $fuSound = BitOR($fuSound,$SND_LOOP) $BOOL = DllCall("winmm.dll", "int", "sndPlaySound","ptr",$Ptr,"UINT",$fuSound) If @error Or $BOOL[0] = 0 Then Return SetError(1,0,False) Return SetError(0,0,True) EndFunc Func DeleteObj($Object,$ObjectType) Switch $ObjectType Case 1 if (_WinAPI_DeleteObject($Object)) Then Return True Case 2 if (DeleteMetaFile($Object)) Then Return True Case 3 if (_WinAPI_DestroyIcon($Object)) Then Return True Case 4 if (DeleteEnhMetaFile($Object)) Then Return True Case 5 if (DestroyCursor($Object)) Then Return True EndSwitch Return SetError(1,0,False) EndFunc Func StretchBlt($hdcDest,$nXOriginDest,$nYOriginDest,$nWidthDest,$nHeightDest,$hdcSrc,$nXOriginSrc, _ $nYOriginSrc,$nWidthSrc,$nHeightSrc,$dwRop) $Rt = DllCall("Gdi32.dll" ,"BOOL","StretchBlt","ptr",$hdcDest,"int",$nXOriginDest,"int",$nYOriginDest,"int",$nWidthDest , _ "int",$nHeightDest,"ptr",$hdcSrc,"int",$nXOriginSrc,"int",$nYOriginSrc,"int",$nWidthSrc,"int",$nHeightSrc,"DWORD",$dwRop) if @error Or $Rt[0] = 0 Then Return SetError(1,0,0) Return SetError(0,0,$Rt[0]) EndFunc Func WindowFromDC($hDC) $HWND = DllCall("User32.dll","ptr","WindowFromDC","ptr",$hdc) if @error Or $HWND[0] = 0 Then Return SetError(1,0,0) Return SetError(0,0,$HWND[0]) EndFunc Func GetImageSize($hBmp) Local $ntagBITMAPINFO = "DWORD biSize;LONG biWidth;LONG biHeight;USHORT biPlanes;" & _ "USHORT biBitCount;DWORD biCompression;DWORD biSizeImage;LONG biXPelsPerMeter;" & _ "LONG biYPelsPerMeter;DWORD biClrUsed;DWORD biClrImportant;BYTE RGBQUAD[4]" Local $vBITMAPINFO = DllStructCreate($ntagBITMAPINFO) DllStructSetData($vBITMAPINFO,"biSize",(DllStructGetSize($vBITMAPINFO) - 4)) Local $hDC = _WinAPI_CreateCompatibleDC(0) if @error Then _WinAPI_DeleteDC($hDC) Return SetError(1,0,0) EndIf _WinAPI_GetDIBits($hDC,$hBmp,0,0,0,DllStructGetPtr($vBITMAPINFO),0) if @error Then _WinAPI_DeleteDC($hDC) Return SetError(2,0,0) EndIf _WinAPI_DeleteDC($hDC) Local $biWidth = DllStructGetData($vBITMAPINFO,"biWidth") Local $biHeight = DllStructGetData($vBITMAPINFO,"biHeight") Local $SizeArray[2] $SizeArray[0] = $biWidth $SizeArray[1] = $biHeight Return $SizeArray EndFunc Func DeleteMetaFile($hmf) $BOOL = DllCall("Gdi32.dll","BOOL","DeleteMetaFile","ptr",$hmf) if @error Or $BOOL[0] = 0 Then Return SetError(1,0,False) Return SetError(0,0,True) EndFunc Func DeleteEnhMetaFile($hemf) $BOOL = DllCall("Gdi32.dll","BOOL","DeleteEnhMetaFile","ptr",$hemf) if @error Or $BOOL[0] = 0 Then Return SetError(1,0,False) Return SetError(0,0,True) EndFunc Func DestroyCursor($hCursor) $BOOL = DllCall("User32.dll","BOOL","DestroyCursor","ptr",$hCursor) if @error Or $BOOL[0] = 0 Then Return SetError(1,0,False) Return SetError(0,0,True) EndFunc     Module_Res_Example.au3 #include "Res_Ctrl.au3" #include <WinAPI.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> MsgBox(0,AddRes(),"Success AddRes") $Gui = GUICreate("Gui Example",500,500,0,0) $ClID1 = ResCtrlCreatePicEx(10,10,200,100,"GIF","IMGES","GIF",-1,"Res.Dll",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID2 = ResCtrlCreatePicEx(295,10,200,100,"BMP","IMGES","BMP",-1,"Res.Dll",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID3 = ResCtrlCreatePicEx(10,120,200,100,"JPG","IMGES","JPG",-1,"Res.Dll",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID4 = ResCtrlCreatePicEx(295,120,200,100,"ICO","IMGES","ICO",-1,"Res.Dll",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID5 = ResCtrlCreatePicEx(10,230,480,160,"EMF","IMGES","EMF",-1,"Res.Dll",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID6 = ResCtrlCreate_Button(214,100,-1,-1,"IMGES","BUTTON",-1,"Res.Dll",0,0,True) ;$W = -1 $H = -1 // $ReSize = True $BOOL = ResSetBackGroundBmp($Gui,"IMGES","BKGND",-1,"Res.Dll") $BOOL = ResSndPlaySound("IMGES","WAV",-1,"Res.Dll",True); LOOP = True GUICtrlCreateLabel(StringResGet("STR","ANSI",-1,False,"Res.Dll"),10,400,480,40,BitOR($WS_BORDER,$SS_CENTER,$SS_CENTERIMAGE)) GUICtrlCreateLabel(StringResGet("STR","UNICODE",-1,True,"Res.Dll"),10,450,480,40,BitOR($WS_BORDER,$SS_CENTER,$SS_CENTERIMAGE)) GUISetState() Do $msg = GUIGetMsg() Until $msg = $GUI_EVENT_CLOSE Func FileToByteStruct($FileName) Local $nBytes $FileSize = FileGetSize($FileName) $FileStruct = DllStructCreate("byte[" & $FileSize & "]") if @error Then Return SetError(1,0,0) $hFile = _WinAPI_CreateFile($FileName,2,2) if @error Then Return SetError(2,0,0) _WinAPI_ReadFile($hFile,DllStructGetPtr($FileStruct),$FileSize,$nBytes) if @error Then Return SetError(3,0,0) _WinAPI_CloseHandle($hFile) Return SetError(0,0,$FileStruct) EndFunc Func AddRes() if Not FileExists(@ScriptDir & "\Res.Dll") Then FileCopy(@SystemDir & "\ole32.dll",@ScriptDir & "\Res.Dll") $DataStruct = FileToByteStruct("Gif.gif") if @error Then Exit(MsgBox(0,"MsgError1","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"GIF","IMGES") if @error Then Exit(MsgBox(0,"MsgError2","Error ==> " & @error)) $DataStruct = FileToByteStruct("Bmp.bmp") if @error Then Exit(MsgBox(0,"MsgError3","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"BMP","IMGES") if @error Then Exit(MsgBox(0,"MsgError4","Error ==> " & @error)) $DataStruct = FileToByteStruct("jpg.jpg") if @error Then Exit(MsgBox(0,"MsgError5","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"JPG","IMGES") if @error Then Exit(MsgBox(0,"MsgError6","Error ==> " & @error)) $DataStruct = FileToByteStruct("Ico.ico") if @error Then Exit(MsgBox(0,"MsgError7","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"ICO","IMGES") if @error Then Exit(MsgBox(0,"MsgError8","Error ==> " & @error)) $DataStruct = FileToByteStruct("EMF.EMF") if @error Then Exit(MsgBox(0,"MsgError9","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"EMF","IMGES") if @error Then Exit(MsgBox(0,"MsgError10","Error ==> " & @error)) $DataStruct = FileToByteStruct("BKGND.bmp") if @error Then Exit(MsgBox(0,"MsgError11","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"BKGND","IMGES") if @error Then Exit(MsgBox(0,"MsgError12","Error ==> " & @error)) $DataStruct = FileToByteStruct("Wav.wav") if @error Then Exit(MsgBox(0,"MsgError13","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"WAV","IMGES") if @error Then Exit(MsgBox(0,"MsgError14","Error ==> " & @error)) $DataStruct = DllStructCreate("CHAR[" & StringLen("ANSI String") & "]") if @error Then Exit(MsgBox(0,"MsgError15","Error ==> " & @error)) DllStructSetData($DataStruct,1,"ANSI String") UpdateResource("Res.Dll",$DataStruct,"ANSI","STR") if @error Then Exit(MsgBox(0,"MsgError16","Error ==> " & @error)) $DataStruct = DllStructCreate("WCHAR[" & StringLen("UNICODE Wide Character String") & "]") if @error Then Exit(MsgBox(0,"MsgError17","Error ==> " & @error)) DllStructSetData($DataStruct,1,"UNICODE Wide Character String") UpdateResource("Res.Dll",$DataStruct,"UNICODE","STR") if @error Then Exit(MsgBox(0,"MsgError18","Error ==> " & @error)) $DataStruct = FileToByteStruct("Button.bmp") if @error Then Exit(MsgBox(0,"MsgError19","Error ==> " & @error)) UpdateResource("Res.Dll",$DataStruct,"BUTTON","IMGES") if @error Then Exit(MsgBox(0,"MsgError20","Error ==> " & @error)) Return True EndFunc Func UpdateResource($Dll_Exe_FileName,$DataStruct,$lpName,$lpType,$wLanguage = 0) if Not IsDllStruct($DataStruct) Then Return SetError(1,0,False) Local $lpData = DllStructGetPtr($DataStruct),$cbData = DllStructGetSize($DataStruct) $HANDLE = DllCall("kernel32.dll","ptr","BeginUpdateResourceW","wstr",$Dll_Exe_FileName,"BOOL",False) if @error Or $HANDLE[0] = 0 Then Return SetError(2,0,False) $hUpdate = $HANDLE[0] if IsString($lpType) Then $DataType1 = "wstr" $lpType = StringUpper($lpType) ELSE $DataType1 = "long" EndIf if IsString($lpName) Then $DataType2 = "wstr" $lpName = StringUpper($lpName) ELSE $DataType2 = "long" EndIf $BOOL = DllCall("kernel32.dll","BOOL","UpdateResourceW","ptr",$hUpdate,$DataType1 _ ,$lpType,$DataType2,$lpName,"WORD",$wLanguage,"ptr",$lpData,"DWORD",$cbData) if @error Or $BOOL[0] = 0 Then Return SetError(3,0,False) $BOOL = DllCall("kernel32.dll","BOOL","EndUpdateResourceW","HANDLE",$hUpdate,"BOOL",False) if @error Or $BOOL[0] = 0 Then Return SetError(4,0,False) Return SetError(0,0,True) EndFunc     Res_Example.au3 #AutoIt3Wrapper_Res_File_Add=Gif.gif,IMGES,GIF,0 #AutoIt3Wrapper_Res_File_Add=Bmp.bmp,IMGES,BMP,0 #AutoIt3Wrapper_Res_File_Add=jpg.jpg,IMGES,JPG,0 #AutoIt3Wrapper_Res_File_Add=Ico.ico,IMGES,ICO,0 #AutoIt3Wrapper_Res_File_Add=EMF.EMF,IMGES,EMF,0 #AutoIt3Wrapper_Res_File_Add=Button.bmp,IMGES,BUTTON,0 #AutoIt3Wrapper_Res_File_Add=BKGND.bmp,IMGES,BKGND,0 #AutoIt3Wrapper_Res_File_Add=ANSI.txt,STR,ANSI,0 #AutoIt3Wrapper_Res_File_Add=UNICODE.txt,STR,UNICODE,0 #include "Res_Ctrl.au3" #include <WinAPI.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <StaticConstants.au3> if Not (@Compiled) Then Exit(MsgBox(0,"Err","Must compile the Res_Example.au3 With Options")) $Gui = GUICreate("Gui Example",500,500,0,0) $ClID1 = ResCtrlCreatePicEx(10,10,200,100,"GIF","IMGES","GIF",-1,"",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID2 = ResCtrlCreatePicEx(295,10,200,100,"BMP","IMGES","BMP",-1,"",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID3 = ResCtrlCreatePicEx(10,120,200,100,"JPG","IMGES","JPG",-1,"",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID4 = ResCtrlCreatePicEx(295,120,200,100,"ICO","IMGES","ICO",-1,"",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID5 = ResCtrlCreatePicEx(10,230,480,160,"EMF","IMGES","EMF",-1,"",$WS_BORDER,0,0,14,800,0,"MS Sans Serif",2) $ClID6 = ResCtrlCreate_Button(214,100,-1,-1,"IMGES","BUTTON",-1,"",0,0,True) ;$W = -1 $H = -1 // $ReSize = True $BOOL = ResSetBackGroundBmp($Gui,"IMGES","BKGND",-1,"") $BOOL = ResSndPlaySound("IMGES","WAV",-1,"Res.Dll",True); LOOP = True GUICtrlCreateLabel(StringResGet("STR","ANSI",-1,False,""),10,400,480,40,BitOR($WS_BORDER,$SS_CENTER,$SS_CENTERIMAGE)) GUICtrlCreateLabel(StringResGet("STR","UNICODE",-1,True,""),10,450,480,40,BitOR($WS_BORDER,$SS_CENTER,$SS_CENTERIMAGE)) GUISetState() Do $msg = GUIGetMsg() Until $msg = $GUI_EVENT_CLOSE    
    1 point
  6. coffeeturtle, thanks for your compliments. Regarding GDI+ tutorials: well, when I was able to learn and use GDI+ from this forum and help file, everybody should be able to learn GDI+, too. To learn the basics in GDI+ the help file is a good place to start. DeLorean? You wanna fly "back to the future"? Br, UEZ
    1 point
×
×
  • Create New...