Convert/Cast String (from a textbox) to IntPtr C#

сами J.D. picture сами J.D. · Jul 14, 2015 · Viewed 9.8k times · Source

I have a textbox where I want to input (manually) a Handle (http://i.imgur.com/S1bCyPy.png)

My problem: to get the value from the textbox I need to do this:

textBoxHandle.Text;

but when I initialize my Handle as IntPtr (handle), this doesn't work:

IntPtr h = new IntPtr(textBoxHandle.Text);

I have tried doing

(IntPtr) textBoxHandle.Text

And also many other options I've read around here like Marshal.StringToHGlobalAnsi Method but they don't work/ they change the content.

My question: how do I get an IntPtr (handle) from the string (with a Handle format) that is in the textbox?

EDIT: In the textbox I would write 0x00040C66 for instance.

The final code should be:

IntPtr hWnd = new IntPtr(0x00040C66);

But changing the IntPtr for the value from the textbox.

EDIT: My question was marked as duplicated (How can I convert an unmanaged IntPtr type to a c# string?) but it's not the same. It's not from IntPtr to String what I want. I need the opposite, from String to IntPtr.

Answer

cbr picture cbr · Jul 14, 2015

You need to parse the string into an int or long first, then construct the IntPtr.

IntPtr handle = new IntPtr(Convert.ToInt32(textBoxHandle.Text, 16));
// IntPtr handle = new IntPtr(Convert.ToInt64(textBoxHandle.Text, 16));

The second argument of Convert.ToInt32 and ToInt64 specifies the radix of the number and since you're parsing a hexadecimal number string, it needs to be 16.