-
Forum: Software-Projekte der Mitglieder
by TiGü,
18. Mai 2018
Bring doch erstmal ein bisschen Übersicht rein.
Es ist ja wieder so eine 3000 Zeilen Unit.
Du hast fünf Stellen, bei denen du ...Device.Activate(IID_IAudioSessionManager... aufrufst.
Baue das doch bitte so um, dass du pro Device (in der Regel nutzt du ja das Default) das nur einmal machst.
Speichere dir alle Referenzen von den Interfaces ab, die du dann benötigst (IAudioSessionControl2,...
-
Forum: Software-Projekte der Mitglieder
by TiGü,
18. Mai 2018
Du weißt doch, wie man eine Callback schreibt, was hält dich auf?
Welche Klasse integriert denn jetzt eigentlich das Interface IAudioSessionNotification?
Der TSessionThread ist es nicht.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
18. Mai 2018
1. Bitte beachte was ich einige Seiten zuvor über das Casten und Versenden von Interface-Pointern schrieb.
2. OnSessionDisconnected könnte möglicherweise mit der 3 Minuten-Regel zusammenhängen, die HolgerX einige Seiten zuvor herausgefunden hat. Hast du das mal länger laufen lassen?
-
Forum: Software-Projekte der Mitglieder
by TiGü,
18. Mai 2018
Eine VCL-Anwendung wie die oben gezeigte besteht aber in der Regel aus mindestens drei Threads.
Zumindest laut Anzeige der IDE.
Das Verhalten scheint es so nur in Windows 7 zu geben.
Unter Windows 10 kann man so viele Threads (die andere Aufgaben machen) erstellen wie man möchte, es wird OnSessionCreate ausgelöst. Sogar im Mainthread und im extra dafür erstellten Thread.
Siehe Screenshot....
-
Forum: Software-Projekte der Mitglieder
by TiGü,
17. Mai 2018
Wo kommt das her? Quelle?
Und schriebst doch ein paar Beiträge vorher, das du mit meiner Memo-Testanwendung auf deinen Windows 7 ein OnSessionCreated erhalten hast.
Ist dem doch nicht so?
EDIT: https://www.delphipraxis.net/1402335-post112.html
-
Forum: Software-Projekte der Mitglieder
by TiGü,
17. Mai 2018
Wie denn nun Herr Weiss?
Mit oder ohne extra Thread? Entscheiden Sie sich.
Das OnSessionCreated kommt sowohl im externen Thread, als auch im normalen GUI-Mainthread.
Einzig und allein der Aufruf von GetSessionEnumerator ist der entscheidende Punkt.
Nicht mehr und nicht weniger sollte das Beispiel zeigen.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
17. Mai 2018
Natürlich kann es vergleichen. Man kann es nur nicht gleichsetzen! Man beachte den Unterschied.
Immer wenn ich mit einem Programmierproblem nicht weiterkomme, versuche ich das Problem zu isolieren.
Das geht am Besten in einen Konsolenprogramm oder einer fast nackten Formularanwendung.
Nur so sieht man letztendlich den oder die Unterschied(e) bzw. Fehler zum eigentlichen Projekt und kann es...
-
Forum: Software-Projekte der Mitglieder
by TiGü,
17. Mai 2018
Schreib einfach alles nochmal neu! :-D :roteyes:
-
Forum: Software-Projekte der Mitglieder
by TiGü,
17. Mai 2018
Also in meiner Beispielapplikation mit dem Memo erhälst du OnSessionCreated?
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Larry sagt im verlinkten SO-Post:
Halte dir testhalber mal die Instanzen von Device, SessionManager2 und SessionEnumerator in einer oder mehreren Listen. Siehe Beispielprogramm.
Vielleicht geht es dann.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Hälst du denn die Instanz davon irgendwo oder wird die bei jeden Aufruf überschrieben?
Ist das eine der Methoden, der man eine IMMDevice-Instanz hineingibt?
So dass immer wieder neu GetSessionEnumerator aufgerufen wird?
Vergleiche mal mein Beispielprogramm wenn man GetSessionEnumerator auskommentiert.
Wenn auskommentiert: Kein OnSessionCreated. Wenn einkommentiert: OnSessionCreated wird...
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Ja, Tokyo hat rumgezickt und es musste schnell gehen. Machs dir so wie du es brauchst.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Nutze https://www.deepl.com/translator
Das spuckt für oben zitierten Abschnitt folgendes aus:
Ist nicht perfekt, aber gut verständlich.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Hängt vielleicht mit der Anzahl der Devices zusammen. Ich habe in dem Beispielprogramm über alle Devices iteriert und da über den jeweiligen SessionManager2 die Callback angemeldet. Wenn du dir nur das DefaultDevice geben lässt, sollte das schon weniger sein.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Boah, meine Fresse! Darauf muss man erstmal kommen. :shock: :spin2: :corky: :spin: :roteyes:
Man muss nach Anmeldung der Notifizierung definitiv GetSessionEnumerator aufrufen, dann geht das erst.
Siehe Beispielprojekt im Anhang!
Drauf gekommen bin ich deswegen:
https://stackoverflow.com/a/740241
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Ich verstehe das so, dass der Soundtreiber entscheiden kann, ob er diese Funktionalität unterstützt.
Wenn das nicht implementiert ist, dann wird das von der Anwendung implementierte OnSessionCreated nicht aufgerufen.
Zwar wird bei der Anmeldung per RegisterSessionNotification ein S_OK zurückgeliefert, aber der Zeiger auf die Methode nirgends abgespeichert und verwendet.
Werden denn die...
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Und um genau zu sein in den ersten Zeilen von TApplication.Create.
Da wird OleInitialize aufgerufen, was laut MSDN (https://msdn.microsoft.com/de-de/library/windows/desktop/ms690134(v=vs.85).aspx) CoinitializeEx aufruft.
Das ist auch so richtig und wichtig, weil sonst ClipBoard und Drag'n'Drop nicht funktionieren würden.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Nicht die Sprache, das Framework! Nicht verwechseln!
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Siehe Zeile 605:
https://github.com/wine-mirror/wine/blob/master/dlls/mmdevapi/devenum.c
verweist auf Zeile 55:
https://github.com/wine-mirror/wine/blob/master/dlls/mmdevapi/mmdevapi.h
-
Forum: Software-Projekte der Mitglieder
by TiGü,
16. Mai 2018
Gern!
Kann es sein, dass das Aufrufen der Callback von IAudioSessionNotification abhängig ist vom Treiber?
Der Treiber kann, muss das aber nicht implementieren.
Zumindest sieht das auf den ersten Blick so aus, wenn man sich die Wine-Quelltexte anschaut.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
15. Mai 2018
Beispiel für die Anwendung der Events, Notifications und Callbacks in der Hauptkomponente TAudioVolume. Beachte die neuen Methoden am Ende der Unit AudioVolume.pas.
Sollte in Delphi 2010 das hier nicht verfügbar sein: TThread.Current.ThreadID dann kannst du das mit GetCurrentThreadId ersetzen.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
14. Mai 2018
Also wenn überhaupt, zeige ich dir das anhand der Ableitung von TWinControl.
Bei den ewig langen und komplizierten NonVCL-Quelltexten kriege ich Pickel auf den Augen.
-
Forum: Software-Projekte der Mitglieder
by TiGü,
14. Mai 2018
Ist das noch aktuell, soll ich dir das mal zeigen was ich meine oder ist jetzt eh schon egal?
-
Forum: Software-Projekte der Mitglieder
by TiGü,
10. Mai 2018
Der Aufwand wäre nur, die ganze processmsg-Methode wegzumachen und die einzelnen Teile rauszukopieren und anstatt den jeweiligen PostMessage-Aufrufen hinzukopieren. Dazu noch prüfen if Mainthread <> GetCurrentThreadId then Sync.
Alles in allen keine 10 min Arbeit und auch nur wenn man sich sehr viel Zeit lässt beim Drücken von Strg+C und Strg+V.
Am Ende haste viel weniger Quelltext gesamt...
-
Forum: Software-Projekte der Mitglieder
by TiGü,
10. Mai 2018
Jetzt kannst du das Postmessage weglassen und direkt reagieren.