2009-10-04 6 views
0

Je voudrais créer un programme très simple qui pourrait aider mon parent à voir le pointeur de la souris avec l'utilisation d'objets volumineux dans une couleur de contraste spécifique. J'aurais donc besoin que l'objet soit toujours présent sur toutes les applications en cours d'exécution et sur la souris x, y. J'ai déjà trouvé un code qui reçoit les coordonnées de la souris depuis l'extérieur de l'application, mais je n'ai aucune idée de la façon de continuer. Merci!C#: image suivre la souris en dehors de l'application

EDIT: Il s'agit du code d'accès de la souris qui imprime ou simplement stocke X, Y du curseur de la souris. C'est tout ce que j'ai - je n'ai aucune idée de comment créer un objet et l'afficher "au-dessus" de toutes les autres applications.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.InteropServices; 
using System.Diagnostics; 
using System.Windows.Forms; 
namespace WindowsFormsApplication1 
{ 
    class Class1 
    { 
     class InterceptMouse 
     { 
      private static LowLevelMouseProc _proc = HookCallback; 
      private static IntPtr _hookID = IntPtr.Zero; 

      public static void Main() 
      { 
       _hookID = SetHook(_proc); 
       Application.Run(); 
       UnhookWindowsHookEx(_hookID); 
      } 

      private static IntPtr SetHook(LowLevelMouseProc proc) 
      { 
       using (Process curProcess = Process.GetCurrentProcess()) 
       using (ProcessModule curModule = curProcess.MainModule) 
       { 
        return SetWindowsHookEx(WH_MOUSE_LL, proc, 
         GetModuleHandle(curModule.ModuleName), 0); 
       } 
      } 

      private delegate IntPtr LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam); 

      private static IntPtr HookCallback(
       int nCode, IntPtr wParam, IntPtr lParam) 
      { 
       if (nCode >= 0 && 
        MouseMessages.WM_LBUTTONDOWN == (MouseMessages)wParam) 
       { 
        MSLLHOOKSTRUCT hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT)); 
        Console.WriteLine(hookStruct.pt.x + ", " + hookStruct.pt.y); 
       } 
       return CallNextHookEx(_hookID, nCode, wParam, lParam); 
      } 

      private const int WH_MOUSE_LL = 14; 

      private enum MouseMessages 
      { 
       WM_LBUTTONDOWN = 0x0201, 
       WM_LBUTTONUP = 0x0202, 
       WM_MOUSEMOVE = 0x0200, 
       WM_MOUSEWHEEL = 0x020A, 
       WM_RBUTTONDOWN = 0x0204, 
       WM_RBUTTONUP = 0x0205 
      } 

      [StructLayout(LayoutKind.Sequential)] 
      private struct POINT 
      { 
       public int x; 
       public int y; 
      } 

      [StructLayout(LayoutKind.Sequential)] 
      private struct MSLLHOOKSTRUCT 
      { 
       public POINT pt; 
       public uint mouseData; 
       public uint flags; 
       public uint time; 
       public IntPtr dwExtraInfo; 
      } 

      [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
      private static extern IntPtr SetWindowsHookEx(int idHook, 
       LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId); 

      [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
      [return: MarshalAs(UnmanagedType.Bool)] 
      private static extern bool UnhookWindowsHookEx(IntPtr hhk); 

      [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
      private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, 
       IntPtr wParam, IntPtr lParam); 

      [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
      private static extern IntPtr GetModuleHandle(string lpModuleName); 
     } 

    } 
} 
+0

Poster ce que vous avez ... à ce moment, nous ne savons pas comment vous aider à autre que de donner une ligne directrice générale. –

+0

Quel est le problème avec la fonctionnalité Windows intégrée pour cela: http://windows.microsoft.com/en-GB/windows7/Make-the-mouse-easier-to-use –

Répondre

0
+0

Merci, c'est pour la mise à jour de position de l'objet - mais qu'en est-il de l'objet (image) lui-même? Comme je l'ai déjà dit, je n'ai aucune expérience d'une telle programmation de niveau inférieur, donc je ne sais pas comment créer et afficher une image en dehors de l'application C#. – Thomas

Questions connexes