Domanda

Sto cercando di imparare l'emulazione del mouse / tastiera usando Vinci API.
Ho scoperto che è possibile emulare il pulsante fare clic utilizzando la funzione SendMessage ().

Bene, ottengo le coordinate del pulsante "PLAY" (è (60; 100)) e cercando di premere questo pulsante utilizzando il seguente codice:

            int x = 60;
            int y = 100;
            int lParam = ((x << 16) | (y & 0xffff));

            int parentWindow = FindWindow("BaseWindow_RootWnd", "Main Window");//get main winamp window
            MessageBox.Show(parentWindow.ToString());//failed if 0

            SendMessage(parentWindow, WM_LBUTTONDOWN, IntPtr.Zero, new IntPtr(lParam));//send left mouse button down
            SendMessage(parentWindow, WM_LBUTTONUP, IntPtr.Zero, new IntPtr(lParam));//send left mouse button up
.

Ma questo codice non ha alcun effetto sul Winamp.

Qualcuno può indicarmi sugli errori che ho fatto? Qualsiasi aiuto è molto apprezzato!

P.S. Non è applicabile per me spostare il mouse sul pulsante di riproduzione di Winamp, rispetto a un clic, che spostarlo indietro.
Anche per Winamp è impossibile ottenere la maniglia del pulsante. Con maniglia del pulsante SendMessage () funziona abbastanza bene, ma con le coordinate non lo è affatto.

aggiunta # 1

Bene, il codice sopra attiva la finestra Winamp e lo mostra, se fosse ridotto al minimo. Ma il pulsante Play Stil non vuole essere spinto; (

aggiunta # 2

Qui ci sono messaggi che ottengo dopo l'esecuzione del codice sopra.

Messaggi in Spy ++

È stato utile?

Soluzione 2

Bene, per simulare il clic del mouse in Winamp Winamp è necessario fare esattamente cosa sta succedendo quando lo fai semplicemente con il mouse hardware. Quanto segue è stato scoperto da Spy ++:
Inserisci Descrizione dell'immagine qui

Quindi per emulare il clic del mouse abbiamo bisogno di:

    .
  1. Chiama due volte PostMessage() anziché SendMessage() perché "P" nello screenshot sopra ci dice che il messaggio è stato ottenuto dal postmessage () (secondo MSDN )
  2. I parametri dovrebbero essere i seguenti per il primo postmessaggio ():
    - Primo parametro - Maniglia per finestre Winamp (nel nostro caso è 005E09FA) - Secondo parametro - il codice WinAPI dell'evento, quando il tasto sinistro del mouse è giù (WM_LBUTTONDOWN = 0x201) - Terzo parametro - MK_LBUTTON = 0x1 (sembra, è necessario passarlo. Sarebbe bello se qualcuno può spiegare perché)
    - Quarto parametro - Coordinate del punto in cui si desidera premere il tasto del mouse (questo parametro può essere calcolato come seguente - ((Y << 16) | X))
  3. I parametri dovrebbero essere i seguenti per il secondo postmessage ():
    - Primo parametro - Maniglia per finestre Winamp (nel nostro caso è 005E09FA) - Secondo parametro: il codice WinAPI dell'evento, quando il tasto sinistro del mouse è attivo (WM_LBUTTONUP = 0x202) - Terzo parametro - 0 o IntPtr.Zero
    - Quarto parametro - Coordinate del punto in cui si desidera rilasciare il tasto del mouse (è necessario essere come nel primo postMessage () se si desidera fare clic con il tuo clic per avere un effetto; questo parametro può essere calcolato come seguente - ((Y << 16) | X))

    Grazie a tutti per il loro contributo!

Altri suggerimenti

Per consentire a Winamp Play / Pausa la canzone corrente, è sufficiente inviarlo un messaggio Play / PAUSE, che è lungo 40046 come definito in winamp.h.Dovrai inviarlo in un messaggio WM_WA_IPC (che è un messaggio utente, noto anche come WM_USER) anziché un WM_LBUTTONDOWN.

Allora, qualcosa del genere dovrebbe fare:

SendMessage(parentWindow, WM_USER, IntPtr.Zero, new IntPtr(40046));
.

Maggiori informazioni qui , qui e qui .

Dovresti usare SendInput() per inviare input ad altre applicazioni, non fatturare messaggi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top