如何使windows窗体在c#中完成的Windows应用程序前来?

问题描述:

我在Windows应用程序中完成了全局鼠标事件。当我点击我的鼠标的中心按钮时,我想制作一个特定的表格最顶层...如何使windows窗体在c#中完成的Windows应用程序前来?

有一些应用程序在全屏模式下运行,所以我需要这样做,为了使我的表单对用户可见,因为这是查看它的唯一方法。由于Alt + Tab被禁用。这是一个Kiosk应用程序。

我尝试使用Topmost = true的特定形式和 我试着使用下面的代码...但没有用。我没有得到我的表格。

[DllImport("User32.dll")] 
    public static extern Int32 SetForegroundWindow(int hWnd);  

    [DllImport("user32.dll")] 
    public static extern int FindWindow(string lpClassName, string lpWindowName);       

    private void BringToFront(string className,string CaptionName) 
    { 
     SetForegroundWindow(FindWindow(className,CaptionName)); 
    } 

必须触发此窗体带来前端的全局热键正在完美工作。

如何让我的表单前来?谢谢。

得到窗口的句柄,并为此

SetWindowPos(HWND,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);

+0

@Andrew Keith,我试过了,但还是没有成果。 – Anuya 2009-09-28 06:20:48

不关我事,但是你有没有试过搞乱:

this.BringToFront(); 

this.Activate(); 
+0

这对我的作品。 – 2014-03-20 18:24:44

要设置的全屏窗体的最顶层为false,然后继续。

您可能无法正确调用BringToFront方法。对于FindWindow API函数,lpClassName将是您的应用程序的名称(例如“MyApplication.exe”),而lpWindowName是指特定窗体的标题栏中的标题(例如“Form1”)。通常使用FindWindow通过其中一个或另一个,例如:

FindWindow("MyApplication.exe", null); 
// or 
FindWindow(null, "Form1"); 

我不确定当你通过这两者时会发生什么。

您可能还需要做一些简单的事情来实现这一点,比如调用特定窗体的Activate()方法。

+0

我试过上面的,但是没有工作... – Anuya 2009-09-28 03:47:47

+0

我想你应该发布一些额外的代码。我不确定您在做什么,完全处于信息亭模式。在Windows中显示表单并改变它们在z-stack中的位置是非常简单和基本的,但是你可能会做些奇怪的事情。 – MusiGenesis 2009-09-28 03:58:00

+0

@MusiGenesis,我不能在这里发布我的整个代码,因为有很多。 是的,这对我来说也很奇怪......在全屏模式下,我的系统上还会运行另一个应用程序。当用户点击鼠标中心按钮时,我需要一种方式向用户显示我的表单。 我通过添加“HI”消息框来测试我的鼠标中心按钮为全局事件。它的工作完美。 唯一的是,我需要现在显示我的表单。 注::我的代码显示表单不是在相同的形式,它是在不同的地方。这是否会造成任何问题? – Anuya 2009-09-28 04:14:45

我解决它,这样做:

this.TopMost = true; 
this.TopMost = false; 
+0

这对我有用。 – 2014-03-20 18:25:29

+0

这对我有用,但我必须先做“this.BringToFront()”第一个 – 2015-10-09 13:10:03