【问题标题】:C# HEX Value to IntPtrC# HEX 值到 IntPtr
【发布时间】:2010-12-30 07:00:21
【问题描述】:

我有一个使用 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

但它没有工作。有什么想法吗?

【问题讨论】:

  • 值看起来有点像二进制数。你能确认这实际上是一个十六进制值吗?
  • 对于应该表示句柄的指针来说,这是一个非常小的数字。我怀疑您获得的价值有问题。
  • 它是桌面的句柄:P
  • 获取桌面句柄的方法是使用GetDesktopWindow,而不是FindWindow。我几乎可以肯定这不是正确的处理方式。我可能应该补充一点,桌面窗口很特别,有很多事情你不能用它来做(到底什么“不起作用”?)
  • 好吧,当我使用 spy++ 时,我查看了 Progman 进程。它有一个子进程 DefView 和一个子进程 SysListView32。我试图让窗口出现在 syslistview32 下方。

标签: c# hex handle intptr


【解决方案1】:

嗯,00010010 的十六进制等效值是 0x12。所以理论上你可以使用

IntPtr hwndParent = (IntPtr) 0x12

Windows 计算器可以进行这种转换。不过,这个值听起来并不正确。你能更详细地解释一下你是如何得到这个值的吗?

编辑:您的评论提到您正在尝试获取桌面窗口的句柄。有一个函数:GetDesktopWindow,它返回一个 IntPtr。如果您只对桌面窗口感兴趣,请使用它。

这是该函数的 P/Invoke:

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

【讨论】:

    【解决方案2】:

    IntPtr 的构造函数接受一个初始化参数:

    IntPtr hwndParent = new IntPtr(0x00010010);
    

    【讨论】:

      【解决方案3】:

      试试:

       Convert.ToInt32("00010010", 16);
      

      【讨论】:

        【解决方案4】:

        这应该可以工作

         var hwnd = new IntPtr(Convert.ToInt32({HexNumber}, 16));
        

        【讨论】:

          【解决方案5】:

          既然您在谈论this 问题:您似乎不想在桌面上创建小部件/窗口,而是在另一个窗口上创建? 如果是这样,你为什么不使用 FindWindow() 来 - 找到那个窗口?

          为什么是常数值?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-11
            • 2012-06-18
            • 1970-01-01
            • 2015-06-21
            • 1970-01-01
            • 2015-06-16
            相关资源
            最近更新 更多