Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Переименование окон, Скрип для переименования названия окон Windows...
bumer
сообщение 23.9.2019, 0:11
Сообщение #1


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Сижу я и думаю, а вот сможет ли скрипт сделать такое:
1) Переименовать названия окон Windows на нужное мне
2) Находить в этом окне нужные мне кнопки, или координаты с кнопкам
3) Жмакать по нужным найденным кнопка ориентируясь по названиям, или иным признакам
П.С. Наверно это что то нереальное, ну хотяб узнаю...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 23.9.2019, 8:36
Сообщение #2


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(bumer @ 23.9.2019, 0:11) *

Сижу я и думаю, а вот сможет ли скрипт сделать такое:
1) Переименовать названия окон Windows на нужное мне
2) Находить в этом окне нужные мне кнопки, или координаты с кнопкам
3) Жмакать по нужным найденным кнопка ориентируясь по названиям, или иным признакам
П.С. Наверно это что то нереальное, ну хотяб узнаю...

Переименовать окно
А по поводу поиска кнопок по их id или названию не уверен что такое на пилоте сделать возможно...хотя можно попытаться реализовать что-то подобное с помощью PID (если более или менее стабильные названия кнопок то вполне реально сделать а если это поля ввода или какие другие формы то уже сложнее реализовать. Но в принципе задача вполне решаемая).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 23.9.2019, 10:13
Сообщение #3


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Да это то что надо, с переименованием любого окна
Код

set #handle FindWindow("Калькулятор")    //найти окно калькулятора
set #a SetWindowtext (#handle Pilot)     //переименовать его в Pilot
End_script


Но вот с идентификацией кнопок, по их названию всё гораздо сложней.
Наверно нужно подыскивать что то другое, чтоб уверено распознавать название кнопок, внутри окна...

Возможно будет правильней использовать какой нить, другой метод распознавание состояние ярлычков кнопок внутри окна, чтоб ориентируясь по их внешнему виду прожимать по координатам или иным способом
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 24.9.2019, 10:33
Сообщение #4


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Всё таки какой замечательный этот форум, такие вкусные загатовки скрипта появляются
Вот супер, можно искать всё что угодно по картинке в области, в моем случаи кнопку:
Код

