2010-07-15 34 views

risposta

4

SetWindowsHookEx è più simile al vecchio hack InputManager, nel senso che si modifica il codice di un'app da una libreria condivisa o da un plug-in caricato.

Vedere SIMBL per un iniettore di codice pronto per un altro processo. Per le classi Objective-C, è quindi necessario utilizzare method swizzling. Non ho provato a sostituire le classi C funzioni/C++, ma sicuramente si può fare usando mach_override. Vedi anche this blog post.

Di solito, se si desidera modificare un'app della GUI, è sufficiente accedere alle classi Objective-C.

0

I rubinetti degli eventi al quarzo possono monitorare e modificare eventi di basso livello come sequenze di tasti e clic del mouse, fatte salve alcune restrizioni. Puoi dire di più su cosa vuoi fare?

+0

Diciamo che volevo agganciare la funzione che carica asdf.dylib. L'idea è di forzare un'applicazione per caricare la mia versione personalizzata di asdf.dylib, senza usare il trucco DYLD_INSERT_LIBRARIES. – karlphillip

0

Cosa stai cercando di realizzare, in particolare? Puoi spiegare perché vuoi l'equivalente per Mac OS X di SetWindowsHookEx()? (Risposta breve: non ce n'è una Risposta media: tutto ciò che puoi fare con SetWindowsHookEx() su Windows può essere fatto su Mac OS X in qualche altro modo OO.)

+0

In Windows 'SetWindowsHookEx' può aiutarti a ricevere eventi da ** altri ** processi. Come la chiusura della finestra, la finestra massimizza ... ecc. Sei sicuro che ciò potrebbe essere fatto su Mac OS X? –

+0

Questa è una risposta molto vecchia a una domanda molto vecchia. :) Stavo dicendo che, se conoscessimo il problema che lo sviluppatore originale stava cercando di risolvere, potremmo raccomandare approcci alternativi. –