Mausklick per Tastendruck



  • Hallo.

    Brauche Hilfe.

    Ich will ein Programm schreibenmit dem man per Knopfdruck einen Mausklick an einer bestimmten Stelle generieren kann.

    Die Abfrage der Mausposition steht.

    Wie kann ich nun z.B. die Taste 1 mit einem Mausklick belegen und das dieser Mausklick dann an der Position erfolgt die vorher in einer Variablen 1h und 1v abgelegt wurde ?



  • Servus,

    du hast doch

    Firefigther schrieb:

    ...ein Programm geschrieben mit dem man per Knopfdruck einen Mausklick an einer bestimmten Stelle generieren kann.

    wenn das alles nur innerhalb deines Programms geschehen soll, dann fängst du einfach die MSGs WM_KEYDOWN/WM_KEYUP ab und fragst diese nach den VKs ab.

    VK = Virtuel Keys (Was es für welche gibt, einfacher weg, VK_ESCAPE im Source eingeben und rechte Maustaste -> Go To Defenition / MSDN)

    Du benötigst:

    kleiner Ausschnitt aus der winuser.h (definitionen von VKs)

    /*
     * VK_0 - VK_9 are the same as ASCII '0' - '9' (0x30 - 0x39)
     * 0x40 : unassigned
     * VK_A - VK_Z are the same as ASCII 'A' - 'Z' (0x41 - 0x5A)
     */
    

    MSDN -> WM_KEYDOWN/KEYUP

    MSDN schrieb:

    WM_KEYDOWN Notification

    --------------------------------------------------------------------------------

    The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed.

    Parameters

    wParam
    Specifies the virtual-key code of the nonsystem key.

    d.h. du musste den wParam mit den ASCII Zeichen vergleichen
    Bsp.:

    //VK_1 gedürckt
    if (wParam == 0x30)
        DrückeMausAnPos();
    

    Wie du jetzt die MSGs WM_KEYDOWN/UP abfängst ist dir überlassen. Du kannst auch sog. ACCELERATOR bauen und ihnen dann eine Funktion zuweisen. Dazu mehr aber bei www.codeproject.com, www.codeguru.com, www.google.de. Einfach mal suchen.....

    ------------------------

    Möchtest du aber Systemweit die Taste 1 abfangen, solltest du dich mit "KeyboardHooks" beschäftigen. Dazu einfach mal bei google: "Keyboarhook site:www.c-plusplus.net" eingeben. Wirst sicher was finden... 😃

    *winke*
    Hellsgore



  • hab mein anliegen nochmals genauer geschildert. kann mir einer helfen ?



  • Servus,

    Damit kannst du Mausdruck simulieren...

    CPoint cpMousePos;
    cpMousePos.SetPoint(100,100);
    
    SetCursorPos(cpMousePos.x, cpMousePos.y);
    ::mouse_event(MOUSEEVENTF_LEFTDOWN, cpMousePos.x, cpMousePos.y, 0,0);
    		::mouse_event(MOUSEEVENTF_LEFTUP, cpMousePos.x, cpMousePos.y, 0,0);
    

    Mit dem Tastendruck musst du, wie ich es dir oben beschrieben habe, dir einen Keyboardhook bauen. -> www.codeproject.com Gibt es Beispiele dafür, jene du sogar nur noch einfügen und komplieren musst.

    *winke*
    Hellsgore



  • danke. ich probiers heut abend mal aus

    kann es sein das es die site nicht mehr gibt ?



  • Hallo,

    Firefighter2000 schrieb:

    kann es sein das es die site nicht mehr gibt ?

    nein, die Seite ist aber manchmal schwer zu erreichen, aber irgendwann geht es wieder. Auf jeden Fall gehört diese Seite in deine Favoriten, wie auch

    www.codeguru.com/

    MfG



  • also. gelöst wurde das problem folgendermaßen:

    m_nIDHotKey1 = GlobalAddAtom("1");
    	m_nIDHotKey2 = GlobalAddAtom("2");
    	m_nIDHotKey3 = GlobalAddAtom("3");
    	m_nIDHotKey4 = GlobalAddAtom("4");
    	m_nIDHotKey5 = GlobalAddAtom("5");
    	RegisterHotKey(m_hWnd, m_nIDHotKey1, 0, '1');
    	RegisterHotKey(m_hWnd, m_nIDHotKey2, 0, '2');
    	RegisterHotKey(m_hWnd, m_nIDHotKey3, 0, '3');
    	RegisterHotKey(m_hWnd, m_nIDHotKey4, 0, '4');
    	RegisterHotKey(m_hWnd, m_nIDHotKey5, 0, '5');
    
    LRESULT CLosDososZielwasserDlg::OnHotKey(WPARAM wp, LPARAM lp)
    {
    	TRACE(_T("OnHotKey\n"));
    	if (wp == m_nIDHotKey1)
    	{
    		TRACE(_T("Key1\n"));
    		::SetCursorPos(m_pos1h, m_pos1v);
    	}
    	else if (wp == m_nIDHotKey2)
    	{
    		TRACE(_T("Key2\n"));
    		::SetCursorPos(m_pos2h, m_pos2v);
    	}
    	else if (wp == m_nIDHotKey3)
    	{
    		TRACE(_T("Key3\n"));
    		::SetCursorPos(m_pos3h, m_pos3v);
    	}
    	else if (wp == m_nIDHotKey4)
    	{
    		TRACE(_T("Key4\n"));
    		::SetCursorPos(m_pos4h, m_pos4v);
    	}
    	else if (wp == m_nIDHotKey5)
    	{
    		TRACE(_T("Key5\n"));
    		::SetCursorPos(m_pos5h, m_pos5v);
    	}
    	::mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL);
    	::mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL);
    	return 0;
    }
    

    das problem was ich habe ist, wenn ich z.b. die 1 klicke generiert er den mausklick auf position 1. klicke ich nun die 2 sollte er auf position 2 generieren. er generiert aber dann auch auf position 1. erst nach dem 2, klick generiert er auf position 2.



  • schon erledigt. fehlte ein sleep();


Anmelden zum Antworten