rliiack Posted October 15, 2009 Share Posted October 15, 2009 For example I use the _GDIPlus_GraphicsDrawImageRectRect function to draw an image on the desktop. Is it possible to erase or clear the image after drawing it? My Projects:Smart Icons Link to comment Share on other sites More sharing options...
Yashied Posted October 15, 2009 Share Posted October 15, 2009 (edited) Method 1DllCall('shell32.dll', 'none', 'SHChangeNotify', 'long', 0x08000000, 'uint', 0, 'ptr', 0, 'ptr', 0)Method 2_SendMessage(_WinAPI_FindWindow('Progman', 'Program Manager'), 0x0111, 0x7103, 0)Method 3_WinAPI_ShowWindow(_WinAPI_FindWindow('Progman', 'Program Manager'), @SW_HIDE) _WinAPI_ShowWindow(_WinAPI_FindWindow('Progman', 'Program Manager'), @SW_SHOW) Edited October 15, 2009 by Yashied My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
rliiack Posted October 15, 2009 Author Share Posted October 15, 2009 Thanks, they work perfectly. My Projects:Smart Icons Link to comment Share on other sites More sharing options...
rliiack Posted October 16, 2009 Author Share Posted October 16, 2009 (edited) However, is there any way to update the screen without it flashing? Edited October 16, 2009 by rliiack My Projects:Smart Icons Link to comment Share on other sites More sharing options...
Yashied Posted October 16, 2009 Share Posted October 16, 2009 (edited) #Include <FontConstants.au3> #Include <WinAPI.au3> #Include <WindowsConstants.au3> ; Paint on Desktop $tRECT = DllStructCreate($tagRect) DllStructSetData($tRECT, 1, 5) DllStructSetData($tRECT, 2, 5) DllStructSetData($tRECT, 3, 250) DllStructSetData($tRECT, 4, 50) $hDC = _WinAPI_GetDC(0) $hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial') $hOldFont = _WinAPI_SelectObject($hDC, $hFont) _WinAPI_SetTextColor($hDC, 0x0000FF) _WinAPI_SetBkMode($hDC, $TRANSPARENT) _WinAPI_DrawText($hDC, 'Hello world!', $tRect, $DT_CENTER) _WinAPI_SelectObject($hDC, $hOldFont) _WinAPI_DeleteObject($hFont) _WinAPI_ReleaseDC(0, $hDC) MsgBox(0, '', 'Press OK to clear Desktop.') ; Clear the painting area $hWnd = ControlGetHandle(_WinAPI_FindWindow('Progman', 'Program Manager'), '', '[CLASS:SysListView32;INSTANCE:1]') _WinAPI_InvalidateRect($hWnd, $tRect, 1) Edited October 16, 2009 by Yashied My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
rliiack Posted October 16, 2009 Author Share Posted October 16, 2009 Not sure what does _WinAPI_SelectObject($hDC, $hOldFont) do. How come the Hello closes after I haven't pressed OK? I did a if statement, but it acts the same too. #Include <FontConstants.au3> #Include <WinAPI.au3> #Include <WindowsConstants.au3> ; Paint on Desktop $tRECT = DllStructCreate($tagRect) DllStructSetData($tRECT, 1, 5) DllStructSetData($tRECT, 2, 5) DllStructSetData($tRECT, 3, 250) DllStructSetData($tRECT, 4, 50) $hDC = _WinAPI_GetDC(0) $hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial') $hOldFont = _WinAPI_SelectObject($hDC, $hFont) _WinAPI_SetTextColor($hDC, 0x0000FF) _WinAPI_SetBkMode($hDC, $TRANSPARENT) _WinAPI_DrawText($hDC, 'Hello world!', $tRect, $DT_CENTER) _WinAPI_SelectObject($hDC, $hOldFont) $msg=MsgBox(0, '', 'Press OK to clear Desktop.') ; Clear the painting area $hWnd = ControlGetHandle(_WinAPI_FindWindow('Progman', 'Program Manager'), '', '[CLASS:SysListView32;INSTANCE:1]') If $msg=1 Then _WinAPI_DeleteObject($hFont) _WinAPI_ReleaseDC(0, $hDC) _WinAPI_InvalidateRect($hWnd, $tRect, 1) EndIf My Projects:Smart Icons Link to comment Share on other sites More sharing options...
Yashied Posted October 16, 2009 Share Posted October 16, 2009 (edited) This part is need to draw "Hello world!" only. I took it from the help file. Do not pay attention to it.$tRECT = DllStructCreate($tagRect) DllStructSetData($tRECT, 1, 5) DllStructSetData($tRECT, 2, 5) DllStructSetData($tRECT, 3, 250) DllStructSetData($tRECT, 4, 50) $hDC = _WinAPI_GetDC(0) $hFont = _WinAPI_CreateFont(50, 0, 0, 0, 400, 0, 0, 0, $DEFAULT_CHARSET, $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $DEFAULT_QUALITY, 0, 'Arial') $hOldFont = _WinAPI_SelectObject($hDC, $hFont) _WinAPI_SetTextColor($hDC, 0x0000FF) _WinAPI_SetBkMode($hDC, $TRANSPARENT) _WinAPI_DrawText($hDC, 'Hello world!', $tRect, $DT_CENTER) _WinAPI_SelectObject($hDC, $hOldFont) _WinAPI_DeleteObject($hFont) _WinAPI_ReleaseDC(0, $hDC)The next part will be update the whole Desktop.$hWnd = ControlGetHandle(_WinAPI_FindWindow('Progman', 'Program Manager'), '', '[CLASS:SysListView32;INSTANCE:1]') _WinAPI_InvalidateRect($hWnd, 0, 1)But it will flicker, and so I reduced the update area to as needed (see $tRect).$hWnd = ControlGetHandle(_WinAPI_FindWindow('Progman', 'Program Manager'), '', '[CLASS:SysListView32;INSTANCE:1]') _WinAPI_InvalidateRect($hWnd, $tRect, 1)This is exactly what does Windows when you, for example, move a windows on the Desktop. Updated only required area. Edited October 16, 2009 by Yashied My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
rliiack Posted October 16, 2009 Author Share Posted October 16, 2009 (edited) It looks nice but when I implement it, it gives me an error. #include <GDIPlus.au3> #include <ScreenCapture.au3> #Include <WinAPI.au3> $hHandle=ControlGetHandle("[CLASS:Progman]", "", "[CLASS:SysListView32;INSTANCE:1]") $graphics=_GDIPlus_GraphicsCreateFromHWND($hHandle) $hbitmap = _ScreenCapture_Capture("",0,0,100,100, False) $bitmap=_GDIPlus_BitmapCreateFromHBITMAP($hbitmap) $height=_GDIPlus_ImageGetHeight($bitmap) $width=_GDIPlus_ImageGetWidth($bitmap) _GDIPlus_GraphicsDrawImageRectRect($graphics,$bitmap,0,0,$width,$height,0,0,200,200) Const $tagRect="0;0;100;100" _WinAPI_InvalidateRect($hHandle, $tagRect, 1) (12,31) : ERROR: $tagRect previously declared as a 'Const' Const $tagRect="0;0;100;100" Thanks Edited October 16, 2009 by rliiack My Projects:Smart Icons Link to comment Share on other sites More sharing options...
Yashied Posted October 16, 2009 Share Posted October 16, 2009 #Include <GDIPlus.au3> #Include <ScreenCapture.au3> #Include <WinAPI.au3> _GDIPlus_Startup() $hWnd = ControlGetHandle("[CLASS:Progman]", "", "[CLASS:SysListView32;INSTANCE:1]") $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd) $hBitmap = _ScreenCapture_Capture("", 0, 0, 100, 100, False) $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap) _WinAPI_DeleteObject($hBitmap) $iHeight = _GDIPlus_ImageGetHeight($hImage) $iWidth = _GDIPlus_ImageGetWidth($hImage) _GDIPlus_GraphicsDrawImageRectRect($hGraphics, $hImage, 0, 0, $iWidth, $iHeight, 0, 0, 200, 200) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() MsgBox(0, "", "OK?") $tRect = DllStructCreate($tagRECT) DllStructSetData($tRect, 1, 0) DllStructSetData($tRect, 2, 0) DllStructSetData($tRect, 3, 200) DllStructSetData($tRect, 4, 200) _WinAPI_InvalidateRect($hWnd, $tRect, 1) My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
Yashied Posted October 16, 2009 Share Posted October 16, 2009 I'm curious what you want to do? My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
rliiack Posted October 16, 2009 Author Share Posted October 16, 2009 (edited) It's basically a icon magnifier that magnifies icon. The first time I am doing it wasn't really what I wanted Here and it sucks too. So I am doing it again to fix a few things.Right now I come up with this:expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> #include <Array.au3> #include <GDIPlus.au3> #include <ScreenCapture.au3> #Include <WinAPI.au3> HotKeySet("{ESC}","Quit") Global $finalDistance, $msg, $desktop, $iconNumber, $x, $y, $pos, $oPos, $iconPos, $iconPos2, $min, $minIndexPos, $hHandle, $save2, $input2, $checkBox2, $volume2 Global $iFD = 0 Global $pFD = 0 Global $pSC_X1 = 0 Global $pSC_Y1 = 0 Global $OS = @OSVersion If $OS = "WIN_XP" Then Global $oZoomHeight=76 Global $oZoomWidth=76 Global $zoomHeight=142 Global $zoomWidth=142 ElseIf $OS = "WIN_VISTA" Then Global $oZoomHeight=86 Global $oZoomWidth=86 Global $zoomHeight=172 Global $zoomWidth=172 EndIf opt("GUIOnEventMode",1) $SI = GUICreate("Smart Icons Control Panel", 625, 445, 192, 124) GUISetFont(20, 800, 0, "Australian Sunrise") $soundOptions = GUICtrlCreateGroup("Sound Options", 88, 16, 473, 137, -1, $WS_EX_TRANSPARENT) GUICtrlSetFont(-1, 30, 800, 0, "Australian Sunrise") $volume = GUICtrlCreateSlider(112, 88, 257, 48) GUICtrlSetLimit ($volume, 100, 0) GUICtrlSetData($volume,80) $checkBox=GUICtrlCreateCheckbox("", 408, 88, 17, 25) $mute = GUICtrlCreateLabel("Mute", 432, 88, 65, 35) GUICtrlSetFont(-1, 20, 800, 0, "Times New Roman") $magnifyingSize = GUICtrlCreateGroup("Magnifying Size", 88, 168, 473, 145) GUICtrlSetFont(-1, 30, 800, 0, "Australian Sunrise") $input=GUICtrlCreateInput("", 144, 240, 137, 50) GUICtrlSetFont(-1, 35, 800, 0, "Australian Sunrise") GUICtrlSetData($input,2) $xLabel = GUICtrlCreateLabel("X", 288, 256, 23, 35) GUICtrlSetFont(-1, 20, 800, 0, "Times New Roman") $Save = GUICtrlCreateButton("Save", 360, 232, 153, 65, $WS_GROUP) GUICtrlSetFont(-1, 25, 800, 0, "Australian Sunrise") $Quit = GUICtrlCreateButton("Quit", 216, 344, 217, 81, $WS_GROUP) GUICtrlSetFont(-1, 35, 800, 0, "Australian Sunrise") GUISetState(@SW_SHOW) GUICtrlSetOnEvent($Quit, "Quit") ;~ If $OS = "WIN_XP" Then ;~ $hHandle=GUICreate("Smart Icon",142,142,-1,-1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX) ;~ GUISetState(@SW_SHOW) ;~ ElseIf $OS = "WIN_VISTA" Then ;~ $hHandle=GUICreate("Smart Icon",172,192,-1,-1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX) ;~ GUISetState(@SW_SHOW) ;~ EndIf $hHandle = ControlGetHandle(_WinAPI_FindWindow('Progman', 'Program Manager'), '', '[CLASS:SysListView32;INSTANCE:1]') _GDIPlus_Startup() While 1 $input2=GUICtrlRead($input) $checkBox2=GUICtrlRead($checkBox) $volume2=GUICtrlRead($volume) SoundSetWaveVolume($volume2) GUICtrlSetOnEvent($Save, "save") getMousePosition() getIconPositions() Global $distance[$iconNumber] Global $distance2[$iconNumber] For $i=0 To UBound($iconPos) -1 $distance[$i]=((($iconPos2[$i][0]-$x)*($iconPos2[$i][0]-$x))+(($iconPos2[$i][1]-$y)*($iconPos2[$i][1]-$y)))^(1/2) Next For $i=0 To UBound($distance) -1 If $distance[$i]<=100 Then $distance2[$i]=$distance[$i] EndIf Next Local $hit=_GUICtrlListView_HitTest($desktop,-1,-1) accessArrayData() If ($finalDistance[$minIndexPos][0]<300 And $finalDistance[$minIndexPos][0]>0) Or $hit[2]=True Then $graphics=_GDIPlus_GraphicsCreateFromHWND($hHandle) If $oPos <> $finalDistance[$minIndexPos][1] Then ; $minIndexPos is an integer ; $finalDistance is a 2D array ;$iconPos is a 2D array $iFD = $finalDistance[$minIndexPos][1] $iSC_X1 = $iconPos[$iFD][0] $iSC_Y1 = $iconPos[$iFD][1] $iDT_X2 = $iconPos[$iFD][0] + 86 $iDT_Y2 = $iconPos[$iFD][1] + 86 $tRect = DllStructCreate($tagRECT) DllStructSetData($tRect, 1, $pSC_X1) DllStructSetData($tRect, 2, $pSC_Y1) DllStructSetData($tRect, 3, $pSC_X1+$zoomWidth) DllStructSetData($tRect, 4, $psc_Y1+$zoomHeight) _WinAPI_InvalidateRect($hHandle, $tRect, 1) Sleep(50) $hbitmap = _ScreenCapture_Capture("", $iSC_X1, $iSC_Y1, $iDT_X2, $iDT_Y2, False) Sleep(300) EndIf $oPos=$iFD $pFD = $finalDistance[$minIndexPos][1] $pSC_X1 = $iconPos[$pFD][0] $pSC_Y1 = $iconPos[$pFD][1] $bitmap=_GDIPlus_BitmapCreateFromHBITMAP($hbitmap) $height=_GDIPlus_ImageGetHeight($bitmap) $width=_GDIPlus_ImageGetWidth($bitmap) _GDIPlus_GraphicsDrawImageRectRect($graphics,$bitmap,0,0,$width,$height,$iSC_X1,$iSC_Y1,$zoomWidth,$zoomHeight) If $checkBox2=$GUI_UNCHECKED Then SoundPlay(@WindowsDir & "\media\tada.wav",1) EndIf _WinAPI_DeleteObject($hbitmap) _WinAPI_DeleteObject($bitmap) EndIf WEnd _GDIPlus_Shutdown() Func getMousePosition() $pos=MouseGetPos() $x=$pos[0] $y=$pos[1] EndFunc Func getIconPositions() $desktop=ControlGetHandle("[CLASS:Progman]","","[CLASS:SysListView32;INSTANCE:1]") $iconNumber=_GUICtrlListView_GetItemCount($desktop) If $iconNumber>0 Then Global $iconPos[$iconNumber][2] Global $iconPos2[$iconNumber][2] For $i=0 To UBound($iconPos) -1 If $OS = "WIN_XP" Then $iconPos[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i)-22 $iconPos[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i) $iconPos2[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i)+38 $iconPos2[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i)+31 ElseIf $OS = "WIN_VISTA" Then $iconPos[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i) $iconPos[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i) $iconPos2[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i)+38 $iconPos2[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i)+34.5 EndIf Next Else MsgBox(64,"Error","No icons on desktop.", 3) Exit EndIf EndFunc Func Quit() _SendMessage(_WinAPI_FindWindow('Progman', 'Program Manager'), 0x0111, 0x7103, 0) Exit EndFunc Func accessArrayData() Local $counter=0 Local $counter2=0 Global $finalDistance[UBound($distance2)][2] for $i=0 To UBound($distance2) -1 If $distance2[$i]>0 Then $finalDistance[$counter][0]=$distance2[$i] $finalDistance[$counter][1]=$i $counter=$counter+1 EndIf Next _ArraySort($finalDistance,1,0,0,0) If $finalDistance[0][0]=0 Then $counter2=0 Else for $i=0 To UBound($finalDistance) -1 If $finalDistance[$i][0]>0 Then $counter2=$counter2+1 EndIf Next $counter2-=1 EndIf $min=$finalDistance[$counter2][0] $minIndexPos=_ArraySearch($finalDistance,$min) EndFunc Func save() If $input2=1 Then $zoomHeight=$oZoomHeight $zoomWidth=$oZoomWidth Else $zoomHeight=$oZoomHeight*$input2 $zoomWidth=$oZoomWidth*$input2 EndIf EndFuncCan you try it and see what bugs I have?Thank you for all your help! Edited October 16, 2009 by rliiack My Projects:Smart Icons Link to comment Share on other sites More sharing options...
Yashied Posted October 17, 2009 Share Posted October 17, 2009 (edited) Ironically misrepresented that you do not need to draw on the Desktop, better to create your own window and "conjure" in it. Below is a simple example "Magnify x4". Here is something to think about, but on the whole idea should be clear. And no any flicker.expandcollapse popup#Include <WinAPIEx.au3> #Include <WindowsConstants.au3> Opt('MustDeclareVars', 1) Global $hParent, $hForm, $Pos, $hBitmap = 0, $Go = 1, $XPrev = MouseGetPos(0), $YPrev = MouseGetPos(1) HotKeySet('{ESC}', '_Quit') $hParent = GUICreate('', -1, -1, -1, -1, -1, $WS_EX_TOOLWINDOW) $hForm = GUICreate('', 200, 200, $XPrev + 25, $YPrev + 25, BitOR($WS_DISABLED, $WS_POPUPWINDOW), BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST), $hParent) GUISetState(@SW_SHOWNOACTIVATE, $hForm) While 1 GUIGetMsg() $Pos = MouseGetPos() If ($Go) Or ($Pos[0] <> $XPrev) Or ($Pos[1] <> $YPrev) Then WinMove($hForm, '', $Pos[0] + 25, $Pos[1] + 25) _Capture($Pos[0] - 25, $Pos[1] - 25, 50, 50) $XPrev = $Pos[0] $YPrev = $Pos[1] $Go = 0 EndIf WEnd Func _Capture($iX, $iY, $iWidth, $iHeight) Local $tRect, $hDC, $hMemDC, $hScreenshort = _ScreenCapture($iX, $iY, $iWidth, $iHeight) _WinAPI_FreeObject($hBitmap) $hBitmap = _WinAPI_FitToBitmap($hScreenshort, 200, 200) _WinAPI_FreeObject($hScreenshort) $hDC = _WinAPI_GetDC($hForm) $hMemDC = _WinAPI_CreateCompatibleDC($hDC) _WinAPI_SelectObject($hMemDC, $hBitmap) _WinAPI_SelectObject($hMemDC, _WinAPI_GetStockObject($NULL_BRUSH)) _WinAPI_SelectObject($hMemDC, _WinAPI_GetStockObject($DC_PEN)) _WinAPI_SetDCPenColor($hMemDC, 0xA00000) $tRect = _WinAPI_CreateRect(0, 0, 200, 200) _WinAPI_Rectangle($hMemDC, $tRect) _WinAPI_ReleaseDC($hForm, $hDC) _WinAPI_DeleteDC($hMemDC) _SetBitmap($hForm, $hBitmap, 255) EndFunc ;==>_Capture Func _Quit() Exit EndFunc ;==>_Quit Func _ScreenCapture($iX, $iY, $iWidth, $iHeight) Local $hWnd, $hDC, $hMemDC, $hBitmap $hWnd = _WinAPI_GetDesktopWindow() $hDC = _WinAPI_GetDC($hWnd) $hMemDC = _WinAPI_CreateCompatibleDC($hDC) $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight) _WinAPI_SelectObject($hMemDC, $hBitmap) _WinAPI_BitBlt($hMemDC, 0, 0, $iWidth, $iHeight, $hDC, $iX, $iY, $MERGECOPY) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_DeleteDC($hMemDC) Return $hBitmap EndFunc ;==>_ScreenCapture Func _SetBitmap($hWnd, $hBitmap, $iOpacity) Local $hDC, $hMemDC, $hSv, $pBlend, $tBlend, $pSize, $tSize, $pSource, $tSource $hDC = _WinAPI_GetDC($hWnd) $hMemDC = _WinAPI_CreateCompatibleDC($hDC) $hSv = _WinAPI_SelectObject($hMemDC, $hBitmap) $tSize = _WinAPI_GetBitmapDimension($hBitmap) $pSize = DllStructGetPtr($tSize) $tSource = DllStructCreate($tagPOINT) $pSource = DllStructGetPtr($tSource) $tBlend = DllStructCreate($tagBLENDFUNCTION) $pBlend = DllStructGetPtr($tBlend) DllStructSetData($tBlend, 'Alpha', $iOpacity) DllStructSetData($tBlend, 'Format', 0) _WinAPI_UpdateLayeredWindow($hWnd, $hDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA) _WinAPI_ReleaseDC($hWnd, $hDC) _WinAPI_SelectObject($hMemDC, $hSv) _WinAPI_DeleteDC($hMemDC) EndFunc ;==>_SetBitmapWinAPIEx.au3 Edited October 17, 2009 by Yashied My UDFs: iKey | FTP Uploader | Battery Checker | Boot Manager | Font Viewer | UDF Keyword Manager | Run Dialog Replacement | USBProtect | 3D Axis | Calculator | Sleep | iSwitcher | TM | NetHelper | File Types Manager | Control Viewer | SynFolders | DLL Helper Animated Tray Icons UDF Library | Hotkeys UDF Library | Hotkeys Input Control UDF Library | Caret Shape UDF Library | Context Help UDF Library | Most Recently Used List UDF Library | Icons UDF Library | FTP UDF Library | Script Communications UDF Library | Color Chooser UDF Library | Color Picker Control UDF Library | IPHelper (Vista/7) UDF Library | WinAPI Extended UDF Library | WinAPIVhd UDF Library | Icon Chooser UDF Library | Copy UDF Library | Restart UDF Library | Event Log UDF Library | NotifyBox UDF Library | Pop-up Windows UDF Library | TVExplorer UDF Library | GuiHotKey UDF Library | GuiSysLink UDF Library | Package UDF Library | Skin UDF Library | AITray UDF Library | RDC UDF Library Appropriate path | Button text color | Gaussian random numbers | Header's styles (Vista/7) | ICON resource enumeration | Menu & INI | Tabbed string size | Tab's skin | Pop-up circular menu | Progress Bar without animation (Vista/7) | Registry export | Registry path jumping | Unique hardware ID | Windows alignment More... Link to comment Share on other sites More sharing options...
rliiack Posted October 27, 2009 Author Share Posted October 27, 2009 (edited) It's basically a icon magnifier that magnifies icon. The first time I am doing it wasn't really what I wanted Here and it sucks too. So I am doing it again to fix a few things. Right now I come up with this: expandcollapse popup#include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <SliderConstants.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> #include <Array.au3> #include <GDIPlus.au3> #include <ScreenCapture.au3> #Include <WinAPI.au3> HotKeySet("{ESC}","Quit") Global $finalDistance, $msg, $desktop, $iconNumber, $x, $y, $pos, $oPos, $iconPos, $iconPos2, $min, $minIndexPos, $hHandle, $save2, $input2, $checkBox2, $volume2 Global $iFD = 0 Global $pFD = 0 Global $pSC_X1 = 0 Global $pSC_Y1 = 0 Global $OS = @OSVersion If $OS = "WIN_XP" Then Global $oZoomHeight=76 Global $oZoomWidth=76 Global $zoomHeight=142 Global $zoomWidth=142 ElseIf $OS = "WIN_VISTA" Then Global $oZoomHeight=86 Global $oZoomWidth=86 Global $zoomHeight=172 Global $zoomWidth=172 EndIf opt("GUIOnEventMode",1) $SI = GUICreate("Smart Icons Control Panel", 625, 445, 192, 124) GUISetFont(20, 800, 0, "Australian Sunrise") $soundOptions = GUICtrlCreateGroup("Sound Options", 88, 16, 473, 137, -1, $WS_EX_TRANSPARENT) GUICtrlSetFont(-1, 30, 800, 0, "Australian Sunrise") $volume = GUICtrlCreateSlider(112, 88, 257, 48) GUICtrlSetLimit ($volume, 100, 0) GUICtrlSetData($volume,80) $checkBox=GUICtrlCreateCheckbox("", 408, 88, 17, 25) $mute = GUICtrlCreateLabel("Mute", 432, 88, 65, 35) GUICtrlSetFont(-1, 20, 800, 0, "Times New Roman") $magnifyingSize = GUICtrlCreateGroup("Magnifying Size", 88, 168, 473, 145) GUICtrlSetFont(-1, 30, 800, 0, "Australian Sunrise") $input=GUICtrlCreateInput("", 144, 240, 137, 50) GUICtrlSetFont(-1, 35, 800, 0, "Australian Sunrise") GUICtrlSetData($input,2) $xLabel = GUICtrlCreateLabel("X", 288, 256, 23, 35) GUICtrlSetFont(-1, 20, 800, 0, "Times New Roman") $Save = GUICtrlCreateButton("Save", 360, 232, 153, 65, $WS_GROUP) GUICtrlSetFont(-1, 25, 800, 0, "Australian Sunrise") $Quit = GUICtrlCreateButton("Quit", 216, 344, 217, 81, $WS_GROUP) GUICtrlSetFont(-1, 35, 800, 0, "Australian Sunrise") GUISetState(@SW_SHOW) GUICtrlSetOnEvent($Quit, "Quit") ;~ If $OS = "WIN_XP" Then ;~ $hHandle=GUICreate("Smart Icon",142,142,-1,-1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX) ;~ GUISetState(@SW_SHOW) ;~ ElseIf $OS = "WIN_VISTA" Then ;~ $hHandle=GUICreate("Smart Icon",172,192,-1,-1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MINIMIZEBOX) ;~ GUISetState(@SW_SHOW) ;~ EndIf $hHandle = ControlGetHandle(_WinAPI_FindWindow('Progman', 'Program Manager'), '', '[CLASS:SysListView32;INSTANCE:1]') _GDIPlus_Startup() While 1 $input2=GUICtrlRead($input) $checkBox2=GUICtrlRead($checkBox) $volume2=GUICtrlRead($volume) SoundSetWaveVolume($volume2) GUICtrlSetOnEvent($Save, "save") getMousePosition() getIconPositions() Global $distance[$iconNumber] Global $distance2[$iconNumber] For $i=0 To UBound($iconPos) -1 $distance[$i]=((($iconPos2[$i][0]-$x)*($iconPos2[$i][0]-$x))+(($iconPos2[$i][1]-$y)*($iconPos2[$i][1]-$y)))^(1/2) Next For $i=0 To UBound($distance) -1 If $distance[$i]<=100 Then $distance2[$i]=$distance[$i] EndIf Next Local $hit=_GUICtrlListView_HitTest($desktop,-1,-1) accessArrayData() If ($finalDistance[$minIndexPos][0]<300 And $finalDistance[$minIndexPos][0]>0) Or $hit[2]=True Then $graphics=_GDIPlus_GraphicsCreateFromHWND($hHandle) If $oPos <> $finalDistance[$minIndexPos][1] Then ; $minIndexPos is an integer ; $finalDistance is a 2D array ;$iconPos is a 2D array $iFD = $finalDistance[$minIndexPos][1] $iSC_X1 = $iconPos[$iFD][0] $iSC_Y1 = $iconPos[$iFD][1] $iDT_X2 = $iconPos[$iFD][0] + 86 $iDT_Y2 = $iconPos[$iFD][1] + 86 $tRect = DllStructCreate($tagRECT) DllStructSetData($tRect, 1, $pSC_X1) DllStructSetData($tRect, 2, $pSC_Y1) DllStructSetData($tRect, 3, $pSC_X1+$zoomWidth) DllStructSetData($tRect, 4, $psc_Y1+$zoomHeight) _WinAPI_InvalidateRect($hHandle, $tRect, 1) Sleep(50) $hbitmap = _ScreenCapture_Capture("", $iSC_X1, $iSC_Y1, $iDT_X2, $iDT_Y2, False) Sleep(300) EndIf $oPos=$iFD $pFD = $finalDistance[$minIndexPos][1] $pSC_X1 = $iconPos[$pFD][0] $pSC_Y1 = $iconPos[$pFD][1] $bitmap=_GDIPlus_BitmapCreateFromHBITMAP($hbitmap) $height=_GDIPlus_ImageGetHeight($bitmap) $width=_GDIPlus_ImageGetWidth($bitmap) _GDIPlus_GraphicsDrawImageRectRect($graphics,$bitmap,0,0,$width,$height,$iSC_X1,$iSC_Y1,$zoomWidth,$zoomHeight) If $checkBox2=$GUI_UNCHECKED Then SoundPlay(@WindowsDir & "\media\tada.wav",1) EndIf _WinAPI_DeleteObject($hbitmap) _WinAPI_DeleteObject($bitmap) EndIf WEnd _GDIPlus_Shutdown() Func getMousePosition() $pos=MouseGetPos() $x=$pos[0] $y=$pos[1] EndFunc Func getIconPositions() $desktop=ControlGetHandle("[CLASS:Progman]","","[CLASS:SysListView32;INSTANCE:1]") $iconNumber=_GUICtrlListView_GetItemCount($desktop) If $iconNumber>0 Then Global $iconPos[$iconNumber][2] Global $iconPos2[$iconNumber][2] For $i=0 To UBound($iconPos) -1 If $OS = "WIN_XP" Then $iconPos[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i)-22 $iconPos[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i) $iconPos2[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i)+38 $iconPos2[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i)+31 ElseIf $OS = "WIN_VISTA" Then $iconPos[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i) $iconPos[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i) $iconPos2[$i][0]=_GUICtrlListView_GetItemPositionX($desktop, $i)+38 $iconPos2[$i][1]=_GUICtrlListView_GetItemPositionY($desktop, $i)+34.5 EndIf Next Else MsgBox(64,"Error","No icons on desktop.", 3) Exit EndIf EndFunc Func Quit() _SendMessage(_WinAPI_FindWindow('Progman', 'Program Manager'), 0x0111, 0x7103, 0) Exit EndFunc Func accessArrayData() Local $counter=0 Local $counter2=0 Global $finalDistance[UBound($distance2)][2] for $i=0 To UBound($distance2) -1 If $distance2[$i]>0 Then $finalDistance[$counter][0]=$distance2[$i] $finalDistance[$counter][1]=$i $counter=$counter+1 EndIf Next _ArraySort($finalDistance,1,0,0,0) If $finalDistance[0][0]=0 Then $counter2=0 Else for $i=0 To UBound($finalDistance) -1 If $finalDistance[$i][0]>0 Then $counter2=$counter2+1 EndIf Next $counter2-=1 EndIf $min=$finalDistance[$counter2][0] $minIndexPos=_ArraySearch($finalDistance,$min) EndFunc Func save() If $input2=1 Then $zoomHeight=$oZoomHeight $zoomWidth=$oZoomWidth Else $zoomHeight=$oZoomHeight*$input2 $zoomWidth=$oZoomWidth*$input2 EndIf EndFunc Can you try it and see what bugs I have? Thank you for all your help! Hello, is there any way to make my magnified images appear faster? Edited October 27, 2009 by rliiack My Projects:Smart Icons Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now