我要求我的小项目的用户打开一个查找器窗口并选择一个或多个对象。也允许选择无。在这种情况下,所有项目都被使用。
在我的应用程序中,我检查第一个窗口并尝试获取所选项目(文件或文件夹),请参见Code1。
*请注意,有些变量是全局变量并在 .h 中声明,有些变量只是被重置。*
如果用户没有在取景器中乱摸,这很好用。但他可以做几件事来欺骗我的应用程序。他可以打开一个查找器窗口,例如并选择一些文件。之后他可以点击桌面(finder窗口中的选择仍然存在,这是正确的),然后直接在桌面上选择项目。当他返回我的应用程序时,它会正确识别打开的窗口,但会将桌面上的项目用作我不想要的选定项目。我想做什么,我想在最前面的窗口中选择项目,但我不知道我该怎么做。
有什么线索吗?
代码1
- (void)applicationWillBecomeActive:(NSNotification *)notification {
[self psProgressWrapper:FALSE :_spinningWheel :spinningWheelText ] ;
NSUInteger *countArray = 0;
asResult = @""; //this variable holds the path to the folder the frontmost window belongs to
selectionFlag = FALSE; //reset
allFilesFlag = FALSE; //reset
//Get first finder window
FinderApplication * finder = [SBApplication applicationWithBundleIdentifier:@"com.apple.finder" ] ;
SBElementArray *windows = [finder FinderWindows ] ;
if([windows count] >0) {
FinderWindow *theWindow = [windows objectAtIndex:0 ] ;
asResult = [theWindow name ] ; //the name of the first window
//setting a texfield in the GUI to text and color green
[_errMessage setStringValue:asResult ] ;
[_errMessage setTextColor: myGreenColor ] ;
SBElementArray * selection = [[finder selection] get ] ;
countArray = [selection count ] ;
if(countArray == 0) {
atFilesOriginal = (NSMutableArray*) [self checkForSelection:asResult :TRUE ] ;
}
else if(countArray > 0) {
atFilesOriginal = (NSMutableArray*) [selection arrayByApplyingSelector:@selector(name) ] ;
}
else {
asResult = @"NoWin";
}
}
else {
asResult = @"NoWin";
[self checkFinderWindowType ] ;
}
[self refreshDRPopsWrapper] ;
[self psProgressFlag:TRUE Wheel:_spinningWheel Text:spinningWheelText];
[self goConvertBtnWrapper ] ;
[self checkFinderWindowType ] ;
}