我正在编写一个程序,扫描是否按下鼠标左键,然后向上发送鼠标左键并在此之后继续。问题是,由于我发送鼠标左键,程序将无法继续,因为鼠标左键不再被按下。
这是一些伪:
if(GetKeyState(VK_LBUTTON) < 0){
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
//Rest of code
}
如何在此之后检测到鼠标左键是否已关闭?我必须使用驱动程序吗?
答案 0 :(得分:1)
只需使用标志:
bool lButtonWasDown=flase;
if(GetKeyState(VK_LBUTTON) < 0){
Sleep(10);
lButtonWasDown = true;
mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
}
if (lButtonWasDown)
{
// rest of the code for lButtonWasDown = true
}
答案 1 :(得分:0)
我还没有测试过这段代码,但它应该可以运行
while(programIsRunning)
{
if(GetKeyState(VK_LBUTTON) < 0){
Sleep(10);
mouse_event(MOUSEEVENTF_LEFTUP, p.x, p.y, 0, 0);
// rest of the code
}
它应该有效,因为如果在循环重新运行时保持Lmouse按钮,则会触发if语句,然后触发mouseup事件。
请注意:
您可以while(GetKeyState(VK_LBUTTON) < 0){//code here}
答案 2 :(得分:0)
从阅读你对程序的描述来看,这里只是我的实现。 使用Windows API:
while (true) {
//check if left mouse button is down
if (GetKeyState(VK_LBUTTON) & 0x8000) {
//send left mouse button up
//You might want to place a delay in here
//to simulate the natural speed of a mouse click
//Sleep(140);
INPUT Input = { 0 };
::ZeroMemory(&Input, sizeof(INPUT));
Input.type = INPUT_MOUSE;
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
::SendInput(1, &Input, sizeof(INPUT));
}
}
如果您想要在强行阻止人们点击和拖动时执行其他操作,您可以将此代码放入您在线程中调用的函数中。
void noHoldingAllowed() {
//insert code here used above...
}
int main(void) {
std::thread t1(noHoldingAllowed);
//other stuff...
return 0;
{