Jump to content

---


playlet
 Share

Recommended Posts

  • Replies 338
  • Created
  • Last Reply

Top Posters In This Topic

Hi.

I ran the script and nothing appeared to happen...maybe more instructions are needed. Is there a key to press or place to move the mouse.

As well, I have to believe there is a more efficient way to examine the case selections. There is a lot of duplicated code in the script and I think it would be easier to understand and work with if you streamlined it. Perhaps you can use an array and query multiple cases at once or move some things to a function and call the function instead of repeating code. Another example would be to use an array for your flags instead of $over1 = 0, $over1a = 0, $press1 = 0, $over2 = 0, $over2a = 0, $press2 = 0

This code seems like a lot of work, I think you must have worked quite hard on it. I would like to check it out, if you give me more direction I'd appreciate it.

Edited by picea892
Link to comment
Share on other sites

Hi,

got it working and made some revisions.

1) Using the winapi function so no longer require grey.gif

2) tweaked so more universally usable. Can accommodate different sized monitors and fileinstall to script directory so not tweaking needed.

I had other ideas for tweaks but didn't implement because as you say, you have a pretty easy to understand script. Anything I'd add would just add complexity and part of the point of these examples is for learning. Some stuff for you to consider if you feel like it. Instead of having multiple pictures and switching them, you can draw right on the png. I have plenty of examples of doing this if you like one. Your method is akin to what a website would do, we can do better in autoit. Another thought was the array thing. it would be 12 down, 3 over. First one would be the png, 2nd and 3rd would be the flags.

One other. I have dual monitors and I can see the text on my second monitor when they are supposed be hidden. You might want to move the gui down instead of left or hide and show the gui.

Otherwise good job. I think the forum is better for you having shared this.

Picea

Edit: Here is an example I made for drawing on a png http://www.autoitscript.com/forum/index.php?showtopic=103224&st=0&p=731512&hl=outlook%20widget&fromsearch=1&#entry731512

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\essential\devilish.ico
#AutoIt3Wrapper_outfile=Special Starter 5c.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Launcher by Playlet
#AutoIt3Wrapper_Res_Fileversion=5.0.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <StructureConstants.au3>
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

;OnAutoItExitRegister ("Close_process")

If WinExists ("Launcher-Playlet") Then
    MsgBox (0, "Warning", "You can only start this application once !")
    Exit
EndIf

