Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

skoworodker

Вот так все работает

procedure TForm1.Button1Click(Sender: TObject);
procedure Delay(Value: Cardinal);
var
 F, N: Cardinal;
begin
 N := 0;
 while N <= (Value div 10) do
 begin
SleepEx(1, True);
Application.ProcessMessages;
Inc(N);
 end;
 F := GetTickCount;
 repeat
Application.ProcessMessages;
N := GetTickCount;
 until (N - F >= (Value mod 10)) or (N < F);
end;
begin
Delay(10000);
form1.Color:=clred;
Delay(10000);
form1.Color:=clgreen;
Delay(10000);
form1.Color:=clred;
end;

  • Согласен 1
Опубликовано

kilo

Простите за глупый вопрос, но я из того кода который вы дали что то ничего непонял :(

Немогли бы вы пояснить?

Опубликовано

Функции ServiceStart и ServiceStop передается два параметра aMachine и aServiceName первый пареметр будет пустой а второй имя службы, у тебя WinNT_KernelSecurity или как ты ее назвал

Опубликовано
Хотя путь лучше прописывать не напрямую, а через переменные среды.

По подробней пожалуйста :(

 

function ServiceStart(aMachine, aServiceName : kernelsecur string ) : boolean; 
// aMachine это UNC путь, либо локальный компьютер если пусто
var 
 h_manager,h_svc: SC_Handle; 
 svc_status: TServiceStatus; 
 Temp: PChar; 
 dwCheckPoint: DWord; 
begin 
 svc_status.dwCurrentState := 1; 
 h_manager := OpenSCManager(PChar(aMachine), Nil, 
						 SC_MANAGER_CONNECT); 
 if h_manager > 0 then 
 begin 
h_svc := OpenService(h_manager, PChar(aServiceName), 
					 SERVICE_START or SERVICE_QUERY_STATUS); 
if h_svc > 0 then 
begin 
  temp := nil; 
  if (StartService(h_svc,0,temp)) then 
	if (QueryServiceStatus(h_svc,svc_status)) then 
	begin 
	  while (SERVICE_RUNNING <> svc_status.dwCurrentState) do 
	  begin 
		dwCheckPoint := svc_status.dwCheckPoint; 

		Sleep(svc_status.dwWaitHint); 

		if (not QueryServiceStatus(h_svc,svc_status)) then 
		  break; 

		if (svc_status.dwCheckPoint < dwCheckPoint) then 
		begin 
		  // QueryServiceStatus не увеличивает dwCheckPoint 
		  break; 
		end; 
	  end; 
	end; 
  CloseServiceHandle(h_svc); 
end; 
CloseServiceHandle(h_manager); 
 end; 
 Result := SERVICE_RUNNING = svc_status.dwCurrentState; 
end;

Изменил правельно? или надо по другому?

Опубликовано
Изменил правельно? или надо по другому?

Нет функции нечего менять не надо.

В вызове функции пишешь следующие параметры и все.

ServiceStart('', 'kernelsecur');

Хотя путь лучше прописывать не напрямую, а через переменные среды.

 

По подробней пожалуйста

var 
...
 str:array[0..256] of char;
begin
GetWindowsDirectory(@str, 255);
CopyFile('WinNT_KernelSecurity.sys',  PAnsiChar(str+'\system32\drivers\WinNT_KernelSecurity.sys'), false);
....
end;

Данный код будет копировать файл папку drevers независимо от того какая буква системного диска и папка виндовс.

  • Согласен 1
Опубликовано
Данный код будет копировать файл папку drevers независимо от того какая буква системного диска и папка виндовс.

А если удалять его то есть после работы то код должен быть:

var 
...
 str:array[0..256] of char;
begin
GetWindowsDirectory(@str, 255);
DeleteFile('WinNT_KernelSecurity.sys',  PAnsiChar(str+'\system32\drivers\WinNT_KernelSecurity.sys'), false);
....
end;

Так ?

Опубликовано (изменено)
Так ?

Функция та, а вот синтаксис неправильный.

DeleteFile(PAnsiChar(str+'\system32\drivers\WinNT_KernelSecurity.sys'));

Изменено пользователем kilo
Опубликовано

kilo

Что то у меня код выдаёт ошибку

[Error] Unit1.pas(119): ';' expected but '.' found

 

Нет функции нечего менять не надо.

В вызове функции пишешь следующие параметры и все.

[u]ServiceStart('', 'kernelsecur');[/u]

 

function ServiceStart(aMachine, aServiceName : string ) : boolean; 
// aMachine это UNC путь, либо локальный компьютер если пусто
var 
 h_manager,h_svc: SC_Handle; 
 svc_status: TServiceStatus; 
 Temp: PChar; 
 dwCheckPoint: DWord; 
begin 
 svc_status.dwCurrentState := 1; 
 h_manager := OpenSCManager(PChar(aMachine), Nil, 
						 SC_MANAGER_CONNECT); 
 if h_manager > 0 then 
 begin 
h_svc := OpenService(h_manager, PChar(aServiceName), 
					 SERVICE_START or SERVICE_QUERY_STATUS); 
if h_svc > 0 then 
begin 
  temp := nil; 
  if (StartService(h_svc,0,temp)) then 
	if (QueryServiceStatus(h_svc,svc_status)) then 
	begin 
	  while (SERVICE_RUNNING <> svc_status.dwCurrentState) do 
	  begin 
		dwCheckPoint := svc_status.dwCheckPoint; 

		Sleep(svc_status.dwWaitHint); 

		if (not QueryServiceStatus(h_svc,svc_status)) then 
		  break; 

		if (svc_status.dwCheckPoint < dwCheckPoint) then 
		begin 
		  // QueryServiceStatus не увеличивает dwCheckPoint 
		  break; 
		end; 
	  end; 
	end; 
  CloseServiceHandle(h_svc); 
end; 
CloseServiceHandle(h_manager); 
 end; 
 Result := SERVICE_RUNNING = svc_status.dwCurrentState; 
end;

где нужно заменить строчку которую вы сказали? или я непонял или руки у меня кривые :)

Опубликовано (изменено)
Что то у меня код выдаёт ошибку

Код

[Error] Unit1.pas(119): ';' expected but '.' found

на какой именно участок кода ругается

где нужно заменить строчку которую вы сказали? или я непонял или руки у меня кривые

Её не заменяешь а пишешь вызов той функции например в обработчики кнопки

procedure TForm1.Button5Click(Sender: TObject);
//Start
function ServiceStart(aMachine, aServiceName : string ) : boolean;
// aMachine это UNC путь, либо локальный компьютер если пусто
var 
 h_manager,h_svc: SC_Handle;
 svc_status: TServiceStatus;
 Temp: PChar; 
 dwCheckPoint: DWord;
begin
 svc_status.dwCurrentState := 1; 
 h_manager := OpenSCManager(PChar(aMachine), Nil, 
						 SC_MANAGER_CONNECT); 
 if h_manager > 0 then 
 begin 
h_svc := OpenService(h_manager, PChar(aServiceName), 
					 SERVICE_START or SERVICE_QUERY_STATUS); 
if h_svc > 0 then 
begin 
  temp := nil; 
  if (StartService(h_svc,0,temp)) then 
	if (QueryServiceStatus(h_svc,svc_status)) then 
	begin
	  while (SERVICE_RUNNING <> svc_status.dwCurrentState) do 
	  begin 
		dwCheckPoint := svc_status.dwCheckPoint; 

		Sleep(svc_status.dwWaitHint); 

		if (not QueryServiceStatus(h_svc,svc_status)) then 
		  break; 

		if (svc_status.dwCheckPoint < dwCheckPoint) then 
		begin 
		  // QueryServiceStatus не увеличивает dwCheckPoint 
		  break; 
		end; 
	  end; 
	end; 
  CloseServiceHandle(h_svc);
end; 
CloseServiceHandle(h_manager); 
 end; 
 Result := SERVICE_RUNNING = svc_status.dwCurrentState; 
end;
begin
 ServiceStart('', 'WinNT_KernelSecurity');
 ....
end;

Изменено пользователем kilo
Опубликовано
на какой именно участок кода ругается

procedure TForm1.Windows2Click(Sender: TObject);

P.S. 118-119 строчки почему то нелюбит :)

