Laden...

Last.fm Standalone player

Erstellt von wayne42 vor 16 Jahren Letzter Beitrag vor 15 Jahren 1.475 Views
W
wayne42 Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren
Last.fm Standalone player

Hallo Leute.

Ich habe den Last.fm Standalone Player bei mir laufen und in der Taskleiste versenkt. Jetzt wollte ich mir en kleines Tool basteln, womit ich komfortabler skippen kann. Der Player unterstützt Shortcuts, aber die nützen einem nix, wenn der Player nich grad fokussiert ist. Kann ich irgendwelche Commands an den Player über ein anderes Tool senden, dass er skippen soll?

N
335 Beiträge seit 2006
vor 16 Jahren

Hallo wayne42,

Wenn die Funktionalität nicht über irgendeine API vom Player selbst angeboten wird, bleibt dir noch der Weg über die Buttons.
Mittels Tools wie Spy++ oder Ähnlichen kannst du die WindowClass und ID / Handle des Buttons ermitteln. Über SendMessage() kannst du dann eine MouseClick Message an den Button senden.

Stichworte hierzu: P/Invoke, SendMessage, FindWindow, WindowClass, etc.

Mfg NeuroCoder

W
wayne42 Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren

danke für die Idee. Ich wusste nicht, dass so etwas geht. Kannst du mich noch ein bisschen weiter schubsen? Bin leider noch totaler Noob und wüßte jetzt nicht direkt, wo ich da anfangen sollte.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo wayne42,

Stichworte hast du ja. Weitergehende Informationen findest du über Google und die Forumssuche. Das Thema wurde schon mehrfach besprochen. Die besten Treffer kannst du gerne hier posten.

herbivore

W
wayne42 Themenstarter:in
11 Beiträge seit 2007
vor 16 Jahren

ok... jetzt hab ich das handle des players, aber sendmessage will irgendwie nicht.

mit :


System.Diagnostics.Process lastfm;

System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses();
            for (int i = 0; i < processes.Length; i++)
            {
                if (processes[i].MainWindowTitle != "" && processes[i].MainWindowTitle.Contains("–"))
                {
                    lastfm = processes[i];
                }
            }

            if (lastfm == null)
            {
                MessageBox.Show("Last.fm is not running.");
                return;
            }
            else
            {
                System.Diagnostics.Debug.WriteLine(lastfm.MainWindowTitle);
                SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.Space, IntPtr.Zero);
            }

funktionierts. Auf das Leerzeichen sollte die Anwendung stoppen, aber es passiert gar nichts. Das eigentliches skippen habe ich noch gar nicht gefunden... das wäre eine Kombination aus "strg"+"rechts". Geht sowas überhaupt?

W
wayne42 Themenstarter:in
11 Beiträge seit 2007
vor 15 Jahren

gibt es da einen Trick oder mach ich etwas grundlegendes falsch? ich wollte eigentlich nur noch eine message an den button senden, wenn das tool minimiert ist

187 Beiträge seit 2005
vor 15 Jahren

Hallo,

also zum einen fällt mir auf, dass du den lastfm prozess nicht in allen fällen initialisiert hast.

besser wäre

Processes lastfm = null;

was glaub ich noch fehlt ist vielleicht ein key up 😉 jede taste die du drückst muss irgendwann auch losgelassen werden.

Ich kenn mich mit SendMessage nicht aus. Nutze bis jetzt für solche fälle nur SendKeys. Da Tastendrücke aber fast gleich sind müsstest du einfach nur dafür sorgen, dass die taste wieder losgelassen wird.

SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.Space, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYUP, (int)Keys.Space, IntPtr.Zero);

Für eine Tastenkombination wäre das hier nicht falsch.

SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.LControlKey, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYDOWN, (int)Keys.Right, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYUP, (int)Keys.Right, IntPtr.Zero);
SendMessage(lastfm.Handle, WM_KEYUP, (int)Keys.LControlKey, IntPtr.Zero);

Für WM_KEYUP musst du gucken welche zahl der für taste hoch brauch. Außerdem weiß ich nicht ob zu KeyUp die Taste angegeben werden muss, ist aber eigentlich logisch.

Insgesamt aber unverbindlich. Ich kenne SendMessage nicht würde aber mal versuchen ob das so funktioniert.

EDIT:
Mir fällt gerade ein, dass die Keys Klasse vielleicht den falschen Tastencode hat und deswegen dein code nicht funktioniert. Musst mal in der Zeichentabelle nachgucken