![]() |
AW: Befehl immer wieder ausführen ohne CPU belastung
Also es geht um Flightsimulator X, hast du zu selbigen mal die 2 Service Packs ausprobiert? Das währe auf jedenfall ne bessere Lösung als das irgend ein selbstgeschriebenes Programm erledigen zu lassen ;)
|
AW: Befehl immer wieder ausführen ohne CPU belastung
Hey
Ja klar hab ich gemacht, bringt leider nix. Auch in Foren zum FSX gibt es nirgens eine Lösung deswegen wollte ich halt selber probieren. Christoph PS: Sorry wegen dem andern Thread, kenn mich hier noch net so aus ;-) Hier nochmal das Problem: Es geht um nen Flugsimulator. Das Problem dort ist, wenn man ihn im Fenstermodus laufen lässt (was für meine Anwendung nicht anders geht) dann geht der Sound sofort weg wenn man wo anders hinklickt, deshalb wollte ich halt etwas haben was ihn im Vordergrund hält oder bzw dann sofort wieder zurück bringt wenn man wo anders hingeklickt hat. Mit Deskpins geht leider nicht, das Fenster bleibt zwar im Vordergrund aber leider nicht aktiv -> Sound geht aus Und ich wollt das halt mit einem Button aktivieren und mit nem anderen abbrechen. Habs jetzt so gemacht:
Delphi-Quellcode:
Problem 1:
procedure TForm1.Timer1Timer(Sender: TObject);
var fHandle, fHandle2: HWND; begin fHandle := FindWindow('fs98main', nil); if (fHandle <> 0) then begin BringWindowToTop(fHandle); SetForeGroundWindow(fHandle); end; end; procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled:=True; end; procedure TForm1.Button2Click(Sender: TObject); begin Timer1.Enabled:=False; end; Wenn der Timer auf 50ms oder 100ms gestellt ist muss man schon öfter die Abbrechen Taste drücken bis der befehl durchkommt. Problem 2: Wenn Ich das Programm unter Delphi teste funktioniert es immer. Wenn ich es allerdings alleine (nur die .exe) starte, bringt es den Flugsimulator auch in den Vordergrund wenn ich aber danach ein Windows fenster anklicke funktioniert es anscheinend nicht mehr. Der Flugsimulator blinkt zwar unter in der Taskleiste kommt aber nicht in den Vordergrund. Vlt geht das mit dem Sound ja auch anders???? Man Kann im Flugsimulator die Sound-Device ID einstellen. Kann man vlt ein Neues Device erstellen was den Sound immer weitergibt an das richtige Device? Danke schonmal für die Antworten Christoph |
AW: Befehl immer wieder ausführen ohne CPU belastung
versuchs mal mit dem reagieren auf die Windows-Botschaft WM_NCACTIVATE().
:-mschmidt |
AW: Befehl immer wieder ausführen ohne CPU belastung
Zitat:
|
AW: Befehl immer wieder ausführen ohne CPU belastung
Standardmäßig bietet er aber "logisch" gesehn genau die 2 nötigen Zustände.
|
AW: Befehl immer wieder ausführen ohne CPU belastung
MSchmidt - WM_NCACTIVATE()
Hab das mit dem WM_NCACTIVATE() mal ausprobiert. Wie das bei meiner eigenen Form funktioniert ist klar aber wie kann ich das denn allgemein überwachen, welches Programm grade diesen Befehl bekommt. Christoph |
AW: Befehl immer wieder ausführen ohne CPU belastung
Ich würde mal sagen, da du ja das Fensterhandle von deinem Prozess hast, kannst du auch an das die Nachricht schicken (Send-/PostMessage). Als Parameter solltest du für wParam ein TRUE und für lParam ein -1 nehmen. Laut
![]() Bernhard |
AW: Befehl immer wieder ausführen ohne CPU belastung
Ja das könnte ich machen, aber das Problem war ja primär zu wissen wann es auf nicht aktiv gesetzt wird um dann was dagegen zu tun. Momentan mach ich das halt alle 100ms oder so, und das is ja nicht so das wahre.
Oder hab ich dich jetzt falsch verstanden? Christoph |
AW: Befehl immer wieder ausführen ohne CPU belastung
Also hab das WM_NCACTIVATE ausprobiert. Mit Notepad funktionierts. Bin momentan nicht an meinem anderen Rechner, deswegen kann ich das mitm sound grad nicht ausprobieren.
Das mit dem lParam hab ich allerdings noch nicht so ganz verstanden. Hab Einstellung 1, 0, -1 ausprobiert und nicht wirklich einen unterschied gemerkt. Zur Aktivierung die Aktion ausgeführt wird hab ich mir überlegt, dass man ja nach jedem Mausklick ein bisschen wartet und es dann ausführt. Gibt es eine Möglichkeit den Mousklick auf dem gesamten Desktop zu überwachen? Oder geht das nur innerhalb der Form? Christoph |
AW: Befehl immer wieder ausführen ohne CPU belastung
Du kannst alle Mausklicks durch einen Hook überwachen. Wenn dann einer dabei ist, der außerhalb deines Fensters ist, kannst du ihn entweder blocken oder einen in das Fenster nachsetzen.
Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:03 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