Ho bisogno di ripristinare ("non-minimizzare") una finestra WPF che è già stata creata ma la finestra attualmente in cima (non necessariamente WPF) non può perdere la messa a fuoco o l'attivazione. Ho provato a utilizzare tutte le funzioni WIN32 che riesco a trovare, senza alcun risultato. Essere veramente frustrati ora, apprezzerebbe davvero ogni suggerimento e suggerimento.Come ripristinare una finestra senza attivarla tramite WPF (o interop)
Ovviamente il passaggio a WindowState.Normal
in WPF non lo interrompe poiché in questo modo la finestra riceve lo stato attivo e l'attivazione come bene. Ho anche provato tutti i tipi di combinazioni con l'impostazione Hidden
e IsEnabled
durante il ripristino.
Ho provato WIN32 SetWindowPos
con HWND_TOP, HWND_TOPMOST ecc. Ma questa funzione non è pensata per ripristinare Windows e cambierà solo la posizione delle finestre già "visualizzate".
Provato WIN32 ShowWindow
e SetWindowPlacement
ma senza fortuna neanche. Ho provato un disperato tentativo di aggiungere un HwndHook per cercare di ascoltare WM_SETFOCUS
e il ripristino attenzione alla finestra originale, ma ho solo zero per l'ultimo handle di finestra focalizzata ..
Edit - Soluzione con estensione finestra dopo la punta da Joel Lucsy :
public static class RestoreWindowNoActivateExtension
{
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool ShowWindow(IntPtr hWnd, UInt32 nCmdShow);
private const int SW_SHOWNOACTIVATE = 4;
public static void RestoreNoActivate(this Window win)
{
WindowInteropHelper winHelper = new WindowInteropHelper(win);
ShowWindow(winHelper.Handle, SW_SHOWNOACTIVATE);
}
}
Puoi pubblicare il tuo codice attuale per favore? –
Potrei postare il codice se senti che è necessario, ma dal momento che è solo un guaio di tentativi con chiamate diverse non è molto da guardare. Pubblicherò qualcosa se lo farò funzionare comunque .. – Niclas