Страница: 1 |
Страница: 1 |
Вопрос: Стартовое положение на экране
Добавлено: 18.04.05 14:59
Автор вопроса: AlexF
Привет всем! Такая проблема возникла:
Есть система со сдвоеным монитором. И программа стороннего разработчика. Так при запуске оной, она стартует как раз посредине двух экранов. При перетаскивании на один экран настроики не запоминаются. Они прошиты в программе. Вопрос:
как заставить окна стартовать как мне надо? Проблема усугубляется тем, что нет MDI формы.
Подскажите код если есть у кого, plz.
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #1
Добавлено: 18.04.05 15:07
Кода нет, но есть предложение: Висит програма и отлавливает хендлы всех нововсплывающих окон. Как только появися новый (придётся все запоминать) она просто перетаскивает его, кажется API фунуция SetWindowPlacement.
Только могут быть глюки так как она требует точно указать размер окна, но ничего страшного, Он получается др. АПИ функцией - GetWindowRect что ли не помню
ну и вроде всё. Щас если мож код не кинет его, дык напишем
Номер ответа: 2
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #2
Добавлено: 18.04.05 15:10
Нафиг следить за всеми?
Просто сделать ярлык для этой проги, но пусть этот ярлык указывает на твою прогу, которая
WaitForInputIdle
EnumThreadWindows
MoveWindow
CloseHandle
Номер ответа: 3
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #3
Добавлено: 18.04.05 15:21
2GSerg
Слушай, спасибо ты меня носом ткнул А сожет так:
получать заголовки или лучше искать окно с заголовкам через FindWindow и когда хендл есть(а значит и окно есть) тогда и двигать двигать?
Ещё может быть баг если прога запускается повторно. Тогда делаем таймер примерно со следующим содержанием:
таймер_таймер()
дим Б, как логическое
если (не Б) и окно_есть то
Б=истина
двигать окно
енд иф
если Б и окна_нет то
Б=ложь
енд иф
енд саб;
таким образом будем двигать окно только когда оно появится на экране. Можно сделать перед двигом Sleep 100
Номер ответа: 4
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #4
Добавлено: 18.04.05 15:33
Ну если очень хочется следить, то ставь хук WH_CBT, будешь получать сообщения о создании новых окон в системе.
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 18.04.05 15:42
Ну, можно и мне кажется что всё таки можно попроще. Нафик хук? по-моему то подобие кода что я написал должно работать
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 18.04.05 15:47
Ну, будет работать. Висеть и работать, работать, работать... А зачем, если требуется единовременное действие?
Номер ответа: 7
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #7
Добавлено: 18.04.05 16:38
Ты прав, действие нужно единовременное, что я и пытался организовать в вышеприведённом подобии кода
это на случай если прога запустится повторно. Всё равно придётся таймер гонять по кругу. Если только сделать так чтобы прога закрылась после первого запуска проги, дык тоже не проблема.
Номер ответа: 8
Автор ответа:
AlexF
Вопросов: 20
Ответов: 113
Профиль | | #8
Добавлено: 18.04.05 22:38
Eto vse verno. Problema v tom, chto zagolovki menyayutsya. I ih ochen'-ochen' mnogo. Vopros, kak otsledit' vse okna otnosyasheesia k programme.
Номер ответа: 9
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #9
Добавлено: 18.04.05 22:41
Тогда надо или действовать по сценарию #1 или узнавать имя экзешника каждого окна и двигать если он будет тем самым. Как сделать... хм.. хороший вопрос. А где все??? Эээй, ребята, как такое замутить? Мне тоже интерестно!
Наверное GSerg изначально был прав