私のC#プロジェクトでは、別のプログラムからのマウスクリックをインターセプトしようとしていますが、特定のhwndからのものだけです.lParamを使用してメッセージをフィルタリングできることをここで読みましたが、成功していません実際にHwndを取り戻すことができるものにキャストします。
これは、グローバル マウス フックを設定する方法です。
SetWindowsHookEx(WH_MOUSE_LL, s_MouseDelegate, IntPtr.Zero, 0);
次に、この関数でメッセージをキャッチします。
private static int MouseHookProc(int nCode, int wParam, IntPtr lParam)
{
if (nCode >= 0)
{
switch (wParam)
{
case WM_LBUTTONDOWN:
mouseDown = true;
mouseUp = false;
break;
case WM_LBUTTONUP:
mouseUp = true;
mouseDown = false;
break;
}
}
return CallNextHookEx(s_MouseHookHandle, nCode, wParam, lParam);
}
次に、CWPSTRUCT を次のように作成しました。
[StructLayout(LayoutKind.Sequential)]
public struct CWPSTRUCT
{
public IntPtr lparam;
public IntPtr wparam;
public int message;
public IntPtr hwnd;
}
そして、これがおそらくうまくいかない部分です...私は2つのことを試しました:
CWPSTRUCT cwp = (CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(CWPSTRUCT));
または、これは私が入手した安全でないバージョンです:
CWPSTRUCT* cp = (CWPSTRUCT*)lParam;
最初のオプションを使用すると、常に hwnd 部分が 0 になり、安全でないバージョンでは何も得られません...ここで何が間違っているのか本当にわかりません。どんな助けでも大歓迎です:)
ありがとう