アプリケーションのタスクバーから別のアプリケーションを非表示にするのに苦労しています。拡張スタイルを設定/削除するためにSetWindowLong関数
を使用しています。WS_EX_APPWINDOW
プロパティを個別に設定および削除するだけでなく、現在のを取得して、そのプロパティWindowLong
に削除/追加することも、次のように試しました。
SetWindowLong(pMainWindow, GWL_EXSTYLE, GetWindowLong(pMainWindow) & WS_EX_APPWINDOW);
そして、そのようにそれを削除してみました:
SetWindowLong(pMainWindow, GWL_EXSTYLE, GetWindowLong(pMainWindow) & ~WS_EX_APPWINDOW);
また、最初にウィンドウを長くすることなく、これらの両方の方法を試しました。これが私のコード全体です:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
[DllImport("User32.dll")]
public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
[DllImport("User32.dll")]
public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_HIDE = 0x00;
private const int SW_SHOW = 0x05;
private const int WS_EX_APPWINDOW = 0x40000;
private const int GWL_EXSTYLE = -0x14;
private void HideWindowFromTaskbar(IntPtr pMainWindow)
{
SetWindowLong(pMainWindow, GWL_EXSTYLE, ~WS_EX_APPWINDOW);
ShowWindow(pMainWindow, SW_HIDE);
ShowWindow(pMainWindow, SW_SHOW);
}
private void ButtonHide_Click(object sender, RoutedEventArgs e)
{
HideWindowFromTaskbar(Process.GetProcessesByName("notepad")[0].MainWindowHandle);
}
}
プロパティを見ると、Spy++の変更に気づきました。追加されるなど、さまざまな結果が得WS_EX_APPWINDOW
られましたが、他の属性がランダムに消えるなどもありました。
メッセージを見ると、のようなメッセージがDIDで取得されていることもわかりましたSTYLE_CHANGED
。