Post by sofista » 18 Oct 2023, 19:36
Nucleorion wrote: ↑18 Oct 2023, 02:42
Tengo que meter todo Gdip.Tutorial.1-Draw.Shapes.ahk dentro del condicionante if MicOn?
En principio no sería conveniente hacer eso, ya que por el toggle hay que usarlo dos veces. No obstante, lo mejor es convertir el tutorial en una función y llamarla cuando se necesita con los parámetros adecuados.
En el ejemplo que sigue eliminé todos los comentarios del tutorial, así la función se ve en su totalidad de un vistazo. Además, agregué un segundo hotkey para salir de GDIp y de la aplicación —cambialo por el que más te guste—:
Code: Select all
; Basado en Gdip Tutorial 1 - Draw.Shapes.ahk
#SingleInstance, Force
#NoEnv
SetBatchLines, -1
#Include <Gdip_all> ; actualizar según tu sistema
<::
If !pToken := Gdip_Startup() {
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
MicOn := !MicOn
d := 50 ; diámetro, ajustar según necesidad
c := 0xff00ff00 ; color verde
x := 963 ; posición h
y := 565 ; posición v
if MicOn {
Send {< down}
MostrarCirculoGDIp(c, x, y, d)
} else {
Send {< up}
MostrarCirculoGDIp(0, 0, 0, 0)
}
return
w:: ; hotkey para salir de GDIp y del script
Gdip_Shutdown(pToken)
ExitApp
return
MostrarCirculoGDIp(color, x, y, d) {
Width := 1400, Height := 1050
Gui, 1: -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
Gui, 1: Show, NA
hwnd1 := WinExist()
hbm := CreateDIBSection(Width, Height)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
Gdip_SetSmoothingMode(G, 4)
pBrush := Gdip_BrushCreateSolid(color) ; aplica el primer parámetro
Gdip_FillEllipse(G, pBrush, x, y, d, d) ; aplica los otros tres parámetros
Gdip_DeleteBrush(pBrush)
UpdateLayeredWindow(hwnd1, hdc, 0, 0, Width, Height)
SelectObject(hdc, obm)
DeleteObject(hbm)
DeleteDC(hdc)
Gdip_DeleteGraphics(G)
Return
}
[quote=Nucleorion post_id=543639 time=1697614947 user_id=74607]
Tengo que meter todo Gdip.Tutorial.1-Draw.Shapes.ahk dentro del condicionante if MicOn?
[/quote]
En principio no sería conveniente hacer eso, ya que por el toggle hay que usarlo dos veces. No obstante, lo mejor es convertir el tutorial en una función y llamarla cuando se necesita con los parámetros adecuados.
En el ejemplo que sigue eliminé todos los comentarios del tutorial, así la función se ve en su totalidad de un vistazo. Además, agregué un segundo hotkey para salir de GDIp y de la aplicación —cambialo por el que más te guste—:
[code]
; Basado en Gdip Tutorial 1 - Draw.Shapes.ahk
#SingleInstance, Force
#NoEnv
SetBatchLines, -1
#Include <Gdip_all> ; actualizar según tu sistema
<::
If !pToken := Gdip_Startup() {
MsgBox, 48, gdiplus error!, Gdiplus failed to start. Please ensure you have gdiplus on your system
ExitApp
}
MicOn := !MicOn
d := 50 ; diámetro, ajustar según necesidad
c := 0xff00ff00 ; color verde
x := 963 ; posición h
y := 565 ; posición v
if MicOn {
Send {< down}
MostrarCirculoGDIp(c, x, y, d)
} else {
Send {< up}
MostrarCirculoGDIp(0, 0, 0, 0)
}
return
w:: ; hotkey para salir de GDIp y del script
Gdip_Shutdown(pToken)
ExitApp
return
MostrarCirculoGDIp(color, x, y, d) {
Width := 1400, Height := 1050
Gui, 1: -Caption +E0x80000 +LastFound +AlwaysOnTop +ToolWindow +OwnDialogs
Gui, 1: Show, NA
hwnd1 := WinExist()
hbm := CreateDIBSection(Width, Height)
hdc := CreateCompatibleDC()
obm := SelectObject(hdc, hbm)
G := Gdip_GraphicsFromHDC(hdc)
Gdip_SetSmoothingMode(G, 4)
pBrush := Gdip_BrushCreateSolid(color) ; aplica el primer parámetro
Gdip_FillEllipse(G, pBrush, x, y, d, d) ; aplica los otros tres parámetros
Gdip_DeleteBrush(pBrush)
UpdateLayeredWindow(hwnd1, hdc, 0, 0, Width, Height)
SelectObject(hdc, obm)
DeleteObject(hbm)
DeleteDC(hdc)
Gdip_DeleteGraphics(G)
Return
}
[/code]