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

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

Процессорное время [D7, 2000]


Димыч ©   (2006-10-02 14:16:00) 

Вот в чем проблма: я управляю из своей программы чужой, отсылая ей сообщений о якобы нажатых клавишах клавиатуры, программа реагирует но иногда не успевает т.к. ей нужно сделать свои сложные действия. Как бы передать на время чужой программе процессорное время (на секунду или две)?


Leonid Troyanovsky   (2006-10-02 15:07:00) [1]


> Сергей М. ©   (02.10.06 14:51) [8]

> Но мне непонятен смысл вызова GetWindowThreadProcessId и
> AttachThreadInput ..


Имеет смысл, например, при SetFocus.
Или, например, для SetKeyboardState.

--
Regards, LVT.


Leonid Troyanovsky   (2006-10-02 15:05:00) [2]


> Димыч ©   (02.10.06 14:31) [7]

> если есть способ лучше буду рад узнать


Если речь о посылке именно о char, т.е., например, #80,
то можно попробывать
SendMessage(h, WM_CHAR, Ord('P'), 0);
в сочетании с WaitForInputIdle.

--
Regards, LVT.


Leonid Troyanovsky   (2006-10-02 15:00:00) [3]


> Сергей М. ©   (02.10.06 14:25) [6]

> Первым параметром д.б. хэндл окна


Дык он и есть хендл.

--
Regards, LVT.


Сергей М.   (2006-10-02 14:51:00) [4]

Э-э-э .. пардон, H тут и есть хэндл окна.

Но мне непонятен смысл вызова GetWindowThreadProcessId и AttachThreadInput ..


Димыч   (2006-10-02 14:31:00) [5]


> > PostMessage(H, WM_KEYDOWN , 83, 0);
>
>
> > PostMessage(H, WM_KEYUP   , 83, 0);
>
>
> Галиматья.


если есть способ лучше буду рад узнать


Сергей М.   (2006-10-02 14:25:00) [6]

Первым параметром д.б. хэндл окна


Сергей М.   (2006-10-02 14:23:00) [7]


> PostMessage(H, WM_KEYDOWN , 83, 0);


> PostMessage(H, WM_KEYUP   , 83, 0);


Галиматья.


Димыч   (2006-10-02 14:23:00) [8]

Поясни если не трудно, как пользоваться этой функцией


Димыч   (2006-10-02 14:21:00) [9]

var
H:hwnd
begin

H := FindWindow( nil, w);
if (H <> 0) then begin
  ThreadId    := GetWindowThreadProcessId(H, nil);

  AttachThreadInput(GetCurrentThreadId(), ThreadId, True);
  PostMessage(H, WM_KEYDOWN , 83, 0);
  Sleep(500);
  PostMessage(H, WM_KEYUP   , 83, 0);
  AttachThreadInput(GetCurrentThreadId(), ThreadId, False);
  Sleep(500);
...

Вот так


Сергей М.   (2006-10-02 14:21:00) [10]

SetProcessPriorityBoost()

Но учти, что ты жертвуешь в т.ч. и своим процессорным временем, так что две пожертвованные тобой секунды могут растянуться и на неопред.время, в теч.которого твой (и не только твой) процесс будет "не успевать", как тот самый "чужой" процесс, о котором ты столь печешься.


Игорь Шевченко   (2006-10-02 14:19:00) [11]


> отсылая ей сообщений о якобы нажатых клавишах клавиатуры


Как отсылаешь ?


Наверх

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