2

Winform 应用程序。.Net 3.5。

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

有人可以告诉我如何用 C# 做到这一点吗?我只想将焦点设置在桌面上,因此焦点不再在我的应用程序上,但我想在我的应用程序中执行此操作。

编辑:下面的答案通过将焦点设置到桌面来工作,但它会最小化用户桌面上所有打开的窗口。

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

4

2 回答 2

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.

于 2012-09-21T17:22:23.983 回答
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);
}

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

于 2012-09-21T17:24:27.460 回答