Автор Тема: Работа с окном в фоновом режиме  (Прочитано 43793 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Belfigor [?]

  • Локальный модератор
  • *
  • Сообщений: 3546
  • Репутация: 929
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с окном в фоновом режиме
« Ответ #15, Отправлен: Сентябрь 06, 2009, 17:50:44 »
Нет времени спать, работы куча :)
Слипы поставь по 500 между табосендами, мб поможет.

Любые темы внутри раздела "Разработка ботов" не названные в соответствии с правилами раздела, будут закрываться.
Хорошая музыка должна вызывать тахикардию.
Исландский реп, самый правильный реп.

Русское сообщество AutoIt

Re: Работа с окном в фоновом режиме
« Ответ #15 Отправлен: Сентябрь 06, 2009, 17:50:44 »

Оффлайн zbruy [?]

  • Новичок
  • *
  • Сообщений: 10

  • Автор темы
  • Репутация: 0
    • Награды
Re: Работа с окном в фоновом режиме
« Ответ #16, Отправлен: Сентябрь 06, 2009, 23:50:32 »
Пробывал, и по секунде не помогает=(

Оффлайн r35p3ct [?]

  • Продвинутый
  • ***
  • Сообщений: 226
  • Репутация: 60
  • Пол: Мужской
    • Награды
Re: Работа с окном в фоновом режиме
« Ответ #17, Отправлен: Сентябрь 28, 2009, 22:02:47 »
Помогите разобраться, клик по кнопкам работает, но есть контролл, hwnd которого не могу получить, поэтому приходится тупо кликать мышкой.
Есть _MouseClickPlus()
(нажмите для показа/скрытия)

Код: AutoIt [Выделить]
#Include <install\include\MouseClickPlus.au3>
Opt("MouseCoordMode", 0)
_MouseClickPlus("Безымянный - Блокнот","left",137,183,3)
 

Вобщем клик не происходит, может чего с координатами не то...какие брать, помогите разобраться.
Или может есть какой способ нажать на кнопку, Au3Info показывает контролл, как TToolbar97

Русское сообщество AutoIt

Re: Работа с окном в фоновом режиме
« Ответ #17 Отправлен: Сентябрь 28, 2009, 22:02:47 »

Оффлайн Belfigor [?]

  • Локальный модератор
  • *
  • Сообщений: 3546
  • Репутация: 929
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с окном в фоновом режиме
« Ответ #18, Отправлен: Сентябрь 28, 2009, 22:45:10 »
Выкладывай свой MouseClickPlus.au3, мы не телепаты чтобы даже не зная что у тебя там за функция сказать в чем ошибка. Да и в принципе интересно посмотреть что это за UDF такая :)

Оффлайн r35p3ct [?]

  • Продвинутый
  • ***
  • Сообщений: 226
  • Репутация: 60
  • Пол: Мужской
    • Награды
Re: Работа с окном в фоновом режиме
« Ответ #19, Отправлен: Сентябрь 28, 2009, 23:31:00 »
Да вон она в спойлере...

Русское сообщество AutoIt

Re: Работа с окном в фоновом режиме
« Ответ #19 Отправлен: Сентябрь 28, 2009, 23:31:00 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Работа с окном в фоновом режиме
« Ответ #20, Отправлен: Сентябрь 28, 2009, 23:39:25 »
А зачем такие сложности? Разве родных AutoIt функций не достаточно для этого? Я бы это назвал не MouseClickPlus(), а MouseClickMinus(). :)
« Последнее редактирование: Сентябрь 28, 2009, 23:43:02 от Yashied »


Думай, прежде чем говорить.

Оффлайн Belfigor [?]

  • Локальный модератор
  • *
  • Сообщений: 3546
  • Репутация: 929
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с окном в фоновом режиме
« Ответ #21, Отправлен: Сентябрь 28, 2009, 23:46:40 »
Да вон она в спойлере...
Ах, эти спойлеры, ненавижу, их не видно :). Прошу прощения, если не ошибаюсь когда то мы пользовались этим :), точнее уделили несколько часов тому чтобы потратить время на настройку этой UDF, но в итоге пришли к выводу что лучше использовать простые маузклики, поскольку для евы остальное - смертиподобно.
Эта UDF если мне опять же не изменяет память написана изначально для Д2, она требует учитывать там различные отступы (например на ширину окна) и тд. Она достаточно сырая и требует доработки (по крайней мере в еве она у нас работала не корректно) и тестов.
Для какой игры кстати?

Собственно я нашел, вот как она у нас выглядела когда мы ее тестили и забросили по ненадобности:
Код: AutoIt [Выделить]
Opt("MouseCoordMode", 0)
;===============================================================================
;
; Function Name:  _MouseClickPlus()
; Version added:  0.1
; Description:    Sends a click to window, not entirely accurate, but works
;                 minimized.
; Parameter(s):   $WinTi     =  Title of the window to send click to
;                 $Button     =  "left" or "right" mouse button
;                 $X          =  X coordinate
;                 $Y          =  Y coordinate
;                 $Clicks     =  Number of clicks to send
; Remarks:        You MUST be in "MouseCoordMode" 0 to use this without bugs.
; Author(s):      Insolence <[email protected]>
;
;===============================================================================
$WinTi = "EVE"

_MouseOp($WinTi, "Click", "Left", 2, 773, 206-22)
   
Func _MouseOp($WinTi,$CType,$Button,$Clicks, $X1, $Y1 ,$X2=0 , $Y2=0)
    Local $LB       =  0x0001   ;LeftButton
    Local $RB       =  0x0002   ;RightButton
    Local $LBDown   =  0x0201   ;LB Down
    Local $RBDown   =  0x0204   ;RB Down
    Local $LBUp     =  0x0202   ;LB Up
    Local $RBUp     =  0x0205   ;RB Up
    Local $MM       =  0x0200   ;MouseMove
    Local $i        =  0
   
    Select
    Case $Button = "Left"
        $Button     =  $LB
        $ButtonDown =  $LBDown
        $ButtonUp   =  $LBUp
    Case $Button = "Right"
        $Button     =  $RB
        $ButtonDown =  $RBDown
        $ButtonUp   =  $RBUp
    EndSelect
 
    Select
    Case $CType = "Click"
        For $i = 1 to $Clicks
            DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi),"int",$MM,"int",0,"long",_MakeLong($X1, $Y1))
            Sleep(100)
            DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$ButtonDown,"int",$Button,"long",_MakeLong($X1, $Y1))
            DllCall("user32.dll", "int", "SendMessage","hwnd",WinGetHandle( $WinTi ),"int",$ButtonUp,"int",$Button,"long",_MakeLong($X1, $Y1))
        Next
    Case $CType = "Drag"
        DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi),"int",$MM,"int",0,"long",_MakeLong($X1, $Y1))
        DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$ButtonDown,"int",$Button,"long",_MakeLong($X1, $Y1))
        DllCall("user32.dll","int","SendMessage","hwnd",WinGetHandle($WinTi ),"int",$MM,"int",0,"long",_MakeLong($X2, $Y2))
        DllCall("user32.dll", "int", "SendMessage","hwnd",WinGetHandle( $WinTi ),"int",$ButtonUp,"int",$Button,"long",_MakeLong($X2, $Y2))
    EndSelect      
EndFunc

Func _MakeLong($LoWord,$HiWord)
    Return BitOR($HiWord*0x10000,BitAND($LoWord,0xFFFF))
EndFunc


;~ _MouseClickPlus($WinTi, "left", 773-3, 208-22, 1)



Func _MouseClickPlus($WinTi, $Button = "left", $X = "", $Y = "", $Clicks = 1)
  Local $LB       =  0x0001
  Local $LBDown   =  0x0201
  Local $LBUp     =  0x0202
 
  Local $RB       =  0x0002  
  Local $RBDown   =  0x0204
  Local $RBUp     =  0x0205

  Local $MM     =  0x0200
 
  Local $i                = 0
 
  Select
  Case $Button = "left"
     $Button     =  $LB
     $ButtonDown =  $LBDown
     $ButtonUp   =  $LBUp
  Case $Button = "right"
     $Button     =  $RB
     $ButtonDown =  $RBDown
     $ButtonUp   =  $RBUp
  EndSelect
 
  If $X = "" OR $Y = "" Then
     $MouseCoord = MouseGetPos()
     $X = $MouseCoord[0]
     $Y = $MouseCoord[1]
  EndIf
 
  For $i = 1 to $Clicks
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $WinTi ), _
        "int",   $MM, _
        "int",   0, _
        "long",  _MakeLong($X, $Y))
       
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $WinTi ), _
        "int",   $ButtonDown, _
        "int",   $Button, _
        "long",  _MakeLong($X, $Y))
       
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $WinTi ), _
        "int",   $ButtonUp, _
        "int",   $Button, _
        "long",  _MakeLong($X, $Y))
  Next
EndFunc
;~ 22, 177-22 ; click
;~ 265-22,  548-3 ; drag

« Последнее редактирование: Сентябрь 28, 2009, 23:56:28 от Belfigor »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Работа с окном в фоновом режиме
« Ответ #22, Отправлен: Сентябрь 28, 2009, 23:51:53 »
AutoIt - это вам не C/C++. Здесь DllCall() будет работать как черепаха в сравнении с родными функциями AutoIt (по процессорным меркам). А у тебя там целых три DllCall(), т.е. как три черепахи. :)

Русское сообщество AutoIt

Re: Работа с окном в фоновом режиме
« Ответ #22 Отправлен: Сентябрь 28, 2009, 23:51:53 »

Оффлайн Belfigor [?]

  • Локальный модератор
  • *
  • Сообщений: 3546
  • Репутация: 929
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с окном в фоновом режиме
« Ответ #23, Отправлен: Сентябрь 28, 2009, 23:58:23 »
AutoIt - это вам не C/C++. Здесь DllCall() будет работать как черепаха в сравнении с родными функциями AutoIt (по процессорным меркам). А у тебя там целых три DllCall(), т.е. как три черепахи. :)
Поверь, двигает мышку и кликает эта UDF на ура и достаточно быстро, ее разве что надо доработать. Да и тем более мы же не для экшенов пишем ботов, а если учесть что бот должен работать в свернутом окне, дак там вобще не очень часто кликать нужно я думаю :).

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Работа с окном в фоновом режиме
« Ответ #24, Отправлен: Сентябрь 29, 2009, 00:05:54 »
А можно какой-нибудь "Земной" пример привести, без EVE? Например с банальным блокнотом.

Оффлайн Belfigor [?]

  • Локальный модератор
  • *
  • Сообщений: 3546
  • Репутация: 929
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Работа с окном в фоновом режиме
« Ответ #25, Отправлен: Сентябрь 29, 2009, 00:27:42 »
Какой смысл работать с блокнотом если он как раз таки поддерживает стандартные функции AutoItа? Смысл усложнять себе жизнь?
А так там все достаточно просто, функция работает как и стандартный маузклик, только через длл + необходимо указать заголовок окна куда надо отправить команду.
Не вижу никакой логики в применении этой udf там где можно обойтись простым контролсэндом о_О
« Последнее редактирование: Сентябрь 29, 2009, 00:30:00 от Belfigor »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Работа с окном в фоновом режиме
« Ответ #26, Отправлен: Сентябрь 29, 2009, 00:42:59 »
Нет ну просто интересно, вот простая GUI. Можешь кликнуть по ней с помощью этой функции?

Оффлайн r35p3ct [?]

  • Продвинутый
  • ***
  • Сообщений: 226
  • Репутация: 60
  • Пол: Мужской
    • Награды
Re: Работа с окном в фоновом режиме
« Ответ #27, Отправлен: Сентябрь 29, 2009, 00:57:54 »
Цитировать
Разве родных AutoIt функций не достаточно для этого?
Да вот как раз пытаюсь разобраться какие из них можно заюзать, прошу ткнуть пальцем, ибо известным мне командам нужен хендл контролла, а тут его нельзя никак получить(может я конечно не до конца разобрался...)
Для какой игры кстати?
Узко специализированная прога по работе) Написаная на делфи, поэтому и такие сложности с контроллами. Кнопка находится на TToolbar97, надписи на ней нет, поэтому не могу вытащить ее хендл...
Так в итоге как ткнуть мышкой в фоновое приложение хоть каким нибудь способом? (скорость не важна)

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5379
  • Репутация: 2700
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
Re: Работа с окном в фоновом режиме
« Ответ #28, Отправлен: Сентябрь 29, 2009, 01:06:36 »
O, Delphi. :Censored: Не удивительно, что у тебя с этим проблемы. Большая прога? Есть возможность кинуть ссылку?

Оффлайн r35p3ct [?]

  • Продвинутый
  • ***
  • Сообщений: 226
  • Репутация: 60
  • Пол: Мужской
    • Награды
Re: Работа с окном в фоновом режиме
« Ответ #29, Отправлен: Сентябрь 29, 2009, 01:11:39 »
Возможности нет иначе давно бы кинул(работает в сети, без сервера не запустится), поэтому колдую только на работе.
На кнопке есть вплывающая подсказка, но наверно по ней не найти ее.
Так что вот получается клик самое простое решение, но только хочется в фон...
ЗЫ Хватило бы примера с кликом хотя бы в фон калькулятора для наглядности.
« Последнее редактирование: Сентябрь 29, 2009, 01:49:28 от r35p3ct »

Русское сообщество AutoIt

Re: Работа с окном в фоновом режиме
« Ответ #29 Отправлен: Сентябрь 29, 2009, 01:11:39 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
1174 Просмотров
Последний ответ Апрель 14, 2014, 07:55:45
от madmasles
0 Ответов
1098 Просмотров
Последний ответ Август 15, 2014, 22:05:25
от madmasles
6 Ответов
2737 Просмотров
Последний ответ Октябрь 02, 2014, 20:19:45
от DarWiM
0 Ответов
1084 Просмотров
Последний ответ Октябрь 02, 2014, 16:36:25
от madmasles
0 Ответов
1401 Просмотров
Последний ответ Март 14, 2015, 23:24:29
от Pasha Bubyr
0 Ответов
923 Просмотров
Последний ответ Март 15, 2015, 03:36:50
от Yashied
5 Ответов
1985 Просмотров
Последний ответ Июль 29, 2015, 16:21:04
от Prog
2 Ответов
1307 Просмотров
Последний ответ Октябрь 23, 2017, 00:25:00
от Alofa
5 Ответов
1088 Просмотров
Последний ответ Сентябрь 03, 2017, 12:35:37
от ra4o
3 Ответов
859 Просмотров
Последний ответ Сентябрь 04, 2018, 20:01:59
от InnI