How to set focus to another window?

后端 未结 2 401
抹茶落季
抹茶落季 2020-12-16 00:00

I have a problem with a program that loses focus. It\'s not my program. How can I write a second program to set focus to that window every 1-2 seconds? Is is possible to do

相关标签:
2条回答
  • 2020-12-16 00:09

    You can use following Win32 API if you want to bring some other program/process

            [DllImport("user32.dll")]
            static extern bool SetForegroundWindow (IntPtr hWnd);
    
             private void BringToFront(Process pTemp)
             {
               SetForegroundWindow(pTemp.MainWindowHandle);
             }
    
    0 讨论(0)
  • 2020-12-16 00:26

    use spy++ or other ui tools to find the class name of the window you want to focus, say its: focusWindowClassName. Then add the below functions:

    [DllImport("USER32.DLL")]
    public static extern bool SetForegroundWindow(IntPtr hWnd);
    
    [System.Runtime.InteropServices.DllImport("User32.dll")]
     public static extern bool ShowWindow(IntPtr handle, int nCmdShow);
    
    [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
    //Then:
    // [Edit] Changed IntPrt to IntPtr
    IntPtr hWnd = FindWindow("focusWindowClassName", null); // this gives you the handle of the window you need.
    
    // then use this handle to bring the window to focus or forground(I guessed you wanted this).
    
    // sometimes the window may be minimized and the setforground function cannot bring it to focus so:
    
    /*use this ShowWindow(IntPtr handle, int nCmdShow);
    *there are various values of nCmdShow 3, 5 ,9. What 9 does is: 
    *Activates and displays the window. If the window is minimized or maximized, *the system restores it to its original size and position. An application *should specify this flag when restoring a minimized window */
    
    ShowWindow(hWnd, 9); 
    //The bring the application to focus
    SetForegroundWindow(hWnd);
    
    // you wanted to bring the application to focus every 2 or few second
    // call other window as done above and recall this window again.
    
    0 讨论(0)
提交回复
热议问题