Страница: 1 | 2 | 3 |
Вопрос: CreateProcess,hProcess
Добавлено: 20.09.06 16:09
Автор вопроса: vall
Ответы
Всего ответов: 33
Номер ответа: 16
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #16
Добавлено: 21.09.06 16:36
Класс да, но заголовок уникален. Функция Enum вернёт ВСЕ окна данного потока - и скрытые в том числе. И если ты знаешь чётко, в каком порядке будут обходиться окна - тогда ладно. Но если не знаешь (как я например), говорить о том, что Enum надёжен сам по себе, наивно. Проверка нужна, хотя твоё дело, но спецы тебя не поймут.
Не буду учить, если будешь вести себя как я считаю нормальным. Модератор следит за оскорблениями, а не за обращениями. Ты себя повёл некрасиво, я тебя поправил. То что я не модератор не даёт тебе права затыкать мне рот. Если считаешь, что ты чист - дело твоё. И давай оставим эту тему. Всё равно никто никого не переубедит.
Номер ответа: 17
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #17
Добавлено: 21.09.06 17:24
Заголовок окна никогда не был уникальным параметром.
1. Он может изменяться в зависимости от способа запуска (отображать имя открытого документа, версию и т.п.)
2. Несколько экземпляров приложения могут иметь одинаковые заголовки главных окон.
Enum надежен сам по себе по определению. Другой вопрос - что ты хочешь найти. Если надо - в его CallBack можно встроить проверку на тот же Caption или какой другой признак, по ситуации. Про отсутсвие проверок никто слова не говорил, просто пример я накидал на скорую руку и шлифовать его не собирался. Кому надо, тот до ума доведет. Это все равно лучше чем поиск окна "по шаблону", хотя разница в любом случае невелика.
ЗЫ Рот тебе никто не затыкал, скорее напротив. Ты написал забавную штуку, я посмеялся. Обижаться на целых полтемы причин не вижу
Номер ответа: 18
Автор ответа:
vall
Вопросов: 6
Ответов: 31
Профиль | | #18
Добавлено: 21.09.06 17:26
Наверное проблема в следущем:
перед запуском металикса появляется окно предупреждения "cncKad License", что осталось до конца аренды столько-то дней(он у нас в аренде на два года). Надо нажать Окей и металикс запускается! Может это мешает ? Если да, то как
обойти это?
sleep (3000)
hwndApp = FindWindow(vbNullString, "cncKad License"
sleep (250)
PostMessage hwndApp, WM_COMMAND, 1, 0
sleep (1000)
ThreadID = pi.dwThreadId
sleep (250)
Dim WinCaption As String
EnumThreadWindows ThreadID, AddressOf EnumThreadWndProc, 0
MsgBox "Window " & hWndMain
SetForegroundWindow hWndMain
WinCaption = Space(256)
GetWindowText hWndMain, WinCaption, 256
MsgBox Trim(WinCaption)
Номер ответа: 19
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #19
Добавлено: 21.09.06 17:38
Честно говоря ты меня утомил. В данном случае речь идёт о заголовке окна, которое мы знаем. Мы знаем, что окно одно такое. Это не уникально по твоему?
Ёпт, невероятно. Наконец ты согласился со мной. Хвала всевышнему.
Я сегодня не в настроении просто. Уже написал, что не выспался, а невыспавшийся я злой. Ладно, давай мириться
vall:FindWindow(или EnumWindows)->EnumChildWindows->SendMessage
Номер ответа: 20
Автор ответа:
vall
Вопросов: 6
Ответов: 31
Профиль | | #20
Добавлено: 21.09.06 18:00
"cncKad License"-это и не "парент" и не "дочка",
это отдельное окно для предупреждения. А металикс
тоже отдельная программа. Раньше "cncKad License"-программы не было и металикс запускался сразу без предупреждения! Они как то связаны между собой,
но я не знаю как. Эта "cncKad License" считает дни и все!
Но окна явно не связаны "родственными узами"! Оно появится и сразу исчезает после "Ок", может поэтому
WinCaption и не отражается в MsgBox Trim(WinCaption)
Номер ответа: 21
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #21
Добавлено: 21.09.06 18:08
Да кто ж еще кого утомил )
Ты пост N6 читал? Перечитай пожалуйста. Мои посты ты, видно, тоже пропустил. Таких окон может быть сколько угодно, а может не быть вовсе из-за отличного от вшитого заголовка.
Я согласился? Когда это? Ничего подобного )
Я по прежнему не вижу смысла в переборе ВСЕХ окон похожего класса или поиска окна по заголовку, который регулярно меняется. Для проверки он еще пойдет, но я бы предпочел проверить как-нибудь понадежнее.
Если первое окно - сплэш, то, понятное дело, первое в енумерации брать нельзя. Либо по таймеру (с проверкой валидности окна), либо HCBT_CREATEWND
Номер ответа: 22
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #22
Добавлено: 21.09.06 18:13
как они связаны? Да metalix показывает окно лицензии. Если всё ок по нажатии кнопки ок он показывает главное окно. По-моему всё просто. Парент в данном случаем окно лицензии. Если оно есть MDI окно metalix'a, то сначала находишь главное окно металикса, потом энамишь дочерние до лицензионного, потом ему энамишь дочерние до Ок. Любые элементы управления окном есть дочерние окна для окна, в котором расположены. Поэтому и алго такой - кнопку нужно искать как дитё.
Делай так: сначала разберись с лицензионным окном, а потом в цикле и с паузой ищи металикса. Если же лицензионное есть MDI окошко металикса то главное окно находится сразу.
PS: опять неполное описание, поэтому куча догадок, и куча ответов
Номер ответа: 23
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #23
Добавлено: 21.09.06 18:20
LOL: да нет, согласился, что проверка нужна. а то Енам всё найдёт, с первого раза Непрофессиональный подход А проверок немного может быть. Если известен заголовок или часть - то это наиболее надёжный. Класс сложно но можно. Ещё можно поискать элементы управления в окне, если нету, значит не то. Вот и вся премудрость.
Что все перебирать - это да. Я там предлогал потом проверять PID, но раз уж есть апи EnumThreadWindows, то это проще. Заголовок меняется лишь частично. Это очень точный способ проверки. Так как в одном процессе как я понял не будет двух одинаковых главных окон.
И зачем таймер. Окно само не исчезнет, надо ему помогать. Как автоматизировать я написал.
Номер ответа: 24
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #24
Добавлено: 21.09.06 18:37
Патаму как про другие окна речи не было. Потому и говорил - Енам найдет, с первого раза. Ну, а раз там еще куча сплешей, то ваапще. Но из самого вопроса этого не следует.
ИМХО, первое дело идею подать. Проверки - детали реализации.
Номер ответа: 25
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #25
Добавлено: 21.09.06 18:45
Как видишь человеку нужен полностью рабочий код, так как он ен понимает что делать дальше. В этом проблема. А если бы например ты ему раньше посоветовал, когда сплэша не было, а щас сплэшь добавили, были бы баги. В этом всё дело. Надо прикидывать, что может измениться, и хоть от баг спастись, типа "главного окна не нашёл", сделать функционально независимую сложно.
Номер ответа: 26
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #26
Добавлено: 22.09.06 11:38
Я никогда на форуме не пишу полностью рабочий код. Этим занимаются единицы типа HACKER'а за WMZ. Я только могу подсказать в каком копать направлении. Не больше, не меньше.
2vall Поставь брейкпоинт и пошагово посмотри где у тебя что не так цепляет. Это несложно. И встрой проверку в EnumThreadWndProc. Если найдено нужное окно - возвращай 0, иначе возвращай 1 (продолжение енумерации).
Номер ответа: 27
Автор ответа:
vall
Вопросов: 6
Ответов: 31
Профиль | | #27
Добавлено: 22.09.06 12:50
Я сейчас на выходных 3 дня, но слежу внимательно!
После выходных начну все пробовать!
Результат сообщу обязательно!
Номер ответа: 28
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #28
Добавлено: 22.09.06 16:56
Просто подсказывать стоит детально, дабы не вводить в заблуждение. Показать схему алго с апи и упомянуть детали. Код вообще не понимаю зачем писать.
Вот теперь самое то описал. vall - теперь дело техники. Уж написать код надеюсь сможешь
Номер ответа: 29
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #29
Добавлено: 22.09.06 17:20
Подсказка без фрагмента кода - флуд. Как и наш с тобой двухстраничный диалог
И при чем тут EnumThreadWindows? Я говорил именно про EnumThreadWndProc. Проверку нужно проводить именно там.
Номер ответа: 30
Автор ответа:
Ra$cal
ICQ: 8068014
Вопросов: 18
Ответов: 817
Web-сайт:
Профиль | | #30
Добавлено: 22.09.06 21:16
Обработать получаемые хэндлы окон из функции EnumThreadWindows. Я ему уточнил. Так к чему вопрос?