我有一个应用程序并想连接到现有命令。但我不想替换任何现有的处理程序,我想添加功能(最好在默认处理程序完成执行之后)。
这可能吗?还是我必须找到另一种方法来做到这一点?
场景是这样的:当有人在 Eclipse 中复制内容时,我想注册。然后我想用用户复制的东西做一些事情。由于现有的复制功能很棒,我不想改变它。但我想知道何时有人执行了复制命令。
注意:这只需要在 Eclipse 中工作!;) 我不需要在 Eclipse 之外监视剪贴板。
我有一个应用程序并想连接到现有命令。但我不想替换任何现有的处理程序,我想添加功能(最好在默认处理程序完成执行之后)。
这可能吗?还是我必须找到另一种方法来做到这一点?
场景是这样的:当有人在 Eclipse 中复制内容时,我想注册。然后我想用用户复制的东西做一些事情。由于现有的复制功能很棒,我不想改变它。但我想知道何时有人执行了复制命令。
注意:这只需要在 Eclipse 中工作!;) 我不需要在 Eclipse 之外监视剪贴板。
我想我找到了一种方法来做到这一点!经过大量研究,我发现了这个接口:IExecutionListener。javadoc 说:
命令执行的侦听器。如果命令即将执行以及执行完成时,将通知此侦听器。侦听器不可能阻止执行,只能以某种方式对其进行响应。
这正是我想要的:不要干扰现有命令,但在执行时得到通知。
因此,这里是向默认复制命令添加执行侦听器的代码:
public void addListenerToCopyCommand() {
ICommandService commandService = (ICommandService) PlatformUI
.getWorkbench().getAdapter(ICommandService.class);
Command defaultCopyCommand = commandService
.getCommand(org.eclipse.ui.IWorkbenchCommandConstants.EDIT_COPY);
defaultCopyCommand.addExecutionListener(new MyCopyListener());
}
public class MyCopyListener implements IExecutionListener {
@Override
public void preExecute(String commandId, ExecutionEvent event) {
// do nothing
}
@Override
public void postExecuteSuccess(String commandId, Object returnValue) {
// !!! Do stuff with the copied things here !!!!
System.out.println("copy command has executed");
}
@Override
public void postExecuteFailure(String commandId,
ExecutionException exception) {
// do nothing
}
@Override
public void notHandled(String commandId, NotHandledException exception) {
// do nothing
}
}
我现在要做的就是为我的插件添加一个激活器,它将在插件启动时运行,瞧:每当用户复制任何内容时都会通知我的插件!