如何在 C# 应用程序中获取外部窗口的名称?
我在 LABVIEW 中开发了一个简单的应用程序 (.dll
),并将该 dll 移植到 C# windows 应用程序(Winforms
) 中。就像
[DllImport(@".\sample.dll")]
public static extern void MyFunc(char[] a, StringBuilder b ,Int32 c);
这样,当我调用函数MyFunc
时,将会弹出一个窗口(我的labview应用程序的Lab View
窗口(前面板
)
我需要在我的 C# 应用程序中获取窗口名称 (ExpectedFuncName
)。我的 C# 应用程序打开的外部窗口的名称 我们可以使用 FileVersionInfo
或 程序集加载器
来获取名称吗
? 提前致谢。
i've developed a simple application (.dll
) in LABVIEW
and i implorted that dll to a C# windows application(Winforms
) . Like
[DllImport(@".\sample.dll")]
public static extern void MyFunc(char[] a, StringBuilder b ,Int32 c);
so when i call the function MyFunc
a window will be popped up( the Lab View
window( Front panel
of my labview application
i need to get the window name (ExpectedFuncName
) in my C# application. i.e i need to get the name of the external window which is opend by my C# application. Can we use FileVersionInfo
or assembly loader
to get the name?
Is there any idea to do this?
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果你有窗口句柄,这相对容易:
这里,“WindowHandle”是创建的窗口的句柄。
如果您没有窗口句柄(我发现您没有),您必须枚举每个桌面顶级窗口,通过创建过程过滤它们(我看到该窗口是由您的应用程序通过调用 MyFunc,这样您就知道进程 ID [*]),然后使用一些启发式方法来确定所需的信息。
以下是在没有句柄的情况下应使用的函数的 C# 导入:
基本上,EnumWindows 为当前桌面中找到的每个窗口调用 EnumWindowsProc。这样你就可以获得窗口标题。
[*] 如果窗口不是由您的应用程序创建的(即,而是从另一个后台进程创建的),您应使用另一个进程 ID 过滤 GetWindowThreadProcessId 返回的值,但这需要另一个问题...
If you have the window handle, this is relatively easy:
Here, 'WindowHandle' is the handle of the created window.
In the case you do not have a window handle (I see you don't), you have to enumerate every desktop top-level window, filter them by the creating process (I see the window is created by you application by calling MyFunc, so you know the process ID [*]), and then use some heuristic to determine the required information.
Here is the C# import of the functions you shall use in the case you do not have the handle:
Basically EnumWindows calls EnumWindowsProc for each window found in the current desktop. So you can get the window caption.
[*] In the case the window is not created by your application (i.e but from another background process), you shall filter the values returned by GetWindowThreadProcessId using another process ID, but this requires another question...
如果您激活 LabVIEW 脚本 (LabVIEW 2010),或安装它 (LV 8.6, 2009) 有一个名为“FP.nativewindow”的前面板属性。这将返回前面板窗口的句柄。
使用以下代码片段获取属性:
If you activate LabVIEW scripting (LabVIEW 2010), or install it (LV 8.6, 2009) there is a front-panel property called 'FP.nativewindow'. This returns a handle to the front panel window.
Use the following snippet to get the property: