窗口 Docker 应用程序






4.69/5 (9投票s)
一个多功能的程序,允许用户将大多数窗口停靠到程序中,并将其保持在屏幕的最顶层。
引言
我制作这个应用程序是为了学习 C#。这是我的第一个应用程序,因此也是我的第一篇文章。这个应用程序的主要目的是让用户以不同的方式在计算机上进行多任务处理。它具有以下功能,使其能够做到这一点:
- 捕获程序窗口:通过单击浏览按钮,系统会提示您打开一个文件。选择要让应用程序捕获的内容(最好是程序)。程序将运行,然后被捕获到应用程序内部。注意:您可以拥有任意数量的程序,但根据程序的性质,它可能无法停靠到应用程序中。
- 最顶层:该应用程序的设计始终显示在所有其他窗口之上,以便您在进行应用程序内部操作的同时,可以看到后台正在做什么(注意:根据您正在运行的后台程序,应用程序可能无法始终保持在屏幕最顶层)。
- 不透明度滑块:应用程序底部有一个滑块,允许您更改应用程序的不透明度。此功能旨在帮助用户查看后台内容,同时减少应用程序的存在带来的干扰。(注意:应用程序不会完全隐形,因此您总能找到它)。
背景
这个应用程序的想法是为了解决多任务处理时需要切换窗口的问题,例如,我想在我玩的在线游戏的记事本中查看一些信息。每次我玩游戏时,记事本总是会隐藏在后台,所以我必须切换回记事本(你知道这会怎么样……我的角色有时会因为没有注意游戏而死亡 )。
捕获程序
在这一部分我得到了 CodeProject 社区的一些帮助,我感谢 Rahul Dhoble 和 OriginalGriff。
为了将程序捕获到应用程序中,您必须先添加以下内容
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
在 InitializeComponent();
之后。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
第一行是导入一个 DLL 文件,这是一个系统文件。程序使用此文件从中调用特定的命令。有关详细信息,您可以查看此链接。
第二行将应用程序设置为子窗体(您选择的程序)的父级。
这个项目的实际设计是让应用程序捕获您拖放到其中的任何程序。但我不知道怎么做,老实说,这样做是个好主意(相信我,这样做是个坏主意)。所以我想出了一个办法,使用一个按钮
(toolstripbutton
),它会弹出一个openfiledialog
,让用户选择要捕获的内容。这样,用户就可以控制他们想要捕获的内容了。让我们看看代码。
private void toolStripButton1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog(this) == DialogResult.OK)
{
Process p = Process.Start(openFileDialog1.FileName);
Thread.Sleep(500);
SetParent(p.MainWindowHandle, panel1.Handle);
}
第一行处理事件,当用户单击toolstripbutton
时会触发该事件。发生这种情况时,程序将执行if
语句。if
语句显示openfiledialog
,如果对话框的结果是“OK”,表示用户选择了一个文件,那么它将开始下一段代码。
这就是神奇之处所在,请注意,第一行有一个名为process
的类。我将该类命名为“p
”。在这段代码中,我告诉程序根据用户单击的openfiledialog
文件名启动一个进程。
Process p = Process.Start(openFileDialog1.FileName);
Thread.Sleep(500);
SetParent(p.MainWindowHandle, panel1.Handle);
中间一行只是给程序加载时间。等待之后,应用程序将该面板设置为程序的父级。这使得面板(灰色区域)能够捕获该程序。
最顶层
为了防止应用程序和应用程序内部的程序在后台隐藏,我只需转到 Visual C# 程序中的属性菜单,并将TopMost从false更改为true。
如果您不使用 Visual C# 或者更喜欢在代码中进行操作,那么这里是示例。
private void Form1_Load(object sender, EventArgs e)
{
this.Topmost = true;
}
当窗体加载时,它将自动设置为Topmost
,因此当您单击背景时它不会隐藏。
不透明度滑块
我最喜欢的功能之一是“不透明度滑块”或称跟踪条。它可以改变应用程序(包括其中的程序)的不透明度。这使得用户即使在全屏时也能看到后台发生的情况。让我们看看是什么让它实现的。我从 Mahesh Chand 那里得到了这些信息——他写了一篇关于此的精彩文章,在这里。
protected void trackBar1_Scroll(object sender, System.EventArgs e)
{
Form1.ActiveForm.Opacity = ((float)this.trackBar1.Value) / 100;
}
实际上,我不记得代码是从哪里来的了。很抱歉,如果您想使用其他方法,我建议您查看 Mahesh Chand 的文章。
此外,您需要在跟踪条中添加三个值,例如minimum、maximum和value。minimum
是trackbar
可以具有的最低值,maximum
是最高值,而value
是trackbar
的当前值。如果您使用的是 Visual C#,可以通过属性菜单更改这些设置——它看起来会像这样。
对于代码方式,它将如下所示
trackbar1.Minimum = 10;
trackbar1.Maximum = 100;
trackbar1.Value = 100;
我将值设置为100
,因此其不透明度为 100% 可见;我将最小值设置为 10,这样应用程序就不会完全隐形(这是一个坏主意)。
最后,在您完成trackbar
的设置之前,您需要设置更改速率,根据您选择的值,这将改变trackbar
在应用程序中的淡入淡出方式。
有两种更改速率:“SmallChange
”(值应该很小)和“LargeChange
”(值应该大于“SmallChange
”)。根据您的需求,您需要尝试这些值。您可以在属性菜单中看到这些更改,或者对于代码用户来说
trackbar1.SmallChange = value;
trackbar1.LargeChange = value;
如果您想修改其他任何更改,请查看属性菜单;对于代码用户,请查看 Mahesh Chand 的文章
关注点
好了,就是这样!我的第一篇文章,紧随我的第一个 C# 项目。我希望大家都能喜欢我的项目和这篇文章,这两个都制作得很有趣。如果您遗漏了任何细节或做错了什么,请留下反馈,我想知道。我知道我犯了很多错误!
谢谢!
历史
- 2012 年 8 月 16 日:初始版本