zoukankan      html  css  js  c++  java
  • iphone4 双击Home键 截获

    测试环境: iphone4 ios4.3.2

    之前对于SpringBoard这块的Hook一直不是很熟悉,双击Home键所产生的事件一直也无法跟踪到,所以控制不了。

    Hook SpringBoard之后,确实可以做很多事情,但是截获双击Home键盘的事件也不在话下。

    关于头文件等的导入, 以及Hook环境的搭建这里不在描述,只描述最基本的代码实现。

    下面我们将去除双击Home键调出多任务栏的功能,将其更改为双击Home键Restart SpringBoard的功能,代码如下:

    通过查看SpringBoard class-dump出来的头文件,可以发现在SpringBoard.h中有

    handleMenuDoubleTap函数,其很可疑,猜测其与双击Home键有关。

    1. 首先在初始化函数中注册Hook:

    MSHookMessageEx(objc_getClass("SpringBoard"), @selector(handleMenuDoubleTap), (IMP)replaced_SpringBoard_handleMenuDoubleTap, (IMP *)&original_SpringBoard_handleMenuDoubleTap); 
    

    2. 在MessageHook.h(函数定义等)中包含下列代码:

    extern "C"
    {
         extern IMP original_SpringBoard_handleMenuDoubleTap;
         extern void replaced_SpringBoard_handleMenuDoubleTap(SpringBoard *self, SEL cmd);
    }
    

    3. 在MessageHook.m (函数实现)中包含下列代码:

    IMP original_SpringBoard_handleMenuDoubleTap;
    
    // 双击Home键
    extern "C" void replaced_SpringBoard_handleMenuDoubleTap(SpringBoard *self, SEL cmd)
    {
        NSLog(@"============replaced_SpringBoard_handleMenuDoubleTap enter");
        // Restart SpringBoard
        [self relaunchSpringBoard];
    //    original_SpringBoard_handleMenuDoubleTap(self, cmd);
    }
    

      以上代码即可截获双击Home的事件,并将其更改为重启SpringBoard,虽然这样做的实用性不大,但是可以利用Hook SpringBoard这种方式做很多其他好玩的事情。

    by yytong                     2011-11-25 22:09

  • 相关阅读:
    Servlet学习笔记(1)--第一个servlet&&三种状态对象(cookie,session,application)&&Servlet的生命周期
    XML学习笔记(2)--dom4j操作XML
    坦克大战(版本2.5-版本2.9)
    坦克大战(版本1.7-版本2.4)
    坦克大战(版本1.0-版本1.6)
    坦克大战(版本0.1-版本0.9)
    JavaSE聊天室
    HTML+CSS+JS学习总结
    JDBC学习笔记(10)——调用函数&存储过程
    VS工程的相对路径写法
  • 原文地址:https://www.cnblogs.com/ydhliphonedev/p/2263855.html
Copyright © 2011-2022 走看看