![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
то работает, то не работает. Не объясните почему? [XP]
Vlad Oshin © (2008-07-22 13:05:00)Иммитирует нажатие принтскрина и вставку в paint.
Pain запускается, иногда в него вставляется, иногда нет, но в любом случае он сворачивается(?). В чем мб дело?
procedure TForm3.Button1Click(Sender: TObject);
var
H: hWnd;
PI: TProcessInformation;
SI: TStartupInfo;
procedure KDown(Key: byte); begin keybd_event(Key, 0, 0, 0); end;
procedure KUp(Key: byte); begin keybd_event(Key, 0, KEYEVENTF_KEYUP, 0); end;
begin
KDown(VK_SNAPSHOT);
KUp(VK_SNAPSHOT);
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
if CreateProcess(nil, 'mspaint.exe', nil, nil, False, 0, nil, nil, SI, PI) then
begin
WaitForInputIdle(PI.hProcess, INFINITE);
sleep(500); //все равно на всякий случай подождем
H := FindWindow(nil, 'Безымянный - Paint');
if GetLastError<>0 then ShowMessage(SysErrorMessage(GetLastError));
SwitchToThisWindow(H,false); //>=Win2000, у меня ХР
if GetLastError<>0 then ShowMessage(SysErrorMessage(GetLastError));
sleep(100); //на всякий случай подождем
KDown(VK_CONTROL);
KDown(ord('V'));
// KUp(ord('V'));
KUp(VK_CONTROL);
end;
end;
Anatoly Podgoretsky (2008-07-22 16:02:00) [1]Ну ты же говорил, что
> да можно, так и делаю, а это просто упражняюсь
А так или вручную, или копировать RECT
Vlad Oshin (2008-07-22 15:35:00) [2]
> файл лишний.
тоже верно
оставим, как есть.
Anatoly Podgoretsky (2008-07-22 15:23:00) [3]Это не умно, файл лишний.
Vlad Oshin (2008-07-22 14:53:00) [4]
> Я бы делал снимок экрана ручками, сохранял во временный
> файл и паинту уже говорил его загрузить.
да, наверное, так умнее все же
@!!ex (2008-07-22 14:50:00) [5]Я бы делал снимок экрана ручками, сохранял во временный файл и паинту уже говорил его загрузить.
clickmaker (2008-07-22 14:24:00) [6]я бы искал по имени класса - MSPaintApp
Anatoly Podgoretsky (2008-07-22 13:41:00) [7]> Vlad Oshin (22.07.2008 13:35:05) [5]
Ну это меняет дело.
Vlad Oshin (2008-07-22 13:35:00) [8]
> А нафига это, что нельзя скопировать нужный RECT
да можно, так и делаю, а это просто упражняюсь
хотя можно и на ctrl+PrintScreen повесить.
Обычно дергают экран, потом что-то запускают на редактирование и туда вставляют.
Vlad Oshin (2008-07-22 13:30:00) [9]
> SwitchToThisWindow(H, true);
спасибо.
что заметил:
WaitForInputIdle(PI.hProcess, INFINITE);
sleep(500); //все равно на всякий случай подождем
если sleep(200), например, то пишет уже "Недопустимый дескриптор окна."
значит, не успевает создаться окно
WaitForInputIdle(PI.hProcess, INFINITE); получается не работает?
Anatoly Podgoretsky (2008-07-22 13:28:00) [10]> Vlad Oshin (22.07.2008 13:05:00) [0]
А нафига это, что нельзя скопировать нужный RECT
Rouse_ (2008-07-22 13:23:00) [11]
SwitchToThisWindow(H, true);
brother (2008-07-22 13:16:00) [12]может нажатия клавиш не все доходят? или не в той последовательности?