首页
社区
课程
招聘
[原创]友秘存图插件
发表于: 2015-1-4 20:44 6923

[原创]友秘存图插件

2015-1-4 20:44
6923
前段时间写的一个Tweak,用来保存友秘(http://www.wumii.com/)的即将销毁的图片.
   功能如下:
   1. 友秘默认查看图片只有2秒后销毁,使用该Tweak后,延长到20秒.
   2. 图片销毁时,会弹出一个对话框,问是否保存该图片,选择保存,会保存到相册中.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#import "substrate.h"
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
#import "UIAlertView+Blocks.h"
 
typedef void (*pfn_viewDidLoad)(id self,SEL _cmd);
static pfn_viewDidLoad Real_viewDidLoad = NULL;
void Mine_viewDidLoad(id self,SEL _cmd);
 
typedef void (*pfn_imageDestroying)(id self,SEL _cmd);
static pfn_viewDidLoad Real_imageDestroying = NULL;
void Mine_imageDestroying(id self,SEL _cmd);
 
#define NS_TITLE    @"保存图片"
#define NS_MESSAGE  @"图片即将销毁,是否立即保存?"
 
MSInitialize
{
    MSHookMessageEx(objc_getClass("WMBrowseTransientImageViewController"), @selector(viewDidLoad), (IMP)Mine_viewDidLoad, (IMP*)&Real_viewDidLoad);
     
    MSHookMessageEx(objc_getClass("WMBrowseTransientImageViewController"), @selector(imageDestroying), (IMP)Mine_imageDestroying, (IMP*)&Real_imageDestroying);
}
 
void Mine_viewDidLoad(id self,SEL _cmd)
{
    Real_viewDidLoad(self,_cmd);
    // delay detory time.
    objc_msgSend(self, @selector(setRemainTimeInMs:),20);
 
    return;
}
 
void Mine_imageDestroying(id self,SEL _cmd)
{
    RIButtonItem* cancelItem = [RIButtonItem itemWithLabel:@"放弃" action:^{
        Real_imageDestroying(self,_cmd);
    }];
     
    // save image
    RIButtonItem* saveItem = [RIButtonItem itemWithLabel:@"保存" action:^{
        id zoomView = objc_msgSend(self, @selector(imageZoomableView));
        UIImageView* imageView = (UIImageView*)objc_msgSend(zoomView, @selector(imageView));
        UIImageWriteToSavedPhotosAlbum(imageView.image, self, nil, nil);
        Real_imageDestroying(self,_cmd);
    }];
     
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:NS_TITLE
                                                        message:NS_MESSAGE
                                               cancelButtonItem:cancelItem
                                               otherButtonItems:saveItem, nil];
    [alertView performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES];
}


Author: coltor#qq.com

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
点赞
支持
分享
最新回复 (1)
雪    币: 296
活跃值: (89)
能力值: ( LV15,RANK:340 )
在线值:
发帖
回帖
粉丝
2
mark下!很少用 objc_msgSend() 直接发送消息,我一般是用class-dump的类定义去访问的。学习了
2015-1-5 16:07
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册