考虑以下代码:
x = 1 # 0001
x << 2 # Shift left 2 bits: 0100
# Result: 4
x | 2 # Bitwise OR: 0011
# Result: 3
x & 1 # Bitwise AND: 0001
# Result: 1
Run Code Online (Sandbox Code Playgroud)
我可以理解Python(和其他语言)中的算术运算符,但我从来没有完全理解'按位'运算符.在上面的例子中(来自Python书),我理解左移但不是其他两个.
另外,实际使用的是按位运算符?我很欣赏一些例子.
我试图从键盘钩子的lParam获取KBDLLHOOKSTRUCT.
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
KBDLLHOOKSTRUCT kbd = new KBDLLHOOKSTRUCT();
Marshal.PtrToStructure(lParam, kbd); // Throws System.ArguementException
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,PtrToStructure正在投掷两个
A first chance exception of type 'System.ArgumentException' occurred in myprogram.exe
Run Code Online (Sandbox Code Playgroud)
每次按下一个键都会出错.它也会阻止该方法的发展.
MSNDA说:http: //msdn.microsoft.com/en-us/library/4ca6d5z7.aspx
ArgumentException when:
The structureType parameter layout is not sequential or explicit.
-or-
The structureType parameter is a generic type.
Run Code Online (Sandbox Code Playgroud)
我能在这做什么才能让它发挥作用?lParam直接来自键盘钩子,所以我希望它是正确的.这些错误中的任何一个都有意义吗,我该怎么做才能解决它?
我安装了一个键盘钩子:
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {
基本上我想拿用户的键盘水龙头,吃输入,然后发布我自己的输入.
因此,如果他点击"g",我可能想将"foo"发布到文本字段.
我正在写文本域CGEventPost并CGEventSetUnicodeString在此处找到:http:
//www.mail-archive.com/cocoa-dev@lists.apple.com/msg23343.html
问题是我的每个编程输入的字符都是键盘钩子.所以我不能return NULL在键盘钩子中阻止用户输入......这也阻止了所有程序的输入!
我在C#中使用'inject'标志在Windows端区分它们,请在一年前看到我的问题:如何使用低级8位标志作为条件?
在Objective-C中寻找类似的东西.