我一直在努力改变为表单主标题栏上的按钮显示的工具提示的文本.
简而言之,我们利用Windows窗体的"帮助"按钮来实现其他目的.这工作正常.问题是,当鼠标悬停在该按钮上时,会出现"帮助"工具提示,这对应用程序没有任何意义.
理想情况下,有一些方法可以为我的应用程序更改该工具提示的文本; 但是,在这一点上,我只是想找到一种完全禁用工具提示的方法.
我知道你可以通过在regedit中修改'UserPreferencesMask'键来禁用整个操作系统的工具提示,但我真的想要一种让它只影响我的应用程序的方法.
同样,理想情况下,托管代码可能会有一些方法,但我不反对链接到Windows API等.
感谢您解决此问题的任何建议!
目标:编写一个在后台运行的C#应用程序,侦听Win-V组合键,当发生这种情况时,将剪贴板内容粘贴到当前活动窗口(某个任意应用程序).基本上我正在尝试模仿PureText,但我并不打算先将文本转换为纯文本.
问题:粘贴到当前活动的窗口不起作用.
详细信息:要在后台监听按键,我正在使用A Simple C#Global Low Level Keyboard Hook中的globalKeyboardHook类.我能够捕获Win-V事件,但我无法正确发送粘贴命令.我可以使用SendKeys.Send或keybd_event函数发送粘贴.然而,他们发送另一个"V"按下管道,该管道被gkh_KeyDown事件捕获并导致多个粘贴事件被触发.
我期待我需要使用SendMessage或PostMessage,但到目前为止我所做的所有尝试都失败了.下面是最后一个函数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) 我已经使用了这个博客中的代码,如下所示,但是我在主窗口中看到了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) 我正在创建一个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) 我需要能够获得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的所有者/父级吗?
我有一个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链接有相同的问题,但它没有解决问题.
我在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) 有没有办法在WPF表单中的某种容器或包装器类型控件中托管/显示完整的WinForms表单(而不仅仅是单个控件)?我正在寻找类似于概念的东西来自虚拟包含来自php或iframe的html.可能通过将其编译为OCX或DLL.
我们有一个WinForms应用程序,我们正在逐步转换为WPF.此时应用程序的主窗体是一个Form(WinForms),它包含一个用WPF构建的垂直侧边栏.侧栏托管在ElementHost控件中.
侧边栏由包含其他控件的ScrollViewer组成.问题是,当焦点位于WinForms aera中的某个位置并且我在ScrollViewer上使用鼠标滚轮时,它不会滚动.
这与WPF/WinForms集成有关,因为在100%WPF项目中,即使焦点在另一个控件上,ScrollViewer也会对鼠标滚轮作出反应.
解决这个问题的正确方法是什么?
winforms-interop ×10
c# ×8
winforms ×6
wpf ×5
winapi ×3
interop ×2
c++ ×1
tooltip ×1
wpf-interop ×1