спасибо за помощь щас попробую :search:

Опубликовано (изменено)

По одной строчки кода понять вчем причина невозможно. Возможно ты сам переменовал обрабочик.

Изменено пользователем kilo
Опубликовано
По одной строчки кода понять вчем причина невозможно. Возможно ты сам переменовал обрабочик.

Да возможно, эм код запуска службы что то неработает, ну как дельфи показывает что он отрабатывает, но когда я через консоль и делфу запускал, то в АВЗ видно было что мой драйвер пашет, а теперь почему то нет, в чём может быть проблема?

  • 2 месяца спустя...
Опубликовано

Откапал данный код, он удаляет временные файлы IE, вопрос, как его научить отчитываться после удаления временных файлов?

 

procedure DeleteIECache; 
var 
 lpEntryInfo: PInternetCacheEntryInfo; 
 hCacheDir: LongWord; 
 dwEntrySize: LongWord; 
begin 
 dwEntrySize := 0; 
 FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize); 
 GetMem(lpEntryInfo, dwEntrySize); 
 if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; 
 hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize); 
 if hCacheDir <> 0 then  
 begin 
repeat 
  DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName); 
  FreeMem(lpEntryInfo, dwEntrySize); 
  dwEntrySize := 0; 
  FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize); 
  GetMem(lpEntryInfo, dwEntrySize); 
  if dwEntrySize > 0 then lpEntryInfo^.dwStructSize := dwEntrySize; 
until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize); 
 end; 
 FreeMem(lpEntryInfo, dwEntrySize); 
 FindCloseUrlCache(hCacheDir); 
end; 


// Beispiel: 
// Example: 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 DeleteIECache; 
end;

 

Вопрос номер 2 имеем ниже приведённый код, он он удаляет определённые файлы в корзину, но мне надо чтобы он удалял временные файлы *.tmp/ или из папки темп , что нужно в нём поменять?

 

var
 FileOp: TSHFileOpStruct;
begin
 FillChar(FileOp, SizeOf(FileOp), 0);
 if Wnd = 0 then
Wnd := Application.Handle;
 FileOp.Wnd := Wnd;
 FileOp.wFunc := FO_DELETE;
 FileOp.pFrom := PChar(FileName);
 FileOp.fFlags := FOF_ALLOWUNDO or FOF_NOERRORUI or FOF_SILENT;
 Result := (SHFileOperation(FileOp) = 0) and (not
FileOp.fAnyOperationsAborted);
end;

procedure TForm1.Button1Click(Sender: TObject)
begin
 Recycle('d:\folder\filename.ext', Handle);
end;

  • 4 недели спустя...
Опубликовано (изменено)

Осваиваю Дельфи-подобную IDE. Документации ужасно мало, посему вопросы тут.

Как по клику на спидбаттон:

1). получить позицию курсора

2). вставить слева и справа от него теги (<b></b>, например)

Речь о TMemo

Изменено пользователем Umnik

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...