Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Zets on March 24, 2014, 11:55:22 PM

Title: Как сделать активным окно с заданным HWND
Post by: Zets on March 24, 2014, 11:55:22 PM
Т.е. после HGET как это окно поместить на передний план?
Title: Re: Как сделать активным окно с заданным HWND
Post by: aden on March 25, 2014, 06:58:18 AM
если нужно поверх всех окон то я пользуюсь сторонним софтом

если просто развернуть
внимательно читаем хелп
WNDSTATE (hwnd, state) - сворачивает (разворачивает) окно

Параметры
hwnd - HWND окна
state - состояние {0 - свернуто, 1 - развернуто}

по идее
Code: (clickermann) [Select]
wndstate(hwnd ,0)
wndstate(hwnd ,1)
должно поместить окно на передний план
Title: Re: Как сделать активным окно с заданным HWND
Post by: Zets on March 25, 2014, 08:07:55 AM
если нужно поверх всех окон то я пользуюсь сторонним софтом
Каким например?

если просто развернуть
внимательно читаем хелп
WNDSTATE (hwnd, state) - сворачивает (разворачивает) окно

Параметры
hwnd - HWND окна
state - состояние {0 - свернуто, 1 - развернуто}

по идее
Code: (clickermann) [Select]
wndstate(hwnd ,0)
wndstate(hwnd ,1)
должно поместить окно на передний план
да, кажется помогает. Спс
Title: Re: Как сделать активным окно с заданным HWND
Post by: Zets on March 25, 2014, 08:11:36 AM
Т.е. после HGET как это окно поместить на передний план?
Правда насколько я понимаю чтобы повторно сделать окно активным его надо сначала свернуть, потом развернуть))
Title: Re: Как сделать активным окно с заданным HWND
Post by: Zets on March 25, 2014, 09:51:03 AM
Почему то после открывания экселя браузер не выходит на передний план =\
Следующее разворачивание нормальное. Из за чего может быть?
[spoiler]
Code: (clickermann) [Select]
execute("excel")
wait(2)
$HWnd = WNDFIND ("Microsoft Excel")
WndPos ($HWnd, 200, 200)
wndstate($HWnd, 0)
wndstate($HWnd, 1)
WaitMS(1500)

$HWnd = WNDFIND ("Федеральная")
WndPos ($HWnd, 0, 0)
wndstate($HWnd, 0)
wndstate($HWnd, 1)
WaitMS(1500)

$HWnd = WNDFIND ("Microsoft Excel")
wndstate($HWnd, 0)
wndstate($HWnd, 1)
WaitMS(1500)

$HWnd = WNDFIND ("Федеральная")
wndstate($HWnd, 0)
wndstate($HWnd, 1)
WaitMS(1500)
halt
[/spoiler]
Title: Re: Как сделать активным окно с заданным HWND
Post by: Atas on March 25, 2014, 03:39:16 PM
Т.е. после HGET как это окно поместить на передний план?

Почему то не удалось присвоить значения HWND окон переменным. Вернее, такая переменная в скрипте, обрабатывается как то не корректно. Или я что то не так делал.
Вместо $hwnd_excel = wndfind("Excel") // Значение HWND окна Exscel присваеваем переменной "hwnd_excel", постоянно приходится вызывать функцию (WNDFIND("Excel").
Вот что у меня получилось. Немного усложнил и добавил в сценарий ожидание запуска Excel и браузера.
(Windows 7 SP1 x64; Excel 2013; Mozilla Firefox 27.0.1)

[spoiler]
Code: (clickermann) [Select]

//========================= Microsoft Excel

IF(WNDFIND("Excel") = 0)// Проверяем, есть ли окно Exscel, если нет, то запускаем Exscel
   
   EXECUTE("Excel") // Запускаем Exscel (можно попробовать задать параметры запуска или запускать ярлык с параметрами в самом ярлыке)
   
   //--------------------------------
   $t = $_ms // Засекаем время
   WHILE( ($excel_window_exist = 0) & (($t + 10000) > $_ms) ) // Ожидание загрузки Exscel (10000 милисекунд)
      IF(WNDFIND("Excel") ! 0)
         $excel_window_exist = 1 // Окно Exscel найдено
      END_IF
      WAITMS(50) // Частота поиска окна Exscel (слишком маленькое значение замедлит запуск Exscel)
   END_CYC
   //--------------------------------
   
   // Проверяем, запустился ли Exscel, если нет, то останавливаем сценарий
   IF($excel_window_exist = 1) // Если окно Exscel найдено
      WNDSTATE(WNDFIND("Excel"), 0) // Сворачиваем окно Exscel
   ELSE
      HINTPOPUP("Время ожидания истекло.", "Окно Microsoft Excel не найдено.") // Если окно Exscel НЕ найдено
      HALT
   END_IF
   
END_IF

//========================= Mozilla Firefox

IF(WNDFIND("firefox") = 0)// Проверяем, есть ли окно Mozilla Firefox, если нет, то запускаем Mozilla Firefox
   EXECUTE("firefox", "http://crapware.aidf.org/") // Запускаем браузер
   
   //--------------------------------
   $t = $_ms // Засекаем время
   WHILE( ($firefox_window_exist = 0) & (($t + 10000) > $_ms) ) // Ожидание загрузки Firefox (10000 милисекунд)
      IF(WNDFIND("Firefox") ! 0)
         $firefox_window_exist = 1 // Окно Firefox найдено
      END_IF
      WAITMS(50) // Частота поиска окна Firefox (слишком маленькое значение замедлит запуск Firefox)
   END_CYC
   //--------------------------------
   // Проверяем, запустился ли Firefox, если нет, то останавливаем сценарий
   IF($firefox_window_exist = 1) // Если окно Firefox найдено
      WNDSTATE(WNDFIND("Firefox"), 0) // Сворачиваем окно Firefox
   ELSE
      HINTPOPUP("Время ожидания истекло.", "Окно браузера не найдено.") // Если окно Firefox НЕ найдено
      HALT
   END_IF
   
END_IF

//========================= Управление статусом окон Microsoft Excel и Mozilla Firefox

// Теперь окна Microsoft Excel и Mozilla Firefox существуют и свёрнуты

WAITMS(2000) // Через пару секунд сменим их статус

WNDSTATE(WNDFIND("Excel"), 0) // Сворачиваем окно Exscel
WAITMS(50)
WNDSTATE(WNDFIND("Firefox"), 1) // Разорачиваем окно Firefox

WAITMS(5000) // И, через 5 секунд, наоборот

WNDSTATE(WNDFIND("Firefox"), 0) // Сворачиваем окно Firefox
WAITMS(500)
WNDSTATE(WNDFIND("Excel"), 1) // Разорачиваем окно Exscel

//--------------------------------

WAITMS(1500)

WAITMS(50)
WNDSIZE(WNDFIND("Excel"), 700,500) // Теперь можно задать размер
WAITMS(50)
WNDPOS(WNDFIND("Excel"), 100,100) // и расположение активного окна

WAITMS(1500)

WNDPOS(WNDFIND("Excel"), 0,0) // Или так
WAITMS(500)
WNDSIZE(WNDFIND("Excel"), $_xmax,$_ymax)

// Можно делать проверку текущего HWND (системная переменная "$_hwnd")

HALT
[/spoiler]

Title: Re: Как сделать активным окно с заданным HWND
Post by: Oraven on March 25, 2014, 05:03:28 PM
Ну не знаю вполне нормально работает.

Code: (clickermann) [Select]
//========================= Microsoft Excel
$hwn_Excel = WNDFIND("Excel")
IF($hwn_Excel = 0)// Проверяем, есть ли окно Exscel, если нет, то запускаем Exscel
   
   EXECUTE("Excel") // Запускаем Exscel (можно попробовать задать параметры запуска или запускать ярлык с параметрами в самом ярлыке)
   
   //--------------------------------
   $t = $_time_t + 10 // Засекаем время
   WHILE(($excel_window_exist = 0) & ($t > $_time_t)) // Ожидание загрузки Exscel (10000 милисекунд)
      IF(WNDFIND("Excel") ! 0)
         $excel_window_exist = 1 // Окно Exscel найдено
      ELSE
         WAITMS(50) // Частота поиска окна Exscel (слишком маленькое значение замедлит запуск Exscel)
      END_IF
   END_CYC
   //--------------------------------
   
   // Проверяем, запустился ли Exscel, если нет, то останавливаем сценарий
   IF($excel_window_exist = 1) // Если окно Exscel найдено
      WNDSTATE($hwn_Excel, 0) // Сворачиваем окно Exscel
   ELSE
      HINTPOPUP("Время ожидания истекло.", "Окно Microsoft Excel не найдено.") // Если окно Exscel НЕ найдено
      HALT
   END_IF
   