--lua
local startX, startY, endX, endY = 0, 0, 1280, 720   -- координаты поиска
        local path2 = [["C:\картинка.bmp"]]                   -- путь к картинке
        local arr, a = findimage (startX, startY, endX, endY, {path2}, 2, 70, 6, 5 )  -- поиск картинки
        hint (a)     -- результат поиска, подсказка в правом нижнем углу
        if  arr then  -- если найдена
            log ("картинка найдена в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])
            kleft (262, 594)  -- кликнули
            wait ("2s")    -- ждать секунды
        else
            log ("Картинка.bmp не найдена")
            end

Спасибо Fors1k !
Код

init_arr %path(1 1) "C:\картинка2.bmp" "C:\картинка3.bmp" "C:\картинка4.bmp" // что искать
init_arr %snd(1 1) 2 3 4 // клавиши

for #i 1 size(%path) // цикл поиска
    set #a FindImage (0, 0 1280, 720(%path[#i]) %arr 2 70 6 5 abs) // поиск каждой картинки
    if #a > 0  // если нашли
       send %snd[#i] // действие, соответствующее найденной картинке
    end_if
end_for
end_script

или вот прожатие по приоритету...
Код

//-----Условия
set $a 100, 200 0 and 300, 400 435346
set $b 500, 600 0 and 700, 800 43475
set $c ???
//-----Условные действия
while ($a) = 1 // приоритет 1
    send A // действия приоритет 1
end_while
while ($b) = 1 and ($a) !=1 // приоритет 2
    send B // действия приоритета 2
end_while
while ($c) = 1 and ($a) != 1 and ($b) != 1 // приоритет 3
    send C // действия приоритета 3
end_while

П.С. Смотришь на всё это и душа радуется! Жаль что я не капли не программист и сам неспособен делать красивые вещи. Но некто не мешает использовать уже придуманное!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 28.11.2019, 1:20
Сообщение #5


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Не захотел открывать новую тему, кажется вот эта как рас подходящая!
Скажем вот если вдруг мне надо запустить калькулятор в три окна, но чтоб окна переименовывались, так как мне надо, как это сделать?
Ну с
Код

set #handle FindWindow("Калькулятор")    //найти окно калькулятора
set #a SetWindowtext (#handle Pilot)     //переименовать его в Pilot
End_script

Понятно...
Но как заставить его запускать .eхе файл, потом найденное окно переименовать Pilot1, запустить ещё раз, переименовать Pilot2... Pilot3 это повторить три раза?
П.С. надеюсь у меня получилось описать то что нужно...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Levo222
сообщение 28.11.2019, 11:32
Сообщение #6


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Не знаю как на пилоте, но на хоткее у меня было так

Код
//----------------------------------------------------------------------
// Ctrl R для переименования окон, если вы запускаете их вручную.
//----------------------------------------------------------------------
<Hotkey ScrollLockOn Ctrl R>
    <SendPC local>
        <RenameWin "Uopilot" Uopilot1>
        <RenameWin "Uopilot" Uopilot2>
        <RenameWin "Uopilot" Uopilot3>
        <RenameWin "Uopilot" Uopilot4>
        <RenameWin "Uopilot" Uopilot5>

//----------------------------------------------------------------------
// Подпрограмма для запуска и переименования программ.
//----------------------------------------------------------------------

//Размещение координат
<Command LaunchAndRename>
    <SendPC local>
        <Run "E:\UOpilot.exe">
        <RenameTargetWin %1%>

<Command ResizeAndPosition>
<Hotkey ScrollLockOn Ctrl T>
    <SendWinM Uopilot1>    <SetWinRect 0 0 900 700>
    <SendWinM Uopilot2>    <SetWinRect 930 0 300 500>
    <SendWinM Uopilot3>    <SetWinRect 930 200 400 500>
    <SendWinM Uopilot4>    <SetWinRect 930 300 400 500>
    <SendWinM Uopilot5>    <SetWinRect 930 400 400 500>

//----------------------------------------------------------------------
// Горячая клавиша для запуска и переименования программ.
//----------------------------------------------------------------------
<Hotkey ScrollLockOn Ctrl Alt L>
    <LaunchAndRename Uopilot1>
    <LaunchAndRename Uopilot2>
    <LaunchAndRename Uopilot3>
    <LaunchAndRename Uopilot4>
    <LaunchAndRename Uopilot5>
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 28.11.2019, 12:06
Сообщение #7


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
запускать .eхе файл, потом найденное окно переименовать Pilot1, запустить ещё раз, переименовать Pilot2... Pilot3 это повторить три раза?

Может проще сразу запустить все окна и потом все переименовать?
Код
init_arr %arr Pilot1 Pilot2 Calc3

for #i 1 3
    exec C:\Windows\notepad.exe
end_for

set %handle FindWindow("Блокнот")
while size(%handle) < 3
    set %handle FindWindow("Блокнот")
    wait 100
end_while

for #i 1 3
    set #h %handle[#i 1]
    set #b SetWindowtext (#h %arr[#i])
end_for
End_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 28.11.2019, 14:46
Сообщение #8


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Цитата(cirus @ 28.11.2019, 12:06) *

Может проще сразу запустить все окна и потом все переименовать?
Код
init_arr %arr Pilot1 Pilot2 Pilot3

for #i 1 3
    exec C:\Windows\notepad.exe
end_for

set %handle FindWindow("Блокнот")
while size(%handle) < 3
    set %handle FindWindow("Блокнот")
    wait 100
end_while

for #i 1 3
    set #h %handle[#i 1]
    set #b SetWindowtext (#h %arr[#i])
end_for
End_script


Непринципиально, главное чтоб обработало нужные окна...
------
Испытал, да запускает. Всё ОК. Но есть недостаток...
Если по какой то причине было закрыто одно из окон, при перезапуске скрипт, запускает все окна, даже если не хватало всего одно!
Было бы здорово если вначале шла проверка и запускало недостающие окно, такое возможно?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.11.2019, 8:56
Сообщение #9


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(bumer @ 28.11.2019, 14:46) *
Было бы здорово если вначале шла проверка и запускало недостающие окно, такое возможно?


Код
set $Name  Блокнот                          // Имя окна до
set $newName Test                           // Имя окна после
set #Quantity 3                             // Количество окон
set $app C:\Windows\System32\notepad.exe    // Приложение

for #i 1 #Quantity
    if findwindow ($NewName#i) < 1
        exec $app
        while findwindow($Name) < 1
        wait 10
        end_while
        set #rsl setwindowtext(findwindow($Name) $NewName#i)
    end_if
end_for
end_script


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 29.11.2019, 9:29
Сообщение #10


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Цитата(Fors1k @ 29.11.2019, 8:56) *

Код
set $Name  Блокнот      // До
set $newName Test       // После
set #Quantity 3         // Количество
set $app notepad.exe    // Приложение

for #i 1 #Quantity
    if findwindow ($NewName#i) < 1
        exec $app
        while findwindow($Name) < 1
        wait 10
        end_while
        set #rsl setwindowtext(findwindow($Name) $NewName#i)
    end_if
end_for
end_script


Спасибо за очень интересное решение...
Я ведь правильно всё понял. Запускаешь скрипт на исполнение и в ручную стартуешь приложение которое вам нужно. Скрипт переименовывает окна?
Вот только он почему то у меня начинает отсчёт окон с номера 2, затем 3, а первого нет! На этом скрипт завершает работу...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.11.2019, 11:42
Сообщение #11


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(bumer @ 29.11.2019, 9:29) *

Спасибо за очень интересное решение...
Я ведь правильно всё понял. Запускаешь скрипт на исполнение и в ручную стартуешь приложение которое вам нужно. Скрипт переименовывает окна?
Вот только он почему то у меня начинает отсчёт окон с номера 2, затем 3, а первого нет! На этом скрипт завершает работу...

Нет, приложение стартует само по указанному пути. Посмотри сейчас ещё раз на код. Насчёт нумерации - как видно в коде, цикл стартует с единицы, так что нумерация пойдёт с 1. Я запускал у себя, все работает норм
Ничего сам не запускай, закрой все блокноты, и просто запусти скрипт. После попробуй закрыть например test2, затем запусти скрипт, и он создаст только окно под номером 2.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 29.11.2019, 12:07
Сообщение #12


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Цитата(Fors1k @ 29.11.2019, 11:42) *

Нет, приложение стартует само по указанному пути. Посмотри сейчас ещё раз на код. Насчёт нумерации - как видно в коде, цикл стартует с единицы, так что нумерация пойдёт с 1. Я запускал у себя, все работает норм.

Да я поглядел, значение i действительно меняется с 1 до 3, но вот окон запускает всего два с нумерацией 2 и 3. Номера 1 просто нет! Непонятно почему, может слишком быстро всё происходит, может ещё по какой причине...
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.11.2019, 12:26
Сообщение #13


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(bumer @ 29.11.2019, 12:07) *

Да я поглядел, значение i действительно меняется с 1 до 3, но вот окон запускает всего два с нумерацией 2 и 3. Номера 1 просто нет! Непонятно почему, может слишком быстро всё происходит, может ещё по какой причине...

Попробуй выставить паузу между строк 100мс. Хотя у меня и на нуле благополучно запускался.
Не знаю даже, ещё раз проверил у себя - работает как часы. Может у кого из ребят будут идеи, в связи с чем у тебя не запускается.
Cirus, попробуй запустить у себя, если есть возможность. Если как у бумера будет, то может сможешь разглядеть ошибку... Не может же работать только на моем пк:))


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 29.11.2019, 12:56
Сообщение #14


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Цитата(Fors1k @ 29.11.2019, 12:26) *

Попробуй выставить паузу между строк 100мс. Хотя у меня и на нуле благополучно запускался.
Не знаю даже, ещё раз проверил у себя - работает как часы. Может у кого из ребят будут идеи, в связи с чем у тебя не запускается.
Cirus, попробуй запустить у себя, если есть возможность. Если как у бумера будет, то может сможешь разглядеть ошибку... Не может же работать только на моем пк:))

