איך ליצר קיצור מקשים בוורד עבור קודים ב-C# VSTO
-
יש כמה דרכים לעשות זאת כאן אכתוב את הבסיס איך לעשות זאת על ידי הוספת קוד vba('רך אחרת תוכלו לראות פה)
אפשר לשכלל את זה כמובן אני רק כותב את הבסיס שאם מישהו יצטרך שלא יתחיל מאפס
- יצירת קלאס ב-C#: בקוד C# יש ליצור class ולהוסיף לו את התג ComVisible(true) כדי לאפשר ל-Microsoft Office לגשת אליו דרך COM. לשם הדוגמה בתוך הקלאס נגדיר פונקציה פשוטה בשם GetNumber שמחזירה את המספר 42.
[ComVisible(true)] public class MyManagedFunctions { public int GetNumber() { return 42; } }
- קוד עבור ה-startup של התוסף: בקוד ה-C# הוא נכתב תחת אירוע ה-startup של התוסף. בעת ה-startup, הקוד מפעיל את הפונקציה RegisterCallback עם אינסטנס של ה-class שנוצר בצעד הקודם. בנוסף, הקוד מצריך תגובה לאירוע של פתיחת מסמך חדש (DocumentOpen). כאשר מסמך נפתח, הקוד מפעיל פונקציה נוספת (Application_DocumentOpen) בו אפשר לקרוא לקודים של המאקרו דלהלן שאחראיים על חיבור או הסרת הקיצורי מקשים לפונקציה.
private void ThisAddIn_Startup(object sender, System.EventArgs e) { this.Application.Run("RegisterCallback", new MyManagedFunctions()); this.Application.DocumentOpen += Application_DocumentOpen; } private void Application_DocumentOpen(Microsoft.Office.Interop.Word.Document Doc) { //this.Application.Run("AssignShortcut"); // Run the VBA macro to assign the shortcut //this.Application.Run("RemoveShortcut"); // Run the VBA macro to remove the shortcut this.Application.DocumentOpen -= Application_DocumentOpen; }
- קוד בשביל ה-מאקרו VBA: הקוד ב-VBA מגיב לפעולות של המשתמש בתוכניות כמו Word. הוא כולל כמה פונקציות:
RegisterCallback
שמקבלת אובייקט ומגדירה אותו למשתנהmanagedObject
,
ו-GetNumberFromVSTO
שמפעילה את הפונקציהGetNumber
מה-C# ומציגה את התוצאה ב-MessageBox
.
יש גם פונקציות להקצאת קיצורי מקלדת (AssignShortcut
ו-RemoveShortcut
) ופונקציה (RemoveAllShortcuts
) להסרת כל הקיצורי מקלדת.
ו-ShowAllShortcutKeys
- למקרה ששחכתם מה עשיתם בעבר
Dim managedObject As Object Public Sub RegisterCallback(callback As Object) Set managedObject = callback End Sub Public Function GetNumberFromVSTO() As Integer GetNumberFromVSTO = managedObject.GetNumber() MsgBox "The number is " & GetNumberFromVSTO End Function Sub CallVstoFunction() Call GetNumberFromVSTO End Sub Public Sub AssignShortcut() ' Assign Ctrl+Shift+Q to CallVstoFunction CustomizationContext = NormalTemplate KeyBindings.Add KeyCode:=BuildKeyCode(wdKeyControl, wdKeyShift, wdKeyQ), _ KeyCategory:=wdKeyCategoryMacro, _ Command:="CallVstoFunction" End Sub Public Sub RemoveShortcut() ' Remove the shortcut key assignment for CallVstoFunction Dim keyBinding As keyBinding For Each keyBinding In KeyBindings If keyBinding.Command = "Normal.Module1.CallVstoFunction" Then keyBinding.Clear End If Next keyBinding End Sub Public Sub RemoveAllShortcuts() ' Remove the shortcut key assignment CustomizationContext = NormalTemplate KeyBindings.ClearAll End Sub Sub ShowAllShortcutKeys() Dim keyBinding As keyBinding Dim msg As String msg = "Currently assigned shortcut keys:" & vbCrLf For Each keyBinding In Application.KeyBindings msg = msg & "Command: " & keyBinding.Command & ", Key: " & keyBinding.KeyString & vbCrLf Next keyBinding MsgBox msg End Sub
לפעמים צריך להתחיל את וורד מחדש כדי שהקודים 'ייתפסו'