Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > не компилится код


Автор: Darkmaster 19.6.2006, 12:39
вот код взятый из ДРКБ:
Код

procedure TForm1.ButtonKillAllClick(Sender: TObject);    
var    
  pTask: PTaskEntry;    
  Task: Bool;    
  ThisTask: THANDLE;    
begin    
  GetMem(pTask, SizeOf(TTaskEntry));    
  pTask^.dwSize := SizeOf(TTaskEntry);    
  Task := TaskFirst(pTask);    
  while Task do    
  begin    
    if pTask^.hInst = hInstance then    
      ThisTask := pTask^.hTask    
    else    
      TerminateApp(pTask^.hTask, NO_UAE_BOX);    
    Task := TaskNext(pTask);    
  end;    
  TerminateApp(ThisTask, NO_UAE_BOX);    
end; 

Ошибку выдает уже здесь 
pTask: PTaskEntry;

И еще один вопрос реально ли сделать так чтобы закрывались все проги кроме той которая их закрывает? 

Автор: Matematik 19.6.2006, 12:58
Ты не первый  smile 
Может раскажешь, зачем тебе понадобилось убивать все программы  

Автор: Dynamic 19.6.2006, 13:55
Цитата(Darkmaster @  19.6.2006,  12:39 Найти цитируемый пост)
pTask: PTaskEntry;

не уверен, но похоже на 
Код

uses Windows;
..... 

Автор: Alexeis 19.6.2006, 14:08
Dynamic, 
Цитата(Dynamic @  19.6.2006,  12:55 Найти цитируемый пост)
uses Windows;
 здесь не при чем этот тип какой-то не стандартный.
Поиск показал что требуется модуль ToolHelp.
 

Автор: Darkmaster 19.6.2006, 14:57
а где взять ToolHelp . Просто если его в uses прописываешь то он выдает что файл ToolHelp.dcu не найден... 

Автор: Alexeis 19.6.2006, 15:10
Попробуйте заменить ToolHelp.pas на более новый TLHelp32 и соответственно TTaskEntry на TProcessEntry32. 

Автор: Yanis 19.6.2006, 22:10
TTaskEntry так и осталась жить в Windows 3.1. Её альтернативой насколько я могу судить является TProcessEntry32, а для TaskFirst и TaskNext соответственно Process32FirstW, Process32NextW. 

Автор: Sunvas 20.6.2006, 01:10
Старенький немного примерчик! Лучше пиши новый на его основе - возьми работающий код получения всех процессов, а потом их просто киляй по очереди.

Цитата(Darkmaster @  19.6.2006,  12:39 Найти цитируемый пост)
И еще один вопрос реально ли сделать так чтобы закрывались все проги кроме той которая их закрывает?

Это твоя прога? Вирусы пишешь?  smile  Сравнивай хенделы! 

Автор: Darkmaster 21.6.2006, 12:50
нет , не вирусы, просто пишу программу которая автоматом выключает комп. Проблема в том что в таком случае нужно подтверждать ззакрытия прог других. 

Проблемка в этой строке:

GetMem(pTask, SizeOf(TProcessEntry32));

Выдает что типы несовместимы... 

Автор: Poseidon 21.6.2006, 13:09
Цитата(Darkmaster @  21.6.2006,  12:50 Найти цитируемый пост)
просто пишу программу которая автоматом выключает комп. Проблема в том что в таком случае нужно подтверждать ззакрытия прог других. 
 Нет никаких проблем. Выключай с помощью ExitWindowsEx и параметром EWX_FORCE.

Для NT это будет выглядеть так:
Код

Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean ): Boolean;  
Var TPPrev,  
      TP: TTokenPrivileges;  
      Token: THandle;  
      dwRetLen: DWord;  
Begin  
 Result:=False;  
 OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token );  
 TP.PrivilegeCount:=1;  
 IF LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then  
  Begin  
   IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED  
              else  TP.Privileges[0].Attributes:=0;  
   dwRetLen:= 0;  
   Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen);  
  End;  
 CloseHandle(Token);  
End;  


Код

 SetPrivilege('SeShutdownPrivilege',True); 
 ExitWindowsEx(EWX_SHUTDOWN or EWX_FORCE, 0); 


Для не NT привелегии можно не получать. 

Автор: Yanis 21.6.2006, 15:01
Цитата(Darkmaster @  21.6.2006,  13:50 Найти цитируемый пост)
GetMem(pTask, SizeOf(TProcessEntry32));

А у тебя pTask объявлена как PProcessEntry32? 

Автор: Sunvas 21.6.2006, 19:42
Цитата(Darkmaster @  21.6.2006,  12:50 Найти цитируемый пост)
Проблема в том что в таком случае нужно подтверждать ззакрытия прог других. 

Если б ты правильно задал вопрос ты бы нашел решение быстрее! smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)