問題タブ [systemevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - WPFウィンドウの場所の変更の原因を見つける方法は?
コンピューターを休止状態から再開するたびに、Window
の位置が画面の上部に移動するようです。ウィンドウの場所を記録するために次のものがあります。
WindowTop
Window
ファイルからメモリに読み込まれるプロパティで、最後に閉じられる前の場所を追跡します。これが起動時に出力されるときはいつでも、両方の値が期待どおりに正しいです。ただし、休止状態から再開した後、実際の値として 0 が出力されますが、設定値は同じままです。これにより、誤った設定値がロードされることが原因でなくなります。
また、コンピューターが休止状態から再開するたびに設定を再読み込みしようとしています。
これでも問題は解決しません。MessageBox
ただし、ロードの前に を追加するとWindow
、間違った場所に が表示され、設定が適切にロードされ、正しい設定に切り替わります。ウィンドウを元の場所から移動したため、再開時に場所が正しく修正され、コンピューターのロックを解除した後、何らかの形でTop = 0
. 奇妙なことは、Left
この問題にまったく悩まされていないことです。ソリューションでの両方のプロパティの使用法はすべて同じです。これはバニラの WPF アプリケーションでは発生しないため、これをさらに調査する方法がよくわかりません。奇妙なことに、コンピューターを休止状態にせずに手動でロックしただけでは、これは発生しません。
どういうわけか私Window
のTop
プロパティを変更しているものを見つける方法はありますか?
編集: 私の回避策は、そこから and を使用SystemEvents.SessionSwitch
しSessionSwitchReason.SessionUnlock
て呼び出すLoadUiSettings
ことですが、それでも実際の問題に対する応急処置です。何が原因なのかを突き止めて、根本から解決したいと思っています。
編集 2: Window が現在表示されていない場合、それを設定しても実際の位置は変更されません。可視性を一時的にオーバーライドしてから、次のことを実行しました。
調整を待っている間、ウィンドウが一瞬表示され、再び消えた後、UI を介して手動で表示を切り替えると、再び上部に表示されます。すでに正しい場所にあるときに手動で切り替えると、この動作は発生しません。
c# - ハイパフォーマンス、パワーセーバー、バランスの間の電源プラン変更イベント
High Performance、Power Saver、Balancedの間で Power Plan Changes のイベントを取得する方法を理解しようとしています。プランごとに異なるモードでアプリを変更する必要があります。この方向でいくつかの解決策を見つけましたが、望ましい結果が得られません。
たとえばitem.CurrentMhz
、プロセッサの現在の電力値を登録する を取得すると、さまざまな目的に役立ちますが、この出力では Power Plan state が得られません public uint Number; MaxMhz; CurrentMhz; MhzLimit; MaxIdleState; CurrentIdleState;
。たとえばCurrentIdleState
、Power Saver と High Performance プランは同じです。とにかく、どうにか使用できれば、主な問題は、条件付きの結果としてのみ、イベントとして機能させることができないことです。しかし、実際には電源プランの状態ではなく、プロセッサごとに電力値が異なります。この目標では、望ましい結果を得るための正しい方法ではないようです。
SystemEvents_PowerModeChanged
この場合も意味がありません。コードが接続されているか切断されている場合は、電源状態の変更イベントのみを受け取ります。
どちらも同じPowerStatus powerStatus = SystemInformation.PowerStatus;
ですが、コードが接続されているか切断されている場合は、現在の電源ステータスが識別されます。
したがって、有効な解決策がある場合、電源プランの変更の間にこのイベントを取得するにはどうすればよいかわかりません。