C++ 在Windows 8.1中模拟按键
我一直在尝试制作一个程序来垃圾邮件左键点击,因为我的朋友要求我在10秒内点击次数比他多 这是我的密码:C++ 在Windows 8.1中模拟按键,c++,visual-c++,visual-studio-2013,windows-8.1,C++,Visual C++,Visual Studio 2013,Windows 8.1,我一直在尝试制作一个程序来垃圾邮件左键点击,因为我的朋友要求我在10秒内点击次数比他多 这是我的密码: #include <stdio.h> #include <iostream> #include <Windows.h> using namespace std; bool should_click = false; char in; int main() { INPUT ip; ip.type = INPUT_MOUSE;
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;
bool should_click = false;
char in;
int main()
{
INPUT ip;
ip.type = INPUT_MOUSE;
ip.ki.wScan = 0x01; //code for left click ^.^
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
while (!should_click)
{
cin >> in;
if (in == 'g')
should_click = true;
}
while (should_click)
{
// Press the key
ip.ki.wVk = 0x01; // virtual-key code for mouse left click
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the key
ip.ki.dwFlags = MOUSEEVENTF_LEFTUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
Sleep(100);
}
return 0;
}
#包括
#包括
#包括
使用名称空间std;
bool应该单击=false;
炭素;
int main()
{
输入ip;
ip.type=输入\鼠标;
ip.ki.wScan=0x01;//左键单击代码^^
ip.ki.time=0;
ip.ki.dwExtraInfo=0;
而(!应该单击)
{
cin>>中;
如果(in='g')
如果单击=true;
}
while(应该单击)
{
//按键
ip.ki.wVk=0x01;//鼠标左键单击的虚拟键代码
ip.ki.dwFlags=0;//0表示按键
SendInput(1,&ip,sizeof(INPUT));
//释放钥匙
ip.ki.dwFlags=MOUSEEVENTF_LEFTUP;//KEYEVENTF_KEYUP用于密钥释放
SendInput(1,&ip,sizeof(INPUT));
睡眠(100);
}
返回0;
}
当我启动程序并按g键时,Windows会逐渐变为黑色,然后进入屏幕保护程序,然后每隔100毫秒返回桌面。我只模拟了一次按键,它也这么做了(只模拟了一次)
有办法解决这个问题吗
PS:不,我不能在10秒内点击96次PPS:我设法做到了。但我仍然想知道一个解决办法,使一般垃圾邮件发送者。可用于实施恶意软件。ars在MSDN上评论道,这就是为什么它会受到影响。因此,只有在管理权限下运行,才能摆脱这种奇怪的行为 编辑:这有一节介绍UIPI以及如何赋予应用程序绕过它的权利。它不仅涉及以管理员身份运行代码,还涉及在可执行文件的清单中设置
UIAccess
属性,并使用有效证书对代码进行签名。可用于实施恶意软件。ars在MSDN上评论道,这就是为什么它会受到影响。因此,只有在管理权限下运行,才能摆脱这种奇怪的行为
编辑:这有一节介绍UIPI以及如何赋予应用程序绕过它的权利。它不仅涉及以管理员身份运行代码,还涉及在可执行文件的清单中设置UIAccess
属性,并使用有效证书对代码进行签名。可用于实施恶意软件。ars在MSDN上评论道,这就是为什么它会受到影响。因此,只有在管理权限下运行,才能摆脱这种奇怪的行为
编辑:这有一节介绍UIPI以及如何赋予应用程序绕过它的权利。它不仅涉及以管理员身份运行代码,还涉及在可执行文件的清单中设置UIAccess
属性,并使用有效证书对代码进行签名。可用于实施恶意软件。ars在MSDN上评论道,这就是为什么它会受到影响。因此,只有在管理权限下运行,才能摆脱这种奇怪的行为
编辑:这有一节介绍UIPI以及如何赋予应用程序绕过它的权利。它不仅需要以管理员身份运行代码,还需要在可执行文件的清单中设置
UIAccess
属性,并使用有效证书对代码进行签名。问题在于,您基本上是在向SendInput发送随机输入。随机输入->随机输出
要发送鼠标输入,您需要使用输入的union的input.mi(MOUSEINPUT)版本,而不是ki(KEYBOARDINPUT)版本。如果在设置输入结构后设置断点,并查看ip.mi中的值,您可能会看到超出范围x和y以及无效的dwFlags
如果您在union的mi版本之外设置输入结构,那么您应该获得合理的输入。您还需要同时向下和向上发射鼠标以获得完整的单击。通过设置输入结构数组,您可以在一次对SendInput的调用中完成此操作:
UINT click_at(int x, int y)
{
INPUT ip[2] = { 0 };
ip[0].type = INPUT_MOUSE;
ip[0].mi.dx = x;
ip[0].mi.dy = y;
ip[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE;
ip[1].type = INPUT_MOUSE;
ip[1].mi.dx = x;
ip[1].mi.dy = y;
ip[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
return SendInput(ARRAYSIZE(ip), ip, sizeof(INPUT));
}
如果您只想在鼠标恰好位于的任何位置单击鼠标,而不是在特定位置单击鼠标,那么请省去MOUSEEVENTF_MOVE问题在于,您基本上是在向SendInput发送随机输入。随机输入->随机输出 要发送鼠标输入,您需要使用输入的union的input.mi(MOUSEINPUT)版本,而不是ki(KEYBOARDINPUT)版本。如果在设置输入结构后设置断点,并查看ip.mi中的值,您可能会看到超出范围x和y以及无效的dwFlags 如果您在union的mi版本之外设置输入结构,那么您应该获得合理的输入。您还需要同时向下和向上发射鼠标以获得完整的单击。通过设置输入结构数组,您可以在一次对SendInput的调用中完成此操作:
UINT click_at(int x, int y)
{
INPUT ip[2] = { 0 };
ip[0].type = INPUT_MOUSE;
ip[0].mi.dx = x;
ip[0].mi.dy = y;
ip[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE;
ip[1].type = INPUT_MOUSE;
ip[1].mi.dx = x;
ip[1].mi.dy = y;
ip[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
return SendInput(ARRAYSIZE(ip), ip, sizeof(INPUT));
}
如果您只想在鼠标恰好位于的任何位置单击鼠标,而不是在特定位置单击鼠标,那么请省去MOUSEEVENTF_MOVE问题在于,您基本上是在向SendInput发送随机输入。随机输入->随机输出 要发送鼠标输入,您需要使用输入的union的input.mi(MOUSEINPUT)版本,而不是ki(KEYBOARDINPUT)版本。如果在设置输入结构后设置断点,并查看ip.mi中的值,您可能会看到超出范围x和y以及无效的dwFlags 如果您在union的mi版本之外设置输入结构,那么您应该获得合理的输入。您还需要同时向下和向上发射鼠标以获得完整的单击。通过设置输入结构数组,您可以在一次对SendInput的调用中完成此操作:
UINT click_at(int x, int y)
{
INPUT ip[2] = { 0 };
ip[0].type = INPUT_MOUSE;
ip[0].mi.dx = x;
ip[0].mi.dy = y;
ip[0].mi.dwFlags = MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_MOVE;
ip[1].type = INPUT_MOUSE;
ip[1].mi.dx = x;
ip[1].mi.dy = y;
ip[1].mi.dwFlags = MOUSEEVENTF_LEFTUP;
return SendInput(ARRAYSIZE(ip), ip, sizeof(INPUT));
}
如果您只想在鼠标恰好位于的任何位置单击鼠标,而不是在特定位置单击鼠标,那么请省去MOUSEEVENTF_MOVE问题在于,您基本上是在向SendInput发送随机输入。随机输入->随机输出 要发送鼠标输入,您需要使用input.mi(MOUSEINPUT)版本