.net - Sådan ændres det aktive vindue på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skal kunne skifte mellem to tredjepartsprogrammer baseret på input fra en COM-port, dvs. når jeg modtager Command1 fra enheden, gør App1 det aktive øverste vindue, og når jeg modtager Command1 4]] fra enheden, gør App2 det aktive vindue. Hvorfor vil jeg gøre det her? Denne applikation kører på en selvbetjeningsstation, og jeg overvåger indgangen til en bevægelsesføler; så når ingen er foran stationen, skal jeg vise App2 (fx reklame), og når nogen står foran, skal jeg vise App1 (fx hovedapplikation).


Jeg tænker på en applikation, der kører i baggrunden og lytter til indgangen på COM porten og skifter det aktive vindue i overensstemmelse hermed. Så spørgsmålet er, hvordan kan jeg ændre det aktive vindue ved hjælp af .NET? OS vil være Windows XP Pro SP2, men det ville være bedre, hvis det virker på Windows 7 også.

Bedste reference


Du kan bruge;


[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);


Find derefter den relevante proces ved navn eller ved at løkke GetProcesses f.eks. forudsat en enkelt forekomst:


Process[] process = Process.GetProcessesByName("myapp");
if (process.Length > 0 && process[0].MainWindowHandle != IntPtr.Zero) {
   SetForegroundWindow(process[0].MainWindowHandle);
}