Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

то работает, то не работает. Не объясните почему? [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]

может нажатия клавиш не все доходят? или не в той последовательности?


Наверх

Титульная страница Поиск, карта сайта Написать письмо