Code: Select all
gui, +AlwaysOnTop Gui, Color, FF0000 WinSet, TransColor,FF0000 gui, -Caption gui, show, w5 h5, WinGetPos, X, Y, W, H,
Crosshair en centro de ventana activa Topic is solved
Moderator: Flipeador
Crosshair en centro de ventana activa
Holas nesesito un crosshair en medio de la ventana activa , he hallado este aqui pero no se ejecuta en el centro y tengo que deslizar la ventana activa y centrarlo . Otra cosa que en la barra de tareas aparece el boton de Autohotkey cosa que no aparecia antes . Si puede evitarse esto y que aparezca al centro de la ventana activa seria perfecto .
Re: Crosshair en centro de ventana activa
Hola,
Quedandose lo mas sencillo possible:
Saludos
[EDIT]
Alternativamente, y especialmente si el movimiento del retículo no te parece bastante suave, puedes utilizar el método del codigo abajo:
Quedandose lo mas sencillo possible:
Code: Select all
#NoEnv
#Warn
#SingleInstance force
GUI, 1:+hwndID +Resize +Owner ; rescata y salva en ID el ID de la ventana de la GUI
AHKID := "ahk_id " . ID
GUI, 1:Show, w400 h400
GUI, 2:-Caption +AlwaysOnTop +Owner ; +Owner evita que en la barra de tareas aparezca el boton de Autohotkey
GUI, 2:Color, Red, Red
GUI, 2:Show, w5 h5,
SetTimer, subrutina, 100 ; cada 100ms ejecuta la subrutina mas abajo
return
GuiClose:
ExitApp
subrutina:
WinGetPos, x, y, w, h, % AHKID ; rescata la posicion de la ventana principal
GUI, 2:Show, % "NA x" . (x+w//2)-5 . " y" . (y+h//2)-5 ; NA hace que el retículo no robe el enfoque a la ventana principal
return
[EDIT]
Alternativamente, y especialmente si el movimiento del retículo no te parece bastante suave, puedes utilizar el método del codigo abajo:
Code: Select all
GUI, 1:+hwndID +Resize
global AHKID := "ahk_id " . ID ; rescata y salva en ID el ID de la ventana de la GUI
GUI, 1:Show, w400 h400
WinGet, PID, PID, % AHKID ; rescata y salva en PID el ID del proceso de la GUI
GUI, 2:-Caption +AlwaysOnTop +Owner ; +Owner evita que en la barra de tareas aparezca el boton de Autohotkey
GUI, 2:Color, Red, Red
GUI, 2:Show, w5 h5,
EVENT_OBJECT_LOCATIONCHANGE := 0x800B ; https://msdn.microsoft.com/en-us/library/windows/desktop/dd318066(v=vs.85).aspx
hWinEventHook := SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE
, EVENT_OBJECT_LOCATIONCHANGE
, 0
, RegisterCallback("OnLocationChange")
, PID
, 0
, 0) ; https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640(v=vs.85).aspx ~ registra OnLocationChange como función de rellamada para el acontecimiento OBJECT_LOCATIONCHANGE
OnExit, exitSub
return
GuiClose:
exitSub:
UnhookWinEvent(hWinEventHook)
ExitApp
; ------------------------------------------------------------------------------------
onLocationChange(__hWinEventHook, __event, __hwnd) {
if not (__hwnd) ; porque el sistema envia el acontecimiento tambien por el cursor si fuera necesario
return
SetWinDelay, -1
WinGetPos, __x, __y, __w, __h, % AHKID
GUI, 2:Show, % "NA x" . (__x+__w//2)-5 . " y" . (__y+__h//2)-5
}
; =====================================================
SetWinEventHook(__eventMin, __eventMax, __hmodWinEventProc, __lpfnWinEventProc, __idProcess, __idThread, __dwFlags) {
DllCall("CoInitialize", "Uint", 0)
return DllCall("SetWinEventHook"
, "Uint", __eventMin
, "Uint", __eventMax
, "Ptr", __hmodWinEventProc
, "Ptr", __lpfnWinEventProc
, "Uint", __idProcess
, "Uint", __idThread
, "Uint", __dwFlags)
} ; https://autohotkey.com/boards/viewtopic.php?t=830
UnhookWinEvent(__hWinEventHook) {
__v := DllCall("UnhookWinEvent", "Ptr", __hWinEventHook)
DllCall("CoUninitialize")
return __v
} ; https://autohotkey.com/boards/viewtopic.php?t=830
Re: Crosshair en centro de ventana activa
Hola : Tengo un Script Principal y para que aparezca un punto solo agrego esas lineas al inicio . Además cuando estoy jugando y paso el mouse por encima del Puntito rojo aparece la Flecha del mouse de Windows y es molestoso . Esos problemas tengo que el punto no aparece al centro y aparece la flecha del Mouse de Windows cuando paso el Mouse encima.
Este codigoo que me dio esta casi perfecto solo faltaria que aparezca al centro de la ventana activa del Juego y que la flecha del Mouse de Windows no aparezca cuando paso el mouse sobre el punto . La Ventana activa es 1152x854 en 4:3
Este codigoo que me dio esta casi perfecto solo faltaria que aparezca al centro de la ventana activa del Juego y que la flecha del Mouse de Windows no aparezca cuando paso el mouse sobre el punto . La Ventana activa es 1152x854 en 4:3
Code: Select all
GUI, 2:-Caption +AlwaysOnTop +Owner GUI, 2:Color, Red, Red GUI, 2:Show, w5 h5,
Re: Crosshair en centro de ventana activa
Solo cambia notepad.exe por nombreDelProcesoDeTuJuego.exe en este codigo:Thorx wrote:Este codigoo que me dio esta casi perfecto solo faltaria que aparezca al centro de la ventana activa del Juego
Code: Select all
#NoEnv
#Warn
#SingleInstance force
WinGet, ID, ID, ahk_exe notepad.exe
global AHKID := "ahk_id " . ID ; rescata y salva en ID el ID de la ventana de la bloca de notas
WinGet, PID, PID, % AHKID ; rescata y salva en PID el ID del proceso de la bloca de notas
GUI, 2:-Caption +AlwaysOnTop +Owner +hwndID ; +Owner evita que en la barra de tareas aparezca el boton de Autohotkey
GUI, 2:Color, Red, Red
GUI, 2:Show, w5 h5,
EVENT_OBJECT_LOCATIONCHANGE := 0x800B ; https://msdn.microsoft.com/en-us/library/windows/desktop/dd318066(v=vs.85).aspx
hWinEventHook := SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE
, EVENT_OBJECT_LOCATIONCHANGE
, 0
, RegisterCallback("OnLocationChange")
, PID
, 0
, 0) ; https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640(v=vs.85).aspx ~ registra OnLocationChange como función de rellamada para el acontecimiento OBJECT_LOCATIONCHANGE
OnExit, exitSub
return
GuiClose:
exitSub:
UnhookWinEvent(hWinEventHook)
ExitApp
; ------------------------------------------------------------------------------------
onLocationChange(__hWinEventHook, __event, __hwnd) {
if not (__hwnd) ; porque el sistema envia el acontecimiento tambien por el cursor si fuera necesario
return
SetWinDelay, -1
WinGetPos, __x, __y, __w, __h, % AHKID
GUI, 2:Show, % "NA x" . (__x+__w//2)-5 . " y" . (__y+__h//2)-5
}
; =====================================================
SetWinEventHook(__eventMin, __eventMax, __hmodWinEventProc, __lpfnWinEventProc, __idProcess, __idThread, __dwFlags) {
DllCall("CoInitialize", "Uint", 0)
return DllCall("SetWinEventHook"
, "Uint", __eventMin
, "Uint", __eventMax
, "Ptr", __hmodWinEventProc
, "Ptr", __lpfnWinEventProc
, "Uint", __idProcess
, "Uint", __idThread
, "Uint", __dwFlags)
} ; https://autohotkey.com/boards/viewtopic.php?t=830
UnhookWinEvent(__hWinEventHook) {
__v := DllCall("UnhookWinEvent", "Ptr", __hWinEventHook)
DllCall("CoUninitialize")
return __v
} ; https://autohotkey.com/boards/viewtopic.php?t=830
Por lo que se trata de la flecha del mouse, que aparece por encima de la ventana, no puedo ayuadarte lo siento....Thorx wrote:(...)y que la flecha del Mouse de Windows no aparezca cuando paso el mouse sobre el punto .
Un saludo
Re: Crosshair en centro de ventana activa
Gracias , sin embargo cuando lo Integro a mi Script hay conflicto. Independentemente funciona , la idea es que pueda Integrarse con mi Script Principal ( en la parte superior ) sin activadores ni funcion de suspender o cerrar , solo activo siempre . Ahora lo integro y me aparece esta imagen
El scrip principal es un rapidfire simple comun y corriente usa la tecla LButton y como activador Home , Suspender End , cerrar PgUp . Si no es mucho pedir como seria el codigo para integrarlo a un script rapidfire simple o mejor dicho que el punto permanezca mientras un solo Script Unificado este activo y sin interferirlo . Gracias
El scrip principal es un rapidfire simple comun y corriente usa la tecla LButton y como activador Home , Suspender End , cerrar PgUp . Si no es mucho pedir como seria el codigo para integrarlo a un script rapidfire simple o mejor dicho que el punto permanezca mientras un solo Script Unificado este activo y sin interferirlo . Gracias
Re: Crosshair en centro de ventana activa Topic is solved
Yo dudo que se trata del imagen que aperece en la pantalla... Es solo una parte de ella... (de paso puedes copiar al portepapeles el contenido del calquier MsgBoxpresionando CTRL+C). Sea como sea, debo suponer y supongo que es debido al hecho que he colocado #Warn en la parte arriba del script. Puedes comentarlo, puedes prescindir de él. En cualquier caso, lo mejor me parcece ser colocar todas las funcciones, los hotkeys y las subrutinas al final del script, debajo del la parte auto-ejectutada del script (generalemente el primer returnencontrado en el script):Thorx wrote:Ahora lo integro y me aparece esta imagen
Code: Select all
#NoEnv
; #Warn
#SingleInstance force
; aqui puedes colocar todo lo que no forma parte, en su caso, de una subrutina, un hotkey
;...
WinWait, ahk_exe notepad.exe ; <<< cambialo por el nombre de tu ejecutable
WinGet, ID, ID, ahk_exe notepad.exe ; <<< cambialo por el nombre de tu ejecutable
global AHKID := "ahk_id " . ID ; rescata y salva en ID el ID de la ventana de la bloca de notas
WinGet, PID, PID, % AHKID ; rescata y salva en PID el ID del proceso de la bloca de notas
GUI, 2:-Caption +AlwaysOnTop +Owner +hwndID ; +Owner evita que en la barra de tareas aparezca el boton de Autohotkey
GUI, 2:Color, Red, Red
GUI, 2:Show, w5 h5,
EVENT_OBJECT_LOCATIONCHANGE := 0x800B ; https://msdn.microsoft.com/en-us/library/windows/desktop/dd318066(v=vs.85).aspx
hWinEventHook := SetWinEventHook(EVENT_OBJECT_LOCATIONCHANGE
, EVENT_OBJECT_LOCATIONCHANGE
, 0
, RegisterCallback("OnLocationChange")
, PID
, 0
, 0) ; https://msdn.microsoft.com/en-us/library/windows/desktop/dd373640(v=vs.85).aspx ~ registra OnLocationChange como función de rellamada para el acontecimiento OBJECT_LOCATIONCHANGE
OnExit, exitSub
SetTimer, waitClose, -1
return ; fin de la parte auto-ejecutada del script
; coloca aqui tu hotkeys y subroutinas, funciones... por ejemplo:
; !i::
; codigo...
; return
; miFuncion() {
; codigo...
; }
; miSubrutina:
; codigo...
; return
waitClose:
exitSub:
WinWaitClose, ahk_exe notepad.exe ; <<< cambialo por el nombre de tu ejecutable
MsgBox
UnhookWinEvent(hWinEventHook)
ExitApp
; ------------------------------------------------------------------------------------
onLocationChange(__hWinEventHook, __event, __hwnd) {
if not (__hwnd) ; porque el sistema envia el acontecimiento tambien por el cursor si fuera necesario
return
SetWinDelay, -1
WinGetPos, __x, __y, __w, __h, % AHKID
GUI, 2:Show, % "NA x" . (__x+__w//2)-5 . " y" . (__y+__h//2)-5
}
; =====================================================
SetWinEventHook(__eventMin, __eventMax, __hmodWinEventProc, __lpfnWinEventProc, __idProcess, __idThread, __dwFlags) {
DllCall("CoInitialize", "Uint", 0)
return DllCall("SetWinEventHook"
, "Uint", __eventMin
, "Uint", __eventMax
, "Ptr", __hmodWinEventProc
, "Ptr", __lpfnWinEventProc
, "Uint", __idProcess
, "Uint", __idThread
, "Uint", __dwFlags)
} ; https://autohotkey.com/boards/viewtopic.php?t=830
UnhookWinEvent(__hWinEventHook) {
__v := DllCall("UnhookWinEvent", "Ptr", __hWinEventHook)
DllCall("CoUninitialize")
return __v
} ; https://autohotkey.com/boards/viewtopic.php?t=830
Re: Crosshair en centro de ventana activa
Gracias por la respuesta , el código independiente es impecable .
Who is online
Users browsing this forum: No registered users and 55 guests