![]() |
Power button Ereigniss einstellein [gelöst]
Moin
Man kann ja in der Systemsteuerung bei den Energie optionen unter Erweitert einstellen was passieren soll wenn der Powerknopf gedürckt wird. Bei mir gibt es diese beiden optionen: "Ausschalten" "Standbymodus" Meine Frage ist es nun kann man auch noch andere Ereignisse hinzufügen ? Z.B. wenn der Powerbutton gedückt wird dass dann ein Programm startet oder z.B. dass bei ner Musik CD ein lied weiter geschaltet wird? ist das möglich ? Wie kann man sowas programmieren ? Ich hab schon versucht abzufragen wenn windows beendet wird und das closequery auf false zu stellen. Dies funktioniert auch aber nur wenn der Benutzer "Start Beenden" wählt. Nicht aber wenn jemand den power button drückt und desshalb nüzt mir das ganze nichts. Ich währe forh wenn jemand eine idee hat wie man so etwas machen kann. Mein ziil ist es mit dem Powerknopf bei Winamp ein anderes Lied einzustellen. (ich hab mir einen verlängerten powerknopf gemacht 15m kabel) dass ich bequem von neben an den pc (welcher im serverraum steht) ein und ausschalten kann. Und wenn ich über den sound hören will muss ich immer in den serverraum um das lied um zustellen das ist mühsam darum bin ich auf die idee mit dem power knopf gekommen. Ich hoffe jemand hat eine idde thx Greetz Cyrus |
Re: Power button Ereigniss einstellein
Hallo
zu folgenden Abschnitts deines Theards Zitat:
|
Re: Power button Ereigniss einstellein
Also mal ehrlich, hol dir nen infrarot-empfänger und ne fernbedienung, 1000x komfortabler als sowas und kostet nicht die welt.
Zum thema, hab in meinem auto ein laptop eingebaut, welcher über die zündung eingeschaltet wird(relais), wenn der computer läuft soll er durch die zündung nicht wieder ausgeschaltet werden (falls man mal motor abwürgt). powerbuttonfunktion in systemsteuerung auf "schlafen" stellen, dann im programm auf die requestnachricht warten und die anforderung canceln + zusätzlichen code ausführen. gibts sogar ne komponente für die das APM kapselt. TAPM hiess die soweit ich mich erinnere, bei der hatt ich ein bissl geklaut :) MFG V. |
Re: Power button Ereigniss einstellein
Zitat:
So hast du volle kontrolle über WinAmp oder was auch immer du nutzen willst. Das mit Powerknopfkabel ist doch jetzt ein Witz, oder? :wiejetzt: Wenn du ihn von deinem Rechner aus runterfahren willst, dann schreib dir ein kleines Prog., dass das übers Netzwerk kann. Codebeispiele wirst du hier in der DP schon finden. @Vjay Eine Fernbedienung für den Rechner ist eine feine Sache (ich will mir auch eine zulegen), aber mit Infrarot kommst du nicht durch Wände/Hindernisse -> da sollte es schon eine Funkfernbedienung sein. |
Re: Power button Ereigniss einstellein
@Nico Lausch
Nein ich stelle den pc ned so ab, es ist eingestellt dass er in den standbymouds fällt wenn man auf den power knopf drückt. @Vjay ich schaue mir die kompo mal an vielleicht gehts mit der ja :)) thx @all Ich formuliere mich nun ein wenig genauer wie s scheint ist nicht alles so klar. Meiner Server und anderen Rechner sind in einem separatem raum von dort aus gehen alle kabel der pcs (maus,tastatur,monitor) and einen kvu switch. vom Kvu swticht gehen kabel (maus,tastatur,monitor) in mein zimmer doet hab ich eine Maus eine Tastatur und einen Bildschirm und keine einzige workstation. Ich kann von dort aus alle pcs kontrollieren und mit der Tastatur von PC zu PC swtichen. Das powerknopf kabel hab ich für eine workstation damit ich den pc auch von dem raum einschalten kann. von dem aus schalte ich dann über wake on lan die anderen an:) so muss ich nicht in den raum. Da meine normalen workstations auch in dem Raum stehen höre ich auch über die Sound (ein kabel kommt vom server raum in mein zimmer an die sterio anlage). Ich höre oft Musik zum einschlafen, doch ich hab dann keine Lust aufzustehen wenn ein scheiss lied kommt um dies zu ändern. Da hab ich mir überlegt ob es nicht eine Möglichkeit gibt bequem vom bett aus das lied umzustellen. Und da ist mir der Powerknopf eingefallen. Über funk hab ich auch schon nachgedacht jedoch hab ich noch nie was mit funkt gemacht und dann müsste ich noch andere komponenten kaufen. Ich werds wohl so machen müssen ausser es geht auch mit dem powerknopf das währe das idealste so müsste ich an der hardware nix ändern und hätte einfach en tool welches für mich die track umschaltung übernimmt. Greetz Cyrus |
Re: Power button Ereigniss einstellein
simple fernbedienung = nichtma 20 euro mit genüg knöppen für nächstes lied ,lied zurück, pc ausschalten, dvdwiedergabe steuern etc etc.
den aufwand den du hier treibst, geh in der zeit jobben und du hast sogar noch kohle übrig ;), ansonsten weisste ja wies geht. |
Re: Power button Ereigniss einstellein
ich hab komfortable 3 optionen was passiert wenn ich den powerbutton drücke :mrgreen:
vjay: kennst du KTT, Anarchnophobia? wenn nicht, vergiss einfach was ich gefragt hab :zwinker: |
Re: Power button Ereigniss einstellein
Ja, kenn ich, wer bistn du? ;) SilentX2000, noch nie gehört...?
|
Re: Power button Ereigniss einstellein
Private Dinge bitte per PN oder E-Mail klären. Die gehören hier nicht hin. Danke.
|
Re: Power button Ereigniss einstellein
ich hab ez ein wenig mit der tamp kompo experimentiert. aber das klapt nicht wirklich. Es ist alles wie wenn gar kein Programm laufen würde. Ich hab versucht beim onStatuschange ein cannel zu machen aber das bring ich irgendwie ned hin.
@Vjay Kannst du mal einwenig source von dir rein posten, damit ich schauen kann wie das mit dem cancel geht ? danke greetz Cyrus |
Re: Power button Ereigniss einstellein
So geht det, auf eine der beiden Broadcast-Nachrichten hat windows nicht reagiert wenn ich mich genau erinnere, aber wenn du es so machst haut es hin.
Und dort wo du deine Suspendrequests behandelst kannste auch gleich winamp ansteuern, war so nett dir das gleich mit reinzuhauen, bin ich nicht toll? :-P - Naja auch nur weil ich das schon in der Software drin hatte. Einfach dort doWinampCommand so "doWinampCommand( 40048);" aufrufen. 40048 ist fürn nächsten Track.
Delphi-Quellcode:
Damit dürftest du es hinbekommen, denk daran in den Energieoptionen die Buttonfunktion einzustellen.uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; const PBT_APMQUERYSUSPEND = 0; {Request for permission to suspend.} PBT_APMQUERYSUSPENDFAILED = 2; {Suspension request denied.} PBT_APMSUSPEND = 4; {System is suspending operation.} PBT_APMRESUMECRITICAL = 6; {Operation resuming after critical suspension.} PBT_APMRESUMESUSPEND = 7; {Operation resuming after suspension.} PBT_APMBATTERYLOW = 9; {Battery power is low.} PBT_APMPOWERSTATUSCHANGE = 10; {Power status has changed.} PBT_APMOEMEVENT = 11; {OEM-defined event occurred.} type TMainForm = class(TForm) {...} private procedure WMPOWER( var Message: TMessage); message WM_POWER; procedure WMPOWERBROADCAST( var Message: TMessage); message WM_POWERBROADCAST; procedure doWinampCommand( const i1: integer); public { Public-Deklarationen } end; procedure TMainForm.doWinampCommand( const i1: integer); var h: integer; begin h := FindWindow('Winamp v1.x', nil); sendMessage(h, WM_COMMAND, i1, 0); MainTimerTimer( MainTimer); end; procedure TMainForm.WMPOWERBROADCAST( var Message: TMessage); begin case Message.WParam of PBT_APMQUERYSUSPEND: begin if canSuspend then Message.Result := 1 else Message.Result := BROADCAST_QUERY_DENY; end; else defaultHandler( Message); end; end; procedure TMainForm.WMPOWER( var Message: TMessage); begin case Message.WParam of PWR_SUSPENDREQUEST: Message.Result := PWR_FAIL; else defaultHandler( Message); end; end; Alternativ kannst du die Powerbuttonfunktion auch auf beenden lassen und die Nachricht WM_QUERYENDSESSION abfangen, hat aber den Nachteil, dass manche Programme sich dann bereits beenden. Also machtes so ^ Mfg Volker |
Re: Power button Ereigniss einstellein
Danke nu hab ichs geschafft! hier meine Procedure:
Code:
Da noch ne Meldung kommt, dass der pc nicht in den Standbymodus schalten konnte musste ich nur noch die wegklicken lassen:)) nun funzt die sache
unit Unitapm;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, APM, ExtCtrls; const PBT_APMQUERYSUSPEND = 0; {Request for permission to suspend.} PBT_APMQUERYSUSPENDFAILED = 2; {Suspension request denied.} PBT_APMSUSPEND = 4; {System is suspending operation.} PBT_APMRESUMECRITICAL = 6; {Operation resuming after critical suspension.} PBT_APMRESUMESUSPEND = 7; {Operation resuming after suspension.} PBT_APMBATTERYLOW = 9; {Battery power is low.} PBT_APMPOWERSTATUSCHANGE = 10; {Power status has changed.} PBT_APMOEMEVENT = 11; {OEM-defined event occurred.} type TForm1 = class(TForm) procedure WMPOWER( var Message: TMessage); message WM_POWER; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure doWinampCommand( const i1: integer); var h: integer; begin h := FindWindow('Winamp v1.x', nil); sendMessage(h, WM_COMMAND, i1, 0); end; procedure SysFoucs(hWnd:integer); begin setfocus(hWnd); SetwindowPos(hwnd,HWND_BOTTOM,0,0,0,0,0); end; procedure TForm1.WMPOWER( var Message: TMessage); var hWnd:integer; begin case Message.WParam of PWR_SUSPENDREQUEST: Message.Result := PWR_FAIL; else defaultHandler( Message); end; doWinampCommand(40048); hWnd:=FindWindow(pchar('#32770'),nil); SysFoucs(hWnd); keybd_event(Ord(13), 0, 0, 0); end; end. Danke vielmals!!!! Das rult ez voll ab ez kann ich voll locker da liegen und lieder swtichen :)) geil thx! Das mit winamp is ja geil ich habs vor her so gelöst gehabt: Man musste mit der Maus auf Winamp fahren ne Tastenkombination drücken dann wurde die Klasse von Windamp gespeichert. Eine 2te instnaz (beim canSuspend) suchte dann mit findwindow nach dem Winamp fenster und machte es mit setfocus aktiv und simulierte dort einen keybd_event und zwar den Buchstaben "B" (der is ja in winamp für das nexte lied) aber als ich sah dass dies auch mit einer Zeile geht :) hab ich s natürlich sofort so gemacht wie du es gecodet hast!! |
Re: Power button Ereigniss einstellein
Machstes noch so, dann ists korrekt.
procedure TForm1.WMPOWER( var Message: TMessage); var hWnd:integer; begin case Message.WParam of PWR_SUSPENDREQUEST: begin doWinampCommand(40048); hWnd:=FindWindow(pchar('#32770'),nil); SysFoucs(hWnd); keybd_event(Ord(13), 0, 0, 0); Message.Result := PWR_FAIL; end; else defaultHandler( Message); end; end; Viel Spass damit. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 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