如果鼠标除了标准左/右/中间(例如前/后)之外还有其他按钮,我们如何在Delphi中检测这些按钮点击?
如何使用它的一个示例是Internet Explorer,其中Logitech或MS鼠标侧面的前进/后退按钮在任何加载的网页之间前后循环.这似乎复制了键盘上的退格/ CTRL退格键,但我尝试使用KeyPreview和KeyPress事件检测到它,但它没有提取它.
知道如何检测这些扩展鼠标按钮的点击吗?
解决方法
您需要捕获WM_APPCOMMAND消息,然后使用GET_APPCOMMAND_LPARAM提取特定命令请求.基本上,这样的事情:
type TMyForm = class(TForm) private procedure WMAppCommand(var Msg: TMessage); message WM_APPCOMMAND; end; procedure TMyForm.WMAppCommand(var Msg: TMessage); begin case GET_APPCOMMAND_LPARAM(Msg.LParam) of APPCOMMAND_BROWSER_BACKWARD: begin // Do "go back" code Msg.Result := 1; end; end; end;
这是相关的标题翻译:
unit AppCommand; {$RANGECHECKS OFF} interface uses Windows; const WM_APPCOMMAND = $0319; const // Windows 2000,ME,and above APPCOMMAND_BROWSER_BACKWARD = 1; APPCOMMAND_BROWSER_FORWARD = 2; APPCOMMAND_BROWSER_REFRESH = 3; APPCOMMAND_BROWSER_STOP = 4; APPCOMMAND_BROWSER_SEARCH = 5; APPCOMMAND_BROWSER_FAVORITES = 6; APPCOMMAND_BROWSER_HOME = 7; APPCOMMAND_VOLUME_MUTE = 8; APPCOMMAND_VOLUME_DOWN = 9; APPCOMMAND_VOLUME_UP = 10; APPCOMMAND_MEDIA_NEXTTRACK = 11; APPCOMMAND_MEDIA_PREVIoUSTRACK = 12; APPCOMMAND_MEDIA_STOP = 13; APPCOMMAND_MEDIA_PLAY_PAUSE = 14; APPCOMMAND_LAUNCH_MAIL = 15; APPCOMMAND_LAUNCH_MEDIA_SELECT = 16; APPCOMMAND_LAUNCH_APP1 = 17; APPCOMMAND_LAUNCH_APP2 = 18; APPCOMMAND_BASS_DOWN = 19; APPCOMMAND_BASS_BOOST = 20; APPCOMMAND_BASS_UP = 21; APPCOMMAND_TREBLE_DOWN = 22; APPCOMMAND_TREBLE_UP = 23; // Windows XP and above APPCOMMAND_MICROPHONE_VOLUME_MUTE = 24; APPCOMMAND_MICROPHONE_VOLUME_DOWN = 25; APPCOMMAND_MICROPHONE_VOLUME_UP = 26; APPCOMMAND_HELP = 27; APPCOMMAND_FIND = 28; APPCOMMAND_NEW = 29; APPCOMMAND_OPEN = 30; APPCOMMAND_CLOSE = 31; APPCOMMAND_SAVE = 32; APPCOMMAND_PRINT = 33; APPCOMMAND_UNDO = 34; APPCOMMAND_REDO = 35; APPCOMMAND_COPY = 36; APPCOMMAND_CUT = 37; APPCOMMAND_PASTE = 38; APPCOMMAND_REPLY_TO_MAIL = 39; APPCOMMAND_FORWARD_MAIL = 40; APPCOMMAND_SEND_MAIL = 41; APPCOMMAND_SPELL_CHECK = 42; APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE = 43; APPCOMMAND_MIC_ON_OFF_TOGGLE = 44; APPCOMMAND_CORRECTION_LIST = 45; // Windows XP SP1 and above APPCOMMAND_MEDIA_PLAY = 46; APPCOMMAND_MEDIA_PAUSE = 47; APPCOMMAND_MEDIA_RECORD = 48; APPCOMMAND_MEDIA_FAST_FORWARD = 49; APPCOMMAND_MEDIA_REWIND = 50; APPCOMMAND_MEDIA_CHANNEL_UP = 51; APPCOMMAND_MEDIA_CHANNEL_DOWN = 52; FAPPCOMMAND_MOUSE = $8000; FAPPCOMMAND_KEY = 0; FAPPCOMMAND_OEM = $1000; FAPPCOMMAND_MASK = $F000; // Mouse buttons; remaining ones are declared in Windows.pas MK_XBUTTON1 = $20; MK_XBUTTON2 = $40; function GET_APPCOMMAND_LPARAM(lParam: LPARAM): Short; function GET_DEVICE_LPARAM(lParam: LPARAM): Word; function GET_KEYSTATE_LPARAM(lParam: LPARAM): Word; implementation function GET_APPCOMMAND_LPARAM(lParam: LPARAM): Short; begin Result := HiWord(lParam) and not FAPPCOMMAND_MASK; end; function GET_DEVICE_LPARAM(lParam: LPARAM): Word; begin Result := HiWord(lParam) and FAPPCOMMAND_MASK; end; function GET_KEYSTATE_LPARAM(lParam: LPARAM): Word; begin Result := LoWord(lParam); end; end.