Cuando el cursor está controlado por otro subproceso, no puede utilizar la interfaz de la aplicación GetCursor() para obtener el identificador del cursor. Este artículo explica cómo obtener un identificador de cursor cuando cualquier hilo tiene el control del cursor.
==================================================== =======
{
Cuando el cursor está controlado por otro subproceso, no puede utilizar la interfaz de la aplicación GetCursor() para obtener el identificador del cursor.
Este artículo explica cómo obtener un identificador de cursor cuando cualquier hilo tiene el control del cursor.
Por ejemplo, qué hacer cuando quieres colocar el cursor en un programa de captura de pantalla.
}
función GetCursorHandle: HCURSOR;
var
hVentana: HWND;
pt: PuntoT;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID: DWord;
comenzar
//Comprueba que formulario tiene el cursor
ObtenerCursorPos(pt);
hWindow := VentanaDesdePunto(pt);
// Obtener el ID del hilo del propietario del cursor
dwThreadID := GetWindowThreadPRocessId(hWindow, nil);
//Obtener el ID del hilo actual
dwCurrentThreadID := ObtenerCurrentThreadId;
// Si el hilo del propietario del cursor no es el hilo actual, el hilo del propietario del cursor debe asignarse al hilo actual.
// Luego llame a GetCursor() para obtener el identificador correcto del cursor (hCursor).
si (dwCurrentThreadID <> dwThreadID) entonces
comenzar
si AttachThreadInput(dwCurrentThreadID, dwThreadID, True) entonces
comenzar
//Obtener el identificador del cursor
Resultado := ObtenerCursor;
AdjuntarThreadInput(dwCurrentThreadID, dwThreadID, Falso);
fin;
fin de otra manera
comenzar
Resultado := ObtenerCursor;
fin;
fin;
procedimiento TForm1.Button1Click(Remitente: TObject);
var
CurPosX, CurPoxY: Entero;
MiCursor: TIcon;
pIconInfo: TIconInfo;
comenzar
MiCursor := TIcon.Create;
intentar
MiCursor.Handle := GetCursorHandle;
//Obtener la posición del cursor
GetIconInfo(MiCursor.Handle, pIconInfo);
CurPosX := pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//Dibujamos el cursor en el formulario
Canvas.Draw(CurPoxY, CurPoxY, MiCursor);
finalmente
Cuando el cursor está controlado por otro subproceso, no puede utilizar la interfaz de la aplicación GetCursor() para obtener el identificador del cursor. Este artículo explica cómo obtener un identificador de cursor cuando cualquier hilo tiene el control del cursor.
==================================================== =======
{
Cuando el cursor está controlado por otro subproceso, no puede utilizar la interfaz de la aplicación GetCursor() para obtener el identificador del cursor.
Este artículo explica cómo obtener un identificador de cursor cuando cualquier hilo tiene el control del cursor.
Por ejemplo, qué hacer cuando quieres colocar el cursor en un programa de captura de pantalla.
}
función GetCursorHandle: HCURSOR;
var
hVentana: HWND;
pt: PuntoT;
pIconInfo: TIconInfo;
dwThreadID, dwCurrentThreadID: DWORD;
comenzar
//Comprueba que formulario tiene el cursor
ObtenerCursorPos(pt);
hWindow := VentanaDesdePunto(pt);
// Obtener el ID del hilo del propietario del cursor
dwThreadID := GetWindowThreadProcessId(hWindow, nil);
//Obtener el ID del hilo actual
dwCurrentThreadID := ObtenerCurrentThreadId;
// Si el hilo del propietario del cursor no es el hilo actual, el hilo del propietario del cursor debe asignarse al hilo actual.
// Luego llame a GetCursor() para obtener el identificador correcto del cursor (hCursor).
si (dwCurrentThreadID <> dwThreadID) entonces
comenzar
si AttachThreadInput(dwCurrentThreadID, dwThreadID, True) entonces
comenzar
//Obtener el identificador del cursor
Resultado := ObtenerCursor;
AdjuntarThreadInput(dwCurrentThreadID, dwThreadID, Falso);
fin;
fin de otra manera
comenzar
Resultado := ObtenerCursor;
fin;
fin;
procedimiento TForm1.Button1Click(Remitente: TObject);
var
CurPosX, CurPoxY: Entero;
MiCursor: TIcon;
pIconInfo: TIconInfo;
comenzar
MiCursor := TIcon.Create;
intentar
MiCursor.Handle := GetCursorHandle;
//Obtener la posición del cursor
GetIconInfo(MiCursor.Handle, pIconInfo);
CurPosX := pIconInfo.xHotspot;
CurPoxY := pIconInfo.yHotspot;
//Dibujamos el cursor en el formulario
Canvas.Draw(CurPoxY, CurPoxY, MiCursor);
finalmente
MiCursor.ReleaseHandle;
MiCursor.Gratis;
fin;
fin;
//Otra solución:
procedimiento TForm1.Timer1Timer(Remitente: TObject);
var
CI:TCursorInfo;
comenzar
CI.cbTamaño := TamañoDe(CI);
Obtener información del cursor (CI);
Imagen1.Imagen.Icon.Handle:= CI.hCursor;
fin;
MiCursor.ReleaseHandle;
MiCursor.Gratis;
fin;
fin;
//Otra solución:
procedimiento TForm1.Timer1Timer(Remitente: TObject);
var
CI:TCursorInfo;
comenzar
CI.cbTamaño := TamañoDe(CI);
Obtener información del cursor (CI);
Imagen1.Imagen.Icon.Handle:= CI.hCursor;
fin;