Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MK_控制i WM_鼠标滚轮_C++_Winapi - Fatal编程技术网

C++ MK_控制i WM_鼠标滚轮

C++ MK_控制i WM_鼠标滚轮,c++,winapi,C++,Winapi,我尝试使用ctrl+鼠标滚轮来实现缩放功能。如果我使用此代码,活动窗口将滚动,但不会缩放-看起来所有接收此消息的应用程序都无法识别MK_控制标志。有人能告诉我我做错了什么吗 #include "stdafx.h" #include<Windows.h> #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { while(true) { WORD wLow=

我尝试使用ctrl+鼠标滚轮来实现缩放功能。如果我使用此代码,活动窗口将滚动,但不会缩放-看起来所有接收此消息的应用程序都无法识别MK_控制标志。有人能告诉我我做错了什么吗

#include "stdafx.h"
#include<Windows.h>
#include<iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
while(true)
    {
    WORD wLow=MK_CONTROL;
    WORD wHigh=240;
    WPARAM par= MAKEWPARAM(wLow, wHigh);
    HWND WindowToScroll =  GetForegroundWindow();
    SendMessage(WindowToScroll, WM_MOUSEWHEEL,par,NULL);
    Sleep(1000);
    cout<<WindowToScroll<<endl;
    }
return 0;
}
#包括“stdafx.h”
#包括
#包括
使用名称空间std;
int _tmain(int argc,_TCHAR*argv[]
{
while(true)
{
字wLow=MK_控制;
单词wHigh=240;
WPARAM par=MAKEWPARAM(wLow,wHigh);
HWND WindowToScroll=GetForegroundWindow();
SeNeMeST(WORDOWOSTROCRLL,WMY鼠标轮,PAR,NULL);
睡眠(1000);

cout假设程序使用MK_控制标志。但这并不典型,程序通常检查实际键盘状态以检查修饰符。GetKeyState()函数


这是一个问题,您不能使用SendMessage()为另一个进程伪造键盘状态。您需要使用SendInput()取而代之的是,实际上为控制键发送一个keydown。伪造鼠标滚轮输入也很好。不要忘记keydup来恢复键盘状态。

假设程序使用MK_控制标志。但这并不典型,程序通常会检查实际键盘状态以检查修饰符。GetKeyState()函数


这是一个问题,您不能使用SendMessage()为另一个进程伪造键盘状态。您需要使用SendInput()取而代之的是,为控制键发送一个向下键。伪造鼠标滚轮输入也很好。不要忘记使用向上键来恢复键盘状态。

WindowToScroll
是否在Ctrl+wheel上实现缩放?如果确实可以,也许你会有一个更好的时间使用类似于
FindWindow
的东西来获得你想要的但通常GetForegroundWindow会找到我想要的窗口。问题是,在Spy++中,我看到f.ex Firefox接收设置了MK_控制标志的WM_鼠标滚轮消息,但只执行滚动而不是缩放。如果我手动执行,在Spy中我会看到与我的程序发送的消息完全相同的消息。但是在这种情况下,它可以工作。也许Firefox不使用
WPARAM
值进行检查。谁知道呢?如果你真的想把它缩小到你所展示的范围,那么就用你自己的100%确定使用它的窗口来做。如果FF使用
GetKeyState
检查控制键是否关闭了呢?那么你的方法就根本不起作用了。是不是ode>WindowToScroll在Ctrl+Wheel上实现缩放?如果f.ex Firefox确实对它做了一些事情,那么使用类似于
FindWindow
的东西来获取所需的窗口可能会更好。但通常GetForegroundWindow会找到我想要的窗口。问题是,在Spy++中,我看到f.ex Firefox接收到WM\u鼠标滚轮设置了MK_控制标志的消息,但只执行滚动而不是缩放。如果我手动执行,在Spy中,我会看到与我的程序发送的消息完全相同的消息。但在这种情况下,它可以工作。可能Firefox不使用
WPARAM
值进行检查。谁知道呢?如果您真的想将其缩小到您显示的内容ted,用你自己的窗口来做,100%确定使用它。如果FF使用
GetKeyState
检查控制键是否已关闭,该怎么办?那么你的方法根本不起作用。