Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm Controls / December 2006

Tip: Looking for answers? Try searching our database.

Disabling Copy/Paste in a Textbox control in C#

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Brian Simmons - 06 Dec 2006 00:28 GMT
Hi All,

I'm writing an application where I don't want it to be super easy for the
end-user to 'steal' the intellectual property of the application.

Obviously, if they're determined, they'll find a way, but I don't want to
hand it over on a silver platter.

I made my Textbox controls ReadOnly and that'll handle disable pasting into
a Textbox control.  However, copying is still enabled (via right-click
pop-up menu and CTRL+C/CTRL+INS).

How does one disable copying from a textbox control in C#(.net 2.0)?

Is there a way to handle the WindowProc event and disregard the WM_COPY
message and continue for all other events?  I come from a Delphi world and
that's how I did way back then/when.

Any info will be greatly appreciated.

Thanks,
Brian
Jeffrey Tan[MSFT] - 06 Dec 2006 02:21 GMT
Hi Brian,

Yes, .Net Winform provides WndProc method for us to superclass a .Net
control. You may inherit from TextBox and override its WndProc. In this
proc, you may filter the WM_COPY message. I also recommend you to filter
WM_GETTEXT message either, because this will prevent another process to use
SendMessage(WM_GETTEXT, ...) to steal your textbox content. This is also
what password-mode TextBox does. Below is the sample code in C#:

public class MyTextBox : TextBox
{
   const int WM_COPY = 0x301;
   const int WM_GETTEXT = 0xD;
   protected override void WndProc(ref Message m)
   {
       if (m.Msg != WM_COPY && m.Msg != WM_GETTEXT)
       {
           base.WndProc(ref m);
       }
   }
}

To verify if have successfully disabled WM_GETTEXT hack, you may use Spy++
to monitor your customized textbox, if it display "empty" caption for your
textbox, it means you have disabled WM_GETTEXT hack, because Spy++ also
uses WM_GETTEXT message to get a window's caption.

Hope this helps.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Jeffrey Tan[MSFT] - 08 Dec 2006 02:58 GMT
Hi Brian,

Have you reviewed my reply? Does it work for you? If you still need any
help, please feel free to tell me, thanks.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Brian Simmons - 08 Dec 2006 13:17 GMT
Hi Jeffrey,

I've been wanting to write, but I've come down with a nasty case of food
poisoning, and this is the best I've felt in order to write back.

Your suggestion/reply seems brilliant and exactly what I was looking for.
Thank you very much.

I do have a couple of follow-ups though.  Suppose I already have a few
Textbox's dropped on the form.  Is there an easy way to change them into
"MyTextbox" (the derived class that you suggested)?
Is there a way to create a NoCopyPasteTextBox component in my solution and
have it available in the Component Toolbox of VS Studio 2005 Pro?
I apologize if these are novice questions, as I mentioned before I'm sort of
just getting started on the C#/.NET2 wagon.

Thanks,
Brian

> Hi Brian,
>
[quoted text clipped - 23 lines]
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
Jeffrey Tan[MSFT] - 11 Dec 2006 06:20 GMT
Hi Brian,

Food poisoning? I'm sorry to hear that, take care buddy.

1. After creating a customized textbox, I normally press "Ctrl+H" in the VS
IDE to open the "Find and Replace" dialog. Then you may replace
"System.Windows.Forms.TextBox" with "MyTextbox". This operation will
replace all the "System.Windows.Forms.TextBox" type with new created
"MyTextbox" type.

Note: remember to check the "Match Case", "Match whole word" and "Search
hidden text" checkboxes. Also, you specify the search location as "Current
project" to ensure the entire project is searched and replaced.

2. Yes, if you want to create a NoCopyPasteTextBox to reuse in other
application, you'd better create a separate project for this
NoCopyPasteTextBox component. You should add a "Windows Control Library"
project into your solution and then place the NoCopyPasteTextBox code in
it. To use it in the ToolBox, you may switch to "General" tab in ToolBox
and right click to pop up the context menu->"Choose Items..."->Click
"Browse..." button. In the "Open" file dialog, you may find the
NoCopyPasteTextBox assembly dll in its project bin folder. This steps will
add the NoCopyPasteTextBox to the toolbox.

Finally, http://www.windowsforms.net/ site contains much
information/FAQ/articles of Winform programming. It should be invaluable to
you.

If you still have anything unclear, please feel free to tell me, thanks.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
Brian Simmons - 11 Dec 2006 23:47 GMT
Thanks for the kind words.  Fortunately, I'm back to 100% now.

Thanks for the awesome answers.  Exactly what I was looking for.  You should
be an MVP.

> Hi Brian,
>
[quoted text clipped - 50 lines]
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
Jeffrey Tan[MSFT] - 12 Dec 2006 02:07 GMT
Hi Brian,

Thanks for your suggestion, however, I am already a Micorosft fulltime
employee now, so I can not be a MVP the same time :-).

If you need further help, please feel free to post, thanks.

Best regards,
Jeffrey Tan
Microsoft Online Community Support
==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
beeswax - 14 Dec 2006 12:28 GMT
You are a microsoft employee?
so why don't you just use the simple way to disable copy and past in a
textbox??!

txtReadOnlyTextBox.ShortcutsEnabled = false;

isn't that a lot easier?

regards

"Jeffrey Tan[MSFT]" schreef:

> Hi Brian,
>
[quoted text clipped - 24 lines]
> ==================================================
> This posting is provided "AS IS" with no warranties, and confers no rights.

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.