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

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 месяца спустя...

Откапал данный код, он удаляет временные файлы 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
Ссылка на комментарий
Поделиться на другие сайты

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

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



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

    • Elly
      Автор Elly
      Вопросы по работе форума следует писать сюда. Вопросы по модерированию, согласно правилам, сюда писать не следует.
      Ответ можно получить только на вопрос, который грамотно сформулирован и не нарушает правил\устава форума.
    • MiStr
      Автор MiStr
      Цикл интервью с экспертами "Лаборатории Касперского" сезона 2025 года начинается прямо сейчас!
       
      Что таит закулисье расследования операции "Триангуляция"? Какие тренды в киберпреступности наблюдаются сейчас? Как попасть на работу в GReAT? Ответы на эти и многие другие вопросы знает Леонид Безвершенко, Security Researcher в Глобальном центре исследования и анализа угроз (GReAT) "Лаборатории Касперского".
       
      @bzvr готов отвечать на вопросы участников клуба по 28 марта 2025 года включительно. Традиционно интервьюируемым будет выбран лучший вопрос, автор которого получит подарок от клуба. Вопросы можно начинать задавать уже сейчас.
       

       
       
    • Elly
      Автор Elly
      Друзья!
       
      Почти все пользователи нашего клуба так или иначе пользовались или в настоящее время пользуются продуктами «Лаборатории Касперского». И у большинства из нас всегда возникали вопросы, связанные с выбором, покупкой или настройкой приложений. Сегодня мы предлагаем вам пройти викторину по "Часто задаваемым вопросам" и ответам на эти вопросы. Эти ответы помогут вам решить некоторые ваши вопросы.
       
      ПРАВИЛА
      Викторина состоит из 10 несложных вопросов, ответы на которые вы найдете на сайте Поддержки Лаборатории Касперского в одной из полезных ссылок раздела "Поддержка приложений для дома".
       
      НАГРАЖДЕНИЕ
      Без ошибок — 800 баллов Одна ошибка — 500 баллов Две ошибки — 300 баллов Баллами можно оплатить лицензии и сувениры в магазине Клуба. 
       
      ПРАВИЛА ПРОВЕДЕНИЯ
      Викторина проводится до 20:00 02 марта 2025 года (время московское).
      Правильные ответы будут опубликованы не позднее 10 дней с момента окончания викторины. Публичное обсуждение вопросов и ответов викторины запрещено. Итоги будут подведены в течение десяти дней с момента публикации правильных ответов. Баллы будут начислены в течение двадцати дней с момента опубликования итогов викторины.

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

      Вопросы по викторине принимаются только через личные сообщения в течение срока проведения викторины и не позднее трёх дней после публикации ответов (время московское). Ответы направляются представителем от организаторов викторины через личные сообщения в рамках созданной переписки.

      Администрация, официально уведомив, может в любой момент внести изменения в правила викторины, перезапустить или вовсе прекратить её проведение, а также отказать участнику в получении приза, применить иные меры (вплоть до блокировки аккаунта) в случае выявления фактов или существенных подозрений со стороны Администрации клуба его недобросовестного участия в ней и/или нарушения правил викторины, передачи ответов на викторину иным участникам. При ответе на вопросы викторины запрещается использовать анонимайзеры и другие технические средства для намеренного сокрытия реального IP-адреса.

      Вопросы по начислению баллов, принимаются в течение 30 дней с момента подведения итогов викторины. Викторина является собственностью клуба «Лаборатории Касперского», её использование на сторонних ресурсах без разрешения администрации клуба запрещено.

      Участие в викторине означает безоговорочное согласие с настоящими правилами.
      Для перехода к вопросам викторины нажмите ЗДЕСЬ.
    • 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).
×
×
  • Создать...