END_IF

//========================= Mozilla Firefox
$hwn_firefox = WNDFIND("firefox")
IF($hwn_firefox = 0)// Проверяем, есть ли окно Mozilla Firefox, если нет, то запускаем Mozilla Firefox
   EXECUTE("firefox", "http://crapware.aidf.org/") // Запускаем браузер
   
   //--------------------------------
   $t = $_time_t + 10 // Засекаем время
   WHILE(($firefox_window_exist = 0) & ($t > $_time_t)) // Ожидание загрузки Firefox (10000 милисекунд)
      IF(WNDFIND("Firefox") ! 0)
         $firefox_window_exist = 1 // Окно Firefox найдено
      ELSE
         WAITMS(50) // Частота поиска окна Firefox (слишком маленькое значение замедлит запуск Firefox)
      END_IF
   END_CYC
   //--------------------------------
   // Проверяем, запустился ли Firefox, если нет, то останавливаем сценарий
   IF($firefox_window_exist = 1) // Если окно Firefox найдено
      WNDSTATE($hwn_firefox, 0) // Сворачиваем окно Firefox
   ELSE
      HINTPOPUP("Время ожидания истекло.", "Окно браузера не найдено.") // Если окно Firefox НЕ найдено
      HALT
   END_IF
   
END_IF

//========================= Управление статусом окон Microsoft Excel и Mozilla Firefox

// Теперь окна Microsoft Excel и Mozilla Firefox существуют и свёрнуты

WAIT(2) // Через пару секунд сменим их статус

WNDSTATE($hwn_Excel, 0) // Сворачиваем окно Exscel
WAITMS(50)
WNDSTATE($hwn_firefox, 1) // Разорачиваем окно Firefox

WAIT(5) // И, через 5 секунд, наоборот

WNDSTATE($hwn_firefox, 0) // Сворачиваем окно Firefox
WAITMS(500)
WNDSTATE($hwn_Excel, 1) // Разорачиваем окно Exscel

//--------------------------------

WAITMS(1500)

WAITMS(50)
WNDSIZE($hwn_Excel, 700,500) // Теперь можно задать размер
WAITMS(50)
WNDPOS($hwn_Excel, 100,100) // и расположение активного окна

WAITMS(1500)

WNDPOS($hwn_Excel, 0,0) // Или так
WAITMS(500)
WNDSIZE($hwn_Excel, $_xmax,$_ymax-43)

// Можно делать проверку текущего HWND (системная переменная "$_hwnd")

HALT
Title: Re: Как сделать активным окно с заданным HWND
Post by: aden on March 26, 2014, 02:40:20 PM
если нужно поверх всех окон то я пользуюсь сторонним софтом
Каким например?

забыл название щас посмотрел как называется прога
deskpins закрепляет любое окно
Title: Re: Как сделать активным окно с заданным HWND
Post by: Zets on March 27, 2014, 12:54:22 PM
если нужно поверх всех окон то я пользуюсь сторонним софтом
Каким например?

забыл название щас посмотрел как называется прога
deskpins закрепляет любое окно
Спасибо!)

Заметил что на разных компах по разно себя ведет команда сворачивания разворачивания. На стационаре все без проблем, на ноуте в основном нормально, но иногда если окно не свернуто, то когда его сворачивает и разворачивает браузер заглючивает.
Title: Re: Как сделать активным окно с заданным HWND
Post by: Zets on March 28, 2014, 07:50:55 PM
Сейчас и на стационаре, цикле на 20-м, после того как окно хрома развернулось-свернулось больше развернуться не смогло.
Возможно проблема в хроме, но в чем именно?! =\
Если кто то захочет помочь, выкладываю код, он объемный правда.
Ну и заодно если кто то осилит, можно комментарии по поводу кода))

