Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add context menu item to all text boxes operating system wide

I know it is possible to extend the context menu of the standard file however is there a way to add items to the system-wide text box context menu?

This would be so the new item appears in every text box that a user can type in anywhere in windows?

For example to allow to add such features as look up the selected text against a spell checker.

like image 744
John Avatar asked Feb 15 '11 00:02

John


2 Answers

Inherit from the text box you're trying to use and add the default value there. Use your class instead of the text box class.

like image 36
Esteban Araya Avatar answered Oct 16 '22 17:10

Esteban Araya


This is technically impossible with C#. Lets imagine next situation. Suppose you have sucessfuly write your managed extention and it "extends" any textbox context menu in the system. And of course you should handle each new menu item you have added. and to achieve this you should inject your managed code to each process which has textbox and replace its WindProc. OK, suppose there is managed app in the system which was writen for .net version different from version you used for your extention. So in this case you would got critical error during extension injection because ONLY one version of .net could be loaded per process. SO there is no way to write robust managed low level hook or shell extension. From here:

Global hooks are not supported in the .NET Framework
Except for the WH_KEYBOARD_LL low-level hook and the WH_MOUSE_LL low-level hook, you cannot implement global hooks in the Microsoft .NET Framework. To install a global hook, a hook must have a native DLL export to inject itself in another process that requires a valid, consistent function to call into. This behavior requires a DLL export. The .NET Framework does not support DLL exports. Managed code has no concept of a consistent value for a function pointer because these function pointers are proxies that are built dynamically.

Low-level hook procedures are called on the thread that installed the hook. Low-level hooks do not require that the hook procedure be implemented in a DLL.

You also may check this article and explore why you shouldnt write managed shell extensions.

like image 76
Anton Semenov Avatar answered Oct 16 '22 18:10

Anton Semenov