Mover cursor del ratón con teclas en un webBrowser.

15/11/2006 - 15:44 por RAlvare | Informe spam
Hola a todos.

Hay un sitio web en el que es muy dificil posicionarse con el ratón en el
pixel adecuado (es una
gráfica de bolsa en la que a veces el usuario quiere controlar el avance del
cursor pixel a pixel, p.ej. pulsando flecha dcha. o flecha arriba, etc).

También me puede servir poner un simple label con las coordenadas x e y del
cursor del ratón, pero no lo consigo.

Tengo un form con un WebBrowser para acceder a ese sitio y el WebBrowser no
tiene el evento onMouseMove (yo al menos no veo la forma de generarlo o
controlarlo si está en algún sitio) que me daría la solución de inmediato
(con e.Location).

¿Que se podría hacer para resolver este problemilla?

Saludos.
RAlvare.

Preguntas similare

Leer las respuestas

#1 RAlvare
15/11/2006 - 22:53 | Informe spam
Estoy probando con p/invoke y GetCursorPos y SetCursorPos. Si saco algo en
limpio
lo pongo por aqui.

"RAlvare" escribió en el mensaje
news:%
Hola a todos.

Hay un sitio web en el que es muy dificil posicionarse con el ratón en el
pixel adecuado (es una
gráfica de bolsa en la que a veces el usuario quiere controlar el avance
del cursor pixel a pixel, p.ej. pulsando flecha dcha. o flecha arriba,
etc).

También me puede servir poner un simple label con las coordenadas x e y
del cursor del ratón, pero no lo consigo.

Tengo un form con un WebBrowser para acceder a ese sitio y el WebBrowser
no tiene el evento onMouseMove (yo al menos no veo la forma de generarlo
o controlarlo si está en algún sitio) que me daría la solución de
inmediato (con e.Location).

¿Que se podría hacer para resolver este problemilla?

Saludos.
RAlvare.

Respuesta Responder a este mensaje
#2 RAlvare
17/11/2006 - 00:37 | Informe spam
"RAlvare" escribió en el mensaje
news:
Estoy probando con p/invoke y GetCursorPos y SetCursorPos. Si saco algo en
limpio
lo pongo por aqui.



Conseguido:

Form con un WebBrowser un textBox y un label.
El textbox recojerá la URL por la que se navegará.
En el label se mostrarán las coordenadas X,Y del punto en el que se ha hecho
click
con botón derecho o izquierdo o también cuando se mueve el ratón.
Básicamente he realizado lo siguiente:

Localizo la ventana del Internet Explorer_Server mediante Subclasificación.

//Unas cuantas llamadas a la API
[DllImport("user32")] public static extern int GetClassName(int hwnd,
StringBuilder lpClassName, int nMaxCount);

[DllImport("user32")] public static extern int EnumChildWindows(int
hwndParent, Delegate lpEnumFunc, int lParam);

[DllImport("user32")] private static extern IntPtr SetWindowLong(IntPtr
hWnd, int nIndex, ProcedimVentanaWin32 newProc);

[DllImport("user32")] private static extern int CallWindowProc(IntPtr
lpPrevWndFunc, IntPtr hWnd, int Msg, int wParam, int lParam);

[DllImport("user32")] private static extern IntPtr SetWindowLong(IntPtr
hWnd, int nIndex, IntPtr newProc);

[DllImport("user32")] public static extern int GetCursorPos(ref Point
lpPoint);

[DllImport("user32")] public static extern int ScreenToClient(int hwnd, ref
Point lpPoint);

//CONSTANTES

private const int GWL_WNDPROC = -4;

private const int WM_LBUTTONDOWN = 0x0201;

private const int WM_RBUTTONDOWN = 0x0204;

private const int WM_RBUTTONDBLCLK = 0x0206;

private const int WM_MOUSEMOVE = 0x0200;

private int MiProcDeVentana(IntPtr hWnd, int Msg, int wParam, int lParam)

{

Point p = new Point();

GetCursorPos(ref p);

ScreenToClient(currForm.Handle.ToInt32(), ref p);


switch(Msg)

{

//Pulsado botón izquierdo

case WM_LBUTTONDOWN:

{

CoordenadasClick = new Point(p.X, p.Y);

//De este modo no se intercepta el click original:

return CallWindowProc(ProcedimVentanaAntiguo, hWnd, Msg, wParam, lParam);

}



etc, etc.



Si a alguien le interesan más detalles, un msj a y
os cuento lo poco que sé.

Saludos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida