![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
"Чужое" окно. [D7, XP]
MonoLife © (2009-10-14 16:52:00)Приветствую!
ShowWindow(HWND, SW_SHOWNORMAL);
SetForegroundWindow(HWND);
Как убедиться, что это окно окончательно "нарисовалось" над всеми остальными окнами на рабочем столе?
MonoLife (2009-10-15 16:44:00) [1]
> Юрий Зотов © (15.10.09 13:35) [8]
>
> Посмотрите функции API:
Спасибо за участие, Юрий, функции приму к сведению, hlp по ним имеется :).
Юрий Зотов (2009-10-15 13:36:00) [2]И CloseHanlle после всего этого, конечно (освободить хэндл процесса).
Юрий Зотов (2009-10-15 13:35:00) [3]Посмотрите функции API:
- GetWindowThreadProcessID (дает ID потока и процесса окна)
- OpenProcess (дает хэндл процесса)
- WaiForInputIdle (ждет, когда процесс выйдет на ожидание ввода юзера)
MonoLife (2009-10-14 18:43:00) [4]Нет, всё не так, как я думал:(
Пока требуемое окно свернуто на панели задач работает и
repeat
Sleep(1)
until GetForegroundWindow = HWND;
и
repeat
SwitchToThread
until GetForegroundWindow = HWND;
Но, если окно просто, позади других, то все равно, не успевает перерисоваться.
Юрий Зотов (2009-10-14 18:10:00) [5]А еще лучше так:
repeat
SwitchToThread
until GetForegroundWindow = HWND;
MonoLife (2009-10-14 18:06:00) [6]Благодарю. Работает!
Юрий Зотов (2009-10-14 17:55:00) [7]Попробуйте так:
repeat
Sleep(1)
until GetForegroundWindow = HWND;
MonoLife (2009-10-14 17:45:00) [8]Не получилось, однако.. Иду не тем путем?
Поясню, хочу сделать скриншот нужного окна.
0. ...
1. Нахожу окно по заголовку
2. ShowWindow(HWND, SW_SHOWNORMAL);
3. SetForegroundWindow(HWND);
4. GetWindowRect(HWND, Rect);
5. repeat
until GetForegroundWindow()=HWND;
6. ...Canvas.CopyRect(Rect, canvas, Rect);
7. Сохраняю битмэп.
Если нужное окно было позади других скрин делается раньше, чем окно "нарисовалось". Спасает только sleep() перед CopyRect(). Но вот интервал задержки неизвестно сколько делать, на разных компах по разному...
MonoLife (2009-10-14 17:10:00) [9]
> clickmaker © (14.10.09 17:00) [1]
спасиб!
clickmaker (2009-10-14 17:00:00) [10]GetForegroundWindow() = HWND