Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скопировать заголовок окна

Ответить
Настройки темы
[решено] Скопировать заголовок окна

Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


есть: 1800 обычных exe файлов. (0001.exe, 0002.exe, 0003.exe ...)
задача: скопировать из них заголовки и сделать список txt такого типа:
Код: Выделить весь код
0001 "заголовок окна файла 0001.exe" 
0002 "заголовок окна файла 0002.exe" 
0003 "заголовок окна файла 0003.exe" 
...

Отправлено: 01:18, 15-06-2010

 

Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
есть: 1800 обычных exe файлов. (0001.exe, 0002.exe, 0003.exe ...)
задача: скопировать из них заголовки »
уточнение, Эти программы уже запущенны все, что ли, ибо как иначе заголовки взять?
Или же нужно не заголовки, а именно названия файлов обрабатывать, а файлы лежать в одной директории?

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 12:18, 15-06-2010 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


файлы exe это установщики
файлы в одной директории.
для обработки названий файлов у меня есть програмулина

1. файлы естественно не запущенные. програмка сама должна их запускать
2. НУЖНЫ ЗАГОЛОВКИ (см. скриншот)

Отправлено: 12:52, 15-06-2010 | #3


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
1. файлы естественно не запущенные. програмка сама должна их запускать »
Картина еще не полная, думаю никто не сможет помочь пока не будет уточнено такое:
эти программы, после запуска,имеют всего лиш один тот же заголовок, неважно это первое окно или окна меняются, но заголовок один и тот же? И все что требуется, это такой алгоритм:
1. Запускаем наш созданный обработчик, и он берет названия всех файлов в указанной директории в массив.
2. Дальше по очереди запускает каждую програмку из списка массива, ждет появления окна, берет в этого окна заголовок, закрывает эту програмку и пишет строчку в файл с порядковым номером програмки - заголовком 1 окна при ее запуске - и название програмки?

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Отправлено: 13:46, 15-06-2010 | #4


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата beve:
эти программы, после запуска,имеют всего лиш один тот же заголовок, неважно это первое окно или окна меняются, но заголовок один и тот же?
не пойму. заголовки разные. но могут 2-3 попасться одинаковые.

вот для примера 2 разных exe-файла. (30 мб) http://multi-up.com/289485, http://multi-up.com/289486)

естественно заголовки (названия окон) разные. короче - вот список http://multi-up.com/289980
он в формате PDF. делался с этих же файлов, но делался косячно.
нужно сделать типа такого же заново.


Цитата beve:
И все что требуется, это такой алгоритм:
1. Запускаем наш созданный обработчик, и он берет названия всех файлов в указанной директории в массив.
2. Дальше по очереди запускает каждую програмку из списка массива, ждет появления окна, берет в этого окна заголовок, закрывает эту програмку и пишет строчку в файл с порядковым номером програмки - заголовком 1 окна при ее запуске - и название програмки?[/post]
подчеркнутое совсе не понял. от лексикона голова кипит.

нужно так.
Цитата beve:
1. Запускаем наш созданный обработчик, и он берет названия всех файлов в указанной директории в массив.
2. Дальше по очереди запускает каждую програмку из списка массива, ждет появления окна,
копирует название окна (на скриншоте выше обведено красным) и вписывает в txt файл строчку
Код: Выделить весь код
"название файла без расширения" "название заголовка"
и так 1800 раз, т.е. 1800 разных строчек с разными именами файлов и соотносящимися к ним заголовками

Отправлено: 14:57, 15-06-2010 | #5


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


