Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Virtueller Klick auf fremdes Fenster (https://www.delphipraxis.net/84279-virtueller-klick-auf-fremdes-fenster.html)

toms 17. Jan 2007 09:05

Re: Virtueller Klick auf fremdes Fenster
 
Zitat:

Zitat von toms
Der Shortcut für Start/Stop in ITunes ist die Leertaste.
Du kannst daher mal probieren, ein VK_SPACE der Anwendung zu senden.

Das funktioniert leider nicht...

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;

Andreas L. 17. Jan 2007 16:32

Re: Virtueller Klick auf fremdes Fenster
 
Zitat:

Zitat von toms
Zitat:

Zitat von toms
Der Shortcut für Start/Stop in ITunes ist die Leertaste.
Du kannst daher mal probieren, ein VK_SPACE der Anwendung zu senden.

Das funktioniert leider nicht...

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;

Das ist ja klasse. Jetzt muss ich nur noch den aktuell abgespielten Titel bekommen... Geht das evtl. auch über dieses OleObject?

toms 17. Jan 2007 18:46

Re: Virtueller Klick auf fremdes Fenster
 
Das geht so:

Delphi-Quellcode:
function getCurrentTitle(iTunesApp: OleVariant) : string;
begin
  Result := iTunesApp.CurrentStreamTitle;
  if Result = '' then
    Result := iTunesApp.CurrentTrack.Name;
end;
Aufruf der Funktion:

Delphi-Quellcode:
Label1.Caption := getCurrentTitle(iTunesApp);

OldGrumpy 3. Apr 2007 09:15

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 :)

Killerregenwurm 29. Feb 2008 19:49

Re: Virtueller Klick auf fremdes Fenster
 
Hallo,

ich habe bei mir aus dem oben genannten Beispiel folgendes gebastelt:
Delphi-Quellcode:
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.
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.

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?

Killerregenwurm 2. Mär 2008 11:37

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

Douglas Quintaine 24. Aug 2009 07:34

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?

Bernhard Geyer 24. Aug 2009 07:43

Re: Virtueller Klick auf fremdes Fenster
 
Zitat:

Zitat von Killerregenwurm
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?

Wie wäre es mit

Delphi-Quellcode:
[url=http://msdn.microsoft.com/en-us/library/ms678543%28VS.85%29.aspx]CoInitialize(nil)[/url]
z.B. im initialization-Abschnitt deiner ausgelagerten Unit.

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.
Seite 2 von 2     12   

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