Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set focus to another window?

Tags:

c#

winforms

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 that?

like image 753
Endiss Avatar asked Jun 05 '12 13:06

Endiss


People also ask

Which method gets focus on new window?

Window.focus() Method The focus() method is used to focus on the new open window.


2 Answers

You can use following Win32 API call if you want to focus some other program/process.

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

private void BringToFront(Process pTemp)
{
    SetForegroundWindow(pTemp.MainWindowHandle);
}
like image 166
Rajesh Subramanian Avatar answered Oct 06 '22 03:10

Rajesh Subramanian


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.
like image 21
Pradeep Bogati Avatar answered Oct 06 '22 04:10

Pradeep Bogati