3

我目前正在使用 C# 编写访问控制程序,并且遇到了阻塞窗口的问题。我想出的最初想法是在进程的 IntPtr 窗口句柄给出的位置上渲染一个纯黑色的表格。其中的问题是平滑地更新表单的位置和位置的 z-index(因为我不希望它位于最顶层)。我还注意到我的解决方案的资源使用率高得离谱,因为我正在使用循环来不断检查位置。

因此,我为什么要问:在不消耗大量资源的情况下,最好的解决方案是什么?入口点只是正在运行的进程的名称。

目前这个想法只是阻止浏览器(IE:一个学校应用程序,以防止讲座活动时分心)。

更多信息:

  • 我不想在我自己的应用程序中关闭一个窗口,我试图从其他进程中隐藏窗口。

  • 我的应用程序不是病毒/烦人的程序,它本质上是为了防止在学校环境中使用可能会分散注意力的应用程序。它是为学校计算机实验室的讲座而设计的。

  • 我目前正在从浏览器进程名称捕获的进程中拉出主窗口。

  • 我也不能完全禁用计算机。

4

5 回答 5

4

I really hate hate hate any application trying to mess around with other application's windows. Sorry, this comes from very deep.

The only thing I can think of that is somewhat sensible is to lock the current user session, and swith the computer to another desktop belonging to another account with no rights to do anything except what's required under the circumstances.

Or if it is acceptable to disable the use of the computers entirely, you could put all the monitors on a single power switch on the teacher's desk.

于 2010-07-13T19:50:57.293 回答
2

如果你想隐藏你的应用程序窗口,我可以建议 3 件事。首先,尝试将表单的可见属性设置为 true 并调用 hide() 方法。第二件事是将表单的透明度设置为 100%,这将隐藏它。第三是,也许考虑您的应用程序应该是 Windows 服务而不是 Windows 窗体应用程序。

如果您希望隐藏其他窗口以使您的应用程序始终位于顶部,请在表单中将 TopMost 属性设置为 true:http: //msdn.microsoft.com/en-us/library/system.windows.forms.form .topmost(VS.71).aspx

这也可能有帮助:http: //www.codeproject.com/KB/cs/windowhider.aspx

于 2010-07-13T19:47:49.657 回答
1

您可以使用 windows api 隐藏有问题的窗口。 user32.showwindow

不完全符合您的要求,但可能更简单。

于 2010-07-13T19:49:08.547 回答
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);

            }
        }
    }

如果您有一个进程名称数组,您显然希望将其重构为一个数组,这样您就不会为要最小化的所有内容循环遍历每个进程,但您明白了。

于 2010-07-13T20:05:32.950 回答
-2

你可以做:

this.Hide()

this.Visible = false;

或者,如果这是您不想显示的主要内容,请在启动应用程序时不要运行论坛。

于 2010-07-13T19:41:40.537 回答