Posted at

MacからiPhoneのスクリーンショットを取得

More than 3 years have passed since last update.

ソシャゲがだるいので自動化しようとしていた際の覚え書き

スクリーンショットはオートで取れるが脱獄せずにタップ操作を発生させるのが予想以上に大変でお蔵入りになった


MacからiPhoneのスクリーンショットを取得

YosemiteからQuick Time PlayerのMovie RecordingでiPhone画面を表示できるようになったのでそれを使う。


- (CGImageRef)getIPhoneScreenshot {

CGWindowID windowID = [self getMovieRecordingWindowID];

CGWindowImageOption imageOptions = kCGWindowImageDefault;
CGWindowListOption singleWindowListOptions = kCGWindowListOptionIncludingWindow;
CGRect imageBounds = CGRectNull;

return CGWindowListCreateImage(imageBounds, singleWindowListOptions, windowID, imageOptions);
}

- (CGWindowID)getMovieRecordingWindowID {

CGWindowListOption windowListOption = kCGWindowListOptionAll | kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements;
CFArrayRef windowList = CGWindowListCopyWindowInfo(windowListOption, kCGNullWindowID);

NSInteger listCount = CFArrayGetCount(windowList);

for (CFIndex i = 0; i < listCount; i++) {

CFDictionaryRef windowInfo = CFArrayGetValueAtIndex(windowList, i);

CGWindowID windowID = 0;
CFNumberGetValue(CFDictionaryGetValue(windowInfo, kCGWindowNumber), kCGWindowIDCFNumberType, &windowID);

CFStringRef windowName = CFDictionaryGetValue(windowInfo, kCGWindowName);

if ([(__bridge NSString *)windowName isEqualToString:@"Movie Recording"]) {
return windowID;
}
}
return 0;
}


スクリーンの操作


タップ

・iPhone背面のケースとスクリーンを同通するとタップとして認識される

・まずスクリーンに端を解放した導線を接触させておいて、次に解放端を握った時もタップとして認識された

・実験してみたところ、画面につける端子は面積(1~2cm^2以上)が必要

・画面に導線を接触させておき、トランジスタやFETで導通させることでタップを発生させるのはうまくいかなかった。物理スイッチではできたのでリレーならなんとかなるかも