2010-03-09 133 views
1

有一个调用我的C#dll中的方法的软件。在这个dll方法中,我需要有调用我的dll的程序/窗口的窗口句柄。获取调用窗口的窗口句柄

如何得到这个“调用窗口句柄”?

谢谢!

+0

该方法如何被调用?你可以添加一个'hwnd'参数吗? – SLaks 2010-03-09 14:57:01

回答

2

这可以返回主窗口句柄。

System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle 

据我所知,没有办法得到一个具体的窗口,因为它不超过Form对象。 但Form类有一个属性Handle。您可以将它作为参数传递给dll方法调用。

+0

多数民众赞成的问题,我不能从我的dll方法从源程序。所以我不能通过处理。我需要找出我的dll方法中的句柄 – Tobi 2010-03-09 15:15:29

+0

嗯......不幸的是解决问题的唯一方法是重写dll。我看到这里没有麻烦(如果dll和可执行文件都是由你编写的,所以你有源代码),除了汇编的设计将受到影响... – ILya 2010-03-09 15:56:08

+0

是的,我实现了你告诉我的代码,这个工程。没有调用程序的来源,所以我不得不使用GetCurrentProcess()。MainWindowHandle。我认为没有其他“干净”的方式? – Tobi 2010-03-09 16:22:18

2

你不能:windows不调用方法,代码调用方法。

您应该最好为您的方法添加一个窗口句柄参数。如果这是绝对不可能的,那么可以使用API​​函数GetActiveWindow使窗口在当前线程上处于活动状态。这不保证工作;也许没有窗户打开。

你需要什么窗口手柄?

+0

修改调用窗口,目前我使用GetForegroundWindow,但这不是一个很好的解决方案,所以如果用户正在更改窗口immediatelly,我将有错误的句柄 – Tobi 2010-03-09 15:16:25