How to capture what user is typing
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.
Since you are wanting to receive notifications that something has happened you’d want to use the
beNotified()function instead of
That being said you won’t receive
WM_KEYDOWNnotifications. 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_KEYDOWNnotifications 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.
I already got notified. but the
notifyCode->chis always equals to
Can you please help to explain how can I check what user is typed?
You should read the documentation on those notifications.
SCN_MODIFIEDdoes not use the
chfield, it uses the
textfield 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_CHARADDEDnotifications which does use
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?
SCN_MODIFIEDdoes tell you when a character (or range of characters) is deleted, but not necessarily due to the backspace key. The
modificationTypewill have the
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.
BACKSPACEwill trigger the notification with
SC_MOD_DELETETEXTbit 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?
No it is only possible using the
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.
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.
As far as I know you can’t dynamically bind shortcuts.
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?
I’m not sure. I’m not saying it is impossible though, just don’t know how.