Create a floating window liket this here Topic is solved

Get help with using AutoHotkey (v1.1 and older) and its commands and hotkeys
User avatar
Reloaded
Posts: 283
Joined: 25 Aug 2017, 08:48

Create a floating window liket this here

06 Dec 2018, 13:21

Hey,

i found a pretty cool script, and i want to create a "Floating window" like this

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)
}
But i understand nothing from it xD can somebody "encode" it that i can create my own window? Or do you know scripts like this here?
Thanks <33
User avatar
FanaticGuru
Posts: 1906
Joined: 30 Sep 2013, 22:25

Re: Create a floating window liket this here  Topic is solved

06 Dec 2018, 16:58

Reloaded wrote:
06 Dec 2018, 13:21
i found a pretty cool script, and i want to create a "Floating window" like this

But i understand nothing from it xD can somebody "encode" it that i can create my own window? Or do you know scripts like this here?
I have no idea what part of that script you think is cool and that you want to copy. Most of that script is about embedding graphics and placing graphic text over an image.

If you just want a minimum window that you can drag around, this will do that.

Code: Select all

Gui, +AlwaysOnTop -Caption
Gui, Add, Text,, Hey
Gui, Show
OnMessage(0x201, "WM_LBUTTONDOWN")

WM_LBUTTONDOWN()
{
		PostMessage, 0xA1, 2,,,A
}
FG
Hotkey Help - Help Dialog for Currently Running AHK Scripts
AHK Startup - Consolidate Multiply AHK Scripts with one Tray Icon
Hotstring Manager - Create and Manage Hotstrings
[Class] WinHook - Create Window Shell Hooks and Window Event Hooks
User avatar
Reloaded
Posts: 283
Joined: 25 Aug 2017, 08:48

Re: Create a floating window liket this here

07 Dec 2018, 09:22

FanaticGuru wrote:
06 Dec 2018, 16:58
Reloaded wrote:
06 Dec 2018, 13:21
i found a pretty cool script, and i want to create a "Floating window" like this

But i understand nothing from it xD can somebody "encode" it that i can create my own window? Or do you know scripts like this here?
I have no idea what part of that script you think is cool and that you want to copy. Most of that script is about embedding graphics and placing graphic text over an image.

If you just want a minimum window that you can drag around, this will do that.

Code: Select all

Gui, +AlwaysOnTop -Caption
Gui, Add, Text,, Hey
Gui, Show
OnMessage(0x201, "WM_LBUTTONDOWN")

WM_LBUTTONDOWN()
{
		PostMessage, 0xA1, 2,,,A
}
FG
for Scripts like this i searched! thanks <3

Return to “Ask for Help (v1)”

Who is online

Users browsing this forum: Descolada, Google [Bot], OrangeCat and 179 guests