fun monitor bitcoin gain ( or loss )
following from post : https://autohotkey.com/boards/viewtopic.php?f=5&t=41414
update 16-12-2017 : There was as an embarrassing mistake it gave a "gain" as "loss" and "loss" as "gain"
Bitcoins is really insane ,if i sell my 1000 bitcoins ( bought this moring ) i earned 550 000 dollars today
Code: Select all
settitlematchmode 2
SetWorkingDir, %A_ScriptDir%
SetBatchLines, -1
status:=0
If !pToken := Gdip_Startup()
{
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
pBitmap:=Create_80_png()
Gui, 1: -Caption +E0x80000 +LastFound +OwnDialogs +Owner +hwndhwnd +alwaysontop
Gui, 1: Show, NA
font=tahoma
Gdip_GetImageDimensions(pBitmap, w,h)
hbm := CreateDIBSection(w,h)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
pGraphics := Gdip_GraphicsFromHDC(hdc)
Gdip_DrawImage(pGraphics, pBitmap, 0, 0, w, h, 0, 0, w,h)
UpdateLayeredWindow(hwnd, hdc,(a_screenwidth-w)//2,(a_screenheight-h)//2,w,h)
OnMessage(0x201, "WM_LBUTTONDOWN")
SetTimer, update, -1000
return
update:
Gdip_GraphicsClear(pGraphics)
Gdip_DrawImage(pGraphics, pBitmap, 0, 0, w, h, 0, 0, w,h)
gosub get_value
value_diff:=m1-value_old
options=w86 h75 x6 y5 cffc0c0c0 Center vCenter bold s12 r4
Gdip_TextToGraphics(pGraphics, m1, Options, Font)
color:=value_diff < 0 ? "cffff0000" : "cff00ff00"
options=w65 h80 x12 y56 %color% Center bold s12 r4
Gdip_TextToGraphics(pGraphics, Format("{1:0.3f}",value_diff), Options, Font)
UpdateLayeredWindow(hwnd, hdc)
if !status
{
value_old:=m1
status:=1
settimer, update ,60000
}
return
SelectObject(hdc, obm)
DeleteObject(hbm)
DeleteDC(hdc)
Gdip_DeleteGraphics(pGraphics)
get_value:
url=https://api.coindesk.com/v1/bpi/currentprice/USD.json
UrlDownloadToVar(URL, response)
RegExMatch( response,"U)float.*(\d+.*)\}" ,m)
return
UrlDownloadToVar(URL, ByRef aResponse="") {
WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
WebRequest.Open("GET", URL)
WebRequest.Send()
aResponse := WebRequest.ResponseText
WebRequest := ""
}
WM_LBUTTONDOWN(wParam,lParam,msg,hwnd){
PostMessage, 0xA1, 2
}
WM_EXITSIZEMOVE(wParam,lParam,msg,hwnd){ ;to autosave last position when moving gui
}
guiclose:
esc::
exitapp
; ##################################################################################
; # This #Include file was generated by Image2Include.ahk, you must not change it! #
; ##################################################################################
Create_80_png() {
VarSetCapacity(B64, 4480 << !!A_IsUnicode)
B64 := "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"
If !DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", 0, "UInt", 0x01, "Ptr", 0, "UIntP", DecLen, "Ptr", 0, "Ptr", 0)
Return False
VarSetCapacity(Dec, DecLen, 0)
If !DllCall("Crypt32.dll\CryptStringToBinary", "Ptr", &B64, "UInt", 0, "UInt", 0x01, "Ptr", &Dec, "UIntP", DecLen, "Ptr", 0, "Ptr", 0)
Return False
; Bitmap creation adopted from "How to convert Image data (JPEG/PNG/GIF) to hBITMAP?" by SKAN
; -> http://www.autohotkey.com/board/topic/21213-how-to-convert-image-data-jpegpnggif-to-hbitmap/?p=139257
hData := DllCall("Kernel32.dll\GlobalAlloc", "UInt", 2, "UPtr", DecLen, "UPtr")
pData := DllCall("Kernel32.dll\GlobalLock", "Ptr", hData, "UPtr")
DllCall("Kernel32.dll\RtlMoveMemory", "Ptr", pData, "Ptr", &Dec, "UPtr", DecLen)
DllCall("Kernel32.dll\GlobalUnlock", "Ptr", hData)
DllCall("Ole32.dll\CreateStreamOnHGlobal", "Ptr", hData, "Int", True, "PtrP", pStream)
hGdip := DllCall("Kernel32.dll\LoadLibrary", "Str", "Gdiplus.dll", "UPtr")
VarSetCapacity(SI, 16, 0), NumPut(1, SI, 0, "UChar")
DllCall("Gdiplus.dll\GdiplusStartup", "PtrP", pToken, "Ptr", &SI, "Ptr", 0)
DllCall("Gdiplus.dll\GdipCreateBitmapFromStream", "Ptr", pStream, "PtrP", pBitmap)
DllCall("Gdiplus.dll\GdiplusShutdown", "Ptr", pToken)
DllCall("Kernel32.dll\FreeLibrary", "Ptr", hGdip)
DllCall(NumGet(NumGet(pStream + 0, 0, "UPtr") + (A_PtrSize * 2), 0, "UPtr"), "Ptr", pStream)
Return pBitmap
}
Gdip_Startup()
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
if !DllCall("GetModuleHandle", "str", "gdiplus", Ptr)
DllCall("LoadLibrary", "str", "gdiplus")
VarSetCapacity(si, A_PtrSize = 8 ? 24 : 16, 0), si := Chr(1)
DllCall("gdiplus\GdiplusStartup", A_PtrSize ? "UPtr*" : "uint*", pToken, Ptr, &si, Ptr, 0)
return pToken
}
Gdip_GetImageDimensions(pBitmap, ByRef Width, ByRef Height)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
DllCall("gdiplus\GdipGetImageWidth", Ptr, pBitmap, "uint*", Width)
DllCall("gdiplus\GdipGetImageHeight", Ptr, pBitmap, "uint*", Height)
}
CreateDIBSection(w, h, hdc="", bpp=32, ByRef ppvBits=0)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
hdc2 := hdc ? hdc : GetDC()
VarSetCapacity(bi, 40, 0)
NumPut(w, bi, 4, "uint")
, NumPut(h, bi, 8, "uint")
, NumPut(40, bi, 0, "uint")
, NumPut(1, bi, 12, "ushort")
, NumPut(0, bi, 16, "uInt")
, NumPut(bpp, bi, 14, "ushort")
hbm := DllCall("CreateDIBSection"
, Ptr, hdc2
, Ptr, &bi
, "uint", 0
, A_PtrSize ? "UPtr*" : "uint*", ppvBits
, Ptr, 0
, "uint", 0, Ptr)
if !hdc
ReleaseDC(hdc2)
return hbm
}
GetDC(hwnd=0)
{
return DllCall("GetDC", A_PtrSize ? "UPtr" : "UInt", hwnd)
}
ReleaseDC(hdc, hwnd=0)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
return DllCall("ReleaseDC", Ptr, hwnd, Ptr, hdc)
}
CreateCompatibleDC(hdc=0)
{
return DllCall("CreateCompatibleDC", A_PtrSize ? "UPtr" : "UInt", hdc)
}
SelectObject(hdc, hgdiobj)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
return DllCall("SelectObject", Ptr, hdc, Ptr, hgdiobj)
}
Gdip_GraphicsFromHDC(hdc)
{
DllCall("gdiplus\GdipCreateFromHDC", A_PtrSize ? "UPtr" : "UInt", hdc, A_PtrSize ? "UPtr*" : "UInt*", pGraphics)
return pGraphics
}
Gdip_DrawImage(pGraphics, pBitmap, dx="", dy="", dw="", dh="", sx="", sy="", sw="", sh="", Matrix=1)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
if (Matrix&1 = "")
ImageAttr := Gdip_SetImageAttributesColorMatrix(Matrix)
else if (Matrix != 1)
ImageAttr := Gdip_SetImageAttributesColorMatrix("1|0|0|0|0|0|1|0|0|0|0|0|1|0|0|0|0|0|" Matrix "|0|0|0|0|0|1")
if (sx = "" && sy = "" && sw = "" && sh = "")
{
if (dx = "" && dy = "" && dw = "" && dh = "")
{
sx := dx := 0, sy := dy := 0
sw := dw := Gdip_GetImageWidth(pBitmap)
sh := dh := Gdip_GetImageHeight(pBitmap)
}
else
{
sx := sy := 0
sw := Gdip_GetImageWidth(pBitmap)
sh := Gdip_GetImageHeight(pBitmap)
}
}
E := DllCall("gdiplus\GdipDrawImageRectRect"
, Ptr, pGraphics
, Ptr, pBitmap
, "float", dx
, "float", dy
, "float", dw
, "float", dh
, "float", sx
, "float", sy
, "float", sw
, "float", sh
, "int", 2
, Ptr, ImageAttr
, Ptr, 0
, Ptr, 0)
if ImageAttr
Gdip_DisposeImageAttributes(ImageAttr)
return E
}
Gdip_SetImageAttributesColorMatrix(Matrix)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
VarSetCapacity(ColourMatrix, 100, 0)
Matrix := RegExReplace(RegExReplace(Matrix, "^[^\d-\.]+([\d\.])", "$1", "", 1), "[^\d-\.]+", "|")
StringSplit, Matrix, Matrix, |
Loop, 25
{
Matrix := (Matrix%A_Index% != "") ? Matrix%A_Index% : Mod(A_Index-1, 6) ? 0 : 1
NumPut(Matrix, ColourMatrix, (A_Index-1)*4, "float")
}
DllCall("gdiplus\GdipCreateImageAttributes", A_PtrSize ? "UPtr*" : "uint*", ImageAttr)
DllCall("gdiplus\GdipSetImageAttributesColorMatrix", Ptr, ImageAttr, "int", 1, "int", 1, Ptr, &ColourMatrix, Ptr, 0, "int", 0)
return ImageAttr
}
Gdip_GetImageWidth(pBitmap)
{
DllCall("gdiplus\GdipGetImageWidth", A_PtrSize ? "UPtr" : "UInt", pBitmap, "uint*", Width)
return Width
}
Gdip_GetImageHeight(pBitmap)
{
DllCall("gdiplus\GdipGetImageHeight", A_PtrSize ? "UPtr" : "UInt", pBitmap, "uint*", Height)
return Height
}
Gdip_DisposeImageAttributes(ImageAttr)
{
return DllCall("gdiplus\GdipDisposeImageAttributes", A_PtrSize ? "UPtr" : "UInt", ImageAttr)
}
UpdateLayeredWindow(hwnd, hdc, x="", y="", w="", h="", Alpha=255)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
if ((x != "") && (y != ""))
VarSetCapacity(pt, 8), NumPut(x, pt, 0, "UInt"), NumPut(y, pt, 4, "UInt")
if (w = "") ||(h = "")
WinGetPos,,, w, h, ahk_id %hwnd%
return DllCall("UpdateLayeredWindow"
, Ptr, hwnd
, Ptr, 0
, Ptr, ((x = "") && (y = "")) ? 0 : &pt
, "int64*", w|h<<32
, Ptr, hdc
, "int64*", 0
, "uint", 0
, "UInt*", Alpha<<16|1<<24
, "uint", 2)
}
Gdip_GraphicsClear(pGraphics, ARGB=0x00ffffff)
{
return DllCall("gdiplus\GdipGraphicsClear", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", ARGB)
}
Gdip_TextToGraphics(pGraphics, Text, Options, Font="Arial", Width="", Height="", Measure=0)
{
IWidth := Width, IHeight:= Height
RegExMatch(Options, "i)X([\-\d\.]+)(p*)", xpos)
RegExMatch(Options, "i)Y([\-\d\.]+)(p*)", ypos)
RegExMatch(Options, "i)W([\-\d\.]+)(p*)", Width)
RegExMatch(Options, "i)H([\-\d\.]+)(p*)", Height)
RegExMatch(Options, "i)C(?!(entre|enter))([a-f\d]+)", Colour)
RegExMatch(Options, "i)Top|Up|Bottom|Down|vCentre|vCenter", vPos)
RegExMatch(Options, "i)NoWrap", NoWrap)
RegExMatch(Options, "i)R(\d)", Rendering)
RegExMatch(Options, "i)S(\d+)(p*)", Size)
if !Gdip_DeleteBrush(Gdip_CloneBrush(Colour2))
PassBrush := 1, pBrush := Colour2
if !(IWidth && IHeight) && (xpos2 || ypos2 || Width2 || Height2 || Size2)
return -1
Style := 0, Styles := "Regular|Bold|Italic|BoldItalic|Underline|Strikeout"
Loop, Parse, Styles, |
{
if RegExMatch(Options, "\b" A_loopField)
Style |= (A_LoopField != "StrikeOut") ? (A_Index-1) : 8
}
Align := 0, Alignments := "Near|Left|Centre|Center|Far|Right"
Loop, Parse, Alignments, |
{
if RegExMatch(Options, "\b" A_loopField)
Align |= A_Index//2.1 ; 0|0|1|1|2|2
}
xpos := (xpos1 != "") ? xpos2 ? IWidth*(xpos1/100) : xpos1 : 0
ypos := (ypos1 != "") ? ypos2 ? IHeight*(ypos1/100) : ypos1 : 0
Width := Width1 ? Width2 ? IWidth*(Width1/100) : Width1 : IWidth
Height := Height1 ? Height2 ? IHeight*(Height1/100) : Height1 : IHeight
if !PassBrush
Colour := "0x" (Colour2 ? Colour2 : "ff000000")
Rendering := ((Rendering1 >= 0) && (Rendering1 <= 5)) ? Rendering1 : 4
Size := (Size1 > 0) ? Size2 ? IHeight*(Size1/100) : Size1 : 12
hFamily := Gdip_FontFamilyCreate(Font)
hFont := Gdip_FontCreate(hFamily, Size, Style)
FormatStyle := NoWrap ? 0x4000 | 0x1000 : 0x4000
hFormat := Gdip_StringFormatCreate(FormatStyle)
pBrush := PassBrush ? pBrush : Gdip_BrushCreateSolid(Colour)
if !(hFamily && hFont && hFormat && pBrush && pGraphics)
return !pGraphics ? -2 : !hFamily ? -3 : !hFont ? -4 : !hFormat ? -5 : !pBrush ? -6 : 0
CreateRectF(RC, xpos, ypos, Width, Height)
Gdip_SetStringFormatAlign(hFormat, Align)
Gdip_SetTextRenderingHint(pGraphics, Rendering)
ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
if vPos
{
StringSplit, ReturnRC, ReturnRC, |
if (vPos = "vCentre") || (vPos = "vCenter")
ypos += (Height-ReturnRC4)//2
else if (vPos = "Top") || (vPos = "Up")
ypos := 0
else if (vPos = "Bottom") || (vPos = "Down")
ypos := Height-ReturnRC4
CreateRectF(RC, xpos, ypos, Width, ReturnRC4)
ReturnRC := Gdip_MeasureString(pGraphics, Text, hFont, hFormat, RC)
}
if !Measure
E := Gdip_DrawString(pGraphics, Text, hFont, hFormat, pBrush, RC)
if !PassBrush
Gdip_DeleteBrush(pBrush)
Gdip_DeleteStringFormat(hFormat)
Gdip_DeleteFont(hFont)
Gdip_DeleteFontFamily(hFamily)
return E ? E : ReturnRC
}
Gdip_DeleteBrush(pBrush)
{
return DllCall("gdiplus\GdipDeleteBrush", A_PtrSize ? "UPtr" : "UInt", pBrush)
}
Gdip_CloneBrush(pBrush)
{
DllCall("gdiplus\GdipCloneBrush", A_PtrSize ? "UPtr" : "UInt", pBrush, A_PtrSize ? "UPtr*" : "UInt*", pBrushClone)
return pBrushClone
}
Gdip_FontFamilyCreate(Font)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
if (!A_IsUnicode)
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &Font, "int", -1, "uint", 0, "int", 0)
VarSetCapacity(wFont, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &Font, "int", -1, Ptr, &wFont, "int", nSize)
}
DllCall("gdiplus\GdipCreateFontFamilyFromName"
, Ptr, A_IsUnicode ? &Font : &wFont
, "uint", 0
, A_PtrSize ? "UPtr*" : "UInt*", hFamily)
return hFamily
}
Gdip_FontCreate(hFamily, Size, Style=0)
{
DllCall("gdiplus\GdipCreateFont", A_PtrSize ? "UPtr" : "UInt", hFamily, "float", Size, "int", Style, "int", 0, A_PtrSize ? "UPtr*" : "UInt*", hFont)
return hFont
}
Gdip_StringFormatCreate(Format=0, Lang=0)
{
DllCall("gdiplus\GdipCreateStringFormat", "int", Format, "int", Lang, A_PtrSize ? "UPtr*" : "UInt*", hFormat)
return hFormat
}
Gdip_BrushCreateSolid(ARGB=0xff000000)
{
DllCall("gdiplus\GdipCreateSolidFill", "UInt", ARGB, A_PtrSize ? "UPtr*" : "UInt*", pBrush)
return pBrush
}
CreateRectF(ByRef RectF, x, y, w, h)
{
VarSetCapacity(RectF, 16)
NumPut(x, RectF, 0, "float"), NumPut(y, RectF, 4, "float"), NumPut(w, RectF, 8, "float"), NumPut(h, RectF, 12, "float")
}
Gdip_SetStringFormatAlign(hFormat, Align)
{
return DllCall("gdiplus\GdipSetStringFormatAlign", A_PtrSize ? "UPtr" : "UInt", hFormat, "int", Align)
}
Gdip_SetTextRenderingHint(pGraphics, RenderingHint)
{
return DllCall("gdiplus\GdipSetTextRenderingHint", A_PtrSize ? "UPtr" : "UInt", pGraphics, "int", RenderingHint)
}
Gdip_MeasureString(pGraphics, sString, hFont, hFormat, ByRef RectF)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
VarSetCapacity(RC, 16)
if !A_IsUnicode
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, "uint", 0, "int", 0)
VarSetCapacity(wString, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, Ptr, &wString, "int", nSize)
}
DllCall("gdiplus\GdipMeasureString"
, Ptr, pGraphics
, Ptr, A_IsUnicode ? &sString : &wString
, "int", -1
, Ptr, hFont
, Ptr, &RectF
, Ptr, hFormat
, Ptr, &RC
, "uint*", Chars
, "uint*", Lines)
return &RC ? NumGet(RC, 0, "float") "|" NumGet(RC, 4, "float") "|" NumGet(RC, 8, "float") "|" NumGet(RC, 12, "float") "|" Chars "|" Lines : 0
}
Gdip_DrawString(pGraphics, sString, hFont, hFormat, pBrush, ByRef RectF)
{
Ptr := A_PtrSize ? "UPtr" : "UInt"
if (!A_IsUnicode)
{
nSize := DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, Ptr, 0, "int", 0)
VarSetCapacity(wString, nSize*2)
DllCall("MultiByteToWideChar", "uint", 0, "uint", 0, Ptr, &sString, "int", -1, Ptr, &wString, "int", nSize)
}
return DllCall("gdiplus\GdipDrawString"
, Ptr, pGraphics
, Ptr, A_IsUnicode ? &sString : &wString
, "int", -1
, Ptr, hFont
, Ptr, &RectF
, Ptr, hFormat
, Ptr, pBrush)
}
Gdip_DeleteStringFormat(hFormat)
{
return DllCall("gdiplus\GdipDeleteStringFormat", A_PtrSize ? "UPtr" : "UInt", hFormat)
}
Gdip_DeleteFont(hFont)
{
return DllCall("gdiplus\GdipDeleteFont", A_PtrSize ? "UPtr" : "UInt", hFont)
}
Gdip_DeleteFontFamily(hFamily)
{
return DllCall("gdiplus\GdipDeleteFontFamily", A_PtrSize ? "UPtr" : "UInt", hFamily)
}
DeleteObject(hObject)
{
return DllCall("DeleteObject", A_PtrSize ? "UPtr" : "UInt", hObject)
}
DeleteDC(hdc)
{
return DllCall("DeleteDC", A_PtrSize ? "UPtr" : "UInt", hdc)
}
Gdip_DeleteGraphics(pGraphics)
{
return DllCall("gdiplus\GdipDeleteGraphics", A_PtrSize ? "UPtr" : "UInt", pGraphics)
}