Navigation

    Community

    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    How to capture what user is typing

    Plugin Development
    2
    12
    6215
    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 bbbb
      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
      • dail
        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 bbbb
          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
          • dail
            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 bbbb
              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
              • dail
                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 bbbb
                  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
                  • dail
                    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 bbbb
                      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
                      • dail
                        dail last edited by

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

                        1 Reply Last reply Reply Quote 0
                        • bycn82 bbbb
                          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
                          • dail
                            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
                            Copyright © 2014 NodeBB Forums | Contributors