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

1001 и 1 вопрос по Дельфи


Apollon

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

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 months later...

Откапал данный код, он удаляет временные файлы 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 weeks later...

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

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

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

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

Речь о TMemo

Изменено пользователем Umnik
Ссылка на комментарий
Поделиться на другие сайты

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

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



Войти
  • Похожий контент

    • Elly
      От Elly
      Вопросы по работе форума следует писать сюда. Вопросы по модерированию, согласно правилам, сюда писать не следует.
      Ответ можно получить только на вопрос, который грамотно сформулирован и не нарушает правил\устава форума.
    • MiStr
      От MiStr
      Цикл интервью с экспертами "Лаборатории Касперского" сезона 2024 года подходит к концу. В завершении года мы позвали на интервью эксперта по тому продукту, которым пользуются многие участники клуба – Kaspersky Password Manager.
       
      Какие новые функции в менеджере паролей появились в последнее время? Сколько аккаунтов хранит в Kaspersky Password Manager среднестатистический пользователь? Без какого функционала, предложенного в ходе форумного бета-тестирования, сегодня невозможно представить менеджер паролей?
       
      Ответы на эти и многие другие вопросы знает Алексей Тодираш, менеджер продукта Kaspersky Password Manager.
       
      @Алексей Тодираш готов отвечать на вопросы участников клуба по 20 декабря 2024 года включительно. Традиционно интервьюируемым будет выбран лучший вопрос, автор которого получит подарок от клуба. Вопросы можно начинать задавать уже сейчас.
       

       
       
    • igrok52
      От igrok52
      Подскажите пожалуйста. Антивирусом касперского пользуюсь много лет с 3.0 версии как все работает понимаю на пк. Подскажите пожалуйста кто знает по поводу Антивируса для Android устройств, не разу не ставил и вообще в экосистеме андроида не очень разбираюсь. Купил планшет дочке, загрузчик разблокирован, что там поставили понятия не имею, все работает но боюсь что есть какие то закладки от "китайцев" и пока не проверю не успокоюсь. Поможет антивирус касперского для андроида найти закладки или что то что может быть типа как в телефонах в китайских были закладки от китайцев которые смс отправляли на странные номера (лет 5 назад была эпидемия что и кнопочные и смартфоны дешевые слали смс по ночам в неизвестном направлении, оказалось что прошивка была с вирусами). Или для андроида версия может проверять только apk и не сможет увидеть что в системе есть вредоносы? Если что планшет из нашего ретейла, подумать не мог что у нас в солидных магазинах будут продавать планшеты с китайской прошивкой с разблокированным загрузчиком (Lenovo Xiaoxin Pad Pro 12.7).
    • MiStr
      От MiStr
      Цикл интервью с экспертами "Лаборатории Касперского" сезона 2024 года возобновляется
       
      На прошедшей в стенах "Лаборатории Касперского"  встрече , приуроченной к 18-летию Kaspersky Club, участники клуба пообщались с Еленой Лесных, старшим продуктовым маркетологом в подразделении мобильных продуктов в продуктовом маркетинге B2C. Елена рассказала о том, как была усилена защита от киберугроз и мошенников в последних обновлениях мобильной версии Kaspersky и Kaspersky Who Calls.
       
      Выступление Елены и её коллеги Никиты вызвало большой интерес у участников клуба. Не все присутствующие на встрече смогли задать свои вопросы, не говоря уже про тех, кто не смог посетить офис "Лаборатории Касперского". Именно поэтому мы пригласили Елену ещё раз пообщаться с участниками клуба, на этот раз в формате онлайн
       
      @Lena_Lesnykh готова отвечать на вопросы участников клуба по 18 октября 2024 года включительно. Традиционно интервьюируемой будет выбран лучший вопрос, автор которого получит подарок от клуба. Вопросы можно начинать задавать уже сейчас.
       

       
       
    • pokrac
      От pokrac
      Давал ребенкоу поиграть в компьютер, что то скачивал, по итогу ночью открываю компьютер, а у меня все файлы с префиксом Lock. ничего не открывается, ну и смена обоев, с тг аккаунтом для решения вопроса
×
×
  • Создать...