- Katılım
- 27 Şubat 2019
- Mesajlar
- 12,195
C# ile mouse tıklamalarını yakalayıp sayan küçük bir program yazmaya çalışıyorum.
Formun kendi içinde mouse tıklayıp sayma olayını "MouseDown" ile yaptım ama bana Windows genelinde mouse yakalayacak bir kod lazım.
Nette araştırmalarımda "Hook" atmak gerektiğini öğrendim. Örnek kod olarak mouse bulamadım ama klavye yakalaması buldum.
Bu kodların içinde 13 parametresi girilince "WH_KEYBOARD_LL" çalışıyormuş. Araştırınca 14 parametresinin de "WH_MOUSE_LL" parametresini çalıştırdığını öğrendim.
Bu kodları mouse için uydurmaya çalıştım ama "DLL Import" hatası alıyorum. bu konuda yardımcı olabilecek var mı?
Kaynak (Sayfaya girince aşağılardaki Windows Genelinde Tuş Vuruşu Yakalama kısmından aldım kodları)
Formun kendi içinde mouse tıklayıp sayma olayını "MouseDown" ile yaptım ama bana Windows genelinde mouse yakalayacak bir kod lazım.
Nette araştırmalarımda "Hook" atmak gerektiğini öğrendim. Örnek kod olarak mouse bulamadım ama klavye yakalaması buldum.
Bu kodların içinde 13 parametresi girilince "WH_KEYBOARD_LL" çalışıyormuş. Araştırınca 14 parametresinin de "WH_MOUSE_LL" parametresini çalıştırdığını öğrendim.
Bu kodları mouse için uydurmaya çalıştım ama "DLL Import" hatası alıyorum. bu konuda yardımcı olabilecek var mı?
Kaynak (Sayfaya girince aşağılardaki Windows Genelinde Tuş Vuruşu Yakalama kısmından aldım kodları)
Kod:
namespace Sayaç
{
public partial class Sayaç : Form
{
private delegate int MouseHookProc(int code, int wParam, ref MouseHookStruct lParam);
[DllImport("user32.dll")]
private static extern IntPtr SetWindowsHookEx(int idHook, MouseHookProc callback, IntPtr hInstance, uint threadId);
[DllImport("kernel32.dll")]
private static extern IntPtr LoadLibrary(string lpFileName);
[DllImport("user32.dll")]
private static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref MouseHookStruct lParam);
private readonly IntPtr _hook;
private struct MouseHookStruct
{
public int VkCode;
public int ScanCode;
public int Flags;
public int Time;
public int DwExtraInfo;
}
public Sayaç()
{
InitializeComponent();
var hInstance = LoadLibrary("User32");
_hook = SetWindowsHookEx(14, HookProc, hInstance, 0);
}
private int HookProc(int code, int wParam, ref MouseHookStruct lParam)
{
if (code >= 0 && lParam.Flags == 0)
{
var key = (Keys)lParam.VkCode;
MessageBox.Show(key.ToString());
}
return CallNextHookEx(_hook, code, wParam, ref lParam);
}