Winforms App。 .Net 3.5。
我需要将焦点从我的C#应用程序设置到用户桌面(几乎就像在桌面上模拟鼠标点击一样)。
有人可以告诉我如何用C#做这个吗?我只是想把重点放在桌面上,所以重点不再是我的应用程序了,但我想在我的应用程序中做到这一点。
编辑:下面的答案通过将焦点设置到桌面来实现,但它最大限度地减少了用户桌面上所有打开的窗口。
有没有办法可以将焦点设置到桌面上的下一个打开窗口?我只是希望从我的应用程序中获得关注(不会最小化我的应用程序或隐藏它)。我只是想把焦点转移到其他地方。如果它最小化所有用户打开的窗口/应用程序,桌面可能不是最佳选择。
答案 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);
}
您可以通过查看窗口启动位置加上高度/宽度来计算坐标,并选择一个可用空间(确实是桌面)。