С# HEX значение для IntPtr

У меня есть шестнадцатеричное значение для окна, которое я нашел с помощью Spy++.

значение: 00010010

Благодаря ответу на вопрос, который я задал ранее, у меня есть этот код:

IntPtr hwndf = this.Handle;
IntPtr hwndParent = FindWindow("WINDOW HERE", null); ;

SetParent(hwndf, hwndParent);
this.TopMost = false;

Теперь, насколько я понимаю, IntPtr hwndParent будет содержать дескриптор окна WINDOW HERE. Как я могу переписать эту строку, чтобы использовать мой шестнадцатеричный дескриптор? Я старался:

IntPtr hwndParent = (IntPtr) 0x00010010

Но это не сработало. Есть идеи?


person Ozzy    schedule 27.12.2009    source источник
comment
Значение подозрительно похоже на двоичное число. Можете ли вы подтвердить, что это действительно шестнадцатеричное значение?   -  person richardtallent    schedule 27.12.2009
comment
Это очень мало для указателя, который должен представлять дескриптор. Я подозреваю, что что-то не так с ценой, которую вы получаете.   -  person John Feminella    schedule 27.12.2009
comment
Это дескриптор рабочего стола :P   -  person Ozzy    schedule 27.12.2009
comment
Чтобы получить дескриптор рабочего стола, используйте GetDesktopWindow, а не FindWindow. И я почти уверен, что это не та ручка. И я, вероятно, должен добавить, что окно рабочего стола особенное, и с ним нельзя делать много чего (что именно не сработало?)   -  person Aaronaught    schedule 27.12.2009
comment
ну, когда я использовал spy++, я посмотрел на процесс Progman. у него есть дочерний процесс DefView и у него есть дочерний процесс SysListView32. Я пытаюсь сделать так, чтобы окно отображалось под syslistview32.   -  person Ozzy    schedule 30.12.2009


Ответы (5)


Что ж, шестнадцатеричный эквивалент 00010010 равен 0x12. Таким образом, вы могли бы теоретически использовать

IntPtr hwndParent = (IntPtr) 0x12

Калькулятор Windows может сделать это преобразование. Однако это значение звучит некорректно. Можете ли вы объяснить более подробно, как вы получили это значение?

EDIT: В вашем комментарии упоминается, что вы пытаетесь получить доступ к окну рабочего стола. Для этого есть функция: GetDesktopWindow, который возвращает IntPtr. Если все, что вас когда-либо интересовало, это окно рабочего стола, используйте его.

Вот P/Invoke для этой функции:

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern IntPtr GetDesktopWindow();
person Michael Petrotta    schedule 27.12.2009

Конструктор IntPtr принимает параметр инициализации:

IntPtr hwndParent = new IntPtr(0x00010010);
person joshperry    schedule 27.12.2009

Пытаться:

 Convert.ToInt32("00010010", 16);
person richardtallent    schedule 27.12.2009

Это должно работать

 var hwnd = new IntPtr(Convert.ToInt32({HexNumber}, 16));
person almog.ori    schedule 27.12.2009

Поскольку вы говорите об этом вопросе: кажется, вы не хотите создавать виджет/окно поверх рабочего стола, но вместо этого поверх другого окна? Если это так, почему бы вам не использовать FindWindow(), чтобы найти это окно?

Почему постоянное значение?

person Benjamin Podszun    schedule 27.12.2009