דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. קיצורי מקשים עבור סרגל Word Add-In

קיצורי מקשים עבור סרגל Word Add-In

מתוזמן נעוץ נעול הועבר ארכיון code613m
4 פוסטים 2 כותבים 316 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • רחמיםר מנותק
    רחמיםר מנותק
    רחמים מורחק
    כתב ב נערך לאחרונה על ידי
    #1

    יצרתי כמה סרגלים בשביל וורד, כעת אני רוצה שהמשתמש יוכל להגדיר קיצורי מקשים עבור הפקודות שבסרגלים אלו, והבעיה שאף שעבור כל סרגל מוכלל בוורד אפשר להגדיר איזה קיצור מקש שרוצים, בסרגלים אלו אין אפשרות.
    יש פקודה כזו:

    Protected Declare Function RegisterHotKey _
                Lib "user32.dll" Alias "RegisterHotKey" (ByVal handle As IntPtr, _
                                         ByVal id As Integer, ByVal modifier As Integer, _
                                         ByVal vk As Integer) As Boolean
    

    אבל זה מתייחס לכל המחשב ואל רק לחלון של וורד.
    היש הצעות ורעיונות בנידון?
    תודה לכולם.

    פורסם במקור בפורום CODE613 ב23/02/2014 15:34 (+02:00)

    תגובה 1 תגובה אחרונה
    0
    • clickoneC מנותק
      clickoneC מנותק
      clickone
      כתב ב נערך לאחרונה על ידי
      #2

      אחרי שאתה מקבל שהמקש שנלחץ הוא מה שרצית, תבדוק אם החלון הפעיל הוא וורד, ומה המסמך הפעיל.

      פורסם במקור בפורום CODE613 ב23/02/2014 21:51 (+02:00)

      אין טסט כמו פרודקשן.

      המייל שלי urivpn@gmail.com

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        הבעיה היא שאם נרשמתי שצירוף מקשים מסויים מפעיל פונקציה מסויימת אז צירוף זה לא יעבוד בשום תוכנה אחרת מלבד וורד, וזה מצב בלתי רצוי, שהרי אותו צירוף מקשים אמור לעשות משהו אחד בוורד ומשהו אחר בתוכנות אחרות.

        פורסם במקור בפורום CODE613 ב23/02/2014 23:10 (+02:00)

        תגובה 1 תגובה אחרונה
        0
        • רחמיםר מנותק
          רחמיםר מנותק
          רחמים מורחק
          כתב ב נערך לאחרונה על ידי
          #4

          בסוף מצאתי את הקוד הבא, הוא מקפיץ פונקציה בעת לחיצת מקש רק בטרייד מסויים ולא בכל מקום במחשב:

          Imports System
          Imports System.Diagnostics
          Imports System.Windows.Forms
          Imports System.Runtime.InteropServices
          
          'קישור למקור הקוד
          'http://social.msdn.microsoft.com/Forums/vstudio/en-US/84e8113e-f064-4695-8bf5-10ccdb756e8a/add-keyboard-shortcuts-to-custom-menu-items?forum=vsto
          
          Public Class InterceptKeys
          
              Private Const WH_KEYBOARD As Integer = 2 '13
              Private Const HC_Action As Integer = 0
              Private Shared proc As LowLevelKeyboardProcDelegate = AddressOf HookCallback
              Private Shared hookID As IntPtr
          
              Private Delegate Function LowLevelKeyboardProcDelegate(ByVal nCode As Integer,
                                                                     ByVal wParam As IntPtr,
                                                                     ByVal lParam As IntPtr) As IntPtr
          
              <DllImport("user32")> _
              Private Shared Function SetWindowsHookEx(ByVal idHook As Integer,
                                                       ByVal lpfn As LowLevelKeyboardProcDelegate,
                                                       ByVal hMod As IntPtr,
                                                       ByVal dwThreadId As UInteger) As IntPtr
              End Function
          
              <DllImport("user32.dll")> _
              Private Shared Function UnhookWindowsHookEx(ByVal hhk As IntPtr) As <MarshalAs(UnmanagedType.Bool)> Boolean
              End Function
          
              <DllImport("user32.dll")> _
              Private Shared Function CallNextHookEx(ByVal hhk As IntPtr,
                                                     ByVal nCode As Integer,
                                                     ByVal wParam As IntPtr,
                                                     ByVal lParam As IntPtr) As IntPtr
              End Function
          
              <DllImport("kernel32.dll", CharSet:=CharSet.Unicode)> _
              Private Shared Function GetModuleHandle(ByVal lpModuleName As String) As IntPtr
              End Function
          
              <DllImport("user32.dll")> _
              Private Shared Function GetKeyState(ByVal nVirtKey As Integer) As Short
              End Function
          
              Public Shared Sub HookShortCuts()
                  hookID = SetHook(proc)
              End Sub
          
              Public Shared Sub UnHookShortCuts()
                  UnhookWindowsHookEx(hookID)
              End Sub
          
              Private Shared Function SetHook(ByVal proc As LowLevelKeyboardProcDelegate) As IntPtr
                  Return SetWindowsHookEx(WH_KEYBOARD, proc, IntPtr.Zero, CUInt(System.AppDomain.GetCurrentThreadId))
              
                  'Using curProcess As Process = Process.GetCurrentProcess
                  '    Using curModule As ProcessModule = curProcess.MainModule
                  '        Return SetWindowsHookEx(WH_KEYBOARD,
                  '                                proc,
                  '                                IntPtr.Zero,
                  '                                curProcess.Handle)
                  '    End Using
                  'End Using
              End Function
          
              Const previousStateBit As Integer = 31 'Position of the previous state bit in lparam (1 if the key was down before the message is sent)
              Const bitMask As Int32 = CType(2 ^ (previousStateBit - 1), Int32)
          
              Private Shared Function HookCallback(ByVal nCode As Integer,
                                                   ByVal wParam As IntPtr,
                                                   ByVal lParam As IntPtr) As IntPtr
          
                  Dim keyWasAlreadyPressed As Boolean
          
                  If nCode < 0 Then
                      Return CallNextHookEx(hookID, nCode, wParam, lParam)
                  Else
                      If nCode = HC_Action Then
                          If wParam = Keys.D1 Then
                              keyWasAlreadyPressed = (CType(lParam, Int32) And bitMask) > 0
                              If (Not keyWasAlreadyPressed) And IsKeyDown(Keys.ControlKey) Then
                                  MsgBox("Ctrl + 1")
                                  Return CType(1, IntPtr)
                              End If
                          End If
                      End If
                      Return CallNextHookEx(hookID, nCode, wParam, lParam)
                  End If
              End Function
          
              Private Shared Function IsKeyDown(ByVal k As Keys) As Boolean
                  Return (GetKeyState(k) And &HF0000000)
              End Function
          
          End Class
          

          פורסם במקור בפורום CODE613 ב23/02/2014 23:15 (+02:00)

          תגובה 1 תגובה אחרונה
          1

          בא תתחבר לדף היומי!
          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום