Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: CreateProcess,hProcess Добавлено: 20.09.06 16:09  

Автор вопроса:  vall

Ответить

  Ответы Всего ответов: 33  

Номер ответа: 16
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #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", что осталось до конца аренды столько-то дней(он у нас в аренде на два года). Надо нажать Окей и металикс запускается! Может это мешает ? Если да, то как
обойти это?


RetVal = CreateProcessA(vbNullString, "C:\Metalix\cncKad2006.85\gkadw.exe", ByVal 0&, ByVal 0&, 0, 0, ByVal 0&, vbNullString, si, pi)

 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-сайт: www.rascalspb.narod.ru
 Профиль | | #19
Добавлено: 21.09.06 17:38
Заголовок окна никогда не был уникальным параметром

Честно говоря ты меня утомил. В данном случае речь идёт о заголовке окна, которое мы знаем. Мы знаем, что окно одно такое. Это не уникально по твоему?
Если надо - в его CallBack можно встроить проверку на тот же Caption

Ёпт, невероятно. Наконец ты согласился со мной. Хвала всевышнему.
Я сегодня не в настроении просто. Уже написал, что не выспался, а невыспавшийся я злой. Ладно, давай мириться ;)
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-сайт: www.rascalspb.narod.ru
 Профиль | | #22
Добавлено: 21.09.06 18:13
как они связаны? Да metalix показывает окно лицензии. Если всё ок по нажатии кнопки ок он показывает главное окно. По-моему всё просто. Парент в данном случаем окно лицензии. Если оно есть MDI окно metalix'a, то сначала находишь главное окно металикса, потом энамишь дочерние до лицензионного, потом ему энамишь дочерние до Ок. Любые элементы управления окном есть дочерние окна для окна, в котором расположены. Поэтому и алго такой - кнопку нужно искать как дитё.
Делай так: сначала разберись с лицензионным окном, а потом в цикле и с паузой ищи металикса. Если же лицензионное есть MDI окошко металикса то главное окно находится сразу.
PS: опять неполное описание, поэтому куча догадок, и куча ответов

Ответить

Номер ответа: 23
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #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-сайт: www.rascalspb.narod.ru
 Профиль | | #28
Добавлено: 22.09.06 16:56
Просто подсказывать стоит детально, дабы не вводить в заблуждение. Показать схему алго с апи и упомянуть детали. Код вообще не понимаю зачем писать.
И встрой проверку в EnumThreadWndProc.
Гы, он про EnumThreadWindows, не перепутай.
Вот теперь самое то описал. vall - теперь дело техники. Уж написать код надеюсь сможешь

Ответить

Номер ответа: 29
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #29 Добавлено: 22.09.06 17:20
Подсказка без фрагмента кода - флуд. Как и наш с тобой двухстраничный диалог ;)
Гы, он про EnumThreadWindows, не перепутай.

И при чем тут EnumThreadWindows? Я говорил именно про EnumThreadWndProc. Проверку нужно проводить именно там.

Ответить

Номер ответа: 30
Автор ответа:
 Ra$cal



ICQ: 8068014 

Вопросов: 18
Ответов: 817
 Web-сайт: www.rascalspb.narod.ru
 Профиль | | #30
Добавлено: 22.09.06 21:16
Обработать получаемые хэндлы окон из функции EnumThreadWindows. Я ему уточнил. Так к чему вопрос?

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам