如何从C#应用程序中将焦点设置到桌面

时间:2012-09-21 17:18:45

标签: c# winforms

Winforms App。 .Net 3.5。

我需要将焦点从我的C#应用​​程序设置到用户桌面(几乎就像在桌面上模拟鼠标点击一样)。

有人可以告诉我如何用C#做这个吗?我只是想把重点放在桌面上,所以重点不再是我的应用程序了,但我想在我的应用程序中做到这一点。

编辑:下面的答案通过将焦点设置到桌面来实现,但它最大限度地减少了用户桌面上所有打开的窗口。

有没有办法可以将焦点设置到桌面上的下一个打开窗口?我只是希望从我的应用程序中获得关注(不会最小化我的应用程序或隐藏它)。我只是想把焦点转移到其他地方。如果它最小化所有用户打开的窗口/应用程序,桌面可能不是最佳选择。

2 个答案:

答案 0 :(得分:1)

这应该为你做。

using System; 
using System.Runtime.InteropServices; 

namespace ConsoleApplication1 { 
class Program { 
    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] 
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 
    [DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true)] 
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, IntPtr wParam, IntPtr lParam); 

    const int WM_COMMAND = 0x111; 
    const int MIN_ALL = 419; 
    const int MIN_ALL_UNDO = 416; 

    static void Main(string[] args) { 
        IntPtr lHwnd = FindWindow("Shell_TrayWnd", null); 
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL, IntPtr.Zero);  
        System.Threading.Thread.Sleep(2000); 
        SendMessage(lHwnd, WM_COMMAND, (IntPtr)MIN_ALL_UNDO, IntPtr.Zero); 
    } 
} 
} 

获取下一个窗口

我没有准备好这两个代码示例,但我会给你两者的链接。首先想到你需要做的是致电GetWindow。完成此操作后,您需要调用SwitchToThisWindow传递从GetWindow收到的指针。

答案 1 :(得分:0)

您可以在项目中添加此COM对象:

Microsoft Shell控件和自动化

然后打电话:

Shell32.ShellClass shell = new Shell32.ShellClass();
shell.MinimizeAll();

这将最小化所有窗口,然后聚焦桌面。否则,如果您的窗口非全屏,则可以使用以下方法模拟鼠标单击:

//This is a replacement for Cursor.Position in WinForms
[System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool SetCursorPos(int x, int y);

[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

public const int MOUSEEVENTF_LEFTDOWN = 0x02;
public const int MOUSEEVENTF_LEFTUP = 0x04;

//This simulates a left mouse click
public static void LeftMouseClick(int xpos, int ypos)
{
    SetCursorPos(xpos, ypos);
    mouse_event(MOUSEEVENTF_LEFTDOWN, xpos, ypos, 0, 0);
    mouse_event(MOUSEEVENTF_LEFTUP, xpos, ypos, 0, 0);
}

您可以通过查看窗口启动位置加上高度/宽度来计算坐标,并选择一个可用空间(确实是桌面)。