![]() |
Re: Virtueller Klick auf fremdes Fenster
Zitat:
Hab's mal so probiert und es scheint zu funktionieren:
Delphi-Quellcode:
uses ComObj;
procedure TForm1.Button1Click(Sender: TObject); var iTunesApp: OLEVariant; begin // iTunes Objekt erzeugen iTunesApp := CreateOleObject('iTunes.Application'); if not VarIsNull(iTunesApp) then begin iTunesApp.Play; // iTunesApp.Pause; // iTunesApp.Stop; // iTunesApp.NextTrack; // am Ende... if not VarIsNull(iTunesApp) then iTunesApp := Unassigned; end; end; |
Re: Virtueller Klick auf fremdes Fenster
Zitat:
|
Re: Virtueller Klick auf fremdes Fenster
Das geht so:
Delphi-Quellcode:
Aufruf der Funktion:
function getCurrentTitle(iTunesApp: OleVariant) : string;
begin Result := iTunesApp.CurrentStreamTitle; if Result = '' then Result := iTunesApp.CurrentTrack.Name; end;
Delphi-Quellcode:
Label1.Caption := getCurrentTitle(iTunesApp);
|
Re: Virtueller Klick auf fremdes Fenster
Ich hab letztes Jahr geraume Zeit mit dem iTunes COM-Interface zugebracht und wollte daher mal ein paar kleine Tips einbringen:
- iTunes nimmt sich öfter mal die Freiheit, COM-Anforderungen zu ignorieren. Man sollte darauf gefasst sein, und den Aufruf ggf. nach ein paar Millisekunden Wartezeit wiederholen. - iTunes reagiert nicht auf COM-Aufrufe wenn der User gerade in iTunes was macht, auch darauf sollte man gefasst sein und entsprechend reagieren. - Wurde iTunes bereits über COM angesprochen, und sind COM-Events registriert, so signalisiert iTunes in der Regel "ich bearbeite jetzt erstmal keine COM-Anfragen mehr" und "ich bin jetzt wieder verfügbar". Es gab allerdings auch schon iTunes-Versionen in denen das kaputt war :) - Wurden COM-Events registriert, so scheint es nicht mehr möglich zu sein, die eigene Applikation sauber von iTunes abzukoppeln. Ob das bei den aktuellen Versionen immer noch so ist, müsste ich mal ausprobieren, im letzten Quartal 2006 wars auf jeden Fall noch so und hat mich einige graue Haare gekostet, weil das einzige was reproduzierbar ohne irgendwelche Crashes ging, ein "iTunesApp.Quit;" war :) |
Re: Virtueller Klick auf fremdes Fenster
Hallo,
ich habe bei mir aus dem oben genannten Beispiel folgendes gebastelt:
Delphi-Quellcode:
wenn ich auf dies nun zugreifen möchte erhalte ich die Meldung, das der Coinitialize nicht gefunden wurde. Nach ner weile goolgen und lesen habe ich erfahren, dass ich irgendwie OEVariants oder so iregndwie nach dem Com unterordnen muss aber schlau werde ich daraus nicht.
unit uItunes;
interface uses ComObj; //Itunes Com Port type tItunes = Class(tObject) public function getItunesVol: longint; function getCurrentTitle : string; Constructor Create; destructor free; protected private iTunesApp : OleVariant; end; implementation Constructor tItunes.Create; begin iTunesApp := CreateOleObject('iTunes.Application'); end; destructor tItunes.free; begin iTunesApp := Unassigned; end; function tItunes.getItunesVol: longint; begin Result := iTunesApp.SoundVolume; end; function tItunes.getCurrentTitle : string; begin Result := iTunesApp.CurrentTrack.Name + ' - ' + iTunesApp.CurrentTrack.artist; end; end. Auch dachte ich, den Fehler umgehen zu könne, indem ich das in eine eigene Unit packe aber diese Hoffnung wurde dann auch zerstört. kann mir jemand sagen, wie ich die Applikation schreiben muss, damit ich von aussen über getCurrentTitle und getItunesVol an verschiedenstellem im Ausgangsprogramm zugriffbekomme, ohne ständig irgendwelche Zugriffs- und Coinitializefehler zu produzieren? |
Re: Virtueller Klick auf fremdes Fenster
nun ja jetzt habe ich eine möglichkeit gefunden, wie ich die Itunes Daten im Mainprog an einer Stelle nur auslese, somit hab ich das Problem mit Coinitialize umgangen. aber das Gelbe vom Ei ist es irgendwie noch nicht wirklich.
Grüße Killerregenwurm |
Re: Virtueller Klick auf fremdes Fenster
Die eigentliche Frage ist noch immer offen: Wie kann ich virtuelle Klicks ausführen, ohne das der User den Cursor hin und her wandern sieht?
|
Re: Virtueller Klick auf fremdes Fenster
Zitat:
Delphi-Quellcode:
z.B. im initialization-Abschnitt deiner ausgelagerten Unit.
[url=http://msdn.microsoft.com/en-us/library/ms678543%28VS.85%29.aspx]CoInitialize(nil)[/url]
Dürfte doch bei deiner Suche auch bei jedem zweiten Post angemerkt worden sein. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz