दिलचस्प पोस्ट
IOS6 में एक एकल UIViewController पर ऑटोरोटेट अक्षम करें जावा में पाठ के लिए बाइनरी एसएएस मैक्रो एपरसैंड Sass में किसी फ़ंक्शन का प्रयोग करना परिणाम की बजाय फ़ंक्शन का नाम युक्त स्ट्रिंग लौट रहा है एकल सूची से शब्दकोश बनाने के लिए सबसे पायथनिक रास्ता कैसे एक सरल एंड्रॉइड पॉपअप विंडो बनाने के लिए? एक आइफ्रेम पर क्षैतिज स्क्रॉलबार छुपाएं? वांछित नाम के साथ फाइल कैसे अपलोड और सहेजें एक ही विधि के लिए व्यवस्थापक अधिकार इसका क्या मतलब है? "'NSUnknownKeyException', कारण: … यह वर्ग कुंजी मान कुंजी कोड के लिए कोडिंग-अनुरूप नहीं है" सी में शीर्ष लेख फ़ाइलों में स्थिर फ़ंक्शन परिभाषाएं कब डालनी हैं? मुझे क्यों मिलता है "_setHostsLayoutEngine के लिए बाधाओं में autoresizing मुखौटा अनुवाद करना चाहिए: हाँ" xcode 6 बीटा में फ़ोल्डर्स का चयन करने के लिए आप एक OpenFileDialog को कॉन्फ़िगर कैसे करते हैं? PHP- एफपीएम त्रुटि लॉग को नहीं लिखता है क्या ऐसा कुछ तरीका है जो मैं दो जावास्क्रिप्ट सरणियों की सामग्री में "शामिल" हो सकता हूं जैसे कि मैं एसक्यूएल में शामिल होना चाहता हूं

यह निर्धारित करने के लिए कि कौन से ऐप्स पृष्ठभूमि हैं और कौन से ऐप आइपॉड पर अनुप्रयोग आईडी द्वारा अग्रभूमि पर है

इस प्रश्न में वर्णित विधि का उपयोग करते हुए, मैं एक आईओएस डिवाइस पर चल रहे एप्लिकेशन की एक सूची प्राप्त कर सकता हूं। मुझे पीआईडी ​​पता है और उनके kinfo_proc संरचनाओं तक पहुंच है। मैं कैसे तय कर सकता हूं कि अग्रभूमि की प्रक्रियाएं कौन सी हैं और जो पृष्ठभूमि हैं (मेरी एप पृष्ठभूमि पृष्ठभूमि मानती है)?

मैंने kinfo_proc (1 लिंक देखें), kp_proc.p_priority माध्यम से इस जानकारी के आधार पर यह पता लगाने की कोशिश की, लेकिन ऐसा लगता है कि प्राथमिकता से पृष्ठभूमि / अग्रभूमि राज्य का अनुमान करना संभव नहीं है kp_proc.p_priority

मुझे वास्तव में परवाह नहीं है कि यह ऐपस्टोर की समीक्षा के लिए सही तरीके से काम करता है, लेकिन मैं एक विधि को पसंद करूंगा जो कि भागने के बिना काम करेगी (यानी निजी एपीआई ठीक हैं, लेकिन कौन हैं?) मैं इसे कम से कम आईओएस 5 पर काम करना चाहता हूं

मैं एक साधारण MobileSubstrate एक्सटेंशन लिखने पर विचार करता था, इसे सभी एप्लिकेशन में इंजेक्शन कर दिया और हर किसी के applicationDidBecomeActive MobileSubstrate , लेकिन यह एक भागने की आवश्यकता है और यह बहुत आक्रामक है।

Solutions Collecting From Web of "यह निर्धारित करने के लिए कि कौन से ऐप्स पृष्ठभूमि हैं और कौन से ऐप आइपॉड पर अनुप्रयोग आईडी द्वारा अग्रभूमि पर है"

खैर, सिम्युलेटर से स्प्रिंगबोर्ड सर्विसेस बाइनरी पर एनएम और आईडीए के कुछ उपयोग की मदद से मुझे इस पर मदद मिली। आईपॉड टच 4, आईफोन 4 और आईपैड 1 वाईफ़ाई (सभी गैर-जेबी) पर चल रहे आईओएस 5.0.1 पर निम्न कोड काम करता है बेशक आपको ऐपस्टोर को सबमिट करने का कभी प्रयास नहीं करना चाहिए

 - (NSArray*) getActiveApps { mach_port_t *p; void *uikit = dlopen(UIKITPATH, RTLD_LAZY); int (*SBSSpringBoardServerPort)() = dlsym(uikit, "SBSSpringBoardServerPort"); p = (mach_port_t *)SBSSpringBoardServerPort(); dlclose(uikit); void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY); NSArray* (*SBSCopyApplicationDisplayIdentifiers)(mach_port_t* port, BOOL runningApps,BOOL debuggable) = dlsym(sbserv, "SBSCopyApplicationDisplayIdentifiers"); //SBDisplayIdentifierForPID - protype assumed,verification of params done void* (*SBDisplayIdentifierForPID)(mach_port_t* port, int pid,char * result) = dlsym(sbserv, "SBDisplayIdentifierForPID"); //SBFrontmostApplicationDisplayIdentifier - prototype assumed,verification of params done,don't call this TOO often(every second on iPod touch 4G is 'too often,every 5 seconds is not) void* (*SBFrontmostApplicationDisplayIdentifier)(mach_port_t* port,char * result) = dlsym(sbserv, "SBFrontmostApplicationDisplayIdentifier"); //Get frontmost application char frontmostAppS[256]; memset(frontmostAppS,sizeof(frontmostAppS),0); SBFrontmostApplicationDisplayIdentifier(p,frontmostAppS); NSString * frontmostApp=[NSString stringWithFormat:@"%s",frontmostAppS]; //NSLog(@"Frontmost app is %@",frontmostApp); //get list of running apps from SpringBoard NSArray *allApplications = SBSCopyApplicationDisplayIdentifiers(p,NO, NO); //Really returns ACTIVE applications(from multitasking bar) /* NSLog(@"Active applications:"); for(NSString *identifier in allApplications) { // NSString * locName=SBSCopyLocalizedApplicationNameForDisplayIdentifier(p,identifier); NSLog(@"Active Application:%@",identifier); } */ //get list of all apps from kernel int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; size_t miblen = 4; size_t size; int st = sysctl(mib, miblen, NULL, &size, NULL, 0); struct kinfo_proc * process = NULL; struct kinfo_proc * newprocess = NULL; do { size += size / 10; newprocess = realloc(process, size); if (!newprocess){ if (process){ free(process); } return nil; } process = newprocess; st = sysctl(mib, miblen, process, &size, NULL, 0); } while (st == -1 && errno == ENOMEM); if (st == 0){ if (size % sizeof(struct kinfo_proc) == 0){ int nprocess = size / sizeof(struct kinfo_proc); if (nprocess){ NSMutableArray * array = [[NSMutableArray alloc] init]; for (int i = nprocess - 1; i >= 0; i--){ int ruid=process[i].kp_eproc.e_pcred.p_ruid; int uid=process[i].kp_eproc.e_ucred.cr_uid; //short int nice=process[i].kp_proc.p_nice; //short int u_prio=process[i].kp_proc.p_usrpri; short int prio=process[i].kp_proc.p_priority; NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; BOOL systemProcess=YES; if (ruid==501) systemProcess=NO; char * appid[256]; memset(appid,sizeof(appid),0); int intID,intID2; intID=process[i].kp_proc.p_pid,appid; SBDisplayIdentifierForPID(p,intID,appid);/ NSString * appId=[NSString stringWithFormat:@"%s",appid]; if (systemProcess==NO) { if ([appId isEqualToString:@""]) { //final check.if no appid this is not springboard app NSLog(@"(potentially system)Found process with PID:%@ name %@,isSystem:%d,Priority:%d",processID,processName,systemProcess,prio); } else { BOOL isFrontmost=NO; if ([frontmostApp isEqualToString:appId]) { isFrontmost=YES; } NSNumber *isFrontmostN=[NSNumber numberWithBool:isFrontmost]; NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName,appId,isFrontmostN, nil] forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"AppID",@"isFrontmost", nil]]; NSLog(@"PID:%@, name: %@, AppID:%@,isFrontmost:%d",processID,processName,appId,isFrontmost); [array addObject:dict]; } } } free(process); return array; } } } dlclose(sbserv); } 

बेशक, दूसरा लूप सख्ती से जरूरी नहीं है, लेकिन मुझे गैर-स्थानीय नाम और पीआईडी ​​भी आवश्यक हैं I

बहुत बढ़िया जवाब! लेकिन आपके कोड में एक छोटा टाइपो है, यह होना चाहिए:

सबसे पहले सुनिश्चित करें कि SBSERVPATH परिभाषित किया गया है और सही हैडर फाइलें शामिल हैं:

 #import <sys/sysctl.h> #import <dlfcn.h> #define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" 

फिर सबसे पहले सही एसबी पोर्ट खोजें:

 mach_port_t *port; void *lib = dlopen(SBSERVPATH, RTLD_LAZY); int (*SBSSpringBoardServerPort)() = dlsym(lib, "SBSSpringBoardServerPort"); port = (mach_port_t *)SBSSpringBoardServerPort(); dlclose(lib); 

और फिर सक्रिय ऐप ढूंढें:

 mach_port_t * port = [self getSpringBoardPort]; // open springboard lib void *lib = dlopen(SBSERVPATH, RTLD_LAZY); // retrieve function SBFrontmostApplicationDisplayIdentifier void *(*SBFrontmostApplicationDisplayIdentifier)(mach_port_t *port, char *result) = dlsym(lib, "SBFrontmostApplicationDisplayIdentifier"); // reserve memory for name char appId[256]; memset(appId, 0, sizeof(appId)); // retrieve front app name SBFrontmostApplicationDisplayIdentifier(port, appId); // close dynlib dlclose(lib); 