поставил даже 5 секунд, ну и заметил вот что, при первом цикле когда i=1 проскакивает сразу в конец, а при втором и третьем цикле уже обрабатывает каждую строчку кода...
П.С. Если есть дискорд + желание поглядеть то можно обговорить, даже могу видосик снять. В общем открыт к общению
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.11.2019, 13:04
Сообщение #15


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Я сейчас в больничке лежу, так что пока только кое-как через тимку заходил на комп) Вечером сегодня уже буду дома по идее, и можно будет попробовать. Ну а пока можем только подождать результат запуска у кого-нибудь другого).


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 29.11.2019, 13:14
Сообщение #16


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Цитата(Fors1k @ 29.11.2019, 13:04) *

Я сейчас в больничке лежу, так что пока только кое-как через тимку заходил на комп) Вечером сегодня уже буду дома по идее, и можно будет попробовать. Ну а пока можем только подождать результат запуска у кого-нибудь другого)

Угу, понятно. Я попробовал стартануть блокнот, он действительно стартует и открывает так как вы описываете. Но вот другое приложение первый цикл проглатывает, когда i=1
П.С. Пусть таблетки, чай, малина
Вам помогут поскорей
Пролететь болезней мимо,
Стать бодрей и веселей.!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.11.2019, 13:19
Сообщение #17


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Спасибо)
Ну по логике, если он пропускает первую итерацию, значит он где-что находит окно, где в имени есть test1.
Попробуй поменять test на qweAbc, что бы проверить эту теорию. Может он при поиске test1 находит это в имени окна какой-либо другой запущенной программы.


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
bumer
сообщение 29.11.2019, 14:32
Сообщение #18


****

Apprentice
Сообщений: 167
Регистрация: 2.6.2012
Группа: Пользователи
Наличность: 0
Пользователь №: 14.998



Цитата(Fors1k @ 29.11.2019, 13:19) *

Спасибо)
Ну по логике, если он пропускает первую итерацию, значит он где-что находит окно, где в имени есть test1.
Попробуй поменять test на qweAbc, что бы проверить эту теорию. Может он при поиске test1 находит это в имени окна какой-либо другой запущенной программы.

Я нашёл проблему, что не давала правильно работать скрипту!
Код

set $Name  Блокнот                          // Имя окна до

Перед именем два пробела... Убрал один и всё стало работать как надо!
П.С. Огромное спасибо за помощь, выздоравливай! У меня уже есть следующая хотелка... Но пока что воздержусь описывать, выздоравливай скорей!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 29.11.2019, 16:17
Сообщение #19


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



О, ну хорошо, что заработало. Да с телефона не удобно код писать , затесался лишний пробел)


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 12:07
Designed by Nickostyle