使用 c# 和 VBA 在 word 加载项中挂接键盘
Hook key board in word add-in using c# and VBA
我用 c# 写了一个 word 插件。
我想钩住键盘并抓住 ctrl-c 并阅读复制到剪贴板的文本。
我的加载项可以使用下面的代码找到 ctrl-c,
//C# code:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
.
.
.
Application.KeyBindings.Add(Word.WdKeyCategory.wdKeyCategoryCommand, "KeyCode1",
Application.BuildKeyCode(Word.WdKey.wdKeyControl , Word.WdKey.wdKeyAlt , Word.WdKey.wdKeyD));
}
public void CallKey(int i)
{
switch (i)
{
case 1:
MessageBox.Show("Ctrl+C");
break;
}
}
//VBA code:
Function GetAddin() As Object
On Error Resume Next
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns(“WordKeyBinding”)
Set automationObject = addIn.Object
Set GetAddin = automationObject
End Function
Public Sub KeyCode1()
On Error Resume Next
GetAddin.CallKey 1
End Sub
现在我的问题是当我按下 ctrl-c 时,显示了消息框但没有复制到剪贴板!
我该怎么办?
您可以尝试通过功能区、右键单击上下文菜单或快捷方式 (ctrl + c) 在 VSTO 中重新使用适用于任何副本的命令。
**
Ribbon.xml
**
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" >
<commands>
<command idMso="Copy" onAction="CustomCopy"/>
</commands>
</customUI>
Ribbon.cs
private Word.Application wordApp = Globals.ThisAddIn.Application;
public void CustomCopy(Office.IRibbonControl control, bool cancelDefault)
{
//wordApp.Selection - returns the selction of copy
//Or use Clipboard.GetData()
//https://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.getdata(v=vs.110).aspx
wordApp.Selection.Copy();
}
在 here 中详细了解 Office 2007 中的重新调整用途。但它也适用于 Word 2013。
我用 c# 写了一个 word 插件。
我想钩住键盘并抓住 ctrl-c 并阅读复制到剪贴板的文本。
我的加载项可以使用下面的代码找到 ctrl-c,
//C# code:
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
.
.
.
Application.KeyBindings.Add(Word.WdKeyCategory.wdKeyCategoryCommand, "KeyCode1",
Application.BuildKeyCode(Word.WdKey.wdKeyControl , Word.WdKey.wdKeyAlt , Word.WdKey.wdKeyD));
}
public void CallKey(int i)
{
switch (i)
{
case 1:
MessageBox.Show("Ctrl+C");
break;
}
}
//VBA code:
Function GetAddin() As Object
On Error Resume Next
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns(“WordKeyBinding”)
Set automationObject = addIn.Object
Set GetAddin = automationObject
End Function
Public Sub KeyCode1()
On Error Resume Next
GetAddin.CallKey 1
End Sub
现在我的问题是当我按下 ctrl-c 时,显示了消息框但没有复制到剪贴板! 我该怎么办?
您可以尝试通过功能区、右键单击上下文菜单或快捷方式 (ctrl + c) 在 VSTO 中重新使用适用于任何副本的命令。
**
Ribbon.xml
**
<?xml version="1.0" encoding="UTF-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" >
<commands>
<command idMso="Copy" onAction="CustomCopy"/>
</commands>
</customUI>
Ribbon.cs
private Word.Application wordApp = Globals.ThisAddIn.Application;
public void CustomCopy(Office.IRibbonControl control, bool cancelDefault)
{
//wordApp.Selection - returns the selction of copy
//Or use Clipboard.GetData()
//https://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.getdata(v=vs.110).aspx
wordApp.Selection.Copy();
}
在 here 中详细了解 Office 2007 中的重新调整用途。但它也适用于 Word 2013。