如何在窗口未激活的情况下启动C#程序?
我正在尝试创建一个C#程序,但我不希望在打开窗口时该窗口处于活动状态。我希望它在后台打开,窗口显示在我的其他程序的顶部,但我希望我的活动窗口保持不变。这是因为我使用的是全屏程序,我不希望我的小弹出窗口使我退出全屏模式 程序使用(可能有助于理解我需要什么):我正在创建一组宏,将备用鼠标变成媒体控制器。滚轮控制音量,左键控制播放/暂停等。我使用Spotify播放音乐,我希望能够独立于计算机的全局音量更改Spotify的音量。我已经用代码解决了这个问题。我想显示一个弹出窗口,告诉我当我使用滚轮时,我正在改变Spotify的音量,而不是全局音量。我希望能够激活宏,显示弹出窗口,根据我的意愿更改音量,然后在不退出全屏应用程序的情况下停用宏。希望这有帮助,谢谢 程序使用编辑:这里只是一个解释视频,应该比试图解释更容易。为了澄清这一点,我希望程序在启动时不改变激活的窗口,并且始终处于最顶端,而无需我首先激活它。谢谢你 我正在使用一个名为QuickMacros的程序打开弹出窗口,我在那里尝试了一些不同的设置,但没有任何运气。我没有任何C#方面的经验,所以我没有在C#内部尝试过任何东西 我的代码与问题无关,但这里只是以防万一。所有这一切给了我移动弹出窗口的能力如何在窗口未激活的情况下启动C#程序?,c#,window,active-window,C#,Window,Active Window,我正在尝试创建一个C#程序,但我不希望在打开窗口时该窗口处于活动状态。我希望它在后台打开,窗口显示在我的其他程序的顶部,但我希望我的活动窗口保持不变。这是因为我使用的是全屏程序,我不希望我的小弹出窗口使我退出全屏模式 程序使用(可能有助于理解我需要什么):我正在创建一组宏,将备用鼠标变成媒体控制器。滚轮控制音量,左键控制播放/暂停等。我使用Spotify播放音乐,我希望能够独立于计算机的全局音量更改Spotify的音量。我已经用代码解决了这个问题。我想显示一个弹出窗口,告诉我当我使用滚轮时,我正
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace SpotifyPopup
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Left += e.X - lastPoint.X;
this.Top += e.Y - lastPoint.Y;
}
}
Point lastPoint;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
lastPoint = new Point(e.X, e.Y);
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
this.Left += e.X - lastPoint2.X;
this.Top += e.Y - lastPoint2.Y;
}
}
Point lastPoint2;
private void label1_MouseDown(object sender, MouseEventArgs e)
{
lastPoint2 = new Point(e.X, e.Y);
}
}
}
谢谢你的帮助 看看这里:
此线程讨论了使用WPF显示、激活和显示windows的一般机制。您的问题有点不清楚,但如果我是对的,您希望在最小化状态下启动应用程序,只需在表单构造函数中使用下面的代码即可
this.WindowState = FormWindowState.Minimized;
当您的事件被触发,并且您希望您的应用程序处于顶端时,只需使用
this.TopMost = true;
this.WindowState = FormWindowState.Normal;
为了正确定位你的身体,你可以使用
编辑
好的,现在您的需求更清楚了,这是我认为您想要的演示,在本例中,表单开始最小化,在鼠标滚轮上到达顶部,然后在空闲时进入后台,您可以向代码中添加更多事件,并根据您的需要进行调整,多亏了,我在这个演示中使用了全局钩子,所以别忘了根据提供的链接添加适当的nuget包。
代码如下:
using Gma.System.MouseKeyHook;
using System;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : System.Windows.Forms.Form
{
private Timer timer;
private IKeyboardMouseEvents m_GlobalHook;
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
Subscribe();
timer = new Timer();
timer.Interval = 1000;
timer.Tick += Timer_Tick;
// Set up how the form should be displayed.
ClientSize = new System.Drawing.Size(292, 266);
Text = "Notify Icon Example";
WindowState = FormWindowState.Minimized;
Rectangle workingArea = Screen.GetWorkingArea(this);
Location = new Point(workingArea.Right - Size.Width - 100,
workingArea.Bottom - Size.Height - 100);
}
private void Timer_Tick(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
TopMost = false;
}
public void Subscribe()
{
// Note: for the application hook, use the Hook.AppEvents() instead
m_GlobalHook = Hook.GlobalEvents();
m_GlobalHook.MouseWheel += M_GlobalHook_MouseWheel;
}
private void M_GlobalHook_MouseWheel(object sender, MouseEventArgs e)
{
WindowState = FormWindowState.Normal;
TopMost = true;
timer.Stop();
timer.Start();
}
public void Unsubscribe()
{
m_GlobalHook.MouseDownExt -= M_GlobalHook_MouseWheel;
//It is recommened to dispose it
m_GlobalHook.Dispose();
}
}
OP谈论的是winforms,而不是WPF感谢您的回复!我在最小化窗口状态方面有点运气,但最上面的部分似乎不起作用。窗口开始最小化,但在单击它之前不会显示任何内容。@kPoPoPog,我编辑了我的答案,看看是否有用。有点。。。让我在关于项目目标的原始帖子中添加一些上下文,这可能会更有帮助。我不想添加太多不必要的阅读,但可能会帮助你。好了,我完成了。添加更多信息,希望它有用。非常感谢。我一直在胡闹你的建议,但运气不好。还有其他想法吗?