2011-11-28 91 views
3

没有水平滚动,当我打电话在Delphi 3这个方法在Windows 7下:水平滚动不工作mouse_event(MOUSEEVENTF_HWHEEL)

const MOUSEEVENTF_HWHEEL = $1000; 
mouse_event(MOUSEEVENTF_HWHEEL, 0, 0, 120, 0);

垂直滚动与MOUSEEVENTF_WHEEL效果很好。结果与SendInput相同,返回值表示成功。我当前的鼠标支持水平倾斜,但没有水平滚动条。

需要什么使用MOUSEEVENTF_HWHEEL

SDK文档:http://bit.ly/mouse_event

鼠标钩子

我创建第二个32位的exe程序在Windows 7下只看到如果当水平车轮滚动鼠标发送消息。该钩子接收VSCROLL,但没有HSCROLL消息。

MouseHook := SetWindowsHookEx(WH_MOUSE_LL, @MouseProc, hInstance, 0); 
+0

由于这似乎是德尔福或其他一些帕斯卡方言,您应该添加另一个标签。尽管在这个方言中没有特殊的知识来回答API问题 – 0xC0000022L

+1

我在讨论论坛和其他QA网站上搜索了几个小时......许多人都有着相同的问题,使用众所周知的编程语言:VB,C等。很快拒绝了这个假设。不过,我保留在怀疑列表我的exe头文件,XML清单,常量和函数声明。但我相信另一个X因素缺失。我在滚轮鼠标消息上设置了一个系统范围的窗口钩子。检测到VSCROLL,但钩子与HSCROLL无关。 – rjobidon

+0

顺便说一句:是低水平还是低水平?你可以请你发布你正在设置的钩子类型......? ...... WH_MOUSE或WH_MOUSE_LL? ...还有,因为这是一个钩子,你在x64或x86 Windows上运行,并且是钩子DLL 32位或64位......你甚至使用DLL吗? – 0xC0000022L

回答

2
int main() 
{ 
    Sleep(20000); // enough time to switch windows and position the mouse pointer 
    mouse_event(MOUSEEVENTF_HWHEEL, 0, 0, 120, 0); 
    return 0; 
} 

滚动我选择的Firefox页面右侧。该窗口必须被选中并且鼠标指针必须在页面上。我是用鼠标启用的。或者在测试时关闭鼠标(使用鼠标本身的开/关开关),结果是一样的。 我的鼠标也有水平倾斜,没有滚动条。 (Windows 7旗舰版)

编辑

有一点要注意:该程序本身需要处理的消息。例如Firefox。它显示与倾斜鼠标滚轮相同的行为:页面相应地向左/向右滚动。 其他程序,如IE,似乎不处理这个消息,所以根本不滚动。即使使用鼠标(不带任何附加软件包的Logitech Performance MX)也不会滚动。 因此,通过发送mouse_event消息似乎没有100%的解决方案。

+0

你的建议在我的代码中没有成功。我将尝试一个新的空应用程序,像你的C++。你有微软鼠标(Intellipoint驱动程序)还是罗技鼠标(SetPoint驱动程序)。如果Windows 7尚不支持HSCROLL,也许鼠标驱动程序直接将WM_HSCROLL消息发送到滚动条... – rjobidon

+0

我正在使用Microsoft鼠标。明天我会在我的笔记本电脑上试用此代码,不附带任何鼠标 – esskar

+0

我的原始代码和您的工作在Chrome和Safari中,但不能在Internet Explorer或Adobe Acrobat阅读器中使用。仍然缺少一个小黑客。 – rjobidon