[Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Applications, Games, Tools, User libs and useful stuff coded in PureBasic
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

[Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by Mijikai »

The DSKT Library gives you access to a Desktop Window behind the Icons. 8)
Useful for drawing/rendering on the Desktop (behind the Icons) Wallpaper Style.
Nothing more nothing less.

Update 25.11.2023 - Version 1.02:
- Fixed a small bug in \Link() & \Unlink
- \Size() now optionally returns the size of the primary monitor

Update 24.11.2023 - Version 1.01:
- Improved the code
- Fixed a bug in \Update()
- Added \Event() to help processing events (optional)

Update 23.11.2023 - Version 1.00:
Rcoded the library in FASM (its a static lib now), i also changed the license.
All code examples outside this post may need to be adapted as some functions have been renamed/changed!

The include v.1.02:

Code: Select all

EnableExplicit

;--------------------------------------------------------------------------------------
; DSKT Library
; Written in FASM 1.73.30
;--------------------------------------------------------------------------------------
; Version: 1.02
; Author: Mijikai
; Platform: Windows x64
;--------------------------------------------------------------------------------------
; Copyright 2022 - 2023 by Mijikai all rights reserved
;--------------------------------------------------------------------------------------
; License:
; CC BY-ND 4.0 DEED Attribution-NoDerivs 4.0 International:
; https://creativecommons.org/licenses/by-nd/4.0/
;--------------------------------------------------------------------------------------
; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
; ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
; LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
; POSSIBILITY OF SUCH DAMAGE.
;--------------------------------------------------------------------------------------

Import "dskt.lib"
  dsktInterface.i()
  dsktVersion.i()
EndImport

Interface DSKT
  Handle.i()                              ;returns the handle to a desktop window (behind the icons)
  Size.i(*Width,*Height,Flag.i = #False)  ;get the width and height of the desktop window, if the flag is #True the size of the primary monitor / returns #True or #False
  Link.i(Handle.i)                        ;makes a window a child to the desktop window (only one window!) / returns <> #Null on success
  Unlink.i()                              ;resets all changes to the desktop and/or unlinks a child window / returns #Null
  Event.i()                               ;process events - can be useful when drawing into the desktops device context / returns #Null
  Update.i()                              ;resets everything (call if the desktop was updated or has changed - ex. if the resulution changed) / returns #True or #False
  Release.i()                             ;cleans up and releases the interface / returns #Null
EndInterface

#DSKT_VERSION = $102

Example 1 - Change the desktop window color:

Code: Select all

EnableExplicit

XIncludeFile "dskt.pbi"

Procedure.i Main()
  Protected *dskt.DSKT
  Protected hdc.i
  Protected w.i
  Protected h.i
  Protected r.RECT
  If dsktVersion() = #DSKT_VERSION
    *dskt = dsktInterface()
    If *dskt
      *dskt\Size(@w,@h)
      Debug w
      Debug h
      hdc = GetDC_(*dskt\Handle())
      If hdc
        r\right = w
        r\bottom = h
        FillRect_(hdc,@r,GetStockObject_(#WHITE_BRUSH))
        *dskt\Event()
        Delay(5000)
        ReleaseDC_(*dskt\Handle(),hdc)
      EndIf
      *dskt\Release()
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

End Main()
Example 2 - Draw a sprite on the desktop window:

Code: Select all

EnableExplicit

XIncludeFile "dskt.pbi"

Procedure.i Main()
  Protected *dskt.DSKT
  Protected w.i
  Protected h.i
  Protected c.POINT
  If dsktVersion() = #DSKT_VERSION
    *dskt = dsktInterface()
    If *dskt
      *dskt\Update()      
      *dskt\Size(@w,@h)
      InitSprite()
      If OpenWindowedScreen(*dskt\Handle(),0,0,w,h)
        SetFrameRate(60)
        If CreateSprite(0,96,96,#PB_Sprite_AlphaBlending)
          If StartDrawing(SpriteOutput(0))
            DrawingMode(#PB_2DDrawing_AllChannels)
            Circle(48,48,32,$FF0000FF)
            StopDrawing()
          EndIf
          Repeat
            GetCursorPos_(@c)
            ClearScreen(0)
            DisplaySprite(0,c\x - 48,c\y - 48)
            FlipBuffers()
            *dskt\Event()
          ForEver   
        EndIf
      EndIf
      *dskt\Release()
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

End Main()
Example 3 - Play a youtube video on the desktop window:

Code: Select all

EnableExplicit

XIncludeFile "dskt.pbi"

Procedure.s HtmlVideo(Width.i,Height.i,Url.s);http://forums.purebasic.com/english/viewtopic.php?p=509325&sid=ecc20b236c2f4bcd7b445926ac5192c5#p509325
  Protected src.s
  src + "<html>" + #LF$ + #TAB$ + "<head>" + #LF$ + #TAB$ + #TAB$ + "<style type='text/css'>" + #LF$
  src + #TAB$ + #TAB$ + "<style type='text/css'>" + #LF$ + #TAB$ + #TAB$ + #TAB$
  src + "body {margin-left: 0px; margin-right:0px; margin-top:0px; margin-bottom:0px; overflow: hidden}" + #LF$
  src + #TAB$ + #TAB$ + "</style>" + #LF$ + #TAB$ + "</head>" + #LF$ + #TAB$ + "<body scroll='no'>" + #LF$ + #TAB$ + #TAB$
  src + "<iframe width='" + Str(Width) + "' height='" + Str(Height) + "' src='" + Url + "' frameborder='0'></iframe>" + #LF$
  src + #TAB$ + "</body>" + #LF$ + "</html>"
  ProcedureReturn src 
EndProcedure

Procedure.i HtmlGadget(X.i,Y.i,Width.i,Height.i,Url.s);http://forums.purebasic.com/english/viewtopic.php?p=509325&sid=ecc20b236c2f4bcd7b445926ac5192c5#p509325
  Protected gadget.i
  Protected *iwb2.IWebBrowser2
  gadget = WebGadget(#PB_Any,X,Y,Width,Height,#Null$)
  If gadget
    SetGadgetAttribute(gadget,#PB_Web_BlockPopupMenu,#True)
    SetGadgetAttribute(gadget,#PB_Web_BlockPopups,#True)
    *iwb2 = GetWindowLongPtr_(GadgetID(gadget),#GWLP_USERDATA)
    *iwb2\put_Silent(#True)
    SetGadgetItemText(gadget,#PB_Web_HtmlCode,HtmlVideo(Width,Height,Url))
  EndIf
  ProcedureReturn gadget
EndProcedure

Procedure.i Main()
  Protected *dskt.DSKT
  Protected w.i
  Protected h.i
  If dsktVersion() = #DSKT_VERSION
    *dskt = dsktInterface()
    If *dskt      
      *dskt\Size(@w,@h)
      If OpenWindow(0,0,0,w,h,#Null$,#PB_Window_BorderLess)
        SetWindowColor(0,0)
        If HtmlGadget(w >> 1 - 540,h >> 1 - 360,1080,720,"https://www.youtube.com/embed/uYfxDF_QR94?autoplay=1&showinfo=0&controls=0&rel=0")
          *dskt\Link(WindowID(0))
          Repeat
          Until WaitWindowEvent() = #PB_Event_CloseWindow Or GetAsyncKeyState_(#VK_ESCAPE) & 1
          CloseWindow(0)
        EndIf
      EndIf
      *dskt\Release()
    EndIf
  EndIf
  ProcedureReturn #Null
EndProcedure

End Main()
Download v1.02:
https://www.dropbox.com/scl/fi/68utl6qg ... klx66&dl=0

Have fun :D
Last edited by Mijikai on Sat Nov 25, 2023 4:13 pm, edited 30 times in total.
BarryG
Addict
Addict
Posts: 3292
Joined: Thu Apr 18, 2019 8:17 am

Re: [Library] Aki Desktop - Draw on Desktop behind the Icons [Win x64]

Post by BarryG »

How do you use it? When I compile/run, it just exits. Since you haven't provided the full source, I have no idea what to do.
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: [Library] Aki Desktop - Draw on Desktop behind the Icons [Win x64]

Post by Mijikai »

There is no source just the include and a link to the lib.
The lib will give you access to a window behind the desktop icons.
How the window is used is up to the programmer.
Usually the window is used to create widgets and interactive or animated wallpapers.

Example:

Code: Select all

EnableExplicit

XIncludeFile "aki_desktop.pbi"
XIncludeFile "spp.pbi";https://www.purebasic.fr/english/viewtopic.php?f=27&t=76553

Procedure.i Main()
  Protected *dsk.AKI_DESKTOP
  Protected dsk_width.i
  Protected dsk_height.i
  Protected *spp.SPP
  *dsk = akiDesktopInterface()
  If *dsk
    *dsk\Size(@dsk_width,@dsk_height)
    *spp = sppContext(*dsk\Handle(),dsk_width >> 8,dsk_height >> 8)
    If *spp  
      Repeat
        dsk_width + 1
        *spp\Clear($FFFF00FF + dsk_width);<- change desktop background (color)
        *spp\SwapBuffer()
        Delay(10);<- ugly delay (dont do this in a real app!)
      Until GetAsyncKeyState_(#VK_ESCAPE) & $8000;<- exit if ESC is pressed
      *dsk\Unlink();<- reset desktop (window)
      *spp\Release()
    EndIf
    *dsk\Release()
  EndIf
  ProcedureReturn #Null
EndProcedure

Main()

End
fluent
User
User
Posts: 68
Joined: Sun Jan 24, 2021 10:57 am

Re: [Library] Aki Desktop - Get access to a window behind the Icons [Win x64]

Post by fluent »

Thanks for sharing. Does it support multiple monitors?
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: [Library] Aki Desktop - Get access to a window behind the Icons [Win x64]

Post by Mijikai »

fluent wrote: Mon Jul 19, 2021 12:57 pm Thanks for sharing. Does it support multiple monitors?
I tested it with three monitors - the area affected is the combined (whole) dektop/screen area.
There is no support for individual monitors but thats not really a problem as one could query (ex. ExamineMonitors())
each monitor and adjust the rendering.

Here is another more complex example that renders a animated shader on the desktop. 8)
Enable threadsafe!

Code: Select all

EnableExplicit

XIncludeFile "aki_desktop.pbi"
XIncludeFile "spp.pbi";https://www.purebasic.fr/english/viewtopic.php?f=27&t=76553

Structure VEC2
  x.f:y.f
EndStructure

Structure VEC3
  x.f:y.f:z.f
EndStructure

Structure VEC4
  x.f:y.f:z.f:w.f
EndStructure

Global sdr_time.f
Global sdr_width.f
Global sdr_height.f

Macro Vec2(_v_,_x_,_y_)
  _v_\x = _x_:_v_\y = _y_
EndMacro

Macro Vec4(_v_,_x_,_y_,_z_,_w_)
  _v_\x = _x_:_v_\y = _y_:_v_\z = _z_:_v_\w = _w_
EndMacro

Macro Vec2Rotate(_v_,_a_,_out_)
  _out_\x = _v_\x * Cos(_a_) - _v_\y * Sin(_a_)
  _out_\y = _v_\x * Sin(_a_) + _v_\y * Cos(_a_)
EndMacro

Macro Vec2UV(_v_,_w_,_h_,_out_)
  _out_\x = ((_v_\x / _w_) * 2.0 - 1.0) * (_w_ / _h_)
  _out_\y = (_v_\y / _h_) * 2.0 - 1.0
EndMacro

Procedure.i Callback(*coord.VEC2,*color.VEC4)
  Protected uv.VEC2,rot.VEC2,col.VEC3,d.f,m.f
  Vec2UV(*coord,sdr_width,sdr_height,uv)
  Vec2Rotate(uv,sdr_time,rot)
  d = 0.6 - Sin(Abs(rot\x) * Cos(Abs(uv\x) + rot\x) * 40.0) * 1.1
  d + Cos(Abs(Mod(d,20.0)))
  If Abs(uv\x + Sin(sdr_time * 10.0 + uv\y * 4) / 10.0) < 0.4
    col\x = Abs(uv\x + Sin(sdr_time * 8.0 + uv\y * 4) / 10.0) + d / 80.0
    col\y = col\x / 10.0
    col\z = 1.0 - col\x
  Else
    col\x = Abs(uv\x) / d - 0.4
    col\y = Sin(Sin(sdr_time * 2.0) * 5.0 * Abs(rot\y)) - d
    col\z = 1.0 - col\x + Cos(Abs(rot\y)) - d
  EndIf
  Vec4(*color,col\x,col\y,col\z,1.0)
  ProcedureReturn
EndProcedure

Procedure.i Main()
  Protected *dsk.AKI_DESKTOP
  Protected dsk_width.i
  Protected dsk_height.i
  Protected *spp.SPP
  Protected exit.i
  If akiDesktopVersion() = #AKI_DESKTOP_VERSION
    If sppVersion() = #SPP_VERSION
      *dsk = akiDesktopInterface()
      If *dsk
        *dsk\Size(@dsk_width,@dsk_height)
        dsk_width >> 3
        dsk_height >> 3
        *spp = sppContext(*dsk\Handle(),dsk_width,dsk_height)
        If *spp
          If *spp\Event(33)
            sdr_width = dsk_width
            sdr_height = dsk_height
            *spp\PixelProc(@Callback(),#True)
            Repeat
              *spp\Clear()
              *spp\SwapBuffer()
              *spp\Wait()
              *spp\Info(#Null,@sdr_time)
              If Not exit
                exit = GetAsyncKeyState_(#VK_ESCAPE) & $8000
              EndIf
            Until exit
          EndIf
          *spp\Release()
        EndIf
        *dsk\Unlink()
        *dsk\Release()
      EndIf
    EndIf
  EndIf
  ProcedureReturn 
EndProcedure

Main()

End
fluent
User
User
Posts: 68
Joined: Sun Jan 24, 2021 10:57 am

Re: [Library] Aki Desktop - Get access to a window behind the Icons [Win x64]

Post by fluent »

Pretty nice example, thanks!
User avatar
J. Baker
Addict
Addict
Posts: 2178
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: [Library] Aki Desktop - Get access to a window behind the Icons [Win x64]

Post by J. Baker »

Pretty cool but it would be nice if your download included all source for the example.

No 32 bit? Use a bit less resources for something like this.

Non-Commercial use? Are you selling your lib for commercial use?
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef

Mac: 10.13.6 / 1.4GHz Core 2 Duo / 2GB DDR3 / Nvidia 320M
PC: Win 7 / AMD 64 4000+ / 3GB DDR / Nvidia 720GT


Even the vine knows it surroundings but the man with eyes does not.
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: [Library] Aki Desktop - Get access to a window behind the Icons [Win x64]

Post by Mijikai »

J. Baker wrote: Thu Nov 23, 2023 4:20 pm Pretty cool..
Thank you :)
J. Baker wrote: Thu Nov 23, 2023 4:20 pm Non-Commercial use? Are you selling your lib for commercial use?
I recoded the lib in fasm see first post, i also changed the license so you can use it for your commercial projects.
Have fun 8)
User avatar
J. Baker
Addict
Addict
Posts: 2178
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by J. Baker »

Sweet! This even better. Congrats! :D
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef

Mac: 10.13.6 / 1.4GHz Core 2 Duo / 2GB DDR3 / Nvidia 320M
PC: Win 7 / AMD 64 4000+ / 3GB DDR / Nvidia 720GT


Even the vine knows it surroundings but the man with eyes does not.
User avatar
J. Baker
Addict
Addict
Posts: 2178
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by J. Baker »

Screen code with tray icon. :D
I disabled, EnableExplicit. Not a fan.

Code: Select all

XIncludeFile "dskt.pbi"

;Structure DSKT
  *dskt.DSKT
;EndStructure

*dskt = dsktInterface()
hdc = GetDC_(*dskt\Handle())

If *dskt
  If hdc
    
    InitSprite()
    
    OpenWindow(0, 100, 200, 195, 260, "Tray Icon Window", #PB_Window_SystemMenu | #PB_Window_Invisible)
    
    If OpenWindowedScreen(*dskt\Handle(), 0, 0, 640, 360, 1, 0, 0)
         CreateSprite(0, 20, 20)
          If StartDrawing(SpriteOutput(0))
              Box(0, 0, 200, 200, RGB(200, 0, 0))
            StopDrawing()
          EndIf
          
          IconName$ = #PB_Compiler_Home + "examples/sources/Data/CdPlayer.ico"
          If CreatePopupImageMenu(0)
            MenuItem(0, "Exit")
          EndIf
          AddSysTrayIcon(1, WindowID(0), LoadImage(0, IconName$))
          
          SetFrameRate(60)
          
    Repeat
      
       Repeat
        Event = WindowEvent()
        
        Select Event 
          Case #PB_Event_SysTray
          Select EventType()
            Case #PB_EventType_RightClick, #PB_EventType_LeftClick
              DisplayPopupMenu(0, WindowID(0)) ; Show pop-up menu after a mouse-click on the Systray icon
          EndSelect
        Case #PB_Event_Menu
          Select EventMenu()
            Case 0 ; Exit 
              RemoveSysTrayIcon(#PB_All)
              FreeMenu(0)
              ReleaseDC_(*dskt\Handle(), hdc)
              *dskt\Release()
              End
          EndSelect
        EndSelect
       Until Event = 0
      
       FlipBuffers() 
        ClearScreen(RGB(0, 128, 0))
         DisplaySprite(0, 50, 50)
      
    ForEver
        
    EndIf
    
  EndIf  
EndIf
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef

Mac: 10.13.6 / 1.4GHz Core 2 Duo / 2GB DDR3 / Nvidia 320M
PC: Win 7 / AMD 64 4000+ / 3GB DDR / Nvidia 720GT


Even the vine knows it surroundings but the man with eyes does not.
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by Mijikai »

J. Baker wrote: Fri Nov 24, 2023 5:57 am Screen code with tray icon. :D
Nice example, thank you 8)
I took another look at it and improved the code further, i also added more examples see first post.
User avatar
J. Baker
Addict
Addict
Posts: 2178
Joined: Sun Apr 27, 2003 8:12 am
Location: USA
Contact:

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by J. Baker »

Very nice! Thanks for the update.

Are you able to make a 32 bit version?
www.posemotion.com

PureBasic Tools for OS X: PureMonitor, plist Tool, Data Maker & App Chef

Mac: 10.13.6 / 1.4GHz Core 2 Duo / 2GB DDR3 / Nvidia 320M
PC: Win 7 / AMD 64 4000+ / 3GB DDR / Nvidia 720GT


Even the vine knows it surroundings but the man with eyes does not.
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by Mijikai »

J. Baker wrote: Fri Nov 24, 2023 2:58 pm Very nice! Thanks for the update.

Are you able to make a 32 bit version?
Thanks, i further improved the code see first post for changes.
I have no plans for a 32 bit version.
User avatar
Mijikai
Addict
Addict
Posts: 1360
Joined: Sun Sep 11, 2016 2:17 pm

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by Mijikai »

Mario Desktop Clock Example for DSKT v.1.02

Choppy GIF preview:
Image

Code:

Code: Select all

EnableExplicit

;TO END THE PROGRAM PRESS THE [F12] KEY!

XIncludeFile "dskt.pbi";v.1.02
XIncludeFile "rpix.pbi";RPIX v.1.00: https://www.purebasic.fr/english/viewtopic.php?p=611418#p611418

Procedure.i Transparent(Handle.i)
  SetWindowLongPtr_(Handle,#GWL_EXSTYLE,GetWindowLongPtr_(Handle,#GWL_EXSTYLE)|#WS_EX_LAYERED)
  SetLayeredWindowAttributes_(Handle,0,160,#LWA_COLORKEY|#LWA_ALPHA)
  UpdateWindow_(Handle)
  ProcedureReturn #Null
EndProcedure

Procedure.i Main()
  Protected *d.DSKT,*r.RPIX,*s.RPIX_SURFACE,*m.RPIX_REGION,*a.RPIX_ANIMATION
  Protected fx.i,init.i,new.s,old.s,x.i
  *d = dsktInterface()
  If *d
    *r = rpixWindow(#RPIX_WINDOW_POPUP,640,320,128,64,#False,30)
    If *r
      *s = *r\SurfaceLoad(?mario)
      *m = *s\RegionCreate(3,1,0,0,16,32)
      *a = *r\AnimationCreate(0,2,5)
      *d\Link(*r\WindowHandle())
      Transparent(*r\WindowHandle())
      *r\OutputClip(64,32,64,32,#True)
      old = FormatDate("%hh:%ii:%ss",Date())
      Repeat
        If Not init;lazy time animation sync
          new = FormatDate("%hh:%ii:%ss",Date())
          init = Bool(new <> old)
          old = new
        EndIf
        If init
          fx + 1
          *r\FontSpaceSet(-1)
          *r\BufferFill()
          If fx = 30
            fx = 0
          EndIf  
          *m\DrawMask(0,*a,0,x,16,0)
          *r\DrawText(0,64,32 * Sin(fx * 0.1),FormatDate("%hh:%ii:%ss",Date()),160,#True,#True)
          x + 1
          If x = 128
            x = 0
          EndIf
          *r\DrawBox(0,64,32,64,32,80,#False,#True)
          *r\BufferDrawEvent()
          *r\AnimationUpdate()
        EndIf
      Until *r\WindowExit() Or GetAsyncKeyState_(#VK_F12) & 1
      *r\WindowClose()
    EndIf
    *d\Release()
  EndIf
  ProcedureReturn #Null
EndProcedure

End Main()

DataSection
  mario:;From a spritesheet by Superjustinbros: https://www.spriters-resource.com/nes/supermariobros/sheet/50365/
  Data.w $07072,$07869,$00030,$00000,$00020,$00000,$001F7,$00000,$00000,$00000,$07A31,$0626C,$00000,$00000,$00600,$00000,$00000,$00000,$00000,$00008,$00000,$00000,$0C200,$000AB,$0BB57,$00010,$0A808,$00010,$0431E,$01F40,$0570C,$08E57,$03C0A,$00084,$0B110,$02042,$01F0B,$001E3,$0570C,$08E57
  Data.w $02A0F,$011C4,$02C0A,$00D1C,$01C0E,$00F62,$00E00,$03C42,$02010,$0000C,$000C4,$0000E,$04848,$08E48,$07C8E,$0483C,$01F8E,$03B14,$01F20,$021E2,$0130C,$08711,$00C10,$00C0F,$0E3C4,$00C1F,$03870,$01000,$08813,$00EB1,$0C40B,$00042,$00F4C,$021D8,$01F03,$03820,$00A84,$01003,$01F62,$0120B
  Data.w $04300,$02EC7,$08620,$00A10,$00011,$02B1C,$0101E,$03842,$00F2F,$00E10,$00FE1,$0C51F,$01010,$0004C,$08862,$01F0F,$08820,$00FC7,$0101F,$0112A,$00C48,$0210F,$01C84,$00C00,$04B84,$00B5F,$0204A,$00F00,$04848,$0146B,$01483,$01F48,$03042,$00E0B,$04848,$08420,$00B10,$07700,$00A10,$0570F
  Data.w $02400,$0101F,$0482A,$01E57,$0210E,$02084,$00F0C,$08084,$05700,$04857,$08657,$02878,$02010,$0C21F,$00EA1,$02860,$00C16,$0100F,$08442,$0002A,$02193,$020C6,$0B20E,$00BC0,$02F0D,$08E48,$03548,$01F86,$00320,$00A12,$02F31,$08894,$02E85,$0182F,$03E42,$01018,$0C20B,$00085,$0612F,$00B85
  Data.w $08E2E,$04294,$02E5D,$02842,$02413,$0500E,$00AC2,$0418E,$0210B,$04F96,$02D00,$00A18,$02220,$00424,$00EC5,$08E0A,$02084,$00720,$0218E,$0218A,$02D00,$02820,$02314,$0FC0F,$00C50,$01425,$02F42,$00991,$02162,$02E00,$0080E,$08585,$0882F,$00961,$00000,$01CF0,$00962,$00C00,$0218A,$06E0F
  Data.w $0313F,$02F84,$000B1,$00850,$00F0C,$03120,$030C4,$04C16,$00B10,$0200E,$02811,$000C4,$0100C,$08042,$02F1E,$02815,$02EE1,$0B19F,$02058,$02F14,$08842,$01E04,$02500,$01B84,$04F09,$00A16,$0041D,$03170,$02900,$08B2F,$01185,$08630,$01F10,$00A1A,$02188,$01700,$0140D,$00743,$00B00,$0216B
  Data.w $00A0E,$03168,$00014,$00815,$078E1,$00B0A,$00870,$0060C,$00B00,$00CF1,$0E123,$01A10,$00B08,$0087E,$0060C,$021E2,$02100,$0881A,$00A15,$0000B,$00658,$00000
EndDataSection
Last edited by Mijikai on Sun Nov 26, 2023 12:20 pm, edited 2 times in total.
User avatar
Kuron
Addict
Addict
Posts: 1626
Joined: Sat Oct 17, 2009 10:51 pm
Location: Pacific Northwest

Re: [Library] DSKT Library - Get access to a window behind the Icons [Win x64]

Post by Kuron »

Mijikai wrote: Sat Nov 25, 2023 4:22 pm Mario Desktop Clock Exmple for DSKT v.1.02
Not doing well health-wise and am in excruciating pain. Seeing this not only made me smile, but it gave me some much needed chuckles. Thank you. :mrgreen:
Best wishes to the PB community. Thank you for the memories. ♥️
Post Reply