यह सभी आईओएस उपकरणों पर मेरे लिए क्या काम करता है:

 #define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit" #define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices" - (NSArray*) getActiveApps { mach_port_t *p; void *uikit = dlopen(UIKITPATH, RTLD_LAZY); int (*SBSSpringBoardServerPort)() = dlsym(uikit, "SBSSpringBoardServerPort"); p = (mach_port_t *)SBSSpringBoardServerPort(); dlclose(uikit); if(self.frameWorkPath == nil || self.frameWorkPath.length == 0) { self.frameWorkPath = @SBSERVPATH; self.frameWorkPath = [self.frameWorkPath stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]; } const char *cString = [self.frameWorkPath cStringUsingEncoding:NSUTF8StringEncoding]; //const char *bar = [self.frameWorkPath UTF8String]; void *sbserv = dlopen(cString, RTLD_LAZY); NSArray* (*SBSCopyApplicationDisplayIdentifiers)(mach_port_t* port, BOOL runningApps,BOOL debuggable) = dlsym(sbserv, "SBSCopyApplicationDisplayIdentifiers"); //SBDisplayIdentifierForPID - protype assumed,verification of params done void* (*SBDisplayIdentifierForPID)(mach_port_t* port, int pid,char * result) = dlsym(sbserv, "SBDisplayIdentifierForPID"); //SBFrontmostApplicationDisplayIdentifier - prototype assumed,verification of params done,don't call this TOO often(every second on iPod touch 4G is 'too often,every 5 seconds is not) void* (*SBFrontmostApplicationDisplayIdentifier)(mach_port_t* port,char * result) = dlsym(sbserv, "SBFrontmostApplicationDisplayIdentifier"); //Get frontmost application char frontmostAppS[512]; memset(frontmostAppS,sizeof(frontmostAppS),0); SBFrontmostApplicationDisplayIdentifier(p,frontmostAppS); NSString * frontmostApp=[NSString stringWithFormat:@"%s",frontmostAppS]; if([self iOsMajorVersion] >= 7){ NSNumber *topmost = [NSNumber numberWithBool:YES]; NSMutableDictionary * dict = [[NSMutableDictionary alloc] init]; NSMutableArray * splitted = [frontmostApp componentsSeparatedByString:@"."]; if(frontmostApp.length > 0 && splitted != nil && splitted.count > 1 && topmost.boolValue == YES){ NSString *appname = [splitted lastObject]; [dict setObject:[appname capitalizedString] forKey:@"ProcessName"]; [dict setObject:frontmostApp forKey:@"ProcessID"]; [dict setObject:frontmostApp forKey:@"AppID"]; [dict setObject:topmost forKey:@"isFrontmost"]; NSLog(@"Running TOPMOST App %@",dict); return @[dict]; } else{ return nil; } } //NSLog(@"Frontmost app is %@",frontmostApp); //get list of running apps from SpringBoard NSArray *allApplications = SBSCopyApplicationDisplayIdentifiers(p,NO, NO); //Really returns ACTIVE applications(from multitasking bar) NSLog(@"Active applications:"); for(NSString *identifier in allApplications) { // NSString * locName=SBSCopyLocalizedApplicationNameForDisplayIdentifier(p,identifier); NSLog(@"Active Application:%@",identifier); } //get list of all apps from kernel int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0}; size_t miblen = 4; size_t size; int st = sysctl(mib, miblen, NULL, &size, NULL, 0); struct kinfo_proc * process = NULL; struct kinfo_proc * newprocess = NULL; do { size += size / 10; newprocess = realloc(process, size); if (!newprocess){ if (process){ free(process); } return nil; } process = newprocess; st = sysctl(mib, miblen, process, &size, NULL, 0); } while (st == -1 && errno == ENOMEM); if (st == 0){ if (size % sizeof(struct kinfo_proc) == 0){ int nprocess = size / sizeof(struct kinfo_proc); if (nprocess){ NSMutableArray * array = [[NSMutableArray alloc] init]; for (int i = nprocess - 1; i >= 0; i--){ int ruid=process[i].kp_eproc.e_pcred.p_ruid; int uid=process[i].kp_eproc.e_ucred.cr_uid; //short int nice=process[i].kp_proc.p_nice; //short int u_prio=process[i].kp_proc.p_usrpri; short int prio=process[i].kp_proc.p_priority; NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; BOOL systemProcess=YES; if (ruid==501){ systemProcess=NO; } char * appid[256]; memset(appid,sizeof(appid),0); int intID,intID2; intID=process[i].kp_proc.p_pid,appid; SBDisplayIdentifierForPID(p,intID,appid); NSString * appId=[NSString stringWithFormat:@"%s",appid]; if (systemProcess==NO) { if ([appId isEqualToString:@""]) { //final check.if no appid this is not springboard app //NSLog(@"(potentially system)Found process with PID:%@ name %@,isSystem:%d,Priority:%d",processID,processName,systemProcess,prio); } else { BOOL isFrontmost=NO; if ([frontmostApp isEqualToString:appId]) { isFrontmost=YES; } NSNumber *isFrontmostN=[NSNumber numberWithBool:isFrontmost]; NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName,appId,isFrontmostN, nil] forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"AppID",@"isFrontmost", nil]]; NSLog(@"PID:%@, name: %@, AppID:%@,isFrontmost:%d",processID,processName,appId,isFrontmost); [array addObject:dict]; } } } free(process); return array; } } } dlclose(sbserv); }