Community
    • Login

    How to capture what user is typing

    Scheduled Pinned Locked Moved Notepad++ & Plugin Development
    12 Posts 2 Posters 7.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • bycn82 bbbbB
      bycn82 bbbb
      last edited by

      Hi,
      I am trying to write a plugin which need to capture all what user is typing on the notepad++, even when it is set as “read-only”, so I was considering by filtering the “WM_KEYDOWN” message. but I did not receive these message in messageProc function.
      Can someone give some advice? Thanks.
      Regards,
      Bill

      1 Reply Last reply Reply Quote 0
      • dailD
        dail
        last edited by dail

        Since you are wanting to receive notifications that something has happened you’d want to use the beNotified() function instead of messageProc().

        That being said you won’t receive WM_KEYDOWN notifications. Those are handled by Notepad++/Scintilla. What you normally do is catch notifications from Scintilla that tells you the user has added (or removed) text by catching the SCN_MODIFIED notification which has the info you need (e.g. position, text). You can also catch SCN_MODIFYATTEMPTRO which tells you a read-only document was attempted to be modified…but I don’t believe this notification tells you what was actually attempted.

        If indeed you are actually needing the raw WM_KEYDOWN notifications there are ways of subclassing (superclassing?) the Notepad++ window and catching them before Notepad++ does…but that is beyond by Win32 API knowledge, but I do know some plugins do that.

        1 Reply Last reply Reply Quote 0
        • bycn82 bbbbB
          bycn82 bbbb
          last edited by

          Thanks,

          I already got notified. but the notifyCode->ch is always equals to 0

          Can you please help to explain how can I check what user is typed?

          1 Reply Last reply Reply Quote 0
          • dailD
            dail
            last edited by dail

            You should read the documentation on those notifications. SCN_MODIFIED does not use the ch field, it uses the text field because the user could paste multiple characters (or delete a range of text).

            If indeed you do want individual characters only (and skip any paste/deletes) then you can catch SCN_CHARADDED notifications which does use ch.

            1 Reply Last reply Reply Quote 0
            • bycn82 bbbbB
              bycn82 bbbb
              last edited by

              I want to be notified when user typed “backspace”, but maybe VK_BACK is the not correct value. or maybe it was not captured in SCN_MODIFIED/CHARADDED. any recommendation?

              1 Reply Last reply Reply Quote 0
              • dailD
                dail
                last edited by

                SCN_MODIFIED does tell you when a character (or range of characters) is deleted, but not necessarily due to the backspace key. The modificationType will have the SC_MOD_DELETETEXT flag set.

                If you are needing to capture actual keyboard input and not just changes to the text document then you’ll have to go the subclassing/superclassing route.

                1 Reply Last reply Reply Quote 0
                • bycn82 bbbbB
                  bycn82 bbbb
                  last edited by

                  Yes,
                  the BACKSPACE will trigger the notification with SC_MOD_DELETETEXT bit in the modificationType. Thanks.

                  I got another question.
                  Currently I bind the hotkey with the function using the menu. But is it possible to hide the menu or is there any another to link the hotkey and func?

                  1 Reply Last reply Reply Quote 0
                  • dailD
                    dail
                    last edited by dail

                    No it is only possible using the FuncItem struct which requires a hotkey.

                    Edit: Actually it doesn’t require a hotkey, however the struct is the only way to register functions with Notepad++…which automatically show up in the menu.

                    1 Reply Last reply Reply Quote 0
                    • bycn82 bbbbB
                      bycn82 bbbb
                      last edited by

                      How to response the VK_ESCAPE? currently I am binding the ESC on the menu command, it works. but I was wondering whether I can filter the VK_ESCAPE somewhere or I can dynamically bind it as a hotkey for a function.

                      1 Reply Last reply Reply Quote 0
                      • dailD
                        dail
                        last edited by

                        As far as I know you can’t dynamically bind shortcuts.

                        1 Reply Last reply Reply Quote 0
                        • bycn82 bbbbB
                          bycn82 bbbb
                          last edited by

                          Hi Dali,
                          I was trying to intercept the user typing by receiving the notification when editor is read-only, so far, it works good. but read-only editor is not an ultimate solution, I wondering is there any way to ignore the key press on the editor and interact with the key pressing?
                          Regards,

                          1 Reply Last reply Reply Quote 0
                          • dailD
                            dail
                            last edited by

                            I’m not sure. I’m not saying it is impossible though, just don’t know how.

                            1 Reply Last reply Reply Quote 0
                            • First post
                              Last post
                            The Community of users of the Notepad++ text editor.
                            Powered by NodeBB | Contributors