Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Передать команду sleep, Передать команду sleep 
:(
    Опции темы
DIMONSOFT
  Дата 20.12.2004, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: -1
Всего: -3



Как передать другому приложению команду sleep(чтобы оно уснуло на некоторое время) и вообще, возможно ли это?
--------------------
PM MAIL   Вверх
NiJazz
Дата 20.12.2004, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 1
Всего: 23



DIMONSOFT
Используй синхронизацию (события).
CreateEvent, OpenEvent, SetEvent, ResetEvent, WaitForSingleObject
PM MAIL   Вверх
p0s0l
Дата 21.12.2004, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Можно остановить поток из чужого процесса ( SuspendThread ), а через некоторое время запустить ( ResumeThread )...



--------------------
С уважением, г-н Посол.
PM   Вверх
 Dimonsoft
Дата 1.1.2005, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.12.2004

Репутация: нет
Всего: нет



Цитата(p0s0l @ 21.12.2004, 01:20)
Можно остановить поток из чужого процесса ( SuspendThread ),

А как с ним работать? Можеш написать пример с Explorer.exe

PM MAIL   Вверх
p0s0l
Дата 2.1.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 14
Всего: 112



Цитата
А как с ним работать? Можеш написать пример с Explorer.exe
У него много потоков...
Если нужно приостановить все потоки, то так:
Код

uses TlHelp32;

function GetProcessId (ExeName : string) : DWORD;
var
 hSnap : THandle;
 pe32 : TProcessEntry32;

begin
 Result := INVALID_HANDLE_VALUE;

 hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if hSnap = INVALID_HANDLE_VALUE then Exit;

 ExeName := AnsiLowerCase(ExeName);
 pe32.dwSize := SizeOf(pe32);
 if Process32First (hSnap, pe32) then
 repeat
   if AnsiLowerCase(ExtractFileName(pe32.szExeFile)) = ExeName then Result := pe32.th32ProcessID;
 until not Process32Next (hSnap, pe32);
 CloseHandle (hSnap);
end;

function OpenThread (dwDesiredAccess : DWORD; bInheritHandle : LONGBOOL; dwThreadId : DWORD) : THandle; stdcall; external 'kernel32.dll';
const THREAD_SUSPEND_RESUME       = ($0002);

function SleepProcess (ProcessID, SleepTime : DWORD) : integer;
var
 hSnap, hThread : THandle;
 te32 : TThreadEntry32;
 Threads : array of THandle;
 i : integer;

begin
 Result := 0;

 hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
 if hSnap = INVALID_HANDLE_VALUE then Exit;

 te32.dwSize := SizeOf(te32);
 if Thread32First (hSnap, te32) then
 repeat
   if te32.th32OwnerProcessID <> ProcessID then Continue;
   Inc(Result);
   hThread := OpenThread (THREAD_SUSPEND_RESUME, False, te32.th32ThreadID);
   SuspendThread (hThread);
   SetLength (Threads, Result);
   Threads[Result-1] := hThread;
 until not Thread32Next (hSnap, te32);
 CloseHandle (hSnap);

 Sleep (SleepTime);

 if Result > 0 then
   for i := 0 to Result-1 do
   begin
     ResumeThread (Threads[i]);
     CloseHandle (Threads[i]);
   end;
end;

Пример: остановить Explorer.exe на 5 секунд:
Код
SleepProcess (GetProcessId('explorer.exe'), 1000*5)




--------------------
С уважением, г-н Посол.
PM   Вверх
DIMONSOFT
Дата 3.1.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: -1
Всего: -3



Спасибо Posol но есть проблема: у меня Win98 а там нет OpenThread smile Нет ли способа на 98
--------------------
PM MAIL   Вверх
Vit
Дата 4.1.2005, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 1
Всего: 207



Тема закрыта.


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0770 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.