none
Автоматизация работы RRS feed

  • Вопрос

  • Доброго вам здравия форумчане.

    Занимаюсь разработкой "ламерского" ^_^ ПО на C#.

    Пару лет назад, "пересел" со скриптоподобного языка "AutoIt" и уже ныне столкнулся с задачей которую легко решил бы прибегнув к помощи "AutoIt" но в силу того что проблемный участок лишь фрагмент всего программного продукта, должен решить вопрос с использованием C#. Задачу для простоты обсуждения разобью на несколько подзадач. Сложность будет возрастать от пункта к пункту (ну по крайней мере как я это себе представляю). Итак с помощью языка C# мне необходимо проделать следующие манипуляции...

    1. Передвинуть указатель мыши в указанную позицию.

    2. Получить перечень открытых окон, их свойства (размер, положение, заголовок), взаимодействовать со свойствами (передвинуть окно, изменить размер).

    3. Отправить определенному окну последовательность или сочетание клавишь.

    4. Получить перечень элементов определенного окна (текст боксы, кнопки) их свойства (положение относительно формы, размер).

    5. Взаимодействовать с элементами управления полученными в п.4 (передать окну событие нажатия кнопки, сфокусироваться на текст боксе, пр.)

    6. Произвести "клик" мышкой (правая, левая кнопка) по указанным координатам.

    7. Произвести нажатие и удержание (до обратной команды) правой или левой кнопки мыши по указанным координатам (необходимо реализовать возможность перемещения указателя по новым координатам в момент удержания зажатой кнопки "а ля мульсиселект").

    8. Определить цвет пикселя находящегося под указателем мышки (или в месте определенном координатами) в данный момент.

    Вот приблизительно весь объем вопросов. Прошу предлагать ваши соображения. Да, хотелось бы сразу оговорится, что в вопросах касающихся "окон" речь идет про любые окна которые сейчас открыты в Windows, они не имеют никакого отношения к испоняемой программе, и не факт что вообще написанны под платформу .NET. Перво - наперво, интересует рецензия "прожженного" программиста .NET - "Насколько реализуем каждый пункт вообще". Может кто нибудь умный сделал для этих целей библиотеку? В общем спасибо за внимание к топику, заранее благодарен за любую помощь.


    12 июля 2011 г. 17:51

Ответы

  • Для решения вашей задачи понадобится 3 пункта:

    1. Научится вызывать неуправляемые функции с помощью C#

    2. Раздобыть справочник по WinAPI (погуглив можно найти пару полезных) и найти в нем все необходимы функции для каждой из подзадач.

    3. Трудится, трудится и еще раз трудится, так как для 8 ваших подзадач понадобится 2 (а то и больше) десятка API и у каждой свои тонкости работы. В идеале конечно обернуть их все в управляемые и понятные классы, что бы упростить их использование в нужных участках кода.

    Ну и напоследок - вы правильно предположили, что кто то может уже засунул все необходимое в логично построенные классы и создал dll, которую часто пускает в бой, но я не уверен что такой человек станет с лету ей делится... уж очень большой объем работы. У меня например есть dll с решением часто задаваемых задач, но из вашего списка там только клик клавишей мыши и установка курсора в нужные координаты, только это дело на VB... если нужно могу выложить.

    • Помечено в качестве ответа JusteG 13 июля 2011 г. 6:25
    13 июля 2011 г. 3:12
    Отвечающий
  • По использованию WinApi из .Net есть хороший справочник/Wiki.
    • Помечено в качестве ответа JusteG 13 июля 2011 г. 6:25
    13 июля 2011 г. 4:22
    Модератор
  • Ответ на вопрос нашелся достаточно таки быстро вот AutoItX).

    Все гениальное просто. Велосипед изобретать не надо)).

    Всем спасибо за участие.

    • Помечено в качестве ответа JusteG 13 июля 2011 г. 6:24
    13 июля 2011 г. 6:24

Все ответы

  • Для решения вашей задачи понадобится 3 пункта:

    1. Научится вызывать неуправляемые функции с помощью C#

    2. Раздобыть справочник по WinAPI (погуглив можно найти пару полезных) и найти в нем все необходимы функции для каждой из подзадач.

    3. Трудится, трудится и еще раз трудится, так как для 8 ваших подзадач понадобится 2 (а то и больше) десятка API и у каждой свои тонкости работы. В идеале конечно обернуть их все в управляемые и понятные классы, что бы упростить их использование в нужных участках кода.

    Ну и напоследок - вы правильно предположили, что кто то может уже засунул все необходимое в логично построенные классы и создал dll, которую часто пускает в бой, но я не уверен что такой человек станет с лету ей делится... уж очень большой объем работы. У меня например есть dll с решением часто задаваемых задач, но из вашего списка там только клик клавишей мыши и установка курсора в нужные координаты, только это дело на VB... если нужно могу выложить.

    • Помечено в качестве ответа JusteG 13 июля 2011 г. 6:25
    13 июля 2011 г. 3:12
    Отвечающий
  • По использованию WinApi из .Net есть хороший справочник/Wiki.
    • Помечено в качестве ответа JusteG 13 июля 2011 г. 6:25
    13 июля 2011 г. 4:22
    Модератор
  • Ответ на вопрос нашелся достаточно таки быстро вот AutoItX).

    Все гениальное просто. Велосипед изобретать не надо)).

    Всем спасибо за участие.

    • Помечено в качестве ответа JusteG 13 июля 2011 г. 6:24
    13 июля 2011 г. 6:24