使用 2 个鼠标按钮激活和停用 `while` 循环
Activating and deactivating `while` loop with 2 mouse buttons
我想用 2 个鼠标按钮激活 while 循环。
第一个按钮应该启动和停止,第二个按钮应该停止和重置。
有效,但我无法重置第一个按钮。
我尝试了很多 GetKeyState()
和 GetAsyncKeyState()
变体。
bool loopy = false;
int main()
{
while (true) {
if (GetKeyState(VK_XBUTTON2) > 0) {
loopy = true;
}
else {
loopy = false;
}
if (GetKeyState(VK_XBUTTON1) < 0) {
loopy = false;
// BYTE keystate[256] = { 0 };
// SetKeyboardState(keystate);
}
if (loopy) {
// do stuff...
}
}
}
解决方案,如果有人感兴趣:)
bool loopy = false;
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (wParam == WM_XBUTTONDOWN) {
if (HIWORD(((PMSLLHOOKSTRUCT)lParam)->mouseData) == XBUTTON2)
{
loopy = !loopy;
return true;
}
else if (HIWORD(((PMSLLHOOKSTRUCT)lParam)->mouseData) == XBUTTON1)
{
loopy = false;
return true;
}
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
while (true)
{
if (loopy)
{
// do stuff
}
}
}
int main(void)
{
SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, GetModuleHandle(0), 0);
CreateThread(0, 0, ThreadProc, 0, 0, 0);
while(GetMessage(0, 0, 0, 0));
ExitProcess(EXIT_SUCCESS);
}
关键部分是:loopy = !loopy;
我想用 2 个鼠标按钮激活 while 循环。
第一个按钮应该启动和停止,第二个按钮应该停止和重置。
有效,但我无法重置第一个按钮。
我尝试了很多 GetKeyState()
和 GetAsyncKeyState()
变体。
bool loopy = false;
int main()
{
while (true) {
if (GetKeyState(VK_XBUTTON2) > 0) {
loopy = true;
}
else {
loopy = false;
}
if (GetKeyState(VK_XBUTTON1) < 0) {
loopy = false;
// BYTE keystate[256] = { 0 };
// SetKeyboardState(keystate);
}
if (loopy) {
// do stuff...
}
}
}
解决方案,如果有人感兴趣:)
bool loopy = false;
LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam)
{
if (wParam == WM_XBUTTONDOWN) {
if (HIWORD(((PMSLLHOOKSTRUCT)lParam)->mouseData) == XBUTTON2)
{
loopy = !loopy;
return true;
}
else if (HIWORD(((PMSLLHOOKSTRUCT)lParam)->mouseData) == XBUTTON1)
{
loopy = false;
return true;
}
}
return CallNextHookEx(0, nCode, wParam, lParam);
}
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
while (true)
{
if (loopy)
{
// do stuff
}
}
}
int main(void)
{
SetWindowsHookEx(WH_MOUSE_LL, LowLevelMouseProc, GetModuleHandle(0), 0);
CreateThread(0, 0, ThreadProc, 0, 0, 0);
while(GetMessage(0, 0, 0, 0));
ExitProcess(EXIT_SUCCESS);
}
关键部分是:loopy = !loopy;