Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2013, 13:04   #1
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
Вопрос размер стороннего окна

Доброго уважаемые дамы и господа.
Прошу помощи...

Пытаюсь написать программу, которая изменяет параметры сторонней проги.
Буду откровенным - WorldOfTanks мучаю (далее WoT)

Суть в чём - хочу программно изменить параметры окна.
частично это получается, частично - нет.

Код:
SetWindowLong(hwnd,GWL_STYLE,336265216); //цифра взята методом проб и ошибок
SetWindowPos(hwnd,HWND_TOP,StrToInt(Edit3.Text),StrToInt(Edit4.Text),StrToInt(Edit1.Text),StrToInt(Edit2.Text),SWP_FRAMECHANGED or SWP_ShowWindow);
Окно принимает нужные параметры и размер, если он более 800*800.
Если запустить WoT в обычном оконном режиме - размер мышкой можно так же довести лишь до 800*800 (не меньше),
НО
если взять окно за заголовок и отвести к верхней границе экрана, то окно автоматически расширяется (или сужается) до границ рабочей области (стандартная ф-ция Win, аналогично нажатию Win+стрелка вверх)
При этом размер окна выставляется вне зависимости от ограничений приложения. При моём ноутбучном разрешении 1366*768 окно получает размер 1366*738 (что полностью соответствует рабочей области при панели пуска внизу или наверху).

Я подумал, что такого же результата добьюсь при выполнении
Код:
ShowWindow(HWND,SW_SHOWMAXIMIZED);
Ан нет...
Да, окно получает положение в 0,0, но размер при этом (опять же на моём ноуте) 1366*800

Не могу понять...
Если Винда стандартными средствами выполняет подобные действия, то, значит, они осуществимы!
Тогда в чём затык ?!
Пните пож-та в нужном направлении...

Вторая проблема - полностью запретить сворачивание окна WoT даже при нажатии Win+D.
Подобное видел для LineAge, но там прога висела в трее (полагаю, что она в цикле через равные промежутки времени искала окно и применяла к нему параметры) - "это не наш метод", зажирать системные ресурсы считаю паршивым занятием.
Мб есть способ перехватывать события стороннего окна? (если уж вдруг нет параметра полного запрета сворачивания)

Третья - при применении вышенаписанного кода, если свернуть окно WoT в панель и развернуть его, то оно "съезжает" и при каждом свернул-развернул продолжает ехать в неизвестном направлении (при этом не меняя размер).
Тоже не пойму в чём проблема...

Последний раз редактировалось Chugun; 26.12.2013 в 13:10.
Chugun вне форума Ответить с цитированием
Старый 26.12.2013, 13:47   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
Если Винда стандартными средствами выполняет подобные действия, то, значит, они осуществимы!
Тогда в чём затык ?!
А вот тут облом. НЕ винда отвечает за это в случае игр и прочих программ с прибабахом, собственным движком, блекджеком и разработчиками...

В случае игр, всю работу над окном осуществляет игровой движок(его часть), обработывая пользовательские действия с мыши и прочих девайсов.
Человек_Борща вне форума Ответить с цитированием
Старый 26.12.2013, 14:06   #3
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
А вот тут облом. НЕ винда отвечает за это в случае игр и прочих программ с прибабахом, собственным движком, блекджеком и разработчиками...

В случае игр, всю работу над окном осуществляет игровой движок(его часть), обработывая пользовательские действия с мыши и прочих девайсов.
не понимаю...
в любом случае окну посылается событие, которое обрабатывается
как понять что за событие посылается и как его продублировать?
допустим я просто уберу рамку (без применения размера и положения), а потом отослать это событие - в этом случае, имхо, окно растянется по рабочей области
Chugun вне форума Ответить с цитированием
Старый 26.12.2013, 14:10   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Цитата:
в любом случае окну посылается событие, которое обрабатывается
Ничего не посылается. В случае игр, мышь и прочее игровое оборудование работает в обход винды, дабы увеличить отклик, точнее так с ним работает игра.

Да, можно програмно изменить размер окна, НО движок игры об этом не узнает, т.к. физически мышь не сдвинулась, не изменит размер рабочей области, и вы получите 800х600 при 1024х868.
Хотя и не всегда так. Где-то разрабы замарачиваютя модобным гемороем собственных " в обход винды" методов, а где-то опираются на них.

Последний раз редактировалось Человек_Борща; 26.12.2013 в 14:25.
Человек_Борща вне форума Ответить с цитированием
Старый 26.12.2013, 19:50   #5
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Ничего не посылается. В случае игр, мышь и прочее игровое оборудование работает в обход винды, дабы увеличить отклик, точнее так с ним работает игра.

Да, можно програмно изменить размер окна, НО движок игры об этом не узнает, т.к. физически мышь не сдвинулась, не изменит размер рабочей области, и вы получите 800х600 при 1024х868.
Хотя и не всегда так. Где-то разрабы замарачиваютя модобным гемороем собственных " в обход винды" методов, а где-то опираются на них.
спасибо за Ваше терпение и объяснение.

нашёл способ развернуть окно без рамки на рабочую область, даже если она меньше 800

но, да, Вы правы, движок не получает этих параметров и после сворачивания в панель, последующего разворачивания окно принимает исходное положение, хоть и остаётся без рамки...

попробую ещё пошаманить...
Chugun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Размер окна программы Kambalin Помощь студентам 4 29.03.2013 05:37
Размер окна в С++ Krezol Помощь студентам 1 02.04.2010 20:53
Пропорциональный размер окна nazavrik Win Api 1 25.11.2009 01:28
Размер окна t3ns0r Общие вопросы C/C++ 2 29.11.2008 21:22
Размер окна в зависимости от размера окна Reverent JavaScript, Ajax 1 02.02.2008 15:49