[spoiler]
Code: (clickermann) [Select]

#name "COPYPASTER"

//=======  Переменные
$HWnd = 0
$URL = 0
$COUNT1 = 0
$COUNT2 = 0
$PAGE_PREFIX = "XXXXXX"
$PAGE_REGION = "XXXXXXX"
$PAGE_MIDFIX = "XXXXXXXX"
$PAGE_SECTION = "XXXXXXX"
$PAGE_ENDFIX = "&page="
$PAGE_NUM = 0
$i = 0
$k = 0
$x1 = 0
$y1 = 0
// подпрограмма CTRL+L
SUB(CTRL_L)
   KEYDOWN (#CTRL)
   WAITMS (50)
   KEYDOWN (#L)
   WAITMS (50)
   KEYUP (#L)
   KEYUP (#CTRL)
END_SUB

// подпрограмма CTRL+C
SUB(CTRL_C)
   KEYDOWN (#CTRL)
   WAITMS (50)
   KEYDOWN (#C)
   WAITMS (50)
   KEYUP (#C)
   KEYUP (#CTRL)
END_SUB

// подпрограмма CTRL+V
SUB(CTRL_V)
   KEYDOWN (#CTRL)
   WAITMS (50)
   KEYDOWN (#V)
   WAITMS (50)
   KEYUP (#V)
   KEYUP (#CTRL)
END_SUB

// подпрограмма тройного клика
SUB(CLICK_3)
   LCLICK($x1,$y1)
   WaitMs(100)
   LCLICK($x1,$y1)
   WaitMs(100)
   LCLICK($x1,$y1)
   WaitMs(100)
END_SUB

// подпрограмма открытия браузера
SUB(OPEN_BROWSER)
   $HWnd = WNDFIND ("Федеральная")
   wndstate($HWnd, 0)
   wndstate($HWnd, 1)
   WaitMS(500)
   LCLICK(20,ROUND($_ymax/2,0))
   WaitMS(500)
END_SUB

// подпрограмма открытия экселя
SUB(OPEN_EXCEL)
   $HWnd = WNDFIND ("Microsoft Excel")
   wndstate($HWnd, 0)
   wndstate($HWnd, 1)
   WaitMS(500)
END_SUB

// подпрограмма активизаации экселя
SUB(ACTIVATE_CELL)
   LCLICK(200,200)
   WaitMS(500)
END_SUB

// подпрограмма вставки буфера в эксель
SUB(PASTE_TABLE_EXCEL)
   CTRL_V()
END_SUB

// подпрограмма изменения URL браузера
SUB(CHANGE_URL_BROWSER)
   $PAGE_NUM = $i+1
   $URL = StrConcat($PAGE_PREFIX,$PAGE_REGION,$PAGE_MIDFIX,$PAGE_SECTION,$PAGE_ENDFIX,$PAGE_NUM)
   TOCLIP($URL)
   WAITMS(100)
   INC($i)
END_SUB

// подпрограмма вставки URL браузера
SUB(SET_URL_BROWSER)
   CTRL_L()
   WAITMS (100)
   CTRL_V()
   WAITMS (100)
   KEYPRESS(#ENTER)
END_SUB

// подпрограмма проверки последней страницы
SUB(CHECK_LAST_PAGE)
   GETSCREEN
   $COUNT2 = PXLCOUNT ($_return1,$_return2, $_return1+300, $_return2+300, 0)
   IF($COUNT2 > 300)
      LOGWRITE("pixels: ", $COUNT2)
   ELSE
      HINTPOPUP("Это была последняя страница", "Ошибка")
      LOGWRITE("Это была последняя страница")
      halt
   END_IF
END_SUB

// подпрограмма проверки открытия страницы браузера и копирования таблицы
SUB(CHECK_BROWSER_PAGE)
   KEYPRESS(#PAGEDOWN)
   WAITMS (100)
   GETSCREEN
   IF_PICTURE_IN (50,50, 300, $_ymax, "textures\request_button.bmp")
      $x1 = $_return1-50
      $y1 = $_return2+100
      LOGWRITE ($_return1)
      LOGWRITE ($_return2)
   ELSE
      HINTPOPUP("Не найдена кнопка ЗАПРОС", "Ошибка")
      LOGWRITE("Не найдена кнопка ЗАПРОС")
      $COUNT1 = PXLCOUNT (0,0, $_xmax,$_ymax, 13274746)
      IF($COUNT1 > 10)
      LOGWRITE("pixels: ", $COUNT1)
      CHECK_LAST_PAGE()
      END_IF
   END_IF
   WAITMS(100)
END_SUB

// подпрограмма удаления заголовка таблицы
SUB(DELETE_HEADLINE)
   KEYPRESS(#DOWN)
   WAITMS (50)
   KEYPRESS(#UP)
   WAITMS (50)
   KEYDOWN (#SHIFT)
   WAITMS (50)
   KEYPRESS(#RIGHT)
   WAITMS (50)
   KEYPRESS(#RIGHT)
   WAITMS (50)
   KEYUP (#SHIFT)
   WAITMS (100)
   KEYDOWN (#CTRL)
   WAITMS (50)
   KEYDOWN (189)
   WAITMS (50)
   KEYUP (189)
   KEYUP (#CTRL)
   WAITMS (50)
   KEYPRESS(#ENTER)
   WAITMS (50)
   KEYPRESS(#DOWN)
   WAITMS (50)
END_SUB

// подпрограмма перехода к последней вставленной строке таблицы
SUB(LAST_ROW)
   KEYPRESS(#DOWN)
   WAITMS (50)
   KEYPRESS(#DOWN)
   WAITMS (50)
   KEYPRESS(#DOWN)
   WAITMS (50)
   KEYPRESS(#DOWN)
   WAITMS (50)
   KEYPRESS(#DOWN)
   WAITMS (50)
END_SUB

// подпрограмма открытия браузера и перехода на следующую страницу
SUB(START_BROWSER)
   OPEN_BROWSER()
   CHANGE_URL_BROWSER()
   SET_URL_BROWSER()
END_SUB

// подпрограмма копирования таблицы
SUB(COPY_TABLE)
   CHECK_BROWSER_PAGE()
   CHECK_LAST_PAGE()
   CLICK_3()
   CTRL_C()
   WaitMS(500)
END_SUB

// Диалоговое окно задания кода XXXXX и XXXX
SUB(DIALOG_SECTION)
   $DIALOG_ANSWER = (DIALOGBOX("Ввести коды XXXXX и XXXXX", 3, 2))
   SWITCH($DIALOG_ANSWER)
   CASE(6)
      $PAGE_SECTION = INT(INPUTBOX("Введите код XXXXXXX", $PAGE_SECTION, 20))
      $PAGE_REGION = INT(INPUTBOX("Введите код XXXXXX", $PAGE_REGION, 20))
   CASE(7)
      HINTPOPUP ("Приняты значения по умолчанию" , "ВНИМАНИЕ")
   DEFAULT
      HINTPOPUP ("Не определен режим работы" , "ОШИБКА")
      HALT
   END_SWITCH
END_SUB

//======= НАЧАЛО ПРОГРАММЫ ====================================
LOGCLEAR
LOGSHOW (1, 1500,900)
DIALOG_SECTION()
execute("excel")
wait(2)
$HWnd = WNDFIND ("Microsoft Excel")
WndPos ($HWnd, 200, 200)
wndstate($HWnd, 0)
wndstate($HWnd, 1)
WaitMS(500)
$HWnd = WNDFIND ("Федеральная")
WndPos ($HWnd, 0, 0)
wndstate($HWnd, 0)
wndstate($HWnd, 1)
WaitMS(500)

WHILE($k<1)
   START_BROWSER()
   WAIT(8)
   COPY_TABLE()
   OPEN_EXCEL()
   WAIT(1)
   ACTIVATE_CELL()
   PASTE_TABLE_EXCEL()
   WAITMS(500)
   DELETE_HEADLINE()
   LAST_ROW()
   WAITMS(500)
END_CYC
halt
[/spoiler]