2009-10-04 27 views
0

我想創建一個非常簡單的程序,可以幫助我的親屬看到使用特定對比顏色的大對象的鼠標指針。所以我需要將對象保存在所有正在運行的應用程序的頂部,並在鼠標x,y上。 我已經找到了從應用程序外部接收鼠標座標的代碼,但我不知道如何繼續。謝謝!c#:圖片跟隨鼠標外的應用程序

編輯:這是打印或只存儲鼠標光標的X,Y的鼠標鉤子代碼。這就是我所擁有的 - 我不知道如何創建一個對象並將其顯示在所有其他應用程序「上方」。

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

後你有什麼...在這一點上,我們不知道怎麼幫你不是給一般準則等。 – 2009-10-04 09:41:59

+0

這是什麼問題的內置Windows功能:http://windows.microsoft.com/en-GB/windows7/Make-the-mouse-easier-to-use – 2013-02-05 10:06:12

回答

0
+0

謝謝,這是位置更新對象 - 但是對象(圖像)本身呢?正如我之前所說的,我沒有這樣的低級編程經驗,因此我不知道如何在c#應用程序之外創建和顯示圖像。 – Thomas 2009-10-04 09:57:47