|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Собственно, пока возился с Shell и ShellExecute, привел след. пример где я неявно использую свойство Shell (VB6) задерживать возврат результата. 14519838 Дмитрий77 Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Фишка в чем. hwndScreen -'это окно заставки И доступно оно будет (<> 0) только когда форма заставки загрузится (в приложении screen.exe) Когда я эту фигню делал, меня занимал вопрос: А вдруг я не смогу поймать hwndScreen = FindMyWindow(3) ? Ведь я только запустил screen.exe и окно могло НЕ УСПЕТЬ запуститься. И честно готовился чего-нибудь дописывать. В итоге все оказалось OK. Я об этом забыл. ... Т.е. я неявно использовал свойство Shell (VB6) не выходить до загрузки формы. Так вот я обнаружил что это иногда может не сработать. Не сработало один раз на Notebook на Win7 при старте системы, когда запускается много дряни: всякие авиры, утилиты от Toshiba, вай-фай еще ищет и т.д. - ну т.е. идет некая череда обычных подвисаний, данный комп я от дряни в автозагрузке почистить поленился. А моя прога тоже стартует из автозагрузки (Run в реестре под текущим юзером). Т.е. возникла ситуация, когда Код: vbnet 1. 2.
окна то и не нашла (а Shell-VB6 уже вышел). На что заменить этот код, чтоб находил окно с гарантией? Может как-то так? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Или есть получше варианты? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 17:23 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Таймер. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 18:03 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
AntonariyТаймер. Таймер в Form_Load (основного приложения) не работает. А заставка (отдельное приложение) запускается именно на время Form_Load основного. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 18:08 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
И найти hwndScreen надо именно в начале Form_Load (чтоб было куда скидывать progress загрузки). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 18:10 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Ну тогда как и сделал. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 18:12 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
AntonariyНу тогда как и сделал. В смысле добавить вот это (еще не сделал): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
?? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 18:17 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Да. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 18:29 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Ну, вот так пока сделал (аккуратно): Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Блин, название переменной my_timeout не очень удачное. Посмотрю, вылезет ли где какая проблема или нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 20:16 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Не надо DoEvents, этот цикл будет нормально так подгружать процессор, еще более отсрочивая запуск искомой проги. Нужно вместо DoEvents Sleep воткнуть, все равно форма еще не показалась, пользовательских действий обрабатывать не требуется. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 20:34 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Ну и воткнуть после, а не до FindMyWindow. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 20:36 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Antonariy, AntonariySleep воткнуть, все равно форма еще не показалась, пользовательских действий обрабатывать не требуется. ... Ну и воткнуть после, а не до FindMyWindow. Ты про какой Sleep говоришь? Вот так? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Со Sleep у меня были какие-то непонятки в прошлом, поэтому я его избегаю без крайней необходимости. Я местами пользуюсь вот этим вариантом: 9304794 Но ты ж понимаешь, что это тот же самый DoEvent. AntonariyНе надо DoEvents, этот цикл будет нормально так подгружать процессор, еще более отсрочивая запуск искомой проги. Дык DoEvents вроде затем и нужен, чтоб цикл процессор не грузил. И полная загрузка от DoEvents ложная, обсуждали вроде. Ну можно наверно DoEvents в конец цикла засунуть: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Все равно в 99,9% он выйдет после первого FindMyWindow, чего зря DoEvents запускать всякий раз. В принципе случайный незапуск Screen.exe не является проблемой. Ну не запустится, не будет ProgressBar, прога то по любому запустится. Проблема будет если он НЕУПРАВЛЯЕМО запустился, т.е. прога его запустила, но отследить hwndScreen не сумела. Кто этот Screen закрывать будет? Ну и на самом деле у меня чуть ошибка в логике. Для Screen.exe прописано в нем самом "1 экземпляр программы". Если вдруг предыдущий Screen.exe не завершился (напр. при закрытии приложения за счет эффекта слайдера для красоты он выгружается на 1-2 сек. позже основного приложения), то он и не запустится. Т.е. наличие файла Код: vbnet 1.
еще не гарантирует что мы его запустили. А 15 секунд в этом случае висеть мы будем. А вообще если честно я не уверен, что там проблема была с "ранним" выходом из Shell. Вполне возможно что Form_Load тупо подвис из-за большого к-ва грузимой при старте NoteBook мути и прочих служб. Высечь это еще раз я не сумел. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2013, 21:35 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Дмитрий77Или есть получше варианты? Думаю, получше вариант будет следующий: 1. На screen.exe помещаем таймер, который будет с периодичностью, скажем в 0,5 сек отслеживать состояние определенного значения реестра. (если равняется "1" - то закрываться) 2. Прямо перед запуском screen.exe основная прога должна прописать значение реестра "0" 3. Когда прога загрузилась, она должна прописать значение "1" ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2013, 09:56 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Дык DoEvents вроде затем и нужен, чтоб цикл процессор не грузил.DoEvents нужен для того, чтобы включить вызов оконных процедур в цикл. Цикл не перестает работать, а начинает часть времени выполнять иную работу помимо основных инструкций, при этом снижая суммарную нагрузку очень незначительно. А Sleep полностью прекращает работу потока и цикла, и нагрузки на процессор нет вообще. Форма "висит". Но так как ее не видно, это не имеет значения. И полная загрузка от DoEvents ложная, обсуждали вроде.Я не сказал, что полная, но она заметная по сравнению с ее отсутствием. за счет эффекта слайдера для красоты он выгружается на 1-2 сек. позже основного приложенияПорнография. Бесят такие программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2013, 10:50 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
AntonariySleep. Иногда проще с тобой согласиться, чем продолжать спор. Поставил пока Код: vbnet 1. 2. 3. 4. 5.
Посмотрю не вылезет ли чего. Скорее ничего, т.к. в 99,9% (а может быть в 100% -я ж не знаю чего там было) случаев цикл выйдет выше в первой итерации Antonariyза счет эффекта слайдера для красоты он выгружается на 1-2 сек. позже основного приложенияПорнография. Бесят такие программы. Меня например бесит все что выходит за рамки классического интерфейса XP. А юзера например бесит когда ему 5-7 секунд вообще ничего не показывают. В крайнем случае (если будут претензии) сделать галку "Эффект слайдера при загрузке/выгрузке форм в настройках." P.S. Под слайдером я понимаю следующий код: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
donpaulsДмитрий77Или есть получше варианты? Думаю, получше вариант будет следующий: 1. На screen.exe помещаем таймер, который ...отслеживать состояние определенного значения реестра. ... Не нравится мне эта идея. Очередной наворот типа "детский сад". Напоминает пуляние файлами. P.S. Пуляние SendMessage мне нравится куда больше. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2013, 17:11 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Дмитрий77 P.S. Под слайдером я понимаю следующий код:Тоже этим баловался. Избавился на следующий день. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2013, 23:43 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
AntonariyТоже этим баловался. Избавился на следующий день. Для окон типа About и для заставки вполне приемлимо. Еще эта штука позволяет вырезать из формы куски по маске заданного цвета, ну т.е. делать скин это называется кажется. Но на этот момент особо закладываться не стал, потому как оно плохо дружит с 32-битными тенями. Хотел сделать заставку, вырезав людей по контуру (из фотографии), но задолбался вырезать эти контуры по клеточкам (там обязательно надо делать bmp, в jpg фон смазывается). В итоге хоть и воспользовался идеей, но сделал просто скругленный прямоугольник с надписью, а большую иконку пришлось брать 256 цветов а не 32-бит (хорошо хоть она очень простая и 256 цветов от 32-бит на глаз почти не отличается). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2013, 00:29 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Дмитрий, я не советчик в более удобном способе, но у меня надежный гарант socket. Стукнуть и передать значение "я живой" не проблема (даже через интернет) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2013, 15:48 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
sleep, doevent - так далеко не зайдешь. Есть таймера. Делай свои регистры, назначай проверочные статусы, режимы и проверяй. На VB6 это очень удобно из-за ctrl+breack чтоб отладить состояние. Если бы такого не было, лучше уж c++ ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2013, 15:52 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Андрей159, Я про эту тему: Обмен сообщениями между двумя СВОИМИ приложениями помню, хотя пока не разбирался. Я не привык бросать текущую незавершенную работу ради изучения новых (для меня) технологий или например осваивания новых программных систем типа .Net Конкретно в этой теме цена вопроса 2 копейки. И DoEvents вполне сошел бы чтоб не тратить время. Antonariy таки убедил меня поставить Sleep. Я поставил и забил. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2013, 17:46 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Я тоже когда-то так думал. И сложно было разобраться самому. С трех интересующих вопросов, мог один подойти. Остальное нужно было самому. Но со временем я подошел к тому что, то что я делаю оказалось для меня мало и нужно было изучать и делать новые модули. А в помощь мне стало создание и оптимизация модулей. Сейчас все важные модули находятся в одной папке. К любому проекту стоит только подключить этот модуль или класс. Форма+2 Socket+таймер+глоб.модуль обеспечивает сейчас все: все удаленные работы с папками и файлами: копирование/перемещение/создание/удаление/сравнение по хеш, по размеру. Своими протоколами отдалено могу управлять чем задумал, получать что задумал. Сейчас изучаю протокол 2P2. Он прост, но его так запутали чтоб мы все думали что это почти не возможно. А с таймерами началось очень давно. Я сниму на видео одну программку которая уже закончена и имеет товарный вид (постараюсь выложить) и ты сам поймешь нужно тебе идти вперед или как-то попробовать обойтись без этого. В таймерах главное глобальные переменные и static. Меняешь значение (условно выдуманные режимы) и проверяешь их в таймере на условие. Все. Если режим=1 и задание=выполнено тогда режим=2, исполнить процедуру№2, выход из таймера. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2013, 18:07 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Дмитрий77Не сработало один раз на Notebook на Win7 при старте системы, когда запускается много дряниА моя прога тоже стартует из автозагрузки (Run в реестре под текущим юзером). Т.е. возникла ситуация, когда Код: vbnet 1. 2.
окна то и не нашла (а Shell-VB6 уже вышел). На что заменить этот код, чтоб находил окно с гарантией? Воспроизвел. Напрасны все эти споры. Ситуация которую здесь пытался лечить мифическая, ни одна из "затычек" не сработает за ненадобностью. При загрузке компа может произойти следующее. Заставка быстро загрузится и покажет пустой прогрессбар (в заставке нет ничего сложного). А вот загрузка основной проги может тут же стопорнуть (секунд на 5-10) - потому как она завязана на аудиокарту, на сеть (Wi-FI) и т.д. да и в принципе при загрузке компа такое поведение вполне типично. Прогрессбар начнет ползти вверх через эти 5-10 сек - просто надо было подождать. А hwnd она находит по любому т.к. VB-6 Shell держит 100%. Собственно это паника была с моей стороны - не более. Надеюсь я не ошибся на этот раз. А этот код просто вреден: Код: vbnet 1. 2.
При отсутствии screen.exe и в ряде других ситуаций он тупо стопорнет загрузку проги на 15 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2013, 09:24 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Да, прикольно. Сначала запустить экшешник, а потом искать куда он улетел. Типа чтоб жизнь малиной не казалась. Я искал хэндлы программ чтобы установить контекст в своей апликухе. Ну, типа над каким она окном - такие типы файлов актуальны и такие инструменты дозволены. И как-то не прельстило это геморройное занятие, а оно вот как может быть оказывается. Самому себе можно подлянку устроить. :) Вырезать по пикселам не обязательно. Обычно выделяете, потом в индекс и там чистите уже. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2013, 15:00 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
Забыл давно как это делается, но кажется наоборот. Типа ваш Screen.exe как более легкое приложение сразу покажет форму, на ней кого-нибудь и запустит основное приложение. Затем будет искать его хэндл, как найдет начнет слать мессаги. Теоретически приложение должно отвечать, а запускатель показывать что происходит. Когда основное приложение загружено оно сообщает наконец самое главное и запускатель выходит из цикла ожидания. Это все геморрой без овладения процессами в ВБ, поэтому я не парился, а только юзал запускатель как затычку от повторных запусков жирной апликухи: Sub Main() On Error GoTo start AppActivate "My App" Exit Sub start: Call Shell("C:\Program Files\MyApp\myapp.exe", vbNormalFocus) End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2013, 15:13 |
|
Запустить приложение и С ГАРАНТИЕЙ дождаться появление Form1.hwnd этого приложения.
|
|||
---|---|---|---|
#18+
debloggerСначала запустить экшешник, а потом искать куда он улетел. А что, есть другие варианты? Заметь, что я ищу не экшешник(процесс), который я запустил, а ОКНО, которое этот ПРОЦЕСС запустил. Это не одно и то же. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2013, 05:26 |
|
|
start [/forum/topic.php?fid=60&fpage=52&tid=2156730]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 281ms |
total: | 423ms |
0 / 0 |