1

我的实用程序应用程序在另一个应用程序上执行文本编辑操作。用户在 NSPanel 中设置参数并单击“确定”后,NSPanel 将关闭并迭代一个 while 循环,在目标应用程序中执行必要的文本编辑。

我想为用户提供使用Command+停止操作的选项.。我不确定如何在循环迭代时检查用户是否按住键。

while 循环简化了。

- (IBAction)fileNameTrimAppend:(id)sender {
    [self activateTargetApp];  // applescript that brings target app to front
    [self openFileRenameDialog]; // applescript to open the file naming dialog

   // set variables to use in the loop from the user input
    [self close];   // close the input NSPanel

    while ([self fileRenameDialogOpen]) {  // applescript returns false when editing is done       
       if (command +"." is held down){  // need help here
             return;
          }

       // text mod is done here.
       // paste the mod text into target app field
       // move to the next field for editing
     }
}
4

2 回答 2

0

除非您打算让应用程序在工作时挂起(和沙滩球),否则您需要将工作分成更小的块,并一次处理一个块,让 runloop 处理介于两者之间的事件。您可以使用 -performSelector:afterDelay:0 安排下一个块运行。

如果您确实打算在其工作时阻止所有内容,则需要考虑自己重入运行 runloop。runloop 文档应该有更多信息,尽管您可能需要挖掘一下:http: //developer.apple.com/library/mac/#Documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html

于 2013-05-03T00:11:56.380 回答
0

假设这是两个不同的进程,你可以用addGlobalMonitorForEventsMatchingMask键盘来观察。

有关类似讨论,请参见此链接。

于 2013-05-03T00:17:19.087 回答