我目前正在使用C#中的访问控制程序,我遇到了阻止窗口的问题。我想出的最初想法是在过程的IntPtr窗口句柄给出的位置上呈现纯黑色形式。其中的问题是平滑地更新表单的位置和位置的z-index(我不希望它位于最顶端)。我也注意到我的解决方案资源使用率非常高,因为我使用循环来不断检查位置。
这就是为什么我要问:如果不吃主要资源,最好的解决办法是什么呢?入口点只是正在运行的进程的名称。
目前这个想法只是阻止了浏览器(IE:一个学校的应用程序,以防止讲座活动时分心)。
更多信息:
我不打算关闭一个窗口 我自己的应用程序,我正在尝试 来自其他进程的模糊窗口。
我的申请不是 病毒/恼人的程序,它的 本质上是为了防止使用 可能分散注意力的应用 在学校环境中。它是制作的 在学校的电脑上讲课 实验室。
我正在拉主窗口 从过程中捕获的 浏览器的进程名称。
我无法完全禁用计算机。
答案 0 :(得分:4)
我真的很讨厌讨厌任何试图乱用其他应用程序窗口的应用程序。对不起,这来自非常深刻。
我能想到的唯一合情合理是锁定当前的用户会话,并将计算机交换到属于另一个帐户的另一个桌面,除了在这种情况下所需要的任何内容之外无权做任何事情。
或者,如果完全禁用计算机是可以接受的,您可以将所有显示器放在教师桌面上的单个电源开关上。
答案 1 :(得分:2)
如果您想要隐藏应用程序窗口,我可以建议3件事。首先,尝试将表单的visible属性设置为true并调用hide()方法。第二件事是将表单的透明度设置为100%,这将隐藏它。第三,可能认为您的应用程序应该是Windows服务而不是Windows窗体应用程序。
如果您要隐藏其他窗口,以便您的应用程序始终位于顶部,请在表单中将TopMost属性设置为true:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost(VS.71).aspx
答案 2 :(得分:1)
您可以使用windows api隐藏违规窗口。 user32.showwindow
不完全是你要求的,但可能更简单。
答案 3 :(得分:1)
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
static void MinimizeProcess(string procName)
{
foreach (Process p in Process.GetProcesses())
{
if (p.ProcessName == procName)
{
ShowWindow(p.MainWindowHandle,11);
}
}
}
如果你有一个进程名称数组,你显然想要重构这个以接收一个数组,这样你就不会遍历每个进程来处理你想要最小化的一切,但是你明白了。
答案 4 :(得分:-2)
你可以这样做:
this.Hide()
this.Visible = false;
或者如果这是你不想展示的主要内容,那么在你启动应用程序时就不要运行论坛。