【问题标题】:How to call window developed in C# through FindWindow api如何通过FindWindow api调用C#开发的窗口
【发布时间】:2011-03-10 16:01:03
【问题描述】:

我是 C# 和 xaml 代码的新手。我有一个用 C# 实现的示例代码。当我查看 xaml 文件时,我得到了<Window x:Class="test.MainWindow">

test.MainWindow 也表示此窗口的类名。

我正在尝试从其他在 win 32 中开发的应用程序调用此窗口。 我试图将这个类名传递给 FindWindow("test.MainWindow",NULL) ,但它失败了。在那里做任何遗漏的事情。

如何更改用 C# 开发的窗口的类名?

谢谢,

萨加尔

【问题讨论】:

  • Windows 窗口类名与 WPF 类名不同。 FindWindow 查找的是 WPF 中自动生成且不可预测的。不要去那里。
  • “调用这个窗口”是什么意思?
  • @Hans :那么 x:Class 的作用是什么? @David:场景是这样的。用 C# 开发的应用程序将在屏幕上运行,比如说 A,另一个用 win 32 开发的应用程序说 B 将从 A 获取窗口句柄,并将更改窗口的宽度和高度。为此,我需要使用 findwindow。它采用类名或窗口标题。因为我希望传递从 x:Class 获得的类名,所以它失败了。

标签: c# wpf winapi xaml


【解决方案1】:

FindWindow 无法识别 xaml 类名。

尝试使用

<Window x:Class="test.MainWindow" Title="MyTestWindow">

FindWindow(NULL,"MyTestWindow");

【讨论】:

  • 感谢 Stecya .. 是的,它是这样工作的。但是我们如何利用类呢?
  • 如果你在 spy++ 中看到类名,它类似于带有随机 Guid 的 HwndWrapper[MyTestWindow.exe;;5584536b-29d3-4e24-91df-7eef5b0aee6d],所以我认为不可能确定它的类名
  • 是的,Stecya 得到了这样的东西。看来我们需要在 FindWindow api 中添加正则表达式。
【解决方案2】:

您可以尝试使用 Visual Studio 工具中的 Spy++ 工具在 C# 程序的窗口中导航,并检索主窗口、子窗口等的名称。

【讨论】:

  • 感谢 yms.cu 我尝试使用 spy++ ,每次我得到不同的类名。似乎 x.Class 有不同的用途。
猜你喜欢
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多