1

開いているウィンドウの場所とサイズをファイルに保存し、そのファイルから (コマンド ライン引数に基づいて) それらを復元する簡単な C# プログラムを作成しました。これは常に一部のプログラムでは機能し、他のプログラムでは機能しませんが、その理由はわかりません。

ウィンドウの位置 (x,y) とサイズ (w,h) を取得する部分は、この Windows 標準関数を使用します。

WINDOWPLACEMENT placement = GetWindowPlacement(windowCaption);

ウィンドウのサイズと位置を設定する部分は、この Windows 標準の機能を使用します。

SetWindowPos(target_hwnd, IntPtr.Zero, wi.x, wi.y, wi.w, wi.h, 0);

これらはコードで次のように宣言されています

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetWindowPos(IntPtr hWnd,
    IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, SetWindowPosFlags uFlags);

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl);

コードの残りの部分は目立たないものです。一部のデータをテキスト ファイルに保存し、一部のデータをテキスト ファイルから読み取ります。それはすべてオンラインの例からコピーして貼り付けたもので、私は初心者の C#/Windows プログラマーです。

このプログラムは、特定のプログラムでは非常にうまく機能しますが、他のプログラムではまったく機能しません。Chrome を元のサイズと位置に復元できますが、Firefox や Microsoft Edge は復元できません。Visual Studio Code は機能しますが、R Studio は機能しません。(Windows プログラミングについてあまり知らなかったので) Windows プログラムの GUI 部分は標準の Windows ライブラリでコーディングされていると思っていたので、これは驚きですSetWindowPos

これが一部のプログラムで機能し、他のプログラムでは機能しないのはなぜですか?

4K モニターを使用しているため、これを行う必要があります。モニターがオフになるか、タイムアウトになるたびに、何らかの理由で Wi​​ndows がほとんどのウィンドウのサイズと位置を失います。これについては別に投稿しましたが、解決策がありませんでした。 https://superuser.com/questions/1513288/windows-loses-window-position-on-large-monitor

興味のある方は、ソース コードを https://github.com/radumaolescu/WinPosに置いてください。

完全にパッチが適用された Windows 10 Pro を、安定したスペックの 2019 PC で実行しています。

4

0 に答える 0