Список задач, процессы и приорететы
Code: |
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
implementation
procedure TForm1.Button1Click(Sender: TObject); begin //Скрываем if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 1); end;
procedure TForm1.Button2Click(Sender: TObject); begin //Опять показываем if not (csDesigning in ComponentState) then RegisterServiceProcess(GetCurrentProcessID, 0); end; |
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Следующий пример изменяет приоритет приложения. Изменение приоритета следует использовать
с осторожностью - т.к. присвоение слишком высокого приоритета может привети к
медленной работе остальных программ и системы в целом. См. Win32 help for SetThreadPriority() function.
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Получение количества тактов процессора с момента перезагрузки. Производится вызов команды RDTSC x86 процессора.
Имеются во всех процах начиная с Pentium/586. Подходит для всех версий Дельфи, где есть тип Int64.
Для остальных можно переписать слегка - результат перекладывать в две переменные Integer.
Я ее использую для определения кол-ва процессорного времени на выполнение куска кода.
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Для этого существует функция GetModuleFileName, которая возвращает имя файла текущего процесса.
Code: |
function GetModName: String; var fName: String; nsize: cardinal; begin nsize := 128; SetLength(fName,nsize); SetLength(fName, GetModuleFileName( hinstance, pchar(fName), nsize)); Result := fName; end; |
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Программа не видна по Ctrl+Alt+Del, и сама оттуда же может спрятать любой из процессов(правда, не все с самого начала "светятся" по Ctrl+Alt+Del) или завершить его. Простой пример для знакомства с ToolHelp32.
В исходном коде есть недоработки, например, процедура Delproc получает в качестве параметра строку, затем переводит ее в целочисленный тип(integer), хотя можно передавать сразу число. Заморочка была в проверке числа-индекса на подлинность, а так как я выдрал часть кода из более ранней своей проги, я не стал это менять, а просто подогнал до рабочей версии. Оптимизацией кода вы можете заняться сами по желанию(вы можете, если хотите, а если не хотите, то вы не обязаны, вы посто могли бы... да... :))) Программа не работала в WinNT 4.0, но в Win9x работать должна.
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Code: |
// Works only on Windows NT systems (WinNT, Win2000, WinXP) uses psAPI;
procedure TForm1.Button1Click(Sender: TObject); var pmc: PPROCESS_MEMORY_COUNTERS; cb: Integer; begin cb := SizeOf(_PROCESS_MEMORY_COUNTERS); GetMem(pmc, cb); pmc^.cb := cb; if GetProcessMemoryInfo(GetCurrentProcess(), pmc, cb) then Label1.Caption := IntToStr(pmc^.WorkingSetSize) + ' Bytes' else Label1.Caption := 'Unable to retrieve memory usage structure';
FreeMem(pmc); end; |
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Code: |
uses Psapi, tlhelp32;
procedure CreateWin9xProcessList(List: TstringList); var hSnapShot: THandle; ProcInfo: TProcessEntry32; begin if List = nil then Exit; hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapShot <> THandle(-1)) then begin ProcInfo.dwSize := SizeOf(ProcInfo); if (Process32First(hSnapshot, ProcInfo)) then begin List.Add(ProcInfo.szExeFile); while (Process32Next(hSnapShot, ProcInfo)) do List.Add(ProcInfo.szExeFile); end; CloseHandle(hSnapShot); end; end;
procedure CreateWinNTProcessList(List: TstringList); var PIDArray: array [0..1023] of DWORD; cb: DWORD; I: Integer; ProcCount: Integer; hMod: HMODULE; hProcess: THandle; ModuleName: array [0..300] of Char; begin if List = nil then Exit; EnumProcesses(@PIDArray, SizeOf(PIDArray), cb); ProcCount := cb div SizeOf(DWORD); for I := 0 to ProcCount - 1 do begin hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PIDArray[I]); if (hProcess <> 0) then begin EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb); GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName)); List.Add(ModuleName); CloseHandle(hProcess); end; end; end;
procedure GetProcessList(var List: TstringList); var ovi: TOSVersionInfo; begin if List = nil then Exit; ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(ovi); case ovi.dwPlatformId of VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List); VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List); end end;
function EXE_Running(FileName: string; bFullpath: Boolean): Boolean; var i: Integer; MyProcList: TstringList; begin MyProcList := TStringList.Create; try GetProcessList(MyProcList); Result := False; if MyProcList = nil then Exit; for i := 0 to MyProcList.Count - 1 do begin if not bFullpath then begin if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then Result := True end else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True; if Result then Break; end; finally MyProcList.Free; end; end;
// Example 1: Is a Exe-File running ? procedure TForm1.Button1Click(Sender: TObject); begin if EXE_Running('Notepad.exe', False) then ShowMessage('EXE is running') else ShowMessage('EXE is not running'); end;
// Example 2: List running Exe-Files procedure TForm1.Button3Click(Sender: TObject); var i: Integer; MyProcList: TstringList; begin MyProcList := TStringList.Create; try GetProcessList(MyProcList); if MyProcList = nil then Exit; for i := 0 to MyProcList.Count - 1 do ListBox1.Items.Add(MyProcList.Strings[i]); finally MyProcList.Free; end; end; |
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Code: |
procedure DisableTaskMgr(bTF: Boolean); var reg: TRegistry; begin reg := TRegistry.Create; reg.RootKey := HKEY_CURRENT_USER;
reg.OpenKey('Software', True); reg.OpenKey('Microsoft', True); reg.OpenKey('Windows', True); reg.OpenKey('CurrentVersion', True); reg.OpenKey('Policies', True); reg.OpenKey('System', True);
if bTF = True then begin reg.WriteString('DisableTaskMgr', '1'); end else if bTF = False then begin reg.DeleteValue('DisableTaskMgr'); end; reg.CloseKey; end;
// Example Call: procedure TForm1.Button1Click(Sender: TObject); begin DisableTaskMgr(True); end; |
- Подробности
- Родительская категория: Процессы, потоки, память, задачи
- Категория: Список задач, процессы и приорететы
Страница 2 из 2