If Not FileExists (@TempDir & "\essential\") Then DirCreate (@TempDir & "\essential\")

FileInstall (@ScriptDir&"\essential\devilish.ico", @TempDir & "\essential\devilish.ico", 1)
FileInstall (@ScriptDir&"\essential\images-png\normal4.png", @TempDir & "\essential\normal.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\grey.gif", @TempDir & "\essential\grey.gif", 1)

FileInstall (@ScriptDir&"\essential\images-png\over14.png", @TempDir & "\essential\over1.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over24.png", @TempDir & "\essential\over2.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over34.png", @TempDir & "\essential\over3.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over44.png", @TempDir & "\essential\over4.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over54.png", @TempDir & "\essential\over5.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over64.png", @TempDir & "\essential\over6.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over74.png", @TempDir & "\essential\over7.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over84.png", @TempDir & "\essential\over8.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over94.png", @TempDir & "\essential\over9.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over104.png", @TempDir & "\essential\over10.png", 1)
;FileInstall (@ScriptDir&"\essential\images-png\over114.png", @TempDir & "\essential\over11.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\over124.png", @TempDir & "\essential\over12.png", 1)

FileInstall (@ScriptDir&"\essential\images-png\press14.png", @TempDir & "\essential\press1.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press24.png", @TempDir & "\essential\press2.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press34.png", @TempDir & "\essential\press3.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press44.png", @TempDir & "\essential\press4.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press54.png", @TempDir & "\essential\press5.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press64.png", @TempDir & "\essential\press6.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press74.png", @TempDir & "\essential\press7.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press84.png", @TempDir & "\essential\press8.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press94.png", @TempDir & "\essential\press9.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press104.png", @TempDir & "\essential\press10.png", 1)
;FileInstall (@ScriptDir&"\essential\images-png\press114.png", @TempDir & "\essential\press11.png", 1)
FileInstall (@ScriptDir&"\essential\images-png\press124.png", @TempDir & "\essential\press12.png", 1)

TraySetIcon (@TempDir & "\essential\devilish.ico")
Opt ("TrayAutoPause", 0)
Global Const $AC_SRC_ALPHA = 1
Global $posx= @DesktopWidth-163
Global $posy= @DesktopHeight-520

Global Const $MAX_PATH = 260
Global Const $RAS_MaxDeviceType = 16
Global Const $RAS_MaxEntryName = 256
Global Const $RAS_MaxDeviceName = 128
$tRASCONN = DllStructCreate("dword dwSize;hwnd hRasConn;char szEntryName[" & $RAS_MaxEntryName + 1 & "];" & "char szDeviceType[" & $RAS_MaxDeviceType + 1 & "];" _
    & "char szDeviceName[" & $RAS_MaxDeviceName + 1 & "];" & "char szPhonebook["  & $MAX_PATH & "];" & "dword dwSubEntry;byte guidEntry[16];dword dwFlags;byte luid[8]")
$tRAS_STATS = DllStructCreate("dword dwSize;dword dwBytesXmited;dword dwBytesRcved;dword dwFramesXmited;" & _
    "dword dwFramesRcved;dword dwCrcErr;dword dwTimeoutErr;dword dwAlignmentErr;" & "dword dwHardwareOverrunErr;dword dwFramingErr;dword dwBufferOverrunErr;" & _
    "dword dwCompressionRatioIn;dword dwCompressionRatioOut;dword dwBps;dword dwConnectDuration")
$iCntByte = DllStructCreate("dword")
$iCntConn = DllStructCreate("dword")
DllStructSetData($iCntByte, 1, DllStructGetSize($tRASCONN))
DllStructSetData($tRASCONN, "dwSize", DllStructGetSize($tRASCONN))
DllStructSetData($tRAS_STATS, "dwSize", DllStructGetSize($tRAS_STATS))

_GDIPlus_Startup()

$gui = GUICreate ("Launcher-Playlet", 167, 490, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle("[CLASS:Progman]"))
GUISetIcon (@TempDir & "\essential\devilish.ico")

$image_skin = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\normal.png")
SetBitmap($gui, $image_skin, 255)

$im1 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over1.png")
$im2 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over2.png")
$im3 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over3.png")
$im4 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over4.png")
$im5 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over5.png")
$im6 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over6.png")
$im7 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over7.png")
$im8 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over8.png")
$im9 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over9.png")
$im10 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over10.png")
;$im11 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over11.png")
$im12 = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\over12.png")

$im1a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press1.png")
$im2a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press2.png")
$im3a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press3.png")
$im4a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press4.png")
$im5a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press5.png")
$im6a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press6.png")
$im7a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press7.png")
$im8a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press8.png")
$im9a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press9.png")
$im10a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press10.png")
;$im11a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press11.png")
$im12a = _GDIPlus_ImageLoadFromFile(@TempDir & "\essential\press12.png")
GUISetState()


$controlgui = GUICreate("ControlGUI", 167, 490, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED, $gui)
GUISetFont (14, 400, -1, "Comic Sans MS")
GUISetBkColor(0x123456,$controlgui)
;GUICtrlCreatePic(@TempDir & "\essential\grey.gif", 0, 0, 167, 490)
;GUICtrlSetState(-1, $GUI_DISABLE)

$1 = GUICtrlCreateLabel("Button1", 12, 7, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$2 = GUICtrlCreateLabel("Button2", 12, 48, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$3 = GUICtrlCreateLabel("Button3", 12, 89, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$4 = GUICtrlCreateLabel("Button4", 12, 130, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$5 = GUICtrlCreateLabel("Button5", 12, 171, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$6 = GUICtrlCreateLabel("Button6", 12, 212, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$7 = GUICtrlCreateLabel("Button7", 12, 253, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$8 = GUICtrlCreateLabel("Button8", 12, 294, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$9 = GUICtrlCreateLabel("Button9", 12, 335, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$10 = GUICtrlCreateLabel("Button10", 12, 376, 144, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)

#cs
$11 = GUICtrlCreateLabel("", 12, 417, 100, 36, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 7)
#ce

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;internet status labels
$11a = GUICtrlCreateLabel("", 19, 422, 87, 13, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 8)
$11b = GUICtrlCreateLabel("", 19, 434, 87, 13, 0x01+0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 8)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;exit button
$12 = GUICtrlCreateLabel("", 116, 417, 40, 36, 0x01)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
 _API_SetLayeredWindowAttributes($controlgui, 0x123456, 230)
GUISetState()

$pause = 0
$rest = 0
$over1 = 0
$over1a = 0
$press1 = 0
$over2 = 0
$over2a = 0
$press2 = 0
$over3 = 0
$over3a = 0
$press3 = 0
$over4 = 0
$over4a = 0
$press4 = 0
$over5 = 0
$over5a = 0
$press5 = 0
$over6 = 0
$over6a = 0
$press6 = 0
$over7 = 0
$over7a = 0
$press7 = 0
$over8 = 0
$over8a = 0
$press8 = 0
$over9 = 0
$over9a = 0
$press9 = 0
$over10 = 0
$over10a = 0
$press10 = 0
;$over11 = 0
;$over11a = 0
;$press11 = 0
$over12 = 0
$over12a = 0
$press12 = 0

$lastactive = ""
$offline = 1

While 1
    If _IsPressed ("24") Then _Pause()
    $mpos = MouseGetPos()
    Select
        Case $mpos[0] > @DesktopWidth-50
            $check = WinGetPos ($gui)
            Select
                Case $check[0] <> $posx
                    $lastactive = WinGetTitle ("[active]")
                    GUISetState (@SW_SHOW, $gui)
                    For $j = $posx+165 To $posx Step -5
                        WinMove ($gui, "", $j, $posy)
                        WinMove ($controlgui, "", $j, $posy)
                    Next
                Case $check[0] = $posx
                    $pause = 0
                    $pos = GUIGetCursorInfo($controlgui)
                    While $mpos[0] > 1230
                        If @IPAddress1 <> "127.0.0.1" Then
                            If $offline = 1 Then
                                $aRet = DllCall("rasapi32.dll", "int", "RasEnumConnections", "ptr", DllStructGetPtr($tRASCONN), "ptr", DllStructGetPtr($iCntByte), "ptr", DllStructGetPtr($iCntConn))
                                If $aRet[0] Then
                                    SetError(2, $aRet[0], -1)
                                EndIf
                                If DllStructGetData($iCntConn,1) < 1 Then
                                    SetError(1, 0, 0) ;Error: not opened connections
                                EndIf
                                $offline = 0
                                GUICtrlSetData ($11a, "Online (0')")
                                GUICtrlSetData ($11b, "Usage: 0.00 mb")
                            ElseIf $offline = 0 Then
                            EndIf
                            $aRet = DllCall("rasapi32.dll", "int", "RasGetConnectionStatistics", "hwnd", DllStructGetData($tRASCONN, "hRasConn"), "ptr", DllStructGetPtr($tRAS_STATS))
                            If $aRet[0] Then
                                SetError(3, $aRet[0], -1)
                            EndIf
                            $stat = DllStructGetData($tRAS_STATS, "dwBytesXmited")
                            $stat2 = DllStructGetData($tRAS_STATS, "dwBytesRcved")
                            $stat3 = DllStructGetData($tRAS_STATS, "dwConnectDuration")
                            $sentmb = Round (($stat / 1048576), 2)
                            $receivedmb = Round (($stat2 / 1048576), 2)
                            $totalsummb = Round ((($stat+$stat2) / 1048576), 2)
                            $time = Round ((($stat3 / 1000) / 60), 2)
                            $split = StringSplit ($time, ".")
                            $min = $split[1]

                            $read = GUICtrlRead ($11a)
                            $read2 = GUICtrlRead ($11b)

                            $splitter = StringSplit ($read, "Online (", 1)
                            $splitter2 = StringSplit ($splitter[2], "')", 1)
                            $accmin = $splitter2[1]

                            $splitter3 = StringSplit ($read2, "Usage: ", 1)
                            $splitter4 = StringSplit ($splitter3[2], " mb", 1)
                            $accmb = $splitter4[1]

                            If $min <> $accmin Or $totalsummb <> $accmb Then
                                Select
                                    Case ($totalsummb - $accmb) >= 0.1
                                        GUICtrlSetData ($11a, "Online (" & $min & "')")
                                        GUICtrlSetData ($11b, "Usage: " & $totalsummb & " mb")
                                    Case $min <> $accmin
                                        GUICtrlSetData ($11a, "Online (" & $min & "')")
                                EndSelect
                            Else
                            EndIf
                        ElseIf @IPAddress1 = "127.0.0.1" Then
                            $readoff = GUICtrlRead ($11a)
                            $readoff2 = GUICtrlRead ($11b)
                            If $readoff <> "Offline" Or $readoff = "" Then
                                GUICtrlSetData ($11a, "Offline")
                                GUICtrlSetData ($11b, "Usage: -")
                                $offline = 1
                            ElseIf $readoff = "Offline" Then
                            EndIf
                        EndIf

                        If _IsPressed ("24") Then _Pause()
                        $mpos = MouseGetPos()
                        $pos = GUIGetCursorInfo($controlgui)
                        Select
                            Case $pos[4] = $1
                                ;1st
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over1 = 0 Then
                                            SetBitmap($gui, $im1, 255)
                                            $over1 = 1
                                        ElseIf $over1 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press1 = 0 Then
                                            SetBitmap($gui, $im1a, 255)
                                            $press1 = 1
                                        ElseIf $press1 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $1
                                                    If $press1 = 0 Then
                                                        SetBitmap($gui, $im1a, 255)
                                                        $press1 = 1
                                                        $over1a = 0
                                                    ElseIf $press1 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $1
                                                    If $over1a = 0 Then
                                                        SetBitmap($gui, $im1, 255)
                                                        $over1a = 1
                                                        $press1 = 0
                                                    ElseIf $over1a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over1 = 0
                                        $press1 = 0
                                        If $pos[4] = $1 Then
                                            MsgBox (0, "", "Button 1")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $2
                                ;2nd
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over2 = 0 Then
                                            SetBitmap($gui, $im2, 255)
                                            $over2 = 1
                                        ElseIf $over2 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press2 = 0 Then
                                            SetBitmap($gui, $im2a, 255)
                                            $press2 = 1
                                        ElseIf $press2 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $2
                                                    If $press2 = 0 Then
                                                        SetBitmap($gui, $im2a, 255)
                                                        $press2 = 1
                                                        $over2a = 0
                                                    ElseIf $press2 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $2
                                                    If $over2a = 0 Then
                                                        SetBitmap($gui, $im2, 255)
                                                        $over2a = 1
                                                        $press2 = 0
                                                    ElseIf $over2a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over2 = 0
                                        $press2 = 0
                                        If $pos[4] = $2 Then
                                            MsgBox (0, "", "Button 2")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $3
                                ;3rd
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over3 = 0 Then
                                            SetBitmap($gui, $im3, 255)
                                            $over3 = 1
                                        ElseIf $over3 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press3 = 0 Then
                                            SetBitmap($gui, $im3a, 255)
                                            $press3 = 1
                                        ElseIf $press3 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $3
                                                    If $press3 = 0 Then
                                                        SetBitmap($gui, $im3a, 255)
                                                        $press3 = 1
                                                        $over3a = 0
                                                    ElseIf $press3 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $3
                                                    If $over3a = 0 Then
                                                        SetBitmap($gui, $im3, 255)
                                                        $over3a = 1
                                                        $press3 = 0
                                                    ElseIf $over3a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over3 = 0
                                        $press3 = 0
                                        If $pos[4] = $3 Then
                                            MsgBox (0, "", "Button 3")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $4
                                ;4th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over4 = 0 Then
                                            SetBitmap($gui, $im4, 255)
                                            $over4 = 1
                                        ElseIf $over4 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press4 = 0 Then
                                            SetBitmap($gui, $im4a, 255)
                                            $press4 = 1
                                        ElseIf $press4 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $4
                                                    If $press4 = 0 Then
                                                        SetBitmap($gui, $im4a, 255)
                                                        $press4 = 1
                                                        $over4a = 0
                                                    ElseIf $press4 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $4
                                                    If $over4a = 0 Then
                                                        SetBitmap($gui, $im4, 255)
                                                        $over4a = 1
                                                        $press4 = 0
                                                    ElseIf $over4a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over4 = 0
                                        $press4 = 0
                                        If $pos[4] = $4 Then
                                            MsgBox (0, "", "Button 4")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $5
                                ;5th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over5 = 0 Then
                                            SetBitmap($gui, $im5, 255)
                                            $over5 = 1
                                        ElseIf $over5 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press5 = 0 Then
                                            SetBitmap($gui, $im5a, 255)
                                            $press5 = 1
                                        ElseIf $press5 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $5
                                                    If $press5 = 0 Then
                                                        SetBitmap($gui, $im5a, 255)
                                                        $press5 = 1
                                                        $over5a = 0
                                                    ElseIf $press5 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $5
                                                    If $over5a = 0 Then
                                                        SetBitmap($gui, $im5, 255)
                                                        $over5a = 1
                                                        $press5 = 0
                                                    ElseIf $over5a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over5 = 0
                                        $press5 = 0
                                        If $pos[4] = $5 Then
                                            MsgBox (0, "", "Button 5")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $6
                                ;6th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over6 = 0 Then
                                            SetBitmap($gui, $im6, 255)
                                            $over6 = 1
                                        ElseIf $over6 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press6 = 0 Then
                                            SetBitmap($gui, $im6a, 255)
                                            $press6 = 1
                                        ElseIf $press6 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $6
                                                    If $press6 = 0 Then
                                                        SetBitmap($gui, $im6a, 255)
                                                        $press6 = 1
                                                        $over6a = 0
                                                    ElseIf $press6 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $6
                                                    If $over6a = 0 Then
                                                        SetBitmap($gui, $im6, 255)
                                                        $over6a = 1
                                                        $press6 = 0
                                                    ElseIf $over6a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over6 = 0
                                        $press6 = 0
                                        If $pos[4] = $6 Then
                                            MsgBox (0, "", "Button 6")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $7
                                ;7th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over7 = 0 Then
                                            SetBitmap($gui, $im7, 255)
                                            $over7 = 1
                                        ElseIf $over7 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press7 = 0 Then
                                            SetBitmap($gui, $im7a, 255)
                                            $press7 = 1
                                        ElseIf $press7 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $7
                                                    If $press7 = 0 Then
                                                        SetBitmap($gui, $im7a, 255)
                                                        $press7 = 1
                                                        $over7a = 0
                                                    ElseIf $press7 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $7
                                                    If $over7a = 0 Then
                                                        SetBitmap($gui, $im7, 255)
                                                        $over7a = 1
                                                        $press7 = 0
                                                    ElseIf $over7a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over7 = 0
                                        $press7 = 0
                                        If $pos[4] = $7 Then
                                            MsgBox (0, "", "Button 7")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $8
                                ;8th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over8 = 0 Then
                                            SetBitmap($gui, $im8, 255)
                                            $over8 = 1
                                        ElseIf $over8 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press8 = 0 Then
                                            SetBitmap($gui, $im8a, 255)
                                            $press8 = 1
                                        ElseIf $press8 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $8
                                                    If $press8 = 0 Then
                                                        SetBitmap($gui, $im8a, 255)
                                                        $press8 = 1
                                                        $over8a = 0
                                                    ElseIf $press8 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $8
                                                    If $over8a = 0 Then
                                                        SetBitmap($gui, $im8, 255)
                                                        $over8a = 1
                                                        $press8 = 0
                                                    ElseIf $over8a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over8 = 0
                                        $press8 = 0
                                        If $pos[4] = $8 Then
                                            MsgBox (0, "", "Button 8")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            Case $pos[4] = $9
                                ;9th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over9 = 0 Then
                                            SetBitmap($gui, $im9, 255)
                                            $over9 = 1
                                        ElseIf $over9 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press9 = 0 Then
                                            SetBitmap($gui, $im9a, 255)
                                            $press9 = 1
                                        ElseIf $press9 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $9
                                                    If $press9 = 0 Then
                                                        SetBitmap($gui, $im9a, 255)
                                                        $press9 = 1
                                                        $over9a = 0
                                                    ElseIf $press9 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $9
                                                    If $over9a = 0 Then
                                                        SetBitmap($gui, $im9, 255)
                                                        $over9a = 1
                                                        $press9 = 0
                                                    ElseIf $over9a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over9 = 0
                                        $press9 = 0
                                        If $pos[4] = $9 Then
                                            MsgBox (0, "", "Button 9")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                            $lastactive = "Program Files"
                                        EndIf
                                EndSelect
                            Case $pos[4] = $10
                                ;10th
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over10 = 0 Then
                                            SetBitmap($gui, $im10, 255)
                                            $over10 = 1
                                        ElseIf $over10 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press10 = 0 Then
                                            SetBitmap($gui, $im10a, 255)
                                            $press10 = 1
                                        ElseIf $press10 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $10
                                                    If $press10 = 0 Then
                                                        SetBitmap($gui, $im10a, 255)
                                                        $press10 = 1
                                                        $over10a = 0
                                                    ElseIf $press10 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $10
                                                    If $over10a = 0 Then
                                                        SetBitmap($gui, $im10, 255)
                                                        $over10a = 1
                                                        $press10 = 0
                                                    ElseIf $over10a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over10 = 0
                                        $press10 = 0
                                        If $pos[4] = $10 Then
                                            MsgBox (0, "", "Button 10")
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            #cs
                            Case $pos[4] = $11
                            ;11th - net status button, doesn't need hover control
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over11 = 0 Then
                                            SetBitmap($gui, $im11, 255)
                                            $over11 = 1
                                        ElseIf $over11 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press11 = 0 Then
                                            SetBitmap($gui, $im11a, 255)
                                            $press11 = 1
                                        ElseIf $press11 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $11
                                                    If $press11 = 0 Then
                                                        SetBitmap($gui, $im11a, 255)
                                                        $press11 = 1
                                                        $over11a = 0
                                                    ElseIf $press11 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $11
                                                    If $over11a = 0 Then
                                                        SetBitmap($gui, $im11, 255)
                                                        $over11a = 1
                                                        $press11 = 0
                                                    ElseIf $over11a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over11 = 0
                                        $press11 = 0
                                        If $pos[4] = $11 Then
                                            Close_process()
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                        EndIf
                                EndSelect
                            #ce
                            Case $pos[4] = $12
                                ;12th - exit button
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $over12 = 0 Then
                                            SetBitmap($gui, $im12, 255)
                                            $over12 = 1
                                        ElseIf $over12 = 1 Then
                                        EndIf
                                    Case $pos[2] = 1
                                        If $press12 = 0 Then
                                            SetBitmap($gui, $im12a, 255)
                                            $press12 = 1
                                        ElseIf $press12 = 1 Then
                                        EndIf
                                        While $pos[2] = 1
                                            $pos = GUIGetCursorInfo($controlgui)
                                            Select
                                                Case $pos[4] = $12
                                                    If $press12 = 0 Then
                                                        SetBitmap($gui, $im12a, 255)
                                                        $press12 = 1
                                                        $over12a = 0
                                                    ElseIf $press12 = 1 Then
                                                    EndIf
                                                Case $pos[4] <> $12
                                                    If $over12a = 0 Then
                                                        SetBitmap($gui, $im12, 255)
                                                        $over12a = 1
                                                        $press12 = 0
                                                    ElseIf $over12a = 1 Then
                                                    EndIf
                                            EndSelect
                                            Sleep(5)
                                        WEnd
                                        $over12 = 0
                                        $press12 = 0
                                        If $pos[4] = $12 Then
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                            Beep(500, 50)
                                            Close_process()
                                        EndIf
                                EndSelect
                            Case Else
                                ;else - not hovering on any button
                                If $rest = 0 Then
                                    SetBitmap($gui, $image_skin, 255)
                                    $rest = 1
                                    $over1 = 0
                                    $over1a = 0
                                    $press1 = 0
                                    $over2 = 0
                                    $over2a = 0
                                    $press2 = 0
                                    $over3 = 0
                                    $over3a = 0
                                    $press3 = 0
                                    $over4 = 0
                                    $over4a = 0
                                    $press4 = 0
                                    $over5 = 0
                                    $over5a = 0
                                    $press5 = 0
                                    $over6 = 0
                                    $over6a = 0
                                    $press6 = 0
                                    $over7 = 0
                                    $over7a = 0
                                    $press7 = 0
                                    $over8 = 0
                                    $over8a = 0
                                    $press8 = 0
                                    $over9 = 0
                                    $over9a = 0
                                    $press9 = 0
                                    $over10 = 0
                                    $over10a = 0
                                    $press10 = 0
                                    ;$over11 = 0
                                    ;$over11a = 0
                                    ;$press11 = 0
                                    $over12 = 0
                                    $over12a = 0
                                    $press12 = 0
                                ElseIf $rest = 1 Then
                                    $over1 = 0
                                    $over1a = 0
                                    $press1 = 0
                                    $over2 = 0
                                    $over2a = 0
                                    $press2 = 0
                                    $over3 = 0
                                    $over3a = 0
                                    $press3 = 0
                                    $over4 = 0
                                    $over4a = 0
                                    $press4 = 0
                                    $over5 = 0
                                    $over5a = 0
                                    $press5 = 0
                                    $over6 = 0
                                    $over6a = 0
                                    $press6 = 0
                                    $over7 = 0
                                    $over7a = 0
                                    $press7 = 0
                                    $over8 = 0
                                    $over8a = 0
                                    $press8 = 0
                                    $over9 = 0
                                    $over9a = 0
                                    $press9 = 0
                                    $over10 = 0
                                    $over10a = 0
                                    $press10 = 0
                                    ;$over11 = 0
                                    ;$over11a = 0
                                    ;$press11 = 0
                                    $over12 = 0
                                    $over12a = 0
                                    $press12 = 0
                                EndIf
                        EndSelect
                        Sleep(5)
                    WEnd
            EndSelect
        Case $mpos[0] < 1390
            If $pause = 0 Then
                SetBitmap($gui, $image_skin, 255)
                $pause = 1
            ElseIf $pause = 1 Then
                $check = WinGetPos ($gui)
                Select
                    Case $check[0] <> $posx+165
                        For $i = $posx To $posx+165 Step 5
                            WinMove ($gui, "", $i, $posy)
                            WinMove ($controlgui, "", $i, $posy)
                        Next
                        GUISetState (@SW_HIDE, $gui)
                        If $lastactive <> "" Then
                            WinActivate ($lastactive)
                        EndIf
                    Case $check[0] = $posx+165
                        ;
                EndSelect
            EndIf
    EndSelect
    Sleep(20)
WEnd

Func Close_process()
    _GDIPlus_ImageDispose ($image_skin)
    _GDIPlus_ImageDispose ($im1)
    _GDIPlus_ImageDispose ($im2)
    _GDIPlus_ImageDispose ($im3)
    _GDIPlus_ImageDispose ($im4)
    _GDIPlus_ImageDispose ($im5)
    _GDIPlus_ImageDispose ($im6)
    _GDIPlus_ImageDispose ($im7)
    _GDIPlus_ImageDispose ($im8)
    _GDIPlus_ImageDispose ($im9)
    _GDIPlus_ImageDispose ($im10)
    ;_GDIPlus_ImageDispose ($im11)
    _GDIPlus_ImageDispose ($im12)
    _GDIPlus_ImageDispose ($im1a)
    _GDIPlus_ImageDispose ($im2a)
    _GDIPlus_ImageDispose ($im3a)
    _GDIPlus_ImageDispose ($im4a)
    _GDIPlus_ImageDispose ($im5a)
    _GDIPlus_ImageDispose ($im6a)
    _GDIPlus_ImageDispose ($im7a)
    _GDIPlus_ImageDispose ($im8a)
    _GDIPlus_ImageDispose ($im9a)
    _GDIPlus_ImageDispose ($im10a)
    ;_GDIPlus_ImageDispose ($im11a)
    _GDIPlus_ImageDispose ($im12a)

    _WinAPI_DeleteObject($image_skin)
    _WinAPI_DeleteObject($im1)
    _WinAPI_DeleteObject($im2)
    _WinAPI_DeleteObject($im3)
    _WinAPI_DeleteObject($im4)
    _WinAPI_DeleteObject($im5)
    _WinAPI_DeleteObject($im6)
    _WinAPI_DeleteObject($im7)
    _WinAPI_DeleteObject($im8)
    _WinAPI_DeleteObject($im9)
    _WinAPI_DeleteObject($im10)
    ;_WinAPI_DeleteObject($im11)
    _WinAPI_DeleteObject($im12)
    _WinAPI_DeleteObject($im1a)
    _WinAPI_DeleteObject($im2a)
    _WinAPI_DeleteObject($im3a)
    _WinAPI_DeleteObject($im4a)
    _WinAPI_DeleteObject($im5a)
    _WinAPI_DeleteObject($im6a)
    _WinAPI_DeleteObject($im7a)
    _WinAPI_DeleteObject($im8a)
    _WinAPI_DeleteObject($im9a)
    _WinAPI_DeleteObject($im10a)
    ;_WinAPI_DeleteObject($im11a)
    _WinAPI_DeleteObject($im12a)
    _GDIPlus_Shutdown()
    DllClose ("rasapi32.dll")
    ;Sleep(500)
    WinActivate ($lastactive)
    DirRemove (@TempDir & "\essential", 1)
    Exit
EndFunc

Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc

Func _Pause()
    $dll = DllOpen("user32.dll")
    Sleep (1000)
    Do
        Sleep (60)
    Until _IsPressed ("24", $dll)
    DllClose ($dll)
    Sleep (1000)
EndFunc

;===============================================================================
;
; Function Name:   _API_SetLayeredWindowAttributes
; Description::    Sets Layered Window Attributes:) See MSDN for more informaion
; Parameter(s):
;                  $hwnd - Handle of GUI to work on
;                  $i_transcolor - Transparent color
;                  $Transparency - Set Transparancy of GUI
;                  $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
; Requirement(s):  Layered Windows
; Return Value(s): Success: 1
;                  Error: 0
;                   @error: 1 to 3 - Error from DllCall
;                   @error: 4 - Function did not succeed - use
;                               _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
; Author(s):       Prog@ndy
;
;===============================================================================
;
Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

Local Const $AC_SRC_ALPHA = 1
Local Const $ULW_ALPHA = 2
Local Const $LWA_ALPHA = 0x2
Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
        $i_transcolor = Hex(String($i_transcolor), 6)
        $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    Select
        Case @error
            Return SetError(@error,0,0)
        Case $ret[0] = 0
            Return SetError(4,0,0)
        Case Else
            Return 1
    EndSelect
EndFunc;==>_API_SetLayeredWindowAttributes
Edited by picea892
Link to comment
Share on other sites

Hi Playlet

Congrats on your 100.

I like your script, so I thought I would demonstrate with it (I hope you don't mind). I have changed your 1000+ line script to a 350+ line script by using 1 array and multiple for next loops. All seems to work except your IP button looks wonky. I spent more time on this than I wanted, so I'll let you fix that little glitch.

I am over my global upload quota so can't upload the pictures (or even the 13 kb script). So below is the revised script. You will have to renumber your pictures and put in a folder called "essential" in your script directory.

Renamed pngs would be

over1.png; over2.png; over3.png.......

press1.png; press2.png; press3.png.....

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\essential\devilish.ico
#AutoIt3Wrapper_Outfile=Special Starter 5c.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Launcher by Playlet
#AutoIt3Wrapper_Res_Fileversion=5.0.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <StructureConstants.au3>
#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Global $labelarray[13][8]


If WinExists("Launcher-Playlet") Then
    MsgBox(0, "Warning", "You can only start this application once !")
    Exit
EndIf

TraySetIcon(@ScriptDir & "\essential\devilish.ico")
Opt("TrayAutoPause", 0)
Global Const $AC_SRC_ALPHA = 1
Global $posx = @DesktopWidth - 163
Global $posy = @DesktopHeight - 520

Global Const $MAX_PATH = 260
Global Const $RAS_MaxDeviceType = 16
Global Const $RAS_MaxEntryName = 256
Global Const $RAS_MaxDeviceName = 128
$tRASCONN = DllStructCreate("dword dwSize;hwnd hRasConn;char szEntryName[" & $RAS_MaxEntryName + 1 & "];" & "char szDeviceType[" & $RAS_MaxDeviceType + 1 & "];" _
         & "char szDeviceName[" & $RAS_MaxDeviceName + 1 & "];" & "char szPhonebook[" & $MAX_PATH & "];" & "dword dwSubEntry;byte guidEntry[16];dword dwFlags;byte luid[8]")
$tRAS_STATS = DllStructCreate("dword dwSize;dword dwBytesXmited;dword dwBytesRcved;dword dwFramesXmited;" & _
        "dword dwFramesRcved;dword dwCrcErr;dword dwTimeoutErr;dword dwAlignmentErr;" & "dword dwHardwareOverrunErr;dword dwFramingErr;dword dwBufferOverrunErr;" & _
        "dword dwCompressionRatioIn;dword dwCompressionRatioOut;dword dwBps;dword dwConnectDuration")
$iCntByte = DllStructCreate("dword")
$iCntConn = DllStructCreate("dword")
DllStructSetData($iCntByte, 1, DllStructGetSize($tRASCONN))
DllStructSetData($tRASCONN, "dwSize", DllStructGetSize($tRASCONN))
DllStructSetData($tRAS_STATS, "dwSize", DllStructGetSize($tRAS_STATS))

_GDIPlus_Startup()

$gui = GUICreate("Launcher-Playlet", 167, 490, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle("[CLASS:Progman]"))
GUISetIcon(@ScriptDir & "\essential\devilish.ico")

$image_skin = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\essential\normal.png")
SetBitmap($gui, $image_skin, 255)

For $i = 1 To 12
    $labelarray[$i][0] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\essential\over" & $i & ".png")
    $labelarray[$i][1] = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\essential\press" & $i & ".png")
Next

GUISetState()


$controlgui = GUICreate("ControlGUI", 167, 490, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED, $gui)
GUISetFont(14, 400, -1, "Comic Sans MS")
GUISetBkColor(0x123456, $controlgui)
;GUICtrlCreatePic(@scriptdir & "\essential\grey.gif", 0, 0, 167, 490)
;GUICtrlSetState(-1, $GUI_DISABLE)

$goingdown = 7
For $i = 1 To 11
    $labelarray[$i][5] = GUICtrlCreateLabel("Button" & $i, 12, $goingdown, 144, 36, 0x01 + 0x0200)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor(-1, 0xFFFFFF)
    $goingdown = $goingdown + 41
Next
$labelarray[11][5] = GUICtrlCreateLabel("", 19, 434, 87, 13, 0x01+0x0200)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 8)

$labelarray[12][5] = GUICtrlCreateLabel("", 116, 417, 40, 36, 0x01+0x0200)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 8)


_API_SetLayeredWindowAttributes($controlgui, 0x123456, 230)
GUISetState()
For $i = 1 To 12
    $labelarray[$i][2] = 0 ;used to be $over1
    $labelarray[$i][3] = 0 ;used to be $over1a
    $labelarray[$i][4] = 0 ;used to be $press1
Next
Global $pause = 0
Global $rest = 0
Global $lastactive = ""
Global $offline = 1

While 1
    If _IsPressed("24") Then _Pause()
    $mpos = MouseGetPos()
    Select
        Case $mpos[0] > @DesktopWidth - 300
            $check = WinGetPos($gui)
            Select
                Case $check[0] <> $posx
                    $lastactive = WinGetTitle("[active]")
                    GUISetState(@SW_SHOW, $gui)
                    For $j = $posx + 165 To $posx Step -5
                        WinMove($gui, "", $j, $posy)
                        WinMove($controlgui, "", $j, $posy)
                    Next
                Case $check[0] = $posx
                    $pause = 0
                    $pos = GUIGetCursorInfo($controlgui)
                    While $mpos[0] > @DesktopWidth-300
                        If @IPAddress1 <> "127.0.0.1" Then
                            If $offline = 1 Then
                                $aRet = DllCall("rasapi32.dll", "int", "RasEnumConnections", "ptr", DllStructGetPtr($tRASCONN), "ptr", DllStructGetPtr($iCntByte), "ptr", DllStructGetPtr($iCntConn))
                                If $aRet[0] Then
                                    SetError(2, $aRet[0], -1)
                                EndIf
                                If DllStructGetData($iCntConn, 1) < 1 Then
                                    SetError(1, 0, 0) ;Error: not opened connections
                                EndIf
                                $offline = 0
                                GUICtrlSetData($labelarray[11][5], "Online (0')")
                                GUICtrlSetData($labelarray[12][5], "Usage: 0.00 mb")
                            ElseIf $offline = 0 Then
                            EndIf
                            $aRet = DllCall("rasapi32.dll", "int", "RasGetConnectionStatistics", "hwnd", DllStructGetData($tRASCONN, "hRasConn"), "ptr", DllStructGetPtr($tRAS_STATS))
                            If $aRet[0] Then
                                SetError(3, $aRet[0], -1)
                            EndIf
                            $stat = DllStructGetData($tRAS_STATS, "dwBytesXmited")
                            $stat2 = DllStructGetData($tRAS_STATS, "dwBytesRcved")
                            $stat3 = DllStructGetData($tRAS_STATS, "dwConnectDuration")
                            $sentmb = Round(($stat / 1048576), 2)
                            $receivedmb = Round(($stat2 / 1048576), 2)
                            $totalsummb = Round((($stat + $stat2) / 1048576), 2)
                            $time = Round((($stat3 / 1000) / 60), 2)
                            $split = StringSplit($time, ".")
                            $min = $split[1]

                            $read = GUICtrlRead($labelarray[11][5])
                            $read2 = GUICtrlRead($labelarray[12][5])

                            $splitter = StringSplit($read, "Online (", 1)
                            $splitter2 = StringSplit($splitter[2], "')", 1)
                            $accmin = $splitter2[1]

                            $splitter3 = StringSplit($read2, "Usage: ", 1)
                            $splitter4 = StringSplit($splitter3[2], " mb", 1)
                            $accmb = $splitter4[1]

                            If $min <> $accmin Or $totalsummb <> $accmb Then
                                Select
                                    Case ($totalsummb - $accmb) >= 0.1
                                        GUICtrlSetData($labelarray[11][5], "Online (" & $min & "')")
                                        GUICtrlSetData($labelarray[12][5], "Usage: " & $totalsummb & " mb")
                                    Case $min <> $accmin
                                        GUICtrlSetData($labelarray[11][5], "Online (" & $min & "')")
                                EndSelect
                            Else
                            EndIf
                        ElseIf @IPAddress1 = "127.0.0.1" Then
                            $readoff = GUICtrlRead($labelarray[11][5])
                            $readoff2 = GUICtrlRead($labelarray[12][5])
                            If $readoff <> "Offline" Or $readoff = "" Then
                                GUICtrlSetData($labelarray[11][5], "Offline")
                                GUICtrlSetData($labelarray[12][5], "Usage: -")
                                $offline = 1
                            ElseIf $readoff = "Offline" Then
                            EndIf
                        EndIf

                        If _IsPressed("24") Then _Pause()
                        $mpos = MouseGetPos()
                        whichbutt()
                        Sleep(5)
                        $i=0
                    WEnd

            EndSelect
        Case $mpos[0] < @DesktopWidth-300
            If $pause = 0 Then
                SetBitmap($gui, $image_skin, 255)
                $pause = 1
            ElseIf $pause = 1 Then
                $check = WinGetPos($gui)
                Select
                    Case $check[0] <> $posx + 165
                        For $b = $posx To $posx + 165 Step 5
                            WinMove($gui, "", $b, $posy)
                            WinMove($controlgui, "", $b, $posy)
                        Next
                        GUISetState(@SW_HIDE, $gui)
                        If $lastactive <> "" Then
                            WinActivate($lastactive)
                        EndIf
                    Case $check[0] = $posx + 165
                        ;
                EndSelect
            EndIf
    EndSelect
    Sleep(20)

WEnd

Func OnAutoItExit()
    For $i = 1 To 12
        _GDIPlus_ImageDispose($labelarray[$i][0])
        _GDIPlus_ImageDispose($labelarray[$i][1])
    Next

    _GDIPlus_ImageDispose($image_skin)
    _WinAPI_DeleteObject($image_skin)

    _GDIPlus_Shutdown()
    DllClose("rasapi32.dll")
    ;Sleep(500)
    WinActivate($lastactive)

    Exit
EndFunc   ;==>Close_process

Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc   ;==>SetBitmap

Func _Pause()
    $dll = DllOpen("user32.dll")
    Sleep(1000)
    Do
        Sleep(60)
    Until _IsPressed("24", $dll)
    DllClose($dll)
    Sleep(1000)
EndFunc   ;==>_Pause

;===============================================================================
;
; Function Name:   _API_SetLayeredWindowAttributes
; Description::    Sets Layered Window Attributes:) See MSDN for more informaion
; Parameter(s):
;                  $hwnd - Handle of GUI to work on
;                  $i_transcolor - Transparent color
;                  $Transparency - Set Transparancy of GUI
;                  $isColorRef - If True, $i_transcolor is a COLORREF-Strucure, else an RGB-Color
; Requirement(s):  Layered Windows
; Return Value(s): Success: 1
;                  Error: 0
;                   @error: 1 to 3 - Error from DllCall
;                   @error: 4 - Function did not succeed - use
;                               _WinAPI_GetLastErrorMessage or _WinAPI_GetLastError to get more information
; Author(s):       Prog@ndy
;
;===============================================================================
;

Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)

    Local Const $AC_SRC_ALPHA = 1
    Local Const $ULW_ALPHA = 2
    Local Const $LWA_ALPHA = 0x2
    Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
        $i_transcolor = Hex(String($i_transcolor), 6)
        $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    Select
        Case @error
            Return SetError(@error, 0, 0)
        Case $Ret[0] = 0
            Return SetError(4, 0, 0)
        Case Else
            Return 1
    EndSelect
EndFunc   ;==>_API_SetLayeredWindowAttributes

func whichbutt()

                        $pos = GUIGetCursorInfo($controlgui)

                        For $i = 1 To 12
                            If $pos[4] = $labelarray[$i][5] Then
                                $rest = 0
                                Select
                                    Case $pos[2] = 0
                                        If $labelarray[$i][2] = 0 Then
                                            SetBitmap($gui, $labelarray[$i][0], 255)
                                            $labelarray[$i][2] = 1

                                            Return
                                        EndIf
                                    Case $pos[2] = 1
                                        If $labelarray[$i][4] = 0 Then
                                            SetBitmap($gui, $labelarray[$i][1], 255)
                                            $labelarray[$i][4] = 1
                                            While $pos[2] = 1
                                                $pos = GUIGetCursorInfo($controlgui)
                                                Select
                                                    Case $pos[4] = $labelarray[$i][5]
                                                        If $labelarray[$i][4] = 0 Then
                                                            SetBitmap($gui, $labelarray[$i][1], 255)
                                                            $labelarray[$i][4] = 1
                                                            $labelarray[$i][3] = 0
                                                            Return
                                                        EndIf
                                                    Case $pos[4] <> $labelarray[$i][5]
                                                        If $labelarray[$i][3] = 0 Then
                                                            SetBitmap($gui, $labelarray[$i][0], 255)
                                                            $labelarray[$i][3] = 1
                                                            $labelarray[$i][4] = 0
                                                            Return
                                                        EndIf
                                                EndSelect
                                                Sleep(5)
                                            WEnd
                                            $labelarray[$i][2] = 0
                                            $labelarray[$i][4] = 0
                                            if $pos[4] = $labelarray[12][5] Then
                                                Beep(1000, 50)
                                                Beep(2000, 50)
                                                Beep(500, 50)
                                                OnAutoItExit()
                                                Return
                                            EndIf
                                            If $pos[4] = $labelarray[$i][5] Then
                                                MsgBox(0, "", "Button" & $i)
                                                Beep(1000, 50)
                                                Beep(2000, 50)
                                                Return
                                            EndIf

                                        EndIf
                                EndSelect
                            EndIf
                        Next
reset()

EndFunc

Func reset()
                                            For $i = 1 To 12
                                                $labelarray[$i][2] = 0 ;used to be $over1
                                                $labelarray[$i][3] = 0 ;used to be $over1a
                                                $labelarray[$i][4] = 0 ;used to be $press1
                                            Next
                                        ;   SetBitmap($gui, $image_skin, 255)

EndFunc
Link to comment
Share on other sites

Hi again, glad you cleaned up the script I gave. Seems to be working like you originally intended. Have you seen dantay9's launcher. He seems to have some good ideas that perhaps you can build on. That explosion thing is pretty neat.

http://www.autoitscript.com/forum/index.php?showtopic=102956

Edit: Oops, just noticed there was a post I didn't read.

Yes I can help. Yes you have one image - load it to memory and you use it multiple times. This is something I'm interested in and would be trying to do anyways. Your script gives a great base to build on. No promises, but maybe over the weekend I can get something going for an example. Maybe Danty9 can contribute his poof stuff too :)

Edited by picea892
Link to comment
Share on other sites

My toolbar is pretty cool. It is yet another one of my scripts that look great, but seem to not do very well as far as functionality. I got some of the ideas from Rocketdock.

You are free to use my code as an example and even copy some of the functions as long as you give me credit for it.

I really like the colors and the hover over effects you use. Keep up the good work!

Edited by dantay9
Link to comment
Share on other sites

Excellent work Playlet, That's exactly what I was thinking of.

You beat me to it....I actually hit a bit of a brick wall and was going to go at it tomorrow so I'm glad you got it.

I'm sure there are other ways, but your method seems streamlined enough for most purposes. Perhaps other members have other ideas.....

Link to comment
Share on other sites

I made a few small changes to your script. First, I used _Singleton to check if the application was already running. I added an if statement to the OnAutoItExit function to simply exit when caused by _Singleton. I also added a $Sensitivity constant variable to determine the distance from the edge when the gui will pop out. Just thought it would be easier to change that way. Then I changed the select case statements to if statements because I think it is easier to read when the tabs don't go as far across the page. Changed a few select statements to switch statements too for speed. FileInstall also wasn't working when compiled. Here is what I have:

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=devilish.ico
#AutoIt3Wrapper_outfile=Special Starter 2.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Launcher by Playlet
#AutoIt3Wrapper_Res_Fileversion=2.0.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

If _Singleton(@ScriptName, 1) = 0 Then
    MsgBox(0, "Warning", "You can only start this application once!")
    Exit
EndIf

If Not FileExists(@TempDir & "\essential2\") Then DirCreate(@TempDir & "\essential2\")

FileInstall("devilish.ico", @TempDir & "\essential2\devilish.ico", 1)
FileInstall("normal.png", @TempDir & "\essential2\normal.png", 1)
FileInstall("over.png", @TempDir & "\essential2\over.png", 1)
FileInstall("pressed.png", @TempDir & "\essential2\pressed.png", 1)
FileInstall("normal-small.png", @TempDir & "\essential2\normal-small.png", 1)
FileInstall("over-small.png", @TempDir & "\essential2\over-small.png", 1)
FileInstall("pressed-small.png", @TempDir & "\essential2\pressed-small.png", 1)
FileInstall("normal-exit.png", @TempDir & "\essential2\normal-exit.png", 1)
FileInstall("over-exit.png", @TempDir & "\essential2\over-exit.png", 1)
FileInstall("pressed-exit.png", @TempDir & "\essential2\pressed-exit.png", 1)

TraySetIcon(@TempDir & "\essential2\devilish.ico")
Opt("TrayAutoPause", 0)
Global Const $AC_SRC_ALPHA = 1
Global $labelarray[14][6]
Global Const $WS_EX_COMPOSITED = 0x2000000
Global Const $Sensitivity = 300 ;adjust this if you need - can be just at the end of the screen or near gui's left side

; gui position
Global $posx = @DesktopWidth - 163
Global $posy = @DesktopHeight - 520

; internet status area
LoadNetChecking()

;image loading area
_GDIPlus_Startup()
$normal = @TempDir & "\essential2\normal.png"
$over = @TempDir & "\essential2\over.png"
$pressed = @TempDir & "\essential2\pressed.png"
$normalimage = _GDIPlus_ImageLoadFromFile($normal)
$overimage = _GDIPlus_ImageLoadFromFile($over)
$pressedimage = _GDIPlus_ImageLoadFromFile($pressed)
$normal_small = @TempDir & "\essential2\normal-small.png"
$over_small = @TempDir & "\essential2\over-small.png"
$pressed_small = @TempDir & "\essential2\pressed-small.png"
$normalimage_small = _GDIPlus_ImageLoadFromFile($normal_small)
$overimage_small = _GDIPlus_ImageLoadFromFile($over_small)
$pressedimage_small = _GDIPlus_ImageLoadFromFile($pressed_small)
$normal_exit = @TempDir & "\essential2\normal-exit.png"
$over_exit = @TempDir & "\essential2\over-exit.png"
$pressed_exit = @TempDir & "\essential2\pressed-exit.png"
$normalimage_exit = _GDIPlus_ImageLoadFromFile($normal_exit)
$overimage_exit = _GDIPlus_ImageLoadFromFile($over_exit)
$pressedimage_exit = _GDIPlus_ImageLoadFromFile($pressed_exit)

; gui creation area
$iW = 167
$iH = 490
$gui = GUICreate("Launcher-Playlet", $iW, $iH, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle("[CLASS:Progman]"))
GUISetIcon(@TempDir & "\essential2\devilish.ico")
GUISetState()

; skin creation area
$object_skin = _ImageDraw()
$over1 = _ImageDraw("over", 1)
$over2 = _ImageDraw("over", 2)
$over3 = _ImageDraw("over", 3)
$over4 = _ImageDraw("over", 4)
$over5 = _ImageDraw("over", 5)
$over6 = _ImageDraw("over", 6)
$over7 = _ImageDraw("over", 7)
$over8 = _ImageDraw("over", 8)
$over9 = _ImageDraw("over", 9)
$over10 = _ImageDraw("over", 10)
$over11 = _ImageDraw("over", 11)
$pressed1 = _ImageDraw("pressed", 1)
$pressed2 = _ImageDraw("pressed", 2)
$pressed3 = _ImageDraw("pressed", 3)
$pressed4 = _ImageDraw("pressed", 4)
$pressed5 = _ImageDraw("pressed", 5)
$pressed6 = _ImageDraw("pressed", 6)
$pressed7 = _ImageDraw("pressed", 7)
$pressed8 = _ImageDraw("pressed", 8)
$pressed9 = _ImageDraw("pressed", 9)
$pressed10 = _ImageDraw("pressed", 10)
$pressed11 = _ImageDraw("pressed", 11)

; gui holding labels (button text, also for getting hover position)
$controlgui = GUICreate("ControlGUI", $iW, $iH, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_COMPOSITED, $gui)
GUISetFont(14, 400, -1, "Comic Sans MS")
GUISetBkColor(0x123456, $controlgui)

; control creation area
$labelarray[1][5] = GUICtrlCreateLabel("Button 1", 12, 9, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[2][5] = GUICtrlCreateLabel("Button 2", 12, 50, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[3][5] = GUICtrlCreateLabel("Button 3", 12, 91, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[4][5] = GUICtrlCreateLabel("Button 4", 12, 132, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[5][5] = GUICtrlCreateLabel("Button 5", 12, 173, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[6][5] = GUICtrlCreateLabel("Button 6", 12, 214, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[7][5] = GUICtrlCreateLabel("Button 7", 12, 255, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[8][5] = GUICtrlCreateLabel("Button 8", 12, 296, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[9][5] = GUICtrlCreateLabel("Button 9", 12, 337, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[10][5] = GUICtrlCreateLabel("Button 10", 12, 378, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[11][5] = GUICtrlCreateLabel("", 116, 419, 40, 36); exit button
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$labelarray[12][5] = GUICtrlCreateLabel("", 19, 424, 87, 13, 0x01 + 0x0200); status label
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 8)
$labelarray[13][5] = GUICtrlCreateLabel("", 19, 436, 87, 13, 0x01 + 0x0200); usage label
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 8)

_API_SetLayeredWindowAttributes($controlgui, 0x123456, 230)
GUISetState()

; some state variables
For $i = 1 To 11
    $labelarray[$i][2] = 0 ;used to be $over1
    $labelarray[$i][3] = 0 ;used to be $over1a
    $labelarray[$i][4] = 0 ;used to be $press1
Next
Global $pause = 0
Global $lastactive = ""
Global $offline = 1

;setup main skin
SetBitmap($gui, $object_skin, 255)

While 1
    If _IsPressed("24") Then _Pause()
    $mpos = MouseGetPos()
    If $mpos[0] > @DesktopWidth - $Sensitivity Then
        $check = WinGetPos($gui)
        If $check[0] <> $posx Then
            $lastactive = WinGetTitle("[active]")
            GUISetState(@SW_SHOW, $gui)
            For $j = $posx + 165 To $posx Step -5
                WinMove($gui, "", $j, $posy)
                WinMove($controlgui, "", $j, $posy)
            Next
;~      ElseIf $check[0] = $posx Then
        Else
            $pause = 0
            $pos = GUIGetCursorInfo($controlgui)

            While $mpos[0] > @DesktopWidth - $Sensitivity
                $mpos = MouseGetPos()
                If _IsPressed("24") Then _Pause()

                ; button checking part
                $pos = GUIGetCursorInfo($controlgui)
                For $i = 1 To 11
                    If $pos[4] = $labelarray[$i][5] Then
                        If $i > 11 Or $pos[2] = 1 Then ExitLoop
                        While $pos[4] = $labelarray[$i][5]
                            $pos = GUIGetCursorInfo($controlgui)
                            Switch $pos[2]
                                Case 0; not pressed
                                    If $labelarray[$i][2] = 0 Then
                                        $labelarray[$i][2] = 1
                                        SelectOver()
                                    EndIf
                                Case 1; pressed
                                    If $labelarray[$i][4] = 0 Then
                                        $labelarray[$i][4] = 1
                                        SelectPressed()
                                    EndIf
                                    While $pos[2] = 1; holding pressed
                                        $pos = GUIGetCursorInfo($controlgui)
                                        If $pos[4] = $labelarray[$i][5] Then ; on the control
                                            If $labelarray[$i][4] = 0 Then
                                                $labelarray[$i][4] = 1
                                                $labelarray[$i][3] = 0
                                                SelectPressed()
                                            EndIf
;~                                      ElseIf $pos[4] <> $labelarray[$i][5] Then ; not on the control
                                        Else
                                            If $labelarray[$i][3] = 0 Then
                                                $labelarray[$i][3] = 1
                                                $labelarray[$i][4] = 0
                                                SelectOver()
                                            EndIf
                                        EndIf
                                        Sleep(5)
                                    WEnd
                                    $labelarray[$i][2] = 0
                                    $labelarray[$i][4] = 0
                                    Switch $pos[4] ;still on the control after release
                                        Case $pos[4] = $labelarray[11][5]
                                            Beep(1000, 50)
                                            Beep(2000, 50)
                                            Beep(500, 50)
                                            OnAutoItExit()
                                        Case $pos[4] = $labelarray[$i][5]
                                            RunIt($i)
                                    EndSwitch
                            EndSwitch
                            Sleep(5)
                        WEnd
                        SetBitmap($gui, $object_skin, 255)
;~                  ElseIf $pos[4] <> $labelarray[$i][5] Then
                    Else
                        GetNetStatus(); update status fields only when not over the control - reduces usage
                    EndIf
                Next
                Sleep(1)
                For $i = 1 To 11
                    $labelarray[$i][2] = 0 ;used to be $over1
                    $labelarray[$i][3] = 0 ;used to be $over1a
                    $labelarray[$i][4] = 0 ;used to be $press1
                Next
            WEnd
        EndIf
;~  ElseIf $mpos[0] < @DesktopWidth - 100 Then
    Else
        Switch $pause
            Case 0
                SetBitmap($gui, $object_skin, 255)
                $pause = 1
            Case 1
                $check = WinGetPos($gui)
                If $check[0] <> $posx + 165 Then
                    For $b = $posx To $posx + 165 Step 5
                        WinMove($gui, "", $b, $posy)
                        WinMove($controlgui, "", $b, $posy)
                    Next
                    GUISetState(@SW_HIDE, $gui)
                    If $lastactive <> "" Then WinActivate($lastactive)
;~              ElseIf $check[0] = $posx + 165 Then
                Else
                    ;
                EndIf
        EndSwitch
    EndIf
    Sleep(20)
WEnd

Func RunIt($whichone)
    ; replace msgboxes with your code
    Switch $whichone
        Case 1
            MsgBox(0, "", "Button 1")
        Case 2
            MsgBox(0, "", "Button 2")
        Case 3
            MsgBox(0, "", "Button 3")
        Case 4
            MsgBox(0, "", "Button 4")
        Case 5
            MsgBox(0, "", "Button 5")
        Case 6
            MsgBox(0, "", "Button 6")
        Case 7
            MsgBox(0, "", "Button 7")
        Case 8
            MsgBox(0, "", "Button 8")
        Case 9
            MsgBox(0, "", "Button 9")
        Case 10
            MsgBox(0, "", "Button 10")
    EndSwitch
    Beep(1000, 50)
    Beep(2000, 50)
EndFunc ;==>RunIt

Func LoadNetChecking()
    Global Const $MAX_PATH = 260
    Global Const $RAS_MaxDeviceType = 16
    Global Const $RAS_MaxEntryName = 256
    Global Const $RAS_MaxDeviceName = 128
    Global $tRASCONN = DllStructCreate("dword dwSize;hwnd hRasConn;char szEntryName[" & $RAS_MaxEntryName + 1 & "];" & "char szDeviceType[" & $RAS_MaxDeviceType + 1 & "];" _
     & "char szDeviceName[" & $RAS_MaxDeviceName + 1 & "];" & "char szPhonebook[" & $MAX_PATH & "];" & "dword dwSubEntry;byte guidEntry[16];dword dwFlags;byte luid[8]")
    Global $tRAS_STATS = DllStructCreate("dword dwSize;dword dwBytesXmited;dword dwBytesRcved;dword dwFramesXmited;" & _
            "dword dwFramesRcved;dword dwCrcErr;dword dwTimeoutErr;dword dwAlignmentErr;" & "dword dwHardwareOverrunErr;dword dwFramingErr;dword dwBufferOverrunErr;" & _
            "dword dwCompressionRatioIn;dword dwCompressionRatioOut;dword dwBps;dword dwConnectDuration")
    Global $iCntByte = DllStructCreate("dword")
    Global $iCntConn = DllStructCreate("dword")
    DllStructSetData($iCntByte, 1, DllStructGetSize($tRASCONN))
    DllStructSetData($tRASCONN, "dwSize", DllStructGetSize($tRASCONN))
    DllStructSetData($tRAS_STATS, "dwSize", DllStructGetSize($tRAS_STATS))
EndFunc ;==>LoadNetChecking

Func GetNetStatus()
    Global $tRASCONN, $iCntByte, $iCntConn, $tRAS_STATS
    If @IPAddress1 <> "127.0.0.1" Then
        If $offline = 1 Then
            $aRet = DllCall("rasapi32.dll", "int", "RasEnumConnections", "ptr", DllStructGetPtr($tRASCONN), "ptr", DllStructGetPtr($iCntByte), "ptr", DllStructGetPtr($iCntConn))
            If $aRet[0] Then SetError(2, $aRet[0], -1)
            If DllStructGetData($iCntConn, 1) < 1 Then SetError(1, 0, 0) ;Error: not opened connections
            $offline = 0
            GUICtrlSetData($labelarray[12][5], "Online (0')")
            GUICtrlSetData($labelarray[13][5], "Usage: 0.00 mb")
        EndIf
        $aRet = DllCall("rasapi32.dll", "int", "RasGetConnectionStatistics", "hwnd", DllStructGetData($tRASCONN, "hRasConn"), "ptr", DllStructGetPtr($tRAS_STATS))
        If $aRet[0] Then SetError(3, $aRet[0], -1)
        $stat = DllStructGetData($tRAS_STATS, "dwBytesXmited")
        $stat2 = DllStructGetData($tRAS_STATS, "dwBytesRcved")
        $stat3 = DllStructGetData($tRAS_STATS, "dwConnectDuration")
        $sentmb = Round(($stat / 1048576), 2)
        $receivedmb = Round(($stat2 / 1048576), 2)
        $totalsummb = Round((($stat + $stat2) / 1048576), 2)
        $time = Round((($stat3 / 1000) / 60), 2)
        $split = StringSplit($time, ".")
        $min = $split[1]
        $read = GUICtrlRead($labelarray[12][5])
        $read2 = GUICtrlRead($labelarray[13][5])
        $splitter = StringSplit($read, "Online (", 1)
        $splitter2 = StringSplit($splitter[2], "')", 1)
        $accmin = $splitter2[1]
        $splitter3 = StringSplit($read2, "Usage: ", 1)
        $splitter4 = StringSplit($splitter3[2], " mb", 1)
        $accmb = $splitter4[1]
        If $min <> $accmin Or $totalsummb <> $accmb Then
            If ($totalsummb - $accmb) >= 0.125 Then ;update every ~125 kb
                GUICtrlSetData($labelarray[12][5], "Online (" & $min & "')")
                GUICtrlSetData($labelarray[13][5], "Usage: " & $totalsummb & " mb")
            ElseIf $min <> $accmin Then
                GUICtrlSetData($labelarray[12][5], "Online (" & $min & "')")
            EndIf
        EndIf
;~  ElseIf @IPAddress1 = "127.0.0.1" Then
    Else
        $readoff = GUICtrlRead($labelarray[12][5])
        $readoff2 = GUICtrlRead($labelarray[13][5])
        If $readoff <> "Offline" Or $readoff = "" Then
            GUICtrlSetData($labelarray[12][5], "Offline")
            GUICtrlSetData($labelarray[13][5], "Usage: -")
            $offline = 1
        EndIf
    EndIf
EndFunc ;==>GetNetStatus

Func SelectPressed()
    Switch $i
        Case 1
            SetBitmap($gui, $pressed1, 255)
        Case 2
            SetBitmap($gui, $pressed2, 255)
        Case 3
            SetBitmap($gui, $pressed3, 255)
        Case 4
            SetBitmap($gui, $pressed4, 255)
        Case 5
            SetBitmap($gui, $pressed5, 255)
        Case 6
            SetBitmap($gui, $pressed6, 255)
        Case 7
            SetBitmap($gui, $pressed7, 255)
        Case 8
            SetBitmap($gui, $pressed8, 255)
        Case 9
            SetBitmap($gui, $pressed9, 255)
        Case 10
            SetBitmap($gui, $pressed10, 255)
        Case 11
            SetBitmap($gui, $pressed11, 255)
    EndSwitch
EndFunc ;==>SelectPressed

Func SelectOver()
    Switch $i
        Case 1
            SetBitmap($gui, $over1, 255)
        Case 2
            SetBitmap($gui, $over2, 255)
        Case 3
            SetBitmap($gui, $over3, 255)
        Case 4
            SetBitmap($gui, $over4, 255)
        Case 5
            SetBitmap($gui, $over5, 255)
        Case 6
            SetBitmap($gui, $over6, 255)
        Case 7
            SetBitmap($gui, $over7, 255)
        Case 8
            SetBitmap($gui, $over8, 255)
        Case 9
            SetBitmap($gui, $over9, 255)
        Case 10
            SetBitmap($gui, $over10, 255)
        Case 11
            SetBitmap($gui, $over11, 255)
    EndSwitch
EndFunc ;==>SelectOver

Func OnAutoItExit()
    If IsDeclared("WS_EX_COMPOSITED") Then ;if script wasn't closed by _Singleton
        _GDIPlus_ImageDispose($normalimage)
        _GDIPlus_ImageDispose($normalimage_small)
        _GDIPlus_ImageDispose($normalimage_exit)
        _GDIPlus_ImageDispose($overimage)
        _GDIPlus_ImageDispose($overimage_small)
        _GDIPlus_ImageDispose($overimage_exit)
        _GDIPlus_ImageDispose($pressedimage)
        _GDIPlus_ImageDispose($pressedimage_small)
        _GDIPlus_ImageDispose($pressedimage_exit)
        _GDIPlus_Shutdown()
        DllClose("rasapi32.dll")
        WinActivate($lastactive)
        DirRemove(@TempDir & "\essential2", 1)
    EndIf
    Exit
EndFunc ;==>OnAutoItExit

Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap

Func _Pause()
    $dll = DllOpen("user32.dll")
    Sleep(1000)
    Do
        Sleep(60)
    Until _IsPressed("24", $dll)
    DllClose($dll)
    Sleep(1000)
EndFunc ;==>_Pause

Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)
    Local Const $AC_SRC_ALPHA = 1
    Local Const $ULW_ALPHA = 2
    Local Const $LWA_ALPHA = 0x2
    Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
        $i_transcolor = Hex(String($i_transcolor), 6)
        $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    If @error Then
        Return SetError(@error, 0, 0)
    ElseIf $Ret[0] = 0 Then
        Return SetError(4, 0, 0)
    Else
        Return 1
    EndIf
EndFunc ;==>_API_SetLayeredWindowAttributes

Func _ImageDraw($state = "normal", $case = ""); draw a picture on to png
    Local $hGraphic1, $hBitmap, $hGraphic2
    $image1 = $normalimage
    $image2 = $normalimage
    $image3 = $normalimage
    $image4 = $normalimage
    $image5 = $normalimage
    $image6 = $normalimage
    $image7 = $normalimage
    $image8 = $normalimage
    $image9 = $normalimage
    $image10 = $normalimage
    $image11 = $normalimage_small
    $image12 = $normalimage_exit
    ;Create a new bitmap, this way the original opened png is left unchanged
    $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphic1)
    $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    ; Draw the original opened png into my newly created bitmap
    Switch $state
        Case "normal"
        Case "pressed"
            Switch $case
                Case 1
                    $image1 = $pressedimage
                Case 2
                    $image2 = $pressedimage
                Case 3
                    $image3 = $pressedimage
                Case 4
                    $image4 = $pressedimage
                Case 5
                    $image5 = $pressedimage
                Case 6
                    $image6 = $pressedimage
                Case 7
                    $image7 = $pressedimage
                Case 8
                    $image8 = $pressedimage
                Case 9
                    $image9 = $pressedimage
                Case 10
                    $image10 = $pressedimage
                Case 11
                    $image12 = $pressedimage_exit
            EndSwitch
        Case "over"
            Switch $case
                Case 1
                    $image1 = $overimage
                Case 2
                    $image2 = $overimage
                Case 3
                    $image3 = $overimage
                Case 4
                    $image4 = $overimage
                Case 5
                    $image5 = $overimage
                Case 6
                    $image6 = $overimage
                Case 7
                    $image7 = $overimage
                Case 8
                    $image8 = $overimage
                Case 9
                    $image9 = $overimage
                Case 10
                    $image10 = $overimage
                Case 11
                    $image12 = $overimage_exit
            EndSwitch
    EndSwitch
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image1, 0, 0, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image2, 0, 41, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image3, 0, 82, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image4, 0, 123, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image5, 0, 164, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image6, 0, 205, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image7, 0, 246, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image8, 0, 287, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image9, 0, 328, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image10, 0, 369, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image11, 3, 411, 118, 53)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image12, 107, 412, 57, 52)
    ;Cleanup the no longer needed resources
    _GDIPlus_GraphicsDispose($hGraphic2)
    _GDIPlus_GraphicsDispose($hGraphic1)
    ;Return the new bitmap
    Return $hBitmap
EndFunc ;==>_ImageDraw

Your code is getting smaller and smaller. I really love the effects. I think the visual specs are just about done. Great job so far.

Edited by dantay9
Link to comment
Share on other sites

3 other ideas

1) You may not like this idea because it can make the text difficult to read depending on what is under it. Below, I changed the button 1 hover so the text uses transparent font (hole in gui in shape of text). I started down the path of doing it for all buttons but realized that it was going to be a bit of work and I would probably end up changing all the $over1 $pressed1 to array to make it easier to implement. That seemed to be more effort than I wanted to do on a Sunday morning, especially not knowing if it would help.

2) Icons, I'm debating whether icons extracted from the exe to be launched would make it look nicer or not?

3)Reference an ini file for label name and programs to launch. Makes it easier to tweak a compiled script. Also could make a gui interface to add files but that seems like a lot of work when you can do the same with an ini.

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=devilish.ico
#AutoIt3Wrapper_outfile=Special Starter 2.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Description=Launcher by Playlet
#AutoIt3Wrapper_Res_Fileversion=2.0.0.0
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#include <GuiConstantsEx.au3>
#include <GDIPlus.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>

If _Singleton(@ScriptName, 1) = 0 Then
    MsgBox(0, "Warning", "You can only start this application once!")
    Exit
EndIf

If Not FileExists(@TempDir & "\essential2\") Then DirCreate(@TempDir & "\essential2\")

FileInstall("devilish.ico", @TempDir & "\essential2\devilish.ico", 1)
FileInstall("normal.png", @TempDir & "\essential2\normal.png", 1)
FileInstall("over.png", @TempDir & "\essential2\over.png", 1)
FileInstall("pressed.png", @TempDir & "\essential2\pressed.png", 1)
FileInstall("normal-small.png", @TempDir & "\essential2\normal-small.png", 1)
FileInstall("over-small.png", @TempDir & "\essential2\over-small.png", 1)
FileInstall("pressed-small.png", @TempDir & "\essential2\pressed-small.png", 1)
FileInstall("normal-exit.png", @TempDir & "\essential2\normal-exit.png", 1)
FileInstall("over-exit.png", @TempDir & "\essential2\over-exit.png", 1)
FileInstall("pressed-exit.png", @TempDir & "\essential2\pressed-exit.png", 1)

TraySetIcon(@TempDir & "\essential2\devilish.ico")
Opt("TrayAutoPause", 0)
Global Const $AC_SRC_ALPHA = 1
Global $labelarray[14][6]
Global Const $WS_EX_COMPOSITED = 0x2000000
Global Const $Sensitivity = 300 ;adjust this if you need - can be just at the end of the screen or near gui's left side - show it
Global Const $Sensitivity2 = 300 ;adjust this if you need - can be near gui's left side or more to the left - hide it

; gui position
Global $posx = @DesktopWidth - 163
Global $posy = @DesktopHeight - 520

; internet status area
LoadNetChecking()

;image loading area
_GDIPlus_Startup()
$normal = @TempDir & "\essential2\normal.png"
$over = @TempDir & "\essential2\over.png"
$pressed = @TempDir & "\essential2\pressed.png"
$normalimage = _GDIPlus_ImageLoadFromFile($normal)
$overimage = _GDIPlus_ImageLoadFromFile($over)
$pressedimage = _GDIPlus_ImageLoadFromFile($pressed)
$normal_small = @TempDir & "\essential2\normal-small.png"
$over_small = @TempDir & "\essential2\over-small.png"
$pressed_small = @TempDir & "\essential2\pressed-small.png"
$normalimage_small = _GDIPlus_ImageLoadFromFile($normal_small)
$overimage_small = _GDIPlus_ImageLoadFromFile($over_small)
$pressedimage_small = _GDIPlus_ImageLoadFromFile($pressed_small)
$normal_exit = @TempDir & "\essential2\normal-exit.png"
$over_exit = @TempDir & "\essential2\over-exit.png"
$pressed_exit = @TempDir & "\essential2\pressed-exit.png"
$normalimage_exit = _GDIPlus_ImageLoadFromFile($normal_exit)
$overimage_exit = _GDIPlus_ImageLoadFromFile($over_exit)
$pressedimage_exit = _GDIPlus_ImageLoadFromFile($pressed_exit)

; gui creation area
$iW = 167
$iH = 490
$gui = GUICreate("Launcher-Playlet", $iW, $iH, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED, WinGetHandle("[CLASS:Progman]"))
GUISetIcon(@TempDir & "\essential2\devilish.ico")
GUISetState()

; skin creation area
$object_skin = _ImageDraw()
$over1 = _ImageDraw("over", 1)
$over1 = _ImageDrawText($over1, "Button 1", 22, 15, 0x0123123, 12, 0, "Arial Black")
$over1 = ImageColorToTransparent($over1,  0, 0, $iW, $iH, 0x0123123)
$over2 = _ImageDraw("over", 2)
$over3 = _ImageDraw("over", 3)
$over4 = _ImageDraw("over", 4)
$over5 = _ImageDraw("over", 5)
$over6 = _ImageDraw("over", 6)
$over7 = _ImageDraw("over", 7)
$over8 = _ImageDraw("over", 8)
$over9 = _ImageDraw("over", 9)
$over10 = _ImageDraw("over", 10)
$over11 = _ImageDraw("over", 11)
$pressed1 = _ImageDraw("pressed", 1)
$pressed2 = _ImageDraw("pressed", 2)
$pressed3 = _ImageDraw("pressed", 3)
$pressed4 = _ImageDraw("pressed", 4)
$pressed5 = _ImageDraw("pressed", 5)
$pressed6 = _ImageDraw("pressed", 6)
$pressed7 = _ImageDraw("pressed", 7)
$pressed8 = _ImageDraw("pressed", 8)
$pressed9 = _ImageDraw("pressed", 9)
$pressed10 = _ImageDraw("pressed", 10)
$pressed11 = _ImageDraw("pressed", 11)

; gui holding labels (button text, also for getting hover position)
$controlgui = GUICreate("ControlGUI", $iW, $iH, $posx, $posy, $WS_POPUP, $WS_EX_LAYERED + $WS_EX_COMPOSITED, $gui)
GUISetFont(14, 400, -1, "Comic Sans MS")
GUISetBkColor(0x123456, $controlgui)

; control creation area
$labelarray[1][5] = GUICtrlCreateLabel("", 12, 9, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[2][5] = GUICtrlCreateLabel("Button 2", 12, 50, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[3][5] = GUICtrlCreateLabel("Button 3", 12, 91, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[4][5] = GUICtrlCreateLabel("Button 4", 12, 132, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[5][5] = GUICtrlCreateLabel("Button 5", 12, 173, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[6][5] = GUICtrlCreateLabel("Button 6", 12, 214, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[7][5] = GUICtrlCreateLabel("Button 7", 12, 255, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[8][5] = GUICtrlCreateLabel("Button 8", 12, 296, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[9][5] = GUICtrlCreateLabel("Button 9", 12, 337, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[10][5] = GUICtrlCreateLabel("Button 10", 12, 378, 144, 36, 0x01 + 0x0200)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
$labelarray[11][5] = GUICtrlCreateLabel("", 116, 419, 40, 36); exit button
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
$labelarray[12][5] = GUICtrlCreateLabel("", 19, 424, 87, 13, 0x01 + 0x0200); status label
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 8)
$labelarray[13][5] = GUICtrlCreateLabel("", 19, 436, 87, 13, 0x01 + 0x0200); usage label
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0xFFFFFF)
GUICtrlSetFont(-1, 8)

_API_SetLayeredWindowAttributes($controlgui, 0x123456, 230)
GUISetState()

; some state variables
For $i = 1 To 11
    $labelarray[$i][2] = 0 ;used to be $over1
    $labelarray[$i][3] = 0 ;used to be $over1a
    $labelarray[$i][4] = 0 ;used to be $press1
Next
Global $pause = 0
Global $lastactive = ""
Global $offline = 1

;setup main skin
SetBitmap($gui, $object_skin, 255)

While 1
    If _IsPressed("24") Then _Pause()
    $mpos = MouseGetPos()
    If $mpos[0] > @DesktopWidth - $Sensitivity Then
    $check = WinGetPos($gui)
    If $check[0] <> $posx Then
    $lastactive = WinGetTitle("[active]")
    GUISetState(@SW_SHOW, $gui)
    For $j = $posx + 165 To $posx Step -5
    WinMove($gui, "", $j, $posy)
    WinMove($controlgui, "", $j, $posy)
    Next
;~  ElseIf $check[0] = $posx Then
    Else
    $pause = 0
    $pos = GUIGetCursorInfo($controlgui)

    While $mpos[0] > @DesktopWidth - $Sensitivity2
    $mpos = MouseGetPos()
    If _IsPressed("24") Then _Pause()

    ; button checking part
    $pos = GUIGetCursorInfo($controlgui)
    For $i = 1 To 11
    If $pos[4] = $labelarray[$i][5] Then
    If $i > 11 Or $pos[2] = 1 Then ExitLoop
    While $pos[4] = $labelarray[$i][5]
    $pos = GUIGetCursorInfo($controlgui)
    Switch $pos[2]
    Case 0; not pressed
    If $labelarray[$i][2] = 0 Then
    $labelarray[$i][2] = 1
    SelectOver()
    EndIf
    Case 1; pressed
    If $labelarray[$i][4] = 0 Then
    $labelarray[$i][4] = 1
    SelectPressed()
    EndIf
    While $pos[2] = 1; holding pressed
    $pos = GUIGetCursorInfo($controlgui)
    If $pos[4] = $labelarray[$i][5] Then ; on the control
    If $labelarray[$i][4] = 0 Then
    $labelarray[$i][4] = 1
    $labelarray[$i][3] = 0
    SelectPressed()
    EndIf
;~  ElseIf $pos[4] <> $labelarray[$i][5] Then ; not on the control
    Else
    If $labelarray[$i][3] = 0 Then
    $labelarray[$i][3] = 1
    $labelarray[$i][4] = 0
    SelectOver()
    EndIf
    EndIf
    Sleep(5)
    WEnd
    $labelarray[$i][2] = 0
    $labelarray[$i][4] = 0
    Switch $pos[4] ;still on the control after release
    Case $pos[4] = $labelarray[11][5]
    Beep(1000, 50)
    Beep(2000, 50)
    Beep(500, 50)
    OnAutoItExit()
    Case $pos[4] = $labelarray[$i][5]
    RunIt($i)
    EndSwitch
    EndSwitch
    Sleep(5)
    WEnd
    SetBitmap($gui, $object_skin, 255)
;~  ElseIf $pos[4] <> $labelarray[$i][5] Then
    Else
    GetNetStatus(); update status fields only when not over the control - reduces usage
    EndIf
    Next
    Sleep(1)
    For $i = 1 To 11
    $labelarray[$i][2] = 0 ;used to be $over1
    $labelarray[$i][3] = 0 ;used to be $over1a
    $labelarray[$i][4] = 0 ;used to be $press1
    Next
    WEnd
    EndIf
;~ ElseIf $mpos[0] < @DesktopWidth - 100 Then
    Else
    Switch $pause
    Case 0
    SetBitmap($gui, $object_skin, 255)
    $pause = 1
    Case 1
    $check = WinGetPos($gui)
    If $check[0] <> $posx + 165 Then
    For $b = $posx To $posx + 165 Step 5
    WinMove($gui, "", $b, $posy)
    WinMove($controlgui, "", $b, $posy)
    Next
    GUISetState(@SW_HIDE, $gui)
    If $lastactive <> "" Then WinActivate($lastactive)
;~  ElseIf $check[0] = $posx + 165 Then
    Else
    ;
    EndIf
    EndSwitch
    EndIf
    Sleep(20)
WEnd

Func RunIt($whichone)
    ; replace msgboxes with your code
    Switch $whichone
    Case 1
    MsgBox(0, "", "Button 1")
    Case 2
    MsgBox(0, "", "Button 2")
    Case 3
    MsgBox(0, "", "Button 3")
    Case 4
    MsgBox(0, "", "Button 4")
    Case 5
    MsgBox(0, "", "Button 5")
    Case 6
    MsgBox(0, "", "Button 6")
    Case 7
    MsgBox(0, "", "Button 7")
    Case 8
    MsgBox(0, "", "Button 8")
    Case 9
    MsgBox(0, "", "Button 9")
    Case 10
    MsgBox(0, "", "Button 10")
    EndSwitch
    Beep(1000, 50)
    Beep(2000, 50)
EndFunc ;==>RunIt

Func LoadNetChecking()
    Global Const $MAX_PATH = 260
    Global Const $RAS_MaxDeviceType = 16
    Global Const $RAS_MaxEntryName = 256
    Global Const $RAS_MaxDeviceName = 128
    Global $tRASCONN = DllStructCreate("dword dwSize;hwnd hRasConn;char szEntryName[" & $RAS_MaxEntryName + 1 & "];" & "char szDeviceType[" & $RAS_MaxDeviceType + 1 & "];" _
    & "char szDeviceName[" & $RAS_MaxDeviceName + 1 & "];" & "char szPhonebook[" & $MAX_PATH & "];" & "dword dwSubEntry;byte guidEntry[16];dword dwFlags;byte luid[8]")
    Global $tRAS_STATS = DllStructCreate("dword dwSize;dword dwBytesXmited;dword dwBytesRcved;dword dwFramesXmited;" & _
    "dword dwFramesRcved;dword dwCrcErr;dword dwTimeoutErr;dword dwAlignmentErr;" & "dword dwHardwareOverrunErr;dword dwFramingErr;dword dwBufferOverrunErr;" & _
    "dword dwCompressionRatioIn;dword dwCompressionRatioOut;dword dwBps;dword dwConnectDuration")
    Global $iCntByte = DllStructCreate("dword")
    Global $iCntConn = DllStructCreate("dword")
    DllStructSetData($iCntByte, 1, DllStructGetSize($tRASCONN))
    DllStructSetData($tRASCONN, "dwSize", DllStructGetSize($tRASCONN))
    DllStructSetData($tRAS_STATS, "dwSize", DllStructGetSize($tRAS_STATS))
EndFunc ;==>LoadNetChecking

Func GetNetStatus()
    Global $tRASCONN, $iCntByte, $iCntConn, $tRAS_STATS
    If @IPAddress1 <> "127.0.0.1" Then
    If $offline = 1 Then
    $aRet = DllCall("rasapi32.dll", "int", "RasEnumConnections", "ptr", DllStructGetPtr($tRASCONN), "ptr", DllStructGetPtr($iCntByte), "ptr", DllStructGetPtr($iCntConn))
    If $aRet[0] Then SetError(2, $aRet[0], -1)
    If DllStructGetData($iCntConn, 1) < 1 Then SetError(1, 0, 0) ;Error: not opened connections
    $offline = 0
    GUICtrlSetData($labelarray[12][5], "Online (0')")
    GUICtrlSetData($labelarray[13][5], "Usage: 0.00 mb")
    EndIf
    $aRet = DllCall("rasapi32.dll", "int", "RasGetConnectionStatistics", "hwnd", DllStructGetData($tRASCONN, "hRasConn"), "ptr", DllStructGetPtr($tRAS_STATS))
    If $aRet[0] Then SetError(3, $aRet[0], -1)
    $stat = DllStructGetData($tRAS_STATS, "dwBytesXmited")
    $stat2 = DllStructGetData($tRAS_STATS, "dwBytesRcved")
    $stat3 = DllStructGetData($tRAS_STATS, "dwConnectDuration")
    $sentmb = Round(($stat / 1048576), 2)
    $receivedmb = Round(($stat2 / 1048576), 2)
    $totalsummb = Round((($stat + $stat2) / 1048576), 2)
    $time = Round((($stat3 / 1000) / 60), 2)
    $split = StringSplit($time, ".")
    $min = $split[1]
    $read = GUICtrlRead($labelarray[12][5])
    $read2 = GUICtrlRead($labelarray[13][5])
    $splitter = StringSplit($read, "Online (", 1)
    $splitter2 = StringSplit($splitter[2], "')", 1)
    $accmin = $splitter2[1]
    $splitter3 = StringSplit($read2, "Usage: ", 1)
    $splitter4 = StringSplit($splitter3[2], " mb", 1)
    $accmb = $splitter4[1]
    If $min <> $accmin Or $totalsummb <> $accmb Then
    If ($totalsummb - $accmb) >= 0.125 Then ;update every ~125 kb
    GUICtrlSetData($labelarray[12][5], "Online (" & $min & "')")
    GUICtrlSetData($labelarray[13][5], "Usage: " & $totalsummb & " mb")
    ElseIf $min <> $accmin Then
    GUICtrlSetData($labelarray[12][5], "Online (" & $min & "')")
    EndIf
    EndIf
;~ ElseIf @IPAddress1 = "127.0.0.1" Then
    Else
    $readoff = GUICtrlRead($labelarray[12][5])
    $readoff2 = GUICtrlRead($labelarray[13][5])
    If $readoff <> "Offline" Or $readoff = "" Then
    GUICtrlSetData($labelarray[12][5], "Offline")
    GUICtrlSetData($labelarray[13][5], "Usage: -")
    $offline = 1
    EndIf
    EndIf
EndFunc ;==>GetNetStatus

Func SelectPressed()
    Switch $i
    Case 1
    SetBitmap($gui, $pressed1, 255)
    Case 2
    SetBitmap($gui, $pressed2, 255)
    Case 3
    SetBitmap($gui, $pressed3, 255)
    Case 4
    SetBitmap($gui, $pressed4, 255)
    Case 5
    SetBitmap($gui, $pressed5, 255)
    Case 6
    SetBitmap($gui, $pressed6, 255)
    Case 7
    SetBitmap($gui, $pressed7, 255)
    Case 8
    SetBitmap($gui, $pressed8, 255)
    Case 9
    SetBitmap($gui, $pressed9, 255)
    Case 10
    SetBitmap($gui, $pressed10, 255)
    Case 11
    SetBitmap($gui, $pressed11, 255)
    EndSwitch
EndFunc ;==>SelectPressed

Func SelectOver()
    Switch $i
    Case 1
    SetBitmap($gui, $over1, 255)
    Case 2
    SetBitmap($gui, $over2, 255)
    Case 3
    SetBitmap($gui, $over3, 255)
    Case 4
    SetBitmap($gui, $over4, 255)
    Case 5
    SetBitmap($gui, $over5, 255)
    Case 6
    SetBitmap($gui, $over6, 255)
    Case 7
    SetBitmap($gui, $over7, 255)
    Case 8
    SetBitmap($gui, $over8, 255)
    Case 9
    SetBitmap($gui, $over9, 255)
    Case 10
    SetBitmap($gui, $over10, 255)
    Case 11
    SetBitmap($gui, $over11, 255)
    EndSwitch
EndFunc ;==>SelectOver

Func OnAutoItExit()
    If IsDeclared("WS_EX_COMPOSITED") Then ;if script wasn't closed by _Singleton
    _GDIPlus_ImageDispose($normalimage)
    _GDIPlus_ImageDispose($normalimage_small)
    _GDIPlus_ImageDispose($normalimage_exit)
    _GDIPlus_ImageDispose($overimage)
    _GDIPlus_ImageDispose($overimage_small)
    _GDIPlus_ImageDispose($overimage_exit)
    _GDIPlus_ImageDispose($pressedimage)
    _GDIPlus_ImageDispose($pressedimage_small)
    _GDIPlus_ImageDispose($pressedimage_exit)
    _GDIPlus_Shutdown()
    DllClose("rasapi32.dll")
    WinActivate($lastactive)
    DirRemove(@TempDir & "\essential2", 1)
    EndIf
    Exit
EndFunc ;==>OnAutoItExit

Func SetBitmap($hGUI, $hImage, $iOpacity)
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate($tagSIZE)
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", _GDIPlus_ImageGetWidth($hImage))
    DllStructSetData($tSize, "Y", _GDIPlus_ImageGetHeight($hImage))
    $tSource = DllStructCreate($tagPOINT)
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate($tagBLENDFUNCTION)
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", $iOpacity)
    DllStructSetData($tBlend, "Format", $AC_SRC_ALPHA)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
EndFunc ;==>SetBitmap

Func _Pause()
    $dll = DllOpen("user32.dll")
    Sleep(1000)
    Do
    Sleep(60)
    Until _IsPressed("24", $dll)
    DllClose($dll)
    Sleep(1000)
EndFunc ;==>_Pause

Func _API_SetLayeredWindowAttributes($hwnd, $i_transcolor, $Transparency = 255, $isColorRef = False)
    Local Const $AC_SRC_ALPHA = 1
    Local Const $ULW_ALPHA = 2
    Local Const $LWA_ALPHA = 0x2
    Local Const $LWA_COLORKEY = 0x1
    If Not $isColorRef Then
    $i_transcolor = Hex(String($i_transcolor), 6)
    $i_transcolor = Execute('0x00' & StringMid($i_transcolor, 5, 2) & StringMid($i_transcolor, 3, 2) & StringMid($i_transcolor, 1, 2))
    EndIf
    Local $Ret = DllCall("user32.dll", "int", "SetLayeredWindowAttributes", "hwnd", $hwnd, "long", $i_transcolor, "byte", $Transparency, "long", $LWA_COLORKEY + $LWA_ALPHA)
    If @error Then
    Return SetError(@error, 0, 0)
    ElseIf $Ret[0] = 0 Then
    Return SetError(4, 0, 0)
    Else
    Return 1
    EndIf
EndFunc ;==>_API_SetLayeredWindowAttributes

Func _ImageDraw($state = "normal", $case = ""); draw a picture on to png
    Local $hGraphic1, $hBitmap, $hGraphic2
    $image1 = $normalimage
    $image2 = $normalimage
    $image3 = $normalimage
    $image4 = $normalimage
    $image5 = $normalimage
    $image6 = $normalimage
    $image7 = $normalimage
    $image8 = $normalimage
    $image9 = $normalimage
    $image10 = $normalimage
    $image11 = $normalimage_small
    $image12 = $normalimage_exit
    ;Create a new bitmap, this way the original opened png is left unchanged
    $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphic1)
    $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    ; Draw the original opened png into my newly created bitmap
    Switch $state
    Case "normal"
    Case "pressed"
    Switch $case
    Case 1
    $image1 = $pressedimage
    Case 2
    $image2 = $pressedimage
    Case 3
    $image3 = $pressedimage
    Case 4
    $image4 = $pressedimage
    Case 5
    $image5 = $pressedimage
    Case 6
    $image6 = $pressedimage
    Case 7
    $image7 = $pressedimage
    Case 8
    $image8 = $pressedimage
    Case 9
    $image9 = $pressedimage
    Case 10
    $image10 = $pressedimage
    Case 11
    $image12 = $pressedimage_exit
    EndSwitch
    Case "over"
    Switch $case
    Case 1
    $image1 = $overimage
    Case 2
    $image2 = $overimage
    Case 3
    $image3 = $overimage
    Case 4
    $image4 = $overimage
    Case 5
    $image5 = $overimage
    Case 6
    $image6 = $overimage
    Case 7
    $image7 = $overimage
    Case 8
    $image8 = $overimage
    Case 9
    $image9 = $overimage
    Case 10
    $image10 = $overimage
    Case 11
    $image12 = $overimage_exit
    EndSwitch
    EndSwitch
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image1, 0, 0, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image2, 0, 41, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image3, 0, 82, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image4, 0, 123, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image5, 0, 164, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image6, 0, 205, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image7, 0, 246, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image8, 0, 287, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image9, 0, 328, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image10, 0, 369, 167, 57)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image11, 3, 411, 118, 53)
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $image12, 107, 412, 57, 52)
    ;Cleanup the no longer needed resources
    _GDIPlus_GraphicsDispose($hGraphic2)
    _GDIPlus_GraphicsDispose($hGraphic1)
    ;Return the new bitmap
    Return $hBitmap
EndFunc ;==>_ImageDraw

Func ImageColorToTransparent($hImage2, $iStartPosX = 0, $iStartPosY = 0, $GuiSizeX = Default, $GuiSizeY = Default, $iColor = Default)
    Local $hBitmap1, $Reslt, $width, $height, $stride, $format, $Scan0, $v_Buffer, $v_Value, $iIW, $iIH
    $iIW = _GDIPlus_ImageGetWidth($hImage2)
    $iIH = _GDIPlus_ImageGetHeight($hImage2)
    If $GuiSizeX = Default Or $GuiSizeX > $iIW - $iStartPosX Then $GuiSizeX = $iIW - $iStartPosX
    If $GuiSizeY = Default Or $GuiSizeY > $iIH - $iStartPosY Then $GuiSizeY = $iIH - $iStartPosY
    $hBitmap1 = _GDIPlus_BitmapCloneArea($hImage2, $iStartPosX, $iStartPosY, $GuiSizeX, $GuiSizeY, $GDIP_PXF32ARGB)
    If $iColor = Default Then $iColor = GDIPlus_BitmapGetPixel($hBitmap1, 1, 1); Transparent color
    $Reslt = _GDIPlus_BitmapLockBits($hBitmap1, 0, 0, $GuiSizeX, $GuiSizeY, BitOR($GDIP_ILMREAD, $GDIP_ILMWRITE), $GDIP_PXF32ARGB)
;Get the returned values of _GDIPlus_BitmapLockBits ()
    $width = DllStructGetData($Reslt, "width")
    $height = DllStructGetData($Reslt, "height")
    $stride = DllStructGetData($Reslt, "stride")
    $format = DllStructGetData($Reslt, "format")
    $Scan0 = DllStructGetData($Reslt, "Scan0")
    For $i = 0 To $GuiSizeX - 1
        For $j = 0 To $GuiSizeY - 1
            $v_Buffer = DllStructCreate("dword", $Scan0 + ($j * $stride) + ($i * 4))
            $v_Value = DllStructGetData($v_Buffer, 1)
            If Hex($v_Value, 6) = Hex($iColor, 6) Then
                DllStructSetData($v_Buffer, 1, Hex($iColor, 6)); Sets Transparency here. Alpha Channel = 00, not written to.
            EndIf
        Next
    Next
    _GDIPlus_BitmapUnlockBits($hBitmap1, $Reslt)
    Return $hBitmap1
EndFunc  ;==>ImageColorToTransparent

;The GetPixel method gets the color of a specified pixel in this bitmap.
Func GDIPlus_BitmapGetPixel($hBitmap, $iX, $iY)
    Local $tArgb, $pArgb, $aRet
    $tArgb = DllStructCreate("dword Argb")
    $pArgb = DllStructGetPtr($tArgb)
    $aRet = DllCall($ghGDIPDll, "int", "GdipBitmapGetPixel", "hwnd", $hBitmap, "int", $iX, "int", $iY, "ptr", $pArgb)
    Return "0x" & Hex(DllStructGetData($tArgb, "Argb"))
EndFunc  ;==>GDIPlus_BitmapGetPixel

Func _ImageDrawText($hImage, $sText, $iX = 0, $iY = 0, $iRGB = 0x000000, $iSize = 9, $iStyle = 0, $sFont = "Arial")
    ;draw text on to png
    Local $hGraphic1, $hBitmap, $hGraphic2, $hBrush, $hFormat, $hFamily, $hFont, $tLayout, $aInfo

    ;Create a new bitmap, this way the original opened png is left unchanged
    $hGraphic1 = _GDIPlus_GraphicsCreateFromHWND(_WinAPI_GetDesktopWindow())
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($iW, $iH, $hGraphic1)
    $hGraphic2 = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    ; Draw the original opened png into my newly created bitmap
    _GDIPlus_GraphicsDrawImageRect($hGraphic2, $hImage, 0, 0, $iW, $iH)

    ;Create the font
    $hBrush = _GDIPlus_BrushCreateSolid ("0xFF" & Hex($iRGB, 6))
    $hFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate ($sFont)
    $hFont = _GDIPlus_FontCreate ($hFamily, $iSize, $iStyle)
    $tLayout = _GDIPlus_RectFCreate ($iX, $iY, 0, 0)
    $aInfo = _GDIPlus_GraphicsMeasureString ($hGraphic2, $sText, $hFont, $tLayout, $hFormat)

    ;Draw the font onto the new bitmap
    _GDIPlus_GraphicsDrawStringEx ($hGraphic2, $sText, $hFont, $aInfo[0], $hFormat, $hBrush)

    ;Cleanup the no longer needed resources
    _GDIPlus_FontDispose ($hFont)
    _GDIPlus_FontFamilyDispose ($hFamily)
    _GDIPlus_StringFormatDispose ($hFormat)
    _GDIPlus_BrushDispose ($hBrush)
    _GDIPlus_GraphicsDispose ($hGraphic2)
    _GDIPlus_GraphicsDispose ($hGraphic1)

    ;Return the new bitmap
    Return $hBitmap
EndFunc
Link to comment
Share on other sites

Switch is the fastest. Select Case is faster than if elseif. I think Select Case and if else are about the same. A long if elseif statement is the slowest.

For loops are the fastest loops. Do Until loops come in second and While loops come in last.

You can use TimerInit and TimerDiff to test the speed of a script. Just make sure you use repetition to get a solid result.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...