Problem beim generierten Mausklick
-
Folgendes:
taste 1-3 lässt jeweils einen mausklick an einer bestimmten stelle generieren
taste 4 soll 10 mausklicks an verschiedenen stellen generieren.
so wie ich es programmiert habe werden aber nur 10 positionen angewählt und erst ab der 10. der mausklick generiert. ich will aber nach jeder position einen mausklick generiert habenLRESULT CLosDososZielwasserDlg::OnHotKey(WPARAM wp, LPARAM lp) { TRACE(_T("OnHotKey\n")); if (wp == m_nIDHotKey1) { ::SetCursorPos(m_pos1h, m_pos1v); Sleep(50); TRACE(_T("Key1\n")); } else if (wp == m_nIDHotKey2) { ::SetCursorPos(m_pos2h, m_pos2v); Sleep(50); TRACE(_T("Key2\n")); } else if (wp == m_nIDHotKey3) { ::SetCursorPos(m_pos3h, m_pos3v); Sleep(50); TRACE(_T("Key3\n")); } else if (wp == m_nIDHotKey4) { ::SetCursorPos(m_pos4h, m_pos4v); Sleep(50); TRACE(_T("Key4\n")); ::SetCursorPos(m_pos5h, m_pos5v); Sleep(50); TRACE(_T("Key5\n")); ::SetCursorPos(m_pos6h, m_pos6v); Sleep(50); TRACE(_T("Key6\n")); ::SetCursorPos(m_pos7h, m_pos7v); Sleep(50); TRACE(_T("Key7\n")); ::SetCursorPos(m_pos8h, m_pos8v); Sleep(50); TRACE(_T("Key8\n")); ::SetCursorPos(m_pos9h, m_pos9v); Sleep(50); TRACE(_T("Key9\n")); ::SetCursorPos(m_pos10h, m_pos10v); Sleep(50); TRACE(_T("Key10\n")); ::SetCursorPos(m_pos11h, m_pos11v); Sleep(50); TRACE(_T("Key11\n")); ::SetCursorPos(m_pos12h, m_pos12v); Sleep(50); TRACE(_T("Key12\n")); ::SetCursorPos(m_pos13h, m_pos13v); Sleep(50); TRACE(_T("Key13\n")); } ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); return 0; }
-
keiner ?
-
Na, dann musst du das eben jedes Mal machen...
LRESULT CLosDososZielwasserDlg::OnHotKey(WPARAM wp, LPARAM lp) { TRACE(_T("OnHotKey\n")); if (wp == m_nIDHotKey1) { ::SetCursorPos(m_pos1h, m_pos1v); Sleep(50); TRACE(_T("Key1\n")); } else if (wp == m_nIDHotKey2) { ::SetCursorPos(m_pos2h, m_pos2v); Sleep(50); TRACE(_T("Key2\n")); } else if (wp == m_nIDHotKey3) { ::SetCursorPos(m_pos3h, m_pos3v); Sleep(50); TRACE(_T("Key3\n")); } else if (wp == m_nIDHotKey4) { ::SetCursorPos(m_pos4h, m_pos4v); Sleep(50); TRACE(_T("Key4\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos5h, m_pos5v); Sleep(50); TRACE(_T("Key5\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos6h, m_pos6v); Sleep(50); TRACE(_T("Key6\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos7h, m_pos7v); Sleep(50); TRACE(_T("Key7\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos8h, m_pos8v); Sleep(50); TRACE(_T("Key8\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos9h, m_pos9v); Sleep(50); TRACE(_T("Key9\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos10h, m_pos10v); Sleep(50); TRACE(_T("Key10\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos11h, m_pos11v); Sleep(50); TRACE(_T("Key11\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos12h, m_pos12v); Sleep(50); TRACE(_T("Key12\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); ::SetCursorPos(m_pos13h, m_pos13v); Sleep(50); TRACE(_T("Key13\n")); } ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); return 0; }
Da würde sich übrigens anbieten, dass in eine Funktion auszulagern, dann ist es auch nicht mehr so unübersichtlich. Da passiert ja fast immer das selbe.
-
schrecklich
-
ach du schande. da gibts doch bestimmt was einfacheres oder ?
-
Logisch, das erfordert nur etwas Nachdenken.
Mach doch eine Funktion, der du eine Referenz auf die Koordinaten und den Tracetext übergibst.
Oder du machst das alles mit Arrays und kannst gleich über einen Index zugreifen.Ist doch nur schrecklich, wenn man es auf die faule Version macht.
-
sicher. aber als anfänger muss man manchmal auf die faule version zurückgreifen
-
Hast du denn verstanden, wie ich das meine?
Wenn nein, dann sag mal den Typ von m_pos1h, m_pos1v.
Außerdem wäre es nützlich, wenn m_nIDHotKey1 usw. aufeinanderfolgende Zahlen wären, dann kannst du die gleich (mit evtl. etwas Rechnen) als Index für das Array nehmen.
-
das sind long variablen.
sind nicht aufeinanderfolgend.
-
Okay.
Also, als erstes ersetzt du die Variablen durch je ein Array.
Im Header brauchst du:typedef CArray<long, long> CLongArray; CLongArray m_arrPosH; CLongArray m_arrPosV; void MachKlick(long lIndex, CString strTrace); // Das ist die Funktion, die ich meinte.
Und im Cpp:
CLosDososZielwasserDlg::CLosDososZielwasserDlg() { // Die Arrays füllen m_arrPosH.Add(/*Das, was du m_pos1h zugewiesen hattest.*/); m_arrPosH.Add(/*Das, was du m_pos2h zugewiesen hattest.*/); m_arrPosH.Add(/*Das, was du m_pos3h zugewiesen hattest.*/); // usw. und mit m_arrPosV entsprechend. } void CLosDososZielwasserDlg::MachKlick(long lIndex, CString strTrace) { ::SetCursorPos(m_arrPosH.GetAt(lIndex), m_arrPosV.GetAt(lIndex)); Sleep(50); TRACE(strTrace + _T("\n")); ::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL); ::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL); ::keybd_event(VK_SPACE, 0, 0, 0); ::keybd_event(VK_SPACE, 0, KEYEVENTF_KEYUP, 0); }
Nun musst du nur noch die passende Nummer übergeben und fertig.
Die Funktion müßte jetzt auf 23 Zeilen zusammenschrumpfen ( {} sind mitgezählt)
Okay?
-
danke werds gleich einbauen und testen