none
Как сделать программу работающей в свернутом режиме (бот для webBrowser)? RRS feed

  • Вопрос

  • Это продолжение развития данной темы: Как отслеживать положение курсора над webBrowser1?

    Итак, сделал код, который работает:

    public partial class Form1 : Form
        {
           
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                webBrowser1.Navigate(@"http://www.abc.ru/abc");
            }
    
            private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                timer1.Start();                
            }
    
            int step = 0;
            string[] MyArr = new string[4] { "name0", "name1", "name2", "name3"};
            int i = 0;
            Point BrowserCoord;
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                if (step == 0) timer1.Interval = 1000; //переходим на малый цикл
    
                if (step == 0) BrowserCoord = new Point(420, 120); //нажимаем Мир
                if (step == 5) BrowserCoord = new Point(520, 450); //разворачиваем Искать по имени
                if (step == 8) //вводим имя кормушки (добавить смену кормушек)
                {
                    BrowserCoord = new Point(520, 480); //Cursor.Position = webBrowser1.PointToScreen(new Point(520, 480));
                    HtmlElement elemText = webBrowser1.Document.GetElementFromPoint(BrowserCoord);
                    elemText.SetAttribute("value", MyArr[i]); i++; if (i >= 4) i = 0;
                }
                if (step == 10) BrowserCoord = new Point(650, 480); //нажимаем Искать
                if (step == 15) BrowserCoord = new Point(380, 620); //нажимаем Атаковать
                if (step == 20) BrowserCoord = new Point(520, 660); //выбираем Макс воинов
                if (step == 22) BrowserCoord = new Point(470, 720); //отправить в Атаку
                
    
                if (step == 0 | step == 5 | step == 10 | step == 15 | step == 20 | step == 22)
                {
                    HtmlElement elem = webBrowser1.Document.GetElementFromPoint(BrowserCoord);
                    object obj = elem.DomElement;
                    System.Reflection.MethodInfo mi = obj.GetType().GetMethod("click");
                    mi.Invoke(obj, new object[0]);
                }
                step++;
                if (step > 25) { step = 0; timer1.Interval = 15 * 60 * 1000; } //запускаем длинный цикл (сюда же можно вставить смену кормушки)
            }

    Но, есть такой «подводный камень»:

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

    Как изменить этот код, что бы эта программа работала в свернутом варианте?


    • Изменено sg6336 3 мая 2012 г. 7:56

Ответы

  • Насколько я понимаю задача нетривиальная. На одном из форумов посвещенных Delphi нашел вот такой вариант кликов в свернутом окне через WinApi.

    Для этого надо воспользоваться функцией PostMessage.

    PostMessage(FindWindow('notepad', nil), WM_LBUTTONDOWN,0,(x * 65536)+ y);

    • Помечено в качестве ответа Abolmasov Dmitry 25 мая 2012 г. 11:20
    Отвечающий

Все ответы