Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Изменение положения окна программы

41K
30 июля 2008 года
IvanJulai
2 / / 30.07.2008
Суть в следующем, с помощью некой функции изменить координаты окна запущенной программы, либо запустить программу с помощию некой функции, чтоб окно отобразилось в конкретном месте экрана. Сейчас использую ShellExecute, но она не позиционирует окна, в связи с чем, два запушенные окна программы, закрывают друг друга и проходится их растаскивать...:(
3.7K
30 июля 2008 года
0nni
326 / / 24.06.2008
А запускается "ваша" программа?
Если да, перед запуском найдите предыдущий(е) экземпляр(ы) окна через FindWindow() или EnumWindows(), а там либо просто поменять размер, либо сообщения посылать, вобщем вариантов много.

Хотя возможно есть и более изящные варианты :rolleyes:
1.9K
30 июля 2008 года
max_dark
256 / / 11.11.2005
Можно попробовать запускать через CreateProcess:
гдето на форуме обсуждался вопрос как найти окно приложения по ID процесса
А далее MoveWindow для установки размера и положения
14
31 июля 2008 года
Phodopus
3.3K / / 19.06.2008
можно через EnumThreadWindows() по полученному при CreateProcess() ThreadId
41K
31 июля 2008 года
IvanJulai
2 / / 30.07.2008
Моя программа запускает 2 чужих, вот эти программы и нужно правильно разместить на экране. Я тет нарыл SetWindowPos, но она использует HWND hWnd - дискриптор окна. Я так понимаю нужна на него ссылка, вт и не знаю как ее получить?
Примерчик бы... Мне говорили, что можно ее получить по заголовку окна?
3.7K
31 июля 2008 года
0nni
326 / / 24.06.2008
Цитата: IvanJulai
как ее получить?


Лучше конечно через PID (Process ID) как рекомендовал max_dark

Цитата: IvanJulai
получить по заголовку


Лучше искать по классу окна Через EnumWindows или GetWindow хотя ими же можно и заголовок найти, но если, однако если у вас будет запущен например WinWord и ваша программа тоже запускает его, то первым в список попадет Уже запущенный ворд, отсюда вывод - ищем с конца =)

Код:
function FindLastWindow(const sClassName : string) : HWND;
var buff : array[0..255] of char;
begin
  result := GetWindow(GetDesktopWindow, GW_CHILD);
  result := GetWindow(result, GW_HWNDLAST);
  repeat
    GetClassName(result, buff, 256);//Получаем класс окна
      if buff = sClassName then exit;
    result := GetWindow(result, GW_HWNDPREV);
  until result = 0;
end;


Казалось бы все, ондако не факт что сразу после запуска программы появится окно нужного нам класс =( поэтому нужно таки запускать через CreateProcess() и проверять - является ли это окно - окном нашего процесса через GetWindowThreadProcessID(), если нет, нужно немного подождать и еще раз вызвать FindLastWindow()... поедие правильно но в процессах я пока ноль, так что экспериментируйте.
1.9K
31 июля 2008 года
max_dark
256 / / 11.11.2005
В общем, нарисовывается следующий сценарий:
  • CreateProcess
  • WaitForInputIdle
  • EnumThreadWindows
  • MoveWindow
P.S.:[QUOTE=Win32 SDK]The WaitForInputIdle function waits until the given process is waiting for user input with no input pending, or until the time-out interval has elapsed.

The WaitForInputIdle function only works with GUI applications. If a console application calls the function, it returns immediately, with no wait.

DWORD WaitForInputIdle(
HANDLE hProcess, // handle to process
DWORD dwMilliseconds // time-out interval in milliseconds
);


Parameters:
hProcess

Identifies the process.
dwMilliseconds
Specifies the time-out interval, in milliseconds. If dwMilliseconds is INFINITE, the function does not return until the process is idle.[/QUOTE]
3.7K
31 июля 2008 года
0nni
326 / / 24.06.2008
Цитата: max_dark

WaitForInputIdle


ого я думал такого нет?!
Нда, буду на ночь справочник читать

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог