Изменить курсор мыши на окне из другого процесса в Windows - PullRequest
1 голос
/ 06 июля 2011

У меня есть процесс A, который запускает процесс B. Я загружаю курсор мыши в A, и я хочу, чтобы A изменил курсор мыши, когда мышь находится в окне B. Возможно ли это?

Я пытался вызвать SetCursor из A, когда мышь находится над B, но даже если я обработаю сообщение WM_SETCURSOR в B, курсор никогда не изменится. Я что-то упустил?

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Единственный способ, которым окно может управлять мышью, когда оно находится над другим окном, - захват мыши (см. SetCapture ) или настройка системной мыши, но я очень сомневаюсь, что вы хотите сделатьпоследний.

К сожалению, захват мыши означает, что вы получаете все события мыши, отправленные в ваше окно, а не их, поэтому их графический интерфейс непригоден для использования.

Единственное другое решение - перехват API и внедрение кода вB, где вы управляете любыми сообщениями, такими как WM_MOUSEMOVE, и вызываете SetCursor из самого приложения, возможно, используя какой-либо метод межпроцессного взаимодействия, чтобы получить курсор, который нужно установить из приложения A.

1 голос
/ 06 июля 2011

Вы можете изменить курсор по умолчанию для дочернего процесса, используя SetClassLong с GCL_HCURSOR.Это не повлияет на то, что отображается, когда дочерний элемент использует SetCursor для явного изменения собственного курсора, но только по умолчанию, который отображается, когда он не указал ничего другого.Предупреждение: возможно, что программа может вообще не отображать курсор по умолчанию, в этом случае это не будет иметь никакого эффекта.

1 голос
/ 06 июля 2011

Приложения контролируют свои собственные курсоры. Вызов SetCursor() не может от A не может работать. Обратите внимание, что SetCursor() не имеет параметров, определяющих, в какое приложение должно быть внесено изменение. Это потому, что изменение сделано в вызывающем приложении.

Вам потребуется ввести код в B, чтобы осуществить желаемое изменение.

...