大佬教程收集整理的这篇文章主要介绍了远程获取iOS设备的屏幕截图,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#import <QuartzCore/QuartzCore.h> #import <sys/socket.h> #import <neTinet/in.h> #import <arpa/inet.h> #import <pthread.h> CFSocketRef _socket; void* serverThread(void* context); int setupSocket(void); void acceptCallBACk(CFSocketRef socket,CFSocketCallBACkType type,CFDataRef address,const void *data,void *info); void sendScreenShots(CFWriteStreamRef oStream); void sendScreenShots(CFWriteStreamRef oStream) { CGSize screenSize = [[UIScreen mainScreen] bounds].size; UIGraphicsBeginImageContextWithOptions(screenSize,YES,0); CGContextRef context = UIGraphicsGetCurrentContext(); UIWindow * window = [[UIApplication sharedApplication] keyWindow]; CGContextSaveGState(context); CGContextTranslateCTM(context,[window center].x,[window center].y); CGContextConcatCTM(context,[window transform]); CGContextTranslateCTM(context,-[window bounds].size.width*[[window layer] anchorPoint].x,-[window bounds].size.height*[[window layer] anchorPoint].y); [[window layer] renderInContext:context]; CGContextRestoreGState(context); UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); NSData* imageData = UIImagePNGRepresentation(imagE); NSUInteger offset = 0; NSUInteger buff_size = 1024; while(imageData.length>offset){ NSUInteger buff_len = imageData.length - offset > buff_size ? buff_size : imageData.length - offset; CFWriteStreamWrite(oStream,imageData.bytes+offset,buff_len); offset = offset + buff_len; } UIGraphicsEndImageContext(); } void acceptCallBACk(CFSocketRef socket,void *info) { if (kCFSocketAcceptCallBACk == typE) { CFSocketNativeHandle nativeSocketHandle = *(CFSocketNativeHandle *)data; uint8_t name[SOCK_MAXADDRLEN]; socklen_t nameLen = sizeof(Name); if (0 != getpeername(nativeSocketHandle,(struct sockaddr *)name,&nameLen)) { close(nativeSocketHandlE); } //NSLog(@"%s connected.",inet_ntoa( ((struct sockaddr_in *)Name)->sin_addr )); CFWriteStreamRef oStream; CFStreamCreatePairWithSocket(kCfallocatorDefault,nativeSocketHandle,NULL,&oStream); if (oStream) { CFWriteStreamOpen(oStream); sendScreenShots(oStream); CFWriteStreamClose(oStream); close(nativeSocketHandlE); } else { close(nativeSocketHandlE); } } } int setupSocket() { _socket = CFSocketCreate(kCfallocatorDefault,PF_INET,SOCK_STREAM,IPPROTO_TCP,kCFSocketAcceptCallBACk,acceptCallBACk,null); if (NULL == _socket) { return 0; } int optVal = 1; setsockopt(CFSocketGetNative(_socket),SOL_SOCKET,SO_REUSEADDR,(void *)&optVal,sizeof(optVal)); struct sockaddr_in addr4; memset(&addr4,sizeof(addr4)); addr4.sin_len = (__uint8_t)sizeof(addr4); addr4.sin_family = AF_INET; addr4.sin_port = htons(2115); addr4.sin_addr.s_addr = htonl(INADDR_ANY); CFDataRef address = CFDataCreate(kCfallocatorDefault,(UInt8 *)&addr4,sizeof(addr4)); if (kCFSocketsuccess != CFSocketSetAddress(_socket,address)) { if (_socket) CFRelease(_socket); _socket = NULL; return 0; } CFRunLoopRef cfRunLoop = CFRunLoopGetCurrent(); CFRunLoopsourceRef source = CFSocketCreateRunLoopsource(kCfallocatorDefault,_socket,0); CFRunLoopAddsource(cfRunLoop,source,kCFRunLoopCommonModes); CFRelease(sourcE); return 1; } void* serverThread(void* context) { @autoreleasepool { int res = setupSocket(); if (!res) { return 0; } CFRunLoopRun(); return (void*)1; } } int startScreenServer() { pthread_t tid; return pthread_create(&tid,serverThread,null); }
以上是大佬教程为你收集整理的远程获取iOS设备的屏幕截图全部内容,希望文章能够帮你解决远程获取iOS设备的屏幕截图所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。