如何使用Binary-AND检查是否为IntPtr
对象设置了特定位?我打电话给GetWindowLongPtr32()
API来获取窗口的窗口样式。这个函数恰好返回一个IntPtr。我已经在我的程序中定义了所有的标志常量。现在假设我想检查是否设置了一个特定的标志(比如说WS_VISIBLE
),我需要二进制 - 它与我的常量,但我的常数是int
类型,所以我不能直接做到这一点。尝试拨打ToInt32()
和ToInt64()
都会导致(ArgumentOutOfRangeException)异常。我的出路是什么?位屏蔽IntPtr
回答
只需将IntPtr
转换为int
(它有一个转换运算符)并使用逻辑位运算符来测试位。
const int WS_VISIBLE = 0x10000000;
int n = (int)myIntPtr;
if((n & WS_VISIBLE) == WS_VISIBLE)
DoSomethingWhenVisible()`
好吧,为什么downvote? OP究竟是在简单而简洁地问什么? –
这显然对我来说工作得很好。谢谢彼得。 – dotNET
How do I pinvoke to GetWindowLongPtr and SetWindowLongPtr on 32-bit platforms?
public static IntPtr GetWindowLong(HandleRef hWnd, int nIndex)
{
if (IntPtr.Size == 4)
{
return GetWindowLong32(hWnd, nIndex);
}
return GetWindowLongPtr64(hWnd, nIndex);
}
[DllImport("user32.dll", EntryPoint="GetWindowLong", CharSet=CharSet.Auto)]
private static extern IntPtr GetWindowLong32(HandleRef hWnd, int nIndex);
[DllImport("user32.dll", EntryPoint="GetWindowLongPtr", CharSet=CharSet.Auto)]
private static extern IntPtr GetWindowLongPtr64(HandleRef hWnd, int nIndex);
GetWindowLong(int hWnd, GWL_STYLE) return weird numbers in c#
您可以隐式转换IntPtr
到int
得到的结果。
var result = (int)GetWindowLong(theprocess.MainWindowHandle, GWL_STYLE);
bool isVisible = ((result & WS_VISIBLE) != 0);
WS_VISIBLE(以及所有WS_值 - 否则无法写入32位Windows应用程序)是一个32位值。无论如何,只使用窗口的底部32位长,因为您只是要屏蔽顶部32位的所有内容。 –
- 1. 位屏蔽混乱
- 2. 位屏蔽位寄存器
- 3. 我如何屏蔽位?
- 4. 屏蔽R中最高位的位?
- 5. 屏蔽文本框 - 隐藏屏蔽
- 6. 数据屏蔽 - 地理定位
- 7. 位屏蔽异或逻辑代码
- 8. 屏蔽c中的不需要的位
- 9. 基数排序C++不屏蔽位
- 10. 位屏蔽和分离在c
- 11. 屏蔽UIWebView
- 12. ImageMagick的屏蔽
- 13. TreePanel中屏蔽
- 14. SVN屏蔽rvmrc
- 15. 如何屏蔽
- 16. 屏蔽值
- 17. 屏蔽xlarge屏幕android
- 18. ajax回调屏蔽屏幕
- 19. IP转发/屏蔽
- 20. 如何屏蔽“。”炭?
- 21. 屏蔽URL参数
- 22. 屏蔽外部URL
- 23. Android布局屏蔽
- 24. 输入线屏蔽
- 25. 屏蔽HTML5视频
- 26. 导航栏屏蔽
- 27. DCT压缩屏蔽
- 28. 屏蔽CALayer与行
- 29. 屏蔽一个UIView
- 30. 屏蔽字符串
从ToInt32得到的确切例外是什么? – LightStriker
你有没有试过['GetWindowLongPtr'](http://www.pinvoke.net/default.aspx/user32/GetWindowLongPtr.html)? – Romoku
@Romoku:我在某处读取GetWindowLongPtr是一个根据平台调用GetWindowLongPtr32()或GetWindowLongPtr64()的宏。 – dotNET