Ben Packard
Ben Packard

Reputation: 26476

Sending a 'copy' command in cocoa

Is there any way to send a copy (command-c) instruction without using a cgEvent to mimic the keystrokes? I don't have access to the text field in the application I want to take text from, so need to replicate manually copying to the clipboard, and there seemss to be a bug with cgevent posting.

According the Quartz documentation, to type a capital Z I should use:

CGEventRef event1, event2, event3, event4;
event1 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, true);
event2 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true);
event3 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false);
event4 = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, false);

However, if I attach this set of instuctions to an NSTimer, it only works the first time it is fired. example output:

ZzzZzzzzZZzzZ (vs expected ZZZZZZZZZ).

How else might I send a copy command to the active window?

Upvotes: 2

Views: 1027

Answers (2)

Rob Keniger
Rob Keniger

Reputation: 46020

Rather than posting raw key events, you might be better off using the Accessibility APIs to trigger the Copy item in the other app's Edit menu. This will probably be more reliable.

Upvotes: 1

Colin Barrett
Colin Barrett

Reputation: 4451

I'm not sure I understand the relationship between your code and the application's code. Are you injecting or something? Is there a reason you can't do: [[window firstResponder] copy:nil]?

Describe a little more what you're doing, please.

Upvotes: 0

Related Questions