kilo Опубликовано 6 ноября, 2009 Опубликовано 6 ноября, 2009 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
Apollon Опубликовано 6 ноября, 2009 Автор Опубликовано 6 ноября, 2009 kilo Простите за глупый вопрос, но я из того кода который вы дали что то ничего непонял Немогли бы вы пояснить?
kilo Опубликовано 6 ноября, 2009 Опубликовано 6 ноября, 2009 Функции ServiceStart и ServiceStop передается два параметра aMachine и aServiceName первый пареметр будет пустой а второй имя службы, у тебя WinNT_KernelSecurity или как ты ее назвал
Apollon Опубликовано 6 ноября, 2009 Автор Опубликовано 6 ноября, 2009 Хотя путь лучше прописывать не напрямую, а через переменные среды. По подробней пожалуйста 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; Изменил правельно? или надо по другому?
kilo Опубликовано 7 ноября, 2009 Опубликовано 7 ноября, 2009 Изменил правельно? или надо по другому? Нет функции нечего менять не надо. В вызове функции пишешь следующие параметры и все. 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
Apollon Опубликовано 7 ноября, 2009 Автор Опубликовано 7 ноября, 2009 Данный код будет копировать файл папку 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; Так ?
kilo Опубликовано 8 ноября, 2009 Опубликовано 8 ноября, 2009 (изменено) Так ? Функция та, а вот синтаксис неправильный. DeleteFile(PAnsiChar(str+'\system32\drivers\WinNT_KernelSecurity.sys')); Изменено 8 ноября, 2009 пользователем kilo
Apollon Опубликовано 8 ноября, 2009 Автор Опубликовано 8 ноября, 2009 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; где нужно заменить строчку которую вы сказали? или я непонял или руки у меня кривые
kilo Опубликовано 8 ноября, 2009 Опубликовано 8 ноября, 2009 (изменено) Что то у меня код выдаёт ошибкуКод [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; Изменено 8 ноября, 2009 пользователем kilo
Apollon Опубликовано 9 ноября, 2009 Автор Опубликовано 9 ноября, 2009 на какой именно участок кода ругается procedure TForm1.Windows2Click(Sender: TObject); P.S. 118-119 строчки почему то нелюбит спасибо за помощь щас попробую
kilo Опубликовано 10 ноября, 2009 Опубликовано 10 ноября, 2009 (изменено) По одной строчки кода понять вчем причина невозможно. Возможно ты сам переменовал обрабочик. Изменено 10 ноября, 2009 пользователем kilo
Apollon Опубликовано 11 ноября, 2009 Автор Опубликовано 11 ноября, 2009 По одной строчки кода понять вчем причина невозможно. Возможно ты сам переменовал обрабочик. Да возможно, эм код запуска службы что то неработает, ну как дельфи показывает что он отрабатывает, но когда я через консоль и делфу запускал, то в АВЗ видно было что мой драйвер пашет, а теперь почему то нет, в чём может быть проблема?
Apollon Опубликовано 18 января, 2010 Автор Опубликовано 18 января, 2010 Откапал данный код, он удаляет временные файлы 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;
Umnik Опубликовано 15 февраля, 2010 Опубликовано 15 февраля, 2010 (изменено) Осваиваю Дельфи-подобную IDE. Документации ужасно мало, посему вопросы тут. Как по клику на спидбаттон: 1). получить позицию курсора 2). вставить слева и справа от него теги (<b></b>, например) Речь о TMemo Изменено 15 февраля, 2010 пользователем Umnik
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти