在当前应用之外的表单上操纵控件

时空

成员
已加入
2013年10月8日
留言内容
11
编程经验
10+
自从我潜伏在这里已经很久了,但是现在我回来了,需要一些帮助。

从我的应用程序中,我可以引用包含福彩12选5走势图小的弹出窗口的第三方库。该弹出窗口非常简单,只有福彩12选5走势图组合框和两个按钮。我想稍微改变一下弹出窗口的外观,以更好地与我的应用程序融合。我已经获得了父窗口的句柄和所有子控件的句柄,但是由于此弹出窗口在技术上是在单独的进程中运行的,因此我不能简单地执行以下操作,因为btn始终为null。

C#:
[COLOR=blue]var[/COLOR] foo = FindWindow([COLOR=#a31515]"Form Title"[/COLOR]);
[COLOR=blue]var[/COLOR] bar = GetAllChildrenWindowHandles(foo, 50);  [COLOR=green][FONT=Consolas]//bar does contain all the child control handles. I confirmed this with MS Spy++[/FONT][/COLOR]
[COLOR=#2b91af]Control[/COLOR] btn =  [COLOR=#2b91af]Control[/COLOR].FromHandle(([COLOR=#2B91AF]IntPtr[/COLOR])bar[2]);
btn.BackColor = [COLOR=#2b91af]Color[/COLOR].Red;

所以...反正有那个手柄并设置按钮Text或BackColor形式或其他内容吗?我猜想将来可能有福彩12选5走势图SendMessage呼叫吗?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
首先,您说自己有福彩12选5走势图对第三方库的引用,然后又说该表单存在于另福彩12选5走势图过程中。这两个似乎不兼容。如果您要引用福彩12选5走势图库,则所有内容都在福彩12选5走势图过程中。毕竟,您引用的是System.Windows.Forms.dll库,而Button和TextBoxes之类的东西在不同的进程中不存在。如果您需要使用API​​调用,则表明它是EXE,而不是DLL。

无论如何,如果您具有窗口的句柄,则可以调用SendMessage API函数以多种方式影响它。您发送的消息将取决于您要执行的操作。例如,使用WM_SETTEXT消息可以在窗口中设置文本,该文本可能会在标签或文本框中使用。
 

时空

成员
已加入
2013年10月8日
留言内容
11
编程经验
10+
所以,就在这里。 .NET程序集引用了COM程序集。然后,该程序集引用另福彩12选5走势图更强大的COM程序集。据我了解,我的代码在此行返回空对象的原因

C#:
[COLOR=#2b91af]Control[/COLOR] btn =  [COLOR=#2b91af]Control[/COLOR].FromHandle(([COLOR=#2B91AF]IntPtr[/COLOR])bar[2]);

这是因为Control.FromHandle仅适用于当前进程,而该弹出窗体似乎不在同一进程中运行。

该应用程序是福彩12选5走势图遗留的winforms天文工具,我将再次使用它来添加功能。通过COM对象支持该功能的引用是ASCOM核心库的一部分。 ASCOM库是福彩12选5走势图非常庞大且健壮的COM库,旨在为控制望远镜,相机,聚焦器等提供通用的主干。设备制造商(或富有创造力的开发人员)创建设备专用的驱动程序。然后,开发人员从其应用程序中引用这些驱动程序,并在其内部引用主要的ASCOM库。因此,用户在使用任何使用该平台编写的应用程序之前,必须已安装并注册了核心ASCOM平台。经常做的一件事是在现场使用的天文软件提供“夜间”模式,以便所有UI元素都以深色友好主题绘制。通常,这意味着所有内容都为黑色背景,所有文本均更改为红色阴影。有些控件比其他控件更难管理,但是可以做到(组合/列表框和滚动条确实很痛苦...)。

在这种情况下,核心ASCOM COM库正在创建福彩12选5走势图小的弹出窗口,以获取用户输入有关他们要连接的设备的信息。此选择将保留在注册表中。选择设备后,该UI将允许用户显示配置表单,该配置表单实际上是驱动程序DLL的一部分,用于设置设备特定的设置。然后,这会将其他值添加到注册表中以前保存的配置中。实际上,第二种形式对驱动程序的开发人员而言是100%可用的。但是,这种“选择器”形式不是。因此更改其颜色一直难以捉摸。 ASCOM支持论坛建议最简单的解决方案是在夜间模式下不允许用户访问该“选择器”。我可以这样做,但在这一点上感觉就像在作弊。我想我只要拿起手柄并直接操纵表格即可更改颜色。该表格上共有8个控件。福彩12选5走势图组合键,3个按钮,两个标签,福彩12选5走势图带有福彩12选5走势图菜单项的菜单和福彩12选5走势图图片框(我不理会)。

坦白说,我已经开始理解同意阻止该功能的建议了。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
如果句柄属于控件(即.NET控件),则Control.FromHandle仅可以返回Control实例。如果该窗口是由COM库创建的,则它不是.NET控件,因此Control.FromHandle将返回null。
 
最佳 底部