Postmessage personalizzato API API per l’automatizzazione

Voglio automatizzare un programma chiamato Spotify da C #, il modo migliore (penso) per farlo è l’triggerszione di falsi tasti. Voglio programmare per mettere in pausa la riproduzione, e non ne so abbastanza su questa roba per trovare un altro modo di premere i tasti. Quindi uso Spy ++ di Visual Studio per vedere quale messaggio ottiene Spotify quando preme il tasto play sulla mia tastiera, copio i dati da quel messaggio nella mia applicazione console ed eseguo, quando corro, posso vedere PostMessage in Message Logging di Spy ++, quindi questo funziona ma non mette in pausa / riproduce la mia musica. Immagino sia perché devo anche inviare un altro PostMessage con un’altra destinazione, ma come faccio a sapere cos’altro inviare?

Messaggio:

MessageHelper.PostMessage((int)hwndSpotify, 0x100, 0x000000B3, 0x01000001); 

Spero che qualcuno abbia familiarità con questo e possa darmi una mano.

Per automatizzare Spotify, devi prima ottenere l’handle della finestra con il seguente nome di class: SpotifyMainWindow (usando FindWindow ()).

Quindi, è ansible utilizzare il metodo SendMessage () per inviare un messaggio WM_APPCOMMAND alla finestra di Spotify.

Seguendo un semplice codice per farlo:

 internal class Win32 { [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)] internal static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); internal class Constants { internal const uint WM_APPCOMMAND = 0x0319; } } public enum SpotifyAction : long { PlayPause = 917504, Mute = 524288, VolumeDown = 589824, VolumeUp = 655360, Stop = 851968, PreviousTrack = 786432, NextTrack = 720896 } 

Ad esempio, per riprodurre o mettere in pausa la traccia corrente:

 Win32.SendMessage(hwndSpotify, Win32.Constants.WM_APPCOMMAND, IntPtr.Zero, new IntPtr((long)SpotifyAction.PlayPause)); 

Premendo “play buttion” si ottiene un codice tasto virtuale – per un elenco ufficiale vedere http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx .

Esiste per esempio VK_VOLUME_UP VK_MEDIA_PLAY_PAUSE VK_ZOOM .

Anche alcuni telecomandi si traducono in questi codici per essere il più ansible compatibili con il software esistente.

Questi sono stati introdotti nel giorno in cui Windows ME (!) È uscito e sono ancora in uso, almeno quando ho controllato il registro di Windows 2008 R2!

Fondamentalmente, Windows converte alcuni VK * in messaggi WM_APPCOMMAND con determinati codici che le applicazioni ascoltano …
Se la chiave ha qualcosa a che fare con il lancio di un’app da fare (es. Mail, Browser ecc.) La magia avviene tramite Windows Explorer che legge il mapping (per associazione o exec diretto) dal registro di Software\ Microsoft\ Windows\ CurrentVersion\ Explorer\ AppKey – HKLM o HKCU.

Alcuni link con vecchi ma come sembra ancora valide informazioni: