Что нового

Работа с окном в фоновом режиме

zbruy

Новичок
Сообщения
10
Репутация
0
Собственно название темы это мой вопрос. Я новичек, пока сам пишу только банальные кликалки. Возможно ли настроить работу с окном в фоновом режиме т.е. на раб столе окно свернуто, или находится под другими, но кнопки исправно нажимаются без появления окна при нажатии на них. Возможно ли реализовать?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Попробуй так (если у тебя русский Windows, то замени "Calculator" и "Untitled - Notepad" на их аналоги):

Код:
Run('calc.exe')
WinWaitActive('Calculator', '', 3)
$hWnd1 = WinGetHandle('Calculator')
WinMove($hWnd1, '', 50, 50)

Run('notepad.exe')
WinWaitActive('Untitled - Notepad', '', 3)
$hWnd2 = WinGetHandle('Untitled - Notepad')
WinMove($hWnd2, '', 120, 150)

WinSetState($hWnd1, '', @SW_DISABLE)
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:7]')
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:11]')
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:15]')
WinSetState($hWnd1, '', @SW_ENABLE)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Так же этот способ не работает для игр, в них нажатия тебе придется засылать через dllcall
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Belfigor сказал(а):
Так же этот способ не работает для игр, в них нажатия тебе придется засылать через dllcall

Ну, играть в фоновом режиме - это сильно! Может лучше вообще не играть?

:smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Ну я сказал исходя из точки зрения разработчика ботов :smile:
 

Archy26

EVE DEVE eve bot development group
Сообщения
60
Репутация
42
UPD. Извините, Creator, я на радостях. Отличный форум!
Зы.: Флэйм - бессистемный сообщения, ругательного, гневного характера. А то, что я пытался сделать - в худшем случае флуд :smile:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied « Ответ #3, Отправлен: Сегодня в 02:56:40 »
Ну, играть в фоновом режиме - это сильно! Может лучше вообще не играть?
Вот вот! И я о чём! Зачем делать боты для игр, я ещё могу понять когда это игры где можно заработать (типа покера), а зачем автоматизировать обычную игру, хочется же самому поиграть, оно ведь бывает так редко (у меня :smile: ).

Archy26
Не нужно флеймить пожалуйста.
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
CreatoR сказал(а):
Yashied « Ответ #3, Отправлен: Сегодня в 02:56:40 »
Ну, играть в фоновом режиме - это сильно! Может лучше вообще не играть?
Вот вот! И я о чём! Зачем делать боты для игр, я ещё могу понять когда это игры где можно заработать (типа покера), а зачем автоматизировать обычную игру, хочется же самому поиграть, оно ведь бывает так редко (у меня :smile: ).
Ну боты экономят время в ммо играх а так же позволяют на них делать неплохие деньги :smile:
 
Автор
Z

zbruy

Новичок
Сообщения
10
Репутация
0
Yashied сказал(а):
Попробуй так (если у тебя русский Windows, то замени "Calculator" и "Untitled - Notepad" на их аналоги):

Код:
Run('calc.exe')
WinWaitActive('Calculator', '', 3)
$hWnd1 = WinGetHandle('Calculator')
WinMove($hWnd1, '', 50, 50)

Run('notepad.exe')
WinWaitActive('Untitled - Notepad', '', 3)
$hWnd2 = WinGetHandle('Untitled - Notepad')
WinMove($hWnd2, '', 120, 150)

WinSetState($hWnd1, '', @SW_DISABLE)
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:7]')
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:11]')
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:15]')
WinSetState($hWnd1, '', @SW_ENABLE)
Спасиб, буду пробовать.
...Блин, поигрался, так свою задачу и не решил, данный функционал эмулирует в окне(в данном случае калькулятор) прямое нажатие кнопок поредством мыши(ControlClick), а мне нужно сэмулировать нажатие горячих клавишь. Так как управлять нужно браузером. В русской справке подходящего оператора не нашел, пока.
И к вышесказонному тогда еще 1вопрос: раз AutoIt windows info не различает элементы внутри окна браузера(пробовал и через запоминание действий на экране отдельной прогой писать скрипт), можно как нибудь организовать управление ими в фоновом режиме? Горячие клавиши могу реализовать только при активном окне, подругому что-то не получается...
Понимаю что так-то надо прикрутить к нажатию гор.клавиши адресацию в перемнную типа Send($hWnd1, '', '{!}'), но оператор send таких атрибутов не понимает, а аналог подобрать не получается
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
ControlSend. Так же кури все связанное с IE.au3, если это не флеш приложение то мб тебе пригодится эта библиотека :smile:
 
Автор
Z

zbruy

Новичок
Сообщения
10
Репутация
0
Блин, вот я лошара
в вышеуказанном примере ставлю, скажем, вместо
Код:
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:7]')
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:11]')
Sleep(500)
ControlClick($hWnd1, '', '[CLASS:Button; INSTANCE:15]')
пишу
Код:
Sleep(500)
ControlSend($hWnd1, "","", "{LALT}")
Sleep(500)
ControlSend($hWnd1, "","", "{right}")
Sleep(500)
ControlSend($hWnd1, "","", "{enter}")
Sleep(500)
но в итоге, в окне калка пишется симвл 1, а я пытался сделать чтобы он активировал горячие клавиши меню-вид.
ЗЫ ох чую вы со мной намучаетесь ;D
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Код:
ControlSend("Калькулятор", "","[CLASS:Edit; INSTANCE:1]", "12345")
ControlSend("Калькулятор", "","[CLASS:Edit; INSTANCE:1]", "{DEL}")

Сначала отправляет 12345 в калькулятор, потом жмет {del}
 
Автор
Z

zbruy

Новичок
Сообщения
10
Репутация
0
Ну как писать в фоновом режиме и так понятно, вопрос то остается, как в фоновом режиме горячие клавиши юзать=)
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Скажи мне какие горячие клавиши то? Я так на вскидку глянул в кальеулятор, горячих клавишь не нашел. А не спал оч давно поетому искать обломало. Какую комбинацию ты хочешь использовать?
 
Автор
Z

zbruy

Новичок
Сообщения
10
Репутация
0
Я неверно выразился правд, не горячие клавиши, а набор с клавы для фонового окна я уже выше писал, но повторюсь, для калка скажем можно альт, вправо, энтер, вниз, энтер - при этой комбинации он должен переходить из обычно режима в инжеерный. Но это тестрования функционала оператора, а на самом деле мне нужно для IE или Хрома 10 нажатий Tab, а затем энтер, sleep 500 и снова то же.
Я писал как-то так:
Код:
WinWaitActive('окно бла-бла-бла', '', 3)
$hWnd1 = WinGetHandle('окно бла-бла-бла')
WinSetState($hWnd1, '', @SW_DISABLE)
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
ControlSend($hWnd1, "","", "{TAB}")
Sleep(500)
ControlSend($hWnd1, "","", "ENTER")
WinSetState($hWnd1, '', @SW_ENABLE)

В итоге скрипт дает только 2 таба и заканчивается
ЗЫ, а лучше отоспись, потом со свежей головой придешь помогать :smile:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Нет времени спать, работы куча :smile:
Слипы поставь по 500 между табосендами, мб поможет.
 
Автор
Z

zbruy

Новичок
Сообщения
10
Репутация
0
Пробывал, и по секунде не помогает=(
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Помогите разобраться, клик по кнопкам работает, но есть контролл, hwnd которого не могу получить, поэтому приходится тупо кликать мышкой.
Есть _MouseClickPlus()
Код:
;===============================================================================
;
; Function Name:  _MouseClickPlus()
; Version added:  0.1
; Description:    Sends a click to window, not entirely accurate, but works 
;                 minimized.
; Parameter(s):   $Window     =  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]>
;
;===============================================================================
Func _MouseClickPlus($Window, $Button = "left", $X = "", $Y = "", $Clicks = 1)
  Local $MK_LBUTTON       =  0x0001
  Local $WM_LBUTTONDOWN   =  0x0201
  Local $WM_LBUTTONUP     =  0x0202
  
  Local $MK_RBUTTON       =  0x0002   
  Local $WM_RBUTTONDOWN   =  0x0204
  Local $WM_RBUTTONUP     =  0x0205

  Local $WM_MOUSEMOVE     =  0x0200
  
  Local $i                = 0
  
  Select 
  Case $Button = "left"
     $Button     =  $MK_LBUTTON
     $ButtonDown =  $WM_LBUTTONDOWN
     $ButtonUp   =  $WM_LBUTTONUP
  Case $Button = "right"
     $Button     =  $MK_RBUTTON
     $ButtonDown =  $WM_RBUTTONDOWN
     $ButtonUp   =  $WM_RBUTTONUP
  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( $Window ), _
        "int",   $WM_MOUSEMOVE, _
        "int",   0, _
        "long",  _MakeLong($X, $Y))
        
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $Window ), _
        "int",   $ButtonDown, _
        "int",   $Button, _
        "long",  _MakeLong($X, $Y))
        
     DllCall("user32.dll", "int", "SendMessage", _
        "hwnd",  WinGetHandle( $Window ), _
        "int",   $ButtonUp, _
        "int",   $Button, _
        "long",  _MakeLong($X, $Y))
  Next
EndFunc




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

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

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

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Выкладывай свой MouseClickPlus.au3, мы не телепаты чтобы даже не зная что у тебя там за функция сказать в чем ошибка. Да и в принципе интересно посмотреть что это за UDF такая :smile:
 
Верх