WPF プロジェクトに次の C# コードがあります。
private static void RunConfig(string owner)
{
long ownerHandle;
var settingsWindow = new SettingsWindow();
if (long.TryParse(owner, out ownerHandle))
{
WindowInteropHelper helper = new WindowInteropHelper(settingsWindow);
helper.Owner = new IntPtr(ownerHandle);
}
settingsWindow.ShowDialog();
}
SettingsWindow は、オーナー ウィンドウに対して適切にモーダルではありません (つまり、SettingsWindow がまだ開いているときに、オーナー ウィンドウに集中したり、対話したり、閉じたりすることさえできます)。私は何を間違っていますか?
文脈上、このコードはスクリーン セーバー プログラムの一部であり、オーナー ウィンドウはコントロール パネルのスクリーン セーバー選択ウィンドウです (コマンド ライン パラメーターを介してオーナーとして使用するハンドルを渡します)。IF ステートメントが true と評価され、ハンドルを正しく解析していることはわかっています。
また、ここで簡単に説明され、使用法がここに示されている(x64用にコンパイルするため、使用しない)の方法をSetWindowLongPtr
使用してみました。このメソッドは WinForms では機能しますが、WPF では機能しないようです。助けてオビ=ワン・ケノービ、あなただけが頼りです。user32.dll
SetWindowLong