איך ליצור קיצורי מקשים לוורד דרך C# vsto?
-
כידוע אין דרך ישירה ליצור קישורי מקשים בוורד דרך vsto
ראיתי מישהו שהציע את הקוד דלהלן:
לפעמים עובד לפעמים וורד חוסם אותו כנראה שיש בו איזהו שגיאה או משהו.
איך שלא יהיה זה הרבה מעבר לרמה שלי אם מישהו יוכל להגיד לי מה קורה קורה בקוד ומה צריך לשנות זה מאוד יעזור לי
תודהusing System; using System.Runtime.InteropServices; using System.Windows.Forms; using Microsoft.Office.Tools.Word; namespace WordAddIn { public partial class ThisAddIn { private IntPtr hookId = IntPtr.Zero; private const int WM_KEYDOWN = 0x0100; private const int WM_KEYUP = 0x0101; private const int WM_SYSKEYDOWN = 0x0104; private const int WM_SYSKEYUP = 0x0105; // Import necessary Windows API functions [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool UnhookWindowsHookEx(IntPtr hhk); [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam); [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] private static extern IntPtr GetModuleHandle(string lpModuleName); // Delegate for the low-level keyboard procedure private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam); // Low-level keyboard hook procedure private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0 && (wParam == (IntPtr)WM_KEYDOWN || wParam == (IntPtr)WM_SYSKEYDOWN)) { int vkCode = Marshal.ReadInt32(lParam); // Handle the key down event MessageBox.Show($"Key Down: {((Keys)vkCode).ToString()}"); } else if (nCode >= 0 && (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP)) { int vkCode = Marshal.ReadInt32(lParam); // Handle the key up event MessageBox.Show($"Key Up: {((Keys)vkCode).ToString()}"); } return CallNextHookEx(hookId, nCode, wParam, lParam); } // Install the low-level keyboard hook private void SetHook() { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { hookId = SetWindowsHookEx(13, HookCallback, GetModuleHandle(curModule.ModuleName), 0); } } // Uninstall the low-level keyboard hook private void Unhook() { UnhookWindowsHookEx(hookId); } private void ThisAddIn_Startup(object sender, System.EventArgs e) { SetHook(); // Start listening to keyboard events when the add-in starts } private void ThisAddIn_Shutdown(object sender, System.EventArgs e) { Unhook(); // Stop listening to keyboard events when the add-in shuts down } } }