Tag: winforms interop

从WPF中托管的WinForms控件创建表单 – 未设置所有者

脚本 我有以下场景(我已将其剥离为示例应用程序): 带有窗口( MainWindow )的WPF应用程序,托管WinForms UserControl( UserControl1 )。 该控件在后面的代码中动态添加到WindowsFormsHost UserControl1有一个打开表单的按钮( Form1 ) 它使用form1.Show(this) 。 问题是: Form1的.Owner属性为null。 在实际应用程序中,有些工作涉及.Owner属性,这意味着我不能忽略这个问题。 当然,理想情况下,这里没有任何依赖性。 在实际应用程序中,我无法控制此代码的WinForms端。 我们的WPF应用程序正在托管另一个团队的WinForms控件。 笔记: 当我使用WinForms主机时, .Owner属性设置正确。 UserControl1以其他所有方式托管 – 在实际应用程序中,其他一切工作正常,只是由用户控件打开的表单没有合适的所有者。 我能理解为什么这里有问题,但我希望我的下一个问题的答案可能是’是’! 有什么方法可以通过在等式的WPF方面进行更改来实现这一点吗? 如果做不到,可以在WinForms方面做任何事情吗? (这可能超出了我可以在那里实现一些变化的可能性……) 示例代码 这是我的示例应用程序中的代码。 首先是WPF方面: public partial class MainWindow : Window { private WindowsFormsHost host; public MainWindow() { InitializeComponent(); } private void btnAdd_Click(object sender, RoutedEventArgs e) { […]

Windows Forms WebBrowser控制.net 4.0框架上的错误

我从我的c#代码中抛出致命错误,我在其中定制了表单Web浏览器以支持浏览器自动完成function。 当我们尝试获取WebBrowserSite COM接口时,exception仅在.net 4.0框架上抛出。 error thrown at _baseIDocHostUiHandler = (WebBrowserNativeMethods.IDocHostUIHandler) Marshal.GetTypedObjectForIUnknown(_unkInnerAggregated, typeof (WebBrowserNativeMethods.IDocHostUIHandler)); 码: // constructor public AutoCompleteWebBrowserSite(WebBrowser host) : base(host) { // get the CCW object for this _unkOuter = Marshal.GetIUnknownForObject(this); Marshal.AddRef(_unkOuter); try { // aggregate the CCW object with the helper Inner object _inner = new AutoCompleteHelper(this); _unkInnerAggregated = Marshal.CreateAggregatedObject(_unkOuter, _inner); // obtain […]

在基于.NET的COM对象的CoCreateInstance期间挂起的应用程序

我有一个C ++ DLL,它创建一个在.NET中实现的COM对象的实例。 在许多情况下,这工作正常,但在某些情况下,它会挂起应用程序,我看到它停留在下面的调用堆栈(这只是我的DLL代码级别下面的部分): ntdll.dll!_NtAlpcSendWaitReceivePort@32() rpcrt4.dll!LRPC_CASSOCIATION::AlpcSendWaitReceivePort(unsigned long,struct _PORT_MESSAGE *,struct _ALPC_MESSAGE_ATTRIBUTES *,struct _PORT_MESSAGE *,unsigned long *,struct _ALPC_MESSAGE_ATTRIBUTES *,union _LARGE_INTEGER *) rpcrt4.dll!LRPC_BASE_CCALL::DoSendReceive(void) rpcrt4.dll!LRPC_BASE_CCALL::SendReceive(struct _RPC_MESSAGE *) rpcrt4.dll!_I_RpcSendReceive@4() rpcrt4.dll!_NdrSendReceive@8() rpcrt4.dll!@NdrpSendReceive@4() rpcrt4.dll!_NdrClientCall2() combase.dll!ServerAllocateOXIDAndOIDs(void * hServer, void * phProcess, unsigned __int64 * poxidServer, unsigned long cOids, unsigned __int64 * aOid, unsigned long * pcOidsAllocated, const tagOXID_INFO * poxidInfo, tagDUALSTRINGARRAY * pdsaStringBindings, […]

无法加载DLL“OraOps10.dll”

我遇到了一个特殊的问题。 我正在开发一个基于Windows的应用程序,它连接到Oracle数据库。 对于初始测试,我已经创建了安装程序并在我拥有的不同机器上进行了测试。 每台机器都安装了Oracle客户端,我没有看到运行应用程序时出现任何问题。 但是当我与客户共享此安装程序时,他收到错误“无法加载DLL OraOps10.dll”。 当被问及他提到并在他的机器上安装了Oracle客户端时,他能够运行连接到Oracle数据库的其他C#应用程序。 我不明白为什么我的应用程序只会出错。 我甚至尝试过在https://forums.oracle.com/forums/thread.jspa?threadID=67364上分享的建议,但仍然没有运气。 我甚至尝试在客户的机器上手动复制可执行文件和DLL。 但仍面临同样的问题。 所以请帮助我,我还能做些什么。 谢谢和最诚挚的问候 Sudhakar Chavali PS: 我使用的是Windows XP操作系统,客户也使用相同的操作系统。 两台机器都只是32位操作系统。 这是客户安装oracle客户端的位置:C:\ oracle \ product \ 10.2.0 \ client_1 \ bin,同样也是我的版本。 我们都在使用Oracle 10g。

为无边框forms绘制或隐藏控制框,同时最大化和最小化

我附上了一个关于这个问题的小例子。 如何在最大化和最小化无边框窗体期间完全隐藏控制框 using System.Windows.Forms; using System.Runtime.InteropServices; using System.Security; using System.Threading; namespace TalkTime { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private const int WM_NCPAINT = 0x0085; protected override void WndProc(ref Message m) { int message = m.Msg; switch (m.Msg) { case WM_NCPAINT: { Thread.Sleep(100); return; } } base.WndProc(ref m); } […]

程序集生成失败 – 引用程序集“Interop.Office”没有强名称

我有一个WPF 4项目,用于与VS2010中生成的word文档进行交互,以及一个win form User Control项目,用于将word应用程序托管到其中。 和其他com dlls。 所有的com dlls都被引用到我的主要wpf应用程序中。 我想发布我的项目,以便我可以在另一台机器上安装并执行自动更新,我得到错误:“程序集生成失败 – 引用程序集’Interop.Office’没有强名称。” 每个COM Dll的错误。 一个DLL引用(Interop.word.dll,interop.office.dll,interop.VBIDE.dll),所有这些dll也引用并用于我的wpf代码。 我发现Strong Signed Assemblies链接有相同的问题,但它没有解决问题。

当DropDownStyle是DropDown时,ComboBox Cue Banner不是斜体

我们有一个WinForms控件,它是ComboBox的扩展版本,当没有选择或文本时,它支持“cue banners”(也就是水印)。 我们的控制与使用CB_SETCUEBANNER的此实现类似。 但是,当我们将DropDownStyle设置为ComboBoxStyle.DropDown (也就是说,也允许自由文本输入)时,cue横幅显示,而不是斜体(通常显示的方式)。 有没有人知道如何在斜体中为ComboBoxStyle.DropDown模式中的combobox绘制提示横幅?

覆盖标题栏按钮的工具提示文本(关闭,最大化,最小化,帮助)

我一直在努力改变为表单主标题栏上的按钮显示的工具提示的文本。 简而言之,我们利用Windows窗体的“帮助”按钮来实现其他目的。 这工作正常。 问题是,当鼠标hover在该按钮上时,会出现“帮助”工具提示,这对应用程序没有任何意义。 理想情况下,有一些方法可以为我的应用程序更改该工具提示的文本; 但是,在这一点上,我只是想找到一种完全禁用工具提示的方法。 我知道你可以通过在regedit中修改’UserPreferencesMask’键来禁用整个操作系统的工具提示,但我真的想要一种方法让它只影响我的应用程序。 同样,理想情况下,托管代码可能会有一些方法,但我不反对链接到Windows API等。 感谢您解决此问题的任何建议!

将自定义上下文菜单项添加到Windows窗体标题栏

我在MSDN上找到了一个线程 ,它显示了如何将项添加到winform标题栏的上下文菜单中。 不幸的是,它没有显示如何使用自定义菜单项注册事件,我一直无法弄清楚如何做到这一点。 下面是一个示例应用程序,可以将其复制并粘贴到新的Windows窗体应用程序中。 如果有人可以为我完成样品,我将不胜感激。 谢谢 using System; using System.Runtime.InteropServices; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); IntPtr hMenu = GetSystemMenu(Handle, false); if (hMenu != IntPtr.Zero) { var menuInfo = new MENUITEMINFO { cbSize = (uint) Marshal.SizeOf(typeof (MENUITEMINFO)), cch = 255, dwTypeData = “Test Item”, fMask […]

使用c#获取在其他应用程序的文本框中输入的文本

我整天都在和这件事打架。 我仍然无法找到确切的解决方案。 帮帮我。 我的目标非常简单。 我想获取其他应用程序的文本框中的文本。 它可能是gtalk客户端或soap UI屏幕的文本框。 我用谷歌搜索,大多数论坛建议winapi是我必须用来实现这一目标的概念。 我从未使用过这个概念,也没有得到任何好的例子。 请帮助我解决这个问题,并完成这件事。 有没有其他方法来实现这一目标? 等待你的回复…