Я бы хотел, чтобы имитировать щелчок мышью на приложении Cocoa, не нажимая на мышь, и * не нужно определять, какое представление должно отвечать на щелчок, учитывая текущее местоположение мыши.Имитировать щелчок мышью в NSWindow
Я хотел бы, чтобы структура Cocoa обрабатывала определение того, какой вид должен отвечать, поэтому я не думаю, что вызов метода для объекта NSView является тем, что я ищу. То есть, я думаю, мне нужен вызов метода, который в конечном итоге вызовет этот метод.
В настоящее время я работаю, щелкая мышью в определенном глобальном местоположении, используя CGEventCreateMouseEvent и CGEventPost. Однако этот метод фактически нажимает на мышь. Так что это работает, но я не совсем доволен поведением. Например, если я удерживаю клавишу на клавиатуре во время вызова CGEventPost, этот ключ завершается в событие. Кроме того, если я перемещаю окно другого процесса над окном, которое я хотел бы имитировать щелчком, тогда метод CGEventPost будет щелкнуть мышью в этом окне. То есть, он действует глобально, через процессы. Мне нужна техника, которая работает в одном окне. Что-то вроде объекта NSWindow?
Я прочитал, что «События мыши отправляются объектом NSWindow объекту NSView, по которому произошло событие» в документации Cocoa.
OK. Поэтому я хотел бы знать метод, который призван выполнять диспетчеризацию. Вызовите этот метод в окне, а затем дайте инфраструктуре выяснить, какой NSView будет вызывать, учитывая текущее местоположение мыши.
Любая помощь была бы принята с благодарностью. Я только начинаю изучать структуру Cocoa, поэтому я приношу свои извинения, если какая-либо из терминологии/веры здесь не совсем правильная.
['- [NSApplication sendEvent:]'] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSApplication_Class/Reference/Reference.html) по существу является точка входа для входных событий; оттуда он (вообще) попадает в окно. Тем не менее, различие, которое вы пытаетесь провести между «имитацией» и «фактически» щелчком мыши, неясно. Каковы особенности процедуры «CGEvent», которую вы пытаетесь избежать? (Например, в физическом устройстве мыши нет сервопривода, который перемещает кнопку, и это то, что я бы назвал «фактически» нажатием.) –
Отредактировано. Thx для ваших комментариев. –
@JoshCaswell Это похоже на хороший подход, но я не могу заставить его работать. Я бы опубликовал код, но он написан в Clozure с использованием моста Objective C, так что это может быть немного налогообложения для синтаксического анализа. Я не смог найти примеры онлайн-имитационных щелчков мыши, используя sendEvent. Можете ли вы, случайно? –