тогда алгоритм такой.
1. делается список (массив) из содержимого целевой папки (1800 exe'шников)

2.1 запускается первая программа из списка, ловится окно, считывается заголовок в новый массив
2.2 запускается вторая, считывается заголовок в новый массив
...
2.1800 запускается 1800-ая, считывается заголовок в новый массив

3. из элементов массива с заголовками парсится нужная строка вида
Код: Выделить весь код
порядковый_номер   заголовок_окна   название_приложения
только есть одно но - это займет неимоверно кучу времени. а если это установщики собранные для msiexec.exe, которые не дает запускать несколько копий одновременно, то еще больше.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 16:33, 15-06-2010 | #6


Аватара для beve

Старожил


Сообщения: 307
Благодарности: 137

Профиль | Отправить PM | Цитировать


Вот, очень по-простому:
Код: Выделить весь код
$SearchDir=@ScriptDir ;папка с файлами *.exe
$txtFile=@ScriptDir&"\file.txt" ;название текстового файла для записи результата

$hSearch = FileFindFirstFile($SearchDir&"\*.exe")  ; Инициализация поиска
If $hSearch= -1 Then
    MsgBox(0, "Error", "No files/directories matched the search pattern")
    Exit
EndIf

;открытие текстового файла для записывания результата в конец файла
$h_txtFile = FileOpen($txtFile, 1)
If $h_txtFile = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

;цикл - пока существуют файлы в директории
While 1
    $file = FileFindNextFile($hSearch) ;ищем следующий файл
    If @error Then ExitLoop

    $PID=run($file, $SearchDir,@SW_MINIMIZE ) ;запускаем в свернутом режиме
    ProcessWait($PID) 
    Sleep(250) ;ожидание окна, чтобы лишний раз не гонять цикл, который ниже

;цикл для ожидания окна программы, будет работать пока не появится окно программы.
    do 
        $sTitle=_WinGetTitleByPID($PID)
        Sleep(50)
    Until $sTitle<>"" Or ProcessExists($PID)==0

    FileWriteLine($h_txtFile, StringTrimRight($file, 4)& " "& StringRegExpReplace($sTitle,"Установка программы '(.*?)'","\1") & @CRLF) ; запись в файл очередной строки, где будет имя файла без расширения, пробел, нужный заголовок.

    ProcessClose($PID)
    ProcessWaitClose($PID)
    $PID=""
    $sTitle=""
WEnd

; Close the search handle
FileClose($hSearch)
;Close the txt file
FileClose($h_txtFile)

;функция от http://creator-lab.ucoz.ru/load/3-1-0-19
Func _WinGetTitleByPID($iPID, $nArray = 1)
    If IsString($iPID) Then $iPID = ProcessExists($iPID)
    Local $aWList = WinList(), $sHold
    For $iCC = 1 To $aWList[0][0]
        If WinGetProcess($aWList[$iCC][1]) = $iPID And _
            BitAND(WinGetState($aWList[$iCC][1]), 2) Then
            If $nArray Then Return $aWList[$iCC][0]
            $sHold &= $aWList[$iCC][0] & Chr(1)
        EndIf
    Next
    If $sHold Then Return StringSplit(StringTrimRight($sHold, 1), Chr(1))
    Return SetError(1, 0, 0)
EndFunc
P.S. Если программы-установщики похожие, то будет работать, иначе, нужно будет еще дорабатывать. Но суть думаю понятна.

-------
Не в кількості знань полягає освіта, а в повному розумінні і вмілому використанні того, що знаєш.


Последний раз редактировалось beve, 15-06-2010 в 18:16. Причина: опечатка

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 15-06-2010 | #7


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


beve, СУПЕР! работает как надо! пойду запущу на все файлы

beve, а насколько эта задача сложная? сколько времени у Вас заняло написание такого скрипта?
хочется поближе познакомиться с автоит. он прост в изучении? или это такой же язык програмирования как c++ pascal delphi ?

т.е. html я изучать не мог. а вот через WYSIWYG странички делать получается легко.
то же самое и с автоит хочется узнать. можно ли писать простые скриптики одним махом руки?

Последний раз редактировалось shadowbat, 15-06-2010 в 19:53.


Отправлено: 19:43, 15-06-2010 | #8


Аватара для zonderz

Ветеран


Сообщения: 727
Благодарности: 150

Профиль | Отправить PM | Цитировать


Цитата shadowbat:
можно ли писать простые скриптики одним махом руки? »
можно и быстрее...
нужно научиться понимать логику (переменные, циклы и пр.) и не бояться самостоятельно читать справку (там, кстати, есть все для старта).
Удачи.

-------
MCP, MCSA, MCSE, разработчик программы CMDTools
http://forum.oszone.net/thread-170783.html

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:44, 15-06-2010 | #9


Старожил


Сообщения: 267
Благодарности: 8

Профиль | Отправить PM | Цитировать


Цитата zonderz:
нужно научиться понимать логику (переменные, циклы и пр.) и не бояться самостоятельно читать справку (там, кстати, есть все для старта).[/post]
спасибо! алгоритмизацию понимаю и в паскале лет 6 назад чего то делал. пойду справку полистаю

Отправлено: 22:43, 15-06-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Скопировать заголовок окна

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Как скопировать текст из окна в буфер обмена Str_ani_ck AutoIt 10 12-08-2009 11:03
[решено] Немогу в опере поменять заголовок окна ! FlatX007 AutoIt 5 07-05-2009 17:15
Интерфейс - Заголовок проводника Malfatto Microsoft Windows Vista 2 22-09-2008 21:46
запрос: программа, по шаблону окна (заголовок, тип) посылащая ему нажатия клавиш ShaddyR Программное обеспечение Windows 9 06-06-2008 18:40
[решено] Как скопировать текст из окна DOC. Ser6720 Хочу все знать 4 16-01-2008 08:31




 
Переход