Author Topic: Как сделать активным окно с заданным HWND  (Read 8299 times)

0 Members and 1 Guest are viewing this topic.

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Т.е. после HGET как это окно поместить на передний план?

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
если нужно поверх всех окон то я пользуюсь сторонним софтом

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

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

по идее
Code: (clickermann) [Select]
wndstate(hwnd ,0)
wndstate(hwnd ,1)
должно поместить окно на передний план
« Last Edit: March 25, 2014, 07:02:05 AM by aden »

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
если нужно поверх всех окон то я пользуюсь сторонним софтом
Каким например?

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

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

по идее
Code: (clickermann) [Select]
wndstate(hwnd ,0)
wndstate(hwnd ,1)
должно поместить окно на передний план
да, кажется помогает. Спс

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Т.е. после HGET как это окно поместить на передний план?
Правда насколько я понимаю чтобы повторно сделать окно активным его надо сначала свернуть, потом развернуть))

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Почему то после открывания экселя браузер не выходит на передний план =\
Следующее разворачивание нормальное. Из за чего может быть?
[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]

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Т.е. после 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]


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Ну не знаю вполне нормально работает.

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

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
если нужно поверх всех окон то я пользуюсь сторонним софтом
Каким например?

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

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
если нужно поверх всех окон то я пользуюсь сторонним софтом
Каким например?

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

Заметил что на разных компах по разно себя ведет команда сворачивания разворачивания. На стационаре все без проблем, на ноуте в основном нормально, но иногда если окно не свернуто, то когда его сворачивает и разворачивает браузер заглючивает.

Zets

  • Освоившийся
  • **
  • Posts: 66
    • View Profile
    • vk.com
Сейчас и на стационаре, цикле на 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]
« Last Edit: March 29, 2014, 08:01:23 AM by Zets »