.net winapi postmessage - PullRequest
       3

.net winapi postmessage

0 голосов
/ 25 ноября 2010

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

это глобальные координаты точки, я хочу щелкнуть:

doubleclickcoords = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));

после этого я получу координаты формы, пусть она будет "mspaint", и найду локальные координатыточка, и через почтовое сообщение пытается отправить «клик», но ничего не происходит.Чего мне не хватает ??:

public static void SendDoubleMouseClick()
        {
            IntPtr iHandle = GetWnd("mspaint");
            Rectangle myRect = new Rectangle();
            RECT rct;
            if (!GetWindowRect(iHandle, out rct))
            {
                MessageBox.Show("ERROR");
            }
            else
            {
                myRect.X = rct.Left;
                myRect.Y = rct.Top;
                myRect.Width = rct.Right - rct.Left;
                myRect.Height = rct.Bottom - rct.Top;
            }
            PostMessage(iHandle, 0x0201, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X)));
            PostMessage(iHandle, 0x0202, 0, new IntPtr((doubleclickcoords.pt.y - myRect.Y) * 0x10000 + (doubleclickcoords.pt.x - myRect.X)));

        }

РЕДАКТИРОВАТЬ: язык c #, winapi через p / invoke

Ответы [ 2 ]

1 голос
/ 25 ноября 2010

Если вы хотите автоматизировать другое приложение, я предлагаю вам взглянуть на API автоматизации, который предназначен для этой конкретной цели, вместо того, чтобы пытаться взломать Windows с помощью почтового сообщения.В большинстве случаев PostMessage через различные процессы не будет работать из соображений безопасности.Это более справедливо для Windows Vista, 7 и UAC (Настройки учетных записей пользователей).

Это хорошая статья здесь http://msdn.microsoft.com/en-us/magazine/cc163465.aspx.

0 голосов
/ 25 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...