views:

57

answers:

4

Windows hooks allows you to poke inside other processes and sometimes alter their behaviors.

Is there such thing for Mac OS X?

Thanks!

A: 

Quartz event taps can monitor and modify low-level events such as keystrokes and mouse clicks, subject to some restrictions. Can you tell more about what you want to do?

JWWalker
Let's say I wanted to hook the function that loads asdf.dylib.The ideia is to force an application to load my own customized version of asdf.dylib , without using the DYLD_INSERT_LIBRARIES trick.
karlphillip
+1  A: 

SetWindowsHookEx is more like the old InputManager hack, in the sense that you change the code of an app from inside a shared library / a plugin loaded to it.

See SIMBL for a ready-made code injector to another process. For Objective-C classes, you then need to use method swizzling. I haven't tried replacing C functions / C++ classes myself, but surely it can be done using mach_override. See also this blog post.

But usually if you want to modify a GUI app, tapping into Objective-C classes would be sufficient.

Yuji
A: 

What are you trying to accomplish, specifically? Can you explain why you want the Mac OS X equivalent of SetWindowsHookEx()? (Short answer: there isn't one. Medium answer: just about everything you can do with SetWindowsHookEx() on Windows can be done on Mac OS X in some other, more OO way.)

Jonathan Grynspan
A: 

JWWalker:

What are the limitations on Quartz event taps?

Can they be used to sniff somebody's keystrokes when they are typing passwords/credentials/etc into Safari?

Frank Puccino
If the field is a password field (showing bullets instead of the actual characters), I don't think that an event tap will see the characters. I can't swear to that though, because I can't find it in the documentation.
JWWalker