2024年8月19日发(作者:)

14: {

15: button = button1;

16: clicks = clicks1;

17: x = x1; y = y1; delta = delta1;

18: }

19:

20: HHOOK CGlobalWindowMsgHook::_hMouseHook = NULL;

21: HHOOK CGlobalWindowMsgHook::_hKeyboardHook = NULL;

22:

23: std::auto_ptr CGlobalWindowMsgHook::_pInstance;

24:

25: CGlobalWindowMsgHook::CGlobalWindowMsgHook (void)

26: {

27: _hMouseHook = SetWindowsHookEx (WH_MOUSE_LL, MouseProc, NULL, NULL);

28: _hKeyboardHook = SetWindowsHookEx (WH_KEYBOARD_LL, KeyboardProc, NULL, NULL);

29: }

30:

31: CGlobalWindowMsgHook::~CGlobalWindowMsgHook (void)

32: {

33: if (_hMouseHook)

34: {

35: UnhookWindowsHookEx (_hMouseHook);

36: }

37:

38: if (_hKeyboardHook)

39: {

40: UnhookWindowsHookEx (_hKeyboardHook);

41: }

42: }

43:

44: // 获取消息hook实例

45: CGlobalWindowMsgHook* CGlobalWindowMsgHook::instance (void)

46: {

47: if (!_())

48: {

49: _ (new CGlobalWindowMsgHook ());

50: }

51:

52: return _();

53: }

54:

55: LRESULT CGlobalWindowMsgHook::KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)

56: {

57: CGlobalWindowMsgHook* This = instance();

58: PKBDLLHOOKSTRUCT hookStruct = (PKBDLLHOOKSTRUCT)lParam;

59: BOOL bHandled = FALSE;

60:

61: int msg = wParam;

62: if (msg == WM_KEYDOWN || msg == WM_SYSKEYDOWN)

63: {

64: CKeyEventArgs e (hookStruct->vkCode);

65: This-> (This, &e);

66: bHandled = ed;

67: }

68: else if (msg == WM_KEYUP || msg == WM_SYSKEYUP)

69: {

69: {

70: CKeyEventArgs e (hookStruct->vkCode);

71: This-> (This, &e);

72: bHandled = ed;

73: }

74:

75: if (msg == WM_KEYDOWN && This->nt ())

76: {

77: BYTE keyState[256] = { 0 };

78: BYTE buffer[2] = { 0 };

79: GetKeyboardState(keyState);

80: int conversion = ToAscii(hookStruct->vkCode, hookStruct->scanCode, keyState, (LPWORD) buffer, hookStruct->flags);

81:

82: if (conversion == 1 || conversion == 2)

83: {

84: BOOL shift = (GetKeyState(VK_SHIFT) & 0x80) == 0x80;

85: BOOL capital = GetKeyState(VK_CAPITAL) != 0;

86: CHAR c = (CHAR)buffer[0];

87: if ((shift ^ capital) && isalpha(c))

88: {

89: c = tolower(c);

90: }

91: CKeyEventArgs e (c);

92: This-> (This, &e);

93: bHandled |= ed;

94: }

95: }

96:

97: return bHandled ? 1 : CallNextHookEx(_hKeyboardHook, nCode, wParam, lParam);

98: }

99:

100: LRESULT CGlobalWindowMsgHook::MouseProc(int nCode, WPARAM wParam, LPARAM lParam)

101: {

102: CGlobalWindowMsgHook* This = instance();

103: PMSLLHOOKSTRUCT hookStruct = (PMSLLHOOKSTRUCT)lParam;

104:

105: int msg = wParam;

106: int x = hookStruct->pt.x;

107: int y = hookStruct->pt.y;

108: int delta = (short)((hookStruct->mouseData >> 16) & 0xffff);

109:

110: if (msg == WM_MOUSEWHEEL)

111: {

112: This-> (This, &CMouseEventArgs (None, 0, x, y, delta));

113: }

114: else if (msg == WM_MOUSEMOVE)

115: {

116: This-> (This, &CMouseEventArgs (None, 0, x, y, delta));

117: }

118: else if (msg == WM_LBUTTONDBLCLK)

119: {

120: This-> (This, &CMouseEventArgs (Left, 0, x, y, delta));

121: }

122: else if (msg == WM_LBUTTONDOWN)

123: {

124: This-> (This, &CMouseEventArgs (Left, 0, x, y, delta));