标签: winforms-interop

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

我一直在努力改变为表单主标题栏上的按钮显示的工具提示的文本.

简而言之,我们利用Windows窗体的"帮助"按钮来实现其他目的.这工作正常.问题是,当鼠标悬停在该按钮上时,会出现"帮助"工具提示,这对应用程序没有任何意义.

理想情况下,有一些方法可以为我的应用程序更改该工具提示的文本; 但是,在这一点上,我只是想找到一种完全禁用工具提示的方法.

我知道你可以通过在regedit中修改'UserPreferencesMask'键来禁用整个操作系统的工具提示,但我真的想要一种让它只影响我的应用程序的方法.

同样,理想情况下,托管代码可能会有一些方法,但我不反对链接到Windows API等.

感谢您解决此问题的任何建议!

c# winapi tooltip winforms-interop winforms

8
推荐指数
1
解决办法
2434
查看次数

从后台C#app发送Win API粘贴cmd

目标:编写一个在后台运行的C#应用​​程序,侦听Win-V组合键,当发生这种情况时,将剪贴板内容粘贴到当前活动窗口(某个任意应用程序).基本上我正在尝试模仿PureText,但我并不打算先将文本转换为纯文本.

问题:粘贴到当前活动的窗口不起作用.

详细信息:要在后台监听按键,我正在使用A Simple C#Global Low Level Keyboard Hook中globalKeyboardHook类.我能够捕获Win-V事件,但我无法正确发送粘贴命令.我可以使用SendKeys.Sendkeybd_event函数发送粘贴.然而,他们发送另一个"V"按下管道,该管道被gkh_KeyDown事件捕获并导致多个粘贴事件被触发.

我期待我需要使用SendMessagePostMessage,但到目前为止我所做的所有尝试都失败了.下面是最后一个函数SendCtrlV的完整代码.这些评论解释了我迄今为止所尝试的一切.你能看到我错过的东西吗?

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Utilities;

namespace KeyHookTest
{
    public partial class Form1 : Form
    {
        private bool LWin_down;
        private bool V_down;
        globalKeyboardHook gkh = new globalKeyboardHook();

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static public extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        static extern void keybd_event(byte bVk, byte bScan, uint …
Run Code Online (Sandbox Code Playgroud)

c# winapi winforms-interop winforms

8
推荐指数
1
解决办法
2752
查看次数

为什么我的WPF托管WinForm空白?

我已经使用了这个博客中的代码,如下所示,但是我在主窗口中看到了WinForm,但是我在标签上放置的示例文本是不可见的.

[System.Windows.Markup.ContentProperty("Child")]
public class WinFormsHost : HwndHost
{
  public WinFormsHost()
  {
    var form = new ChildForm();
    Child = form;
  }
  private System.Windows.Forms.Form child;
  public event EventHandler<ChildChangedEventArgs> ChildChanged;
  public System.Windows.Forms.Form Child
  {
    get { return child; }
    set
    {
      HwndSource ps = PresentationSource.FromVisual(this) as HwndSource;
      if (ps != null && ps.Handle != IntPtr.Zero)
      {
        throw new InvalidOperationException("Cannot set the Child property after the layout is done.");
      }
      Form oldChild = child;
      child = value;
      OnChildChanged(oldChild);
    }
  }

  private void …
Run Code Online (Sandbox Code Playgroud)

c# wpf winforms-interop winforms wpf-interop

8
推荐指数
1
解决办法
1056
查看次数

如何将WPF窗口添加到WinForms应用程序

我正在创建一个HUD窗口,用于检查WinForms应用程序中的商业实体.

我希望有一个完全不同的窗口样式(最小化内容区域,只显示TitleBar,没有系统按钮等)所以我为此创建了一个WPF应用程序.

问题是我希望这个窗口在我的WinForms应用程序中"生存".我不能只是将WPF添加为OwnedForm或将主窗体设置为WPF窗口的所有者.

那么,怎么能实现呢?

编辑:感谢pst我找到了答案.这是片段:

System.Windows.Forms.Integration.ElementHost.EnableModelessKeyboardInterop(_inspector);
WindowInteropHelper inspectorHelper = new WindowInteropHelper(_inspector);
inspectorHelper.Owner = this.Handle;
_inspector.Show();
Run Code Online (Sandbox Code Playgroud)

wpf winforms-interop winforms

7
推荐指数
1
解决办法
2532
查看次数

在C#中设置应用程序范围的热键

有一个岗位设置全系统的全局热键在C# 在这里

我想设置应用程序范围的热键,这样如果用户在应用程序的任何子窗口上按下热键,特定窗口将接收并处理它.

谢谢.

c# winforms-interop

7
推荐指数
1
解决办法
2103
查看次数

如何将umanaged对话框设置为WinForm表单的所有者?

我需要能够获得WinForm对话框的所有者的HWND.在非托管中,我有一个后台线程,它获取前面窗口的HWND.然后代码调用:: GetParent(frontHWND)以查看是否需要隐藏不同的非模态MFC对话框.当WinForm对话框是frontHWND时,我总是为GetParent调用返回NULL.我也试过GetOwner意识到.Net试图清理父和所有者之间的区别.查看带有Spy ++的WinForm对话框,它还说WinForm没有父级或所有者.我已经过去了

NativeWindow ^natWin = gcnew NativeWindow();
natWin->AssignHandle(IntPtr(hwndParent));
managedDlg->ShowDialog(natWin);
Run Code Online (Sandbox Code Playgroud)

上面的代码没有设置WinForm的所有者.我尝试从OnFormShown()中的WinForm代码调用Win32 SetParent,但锁定了MFC应用程序和WinForm.

有人可以解释如何让我的非托管对话框/应用程序成为托管winform的所有者/父级吗?

c# c++ interop winforms-interop

7
推荐指数
1
解决办法
3569
查看次数

程序集生成失败 - 引用程序集"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链接有相同的问题,但它没有解决问题.

c# wpf interop winforms-interop

7
推荐指数
3
解决办法
3万
查看次数

将自定义上下文菜单项添加到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 = 0x1 | 0x2 | 0x10,
                       fState = 0,
                       fType = 0x0
                   };

                InsertMenuItem(hMenu, 0, true, ref menuInfo);
                DrawMenuBar(Handle);
            }
        }

        [DllImport("user32.dll")] 
        static extern IntPtr GetSystemMenu(IntPtr hWnd, bool …
Run Code Online (Sandbox Code Playgroud)

c# winapi winforms-interop winforms

6
推荐指数
1
解决办法
8210
查看次数

是否可以通过容器/包装器在WPF表单中托管WinForm表单?

有没有办法在WPF表单中的某种容器或包装器类型控件中托管/显示完整的WinForms表单(而不仅仅是单个控件)?我正在寻找类似于概念的东西来自虚拟包含来自php或iframe的html.可能通过将其编译为OCX或DLL.

c# wpf winforms-interop visual-studio-2008

6
推荐指数
2
解决办法
9756
查看次数

在WinForms容器中托管时,WPF ScrollViewer不会收到鼠标事件

我们有一个WinForms应用程序,我们正在逐步转换为WPF.此时应用程序的主窗体是一个Form(WinForms),它包含一个用WPF构建的垂直侧边栏.侧栏托管在ElementHost控件中.

侧边栏由包含其他控件的ScrollViewer组成.问题是,当焦点位于WinForms aera中的某个位置并且我在ScrollViewer上使用鼠标滚轮时,它不会滚动.

这与WPF/WinForms集成有关,因为在100%WPF项目中,即使焦点在另一个控件上,ScrollViewer也会对鼠标滚轮作出反应.

解决这个问题的正确方法是什么?

wpf winforms-interop winforms

6
推荐指数
1
解决办法
2099
查看次数