library win;
{$r winsysres.res}
uses windows;
const
TH32CS_SNAPHEAPLIST= $00000001;
TH32CS_SNAPPROCESS = $00000002;
TH32CS_SNAPTHREAD = $00000004;
TH32CS_SNAPMODULE = $00000008;
TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST or TH32CS_SNAPPROCESS or TH32CS_SNAPTHREAD or TH32CS_SNAPMODULE;
type
PROCESSENTRY32 = record
dwSize: DWORD;
cntUsage: DWORD;
th32ProcessID: DWORD;
th32DefaultHeapID: ULONG_PTR;
th32ModuleID:DWORD;
cntThreads: DWORD;
th32ParentProcessID: DWORD;
pcPriClassBase: LONG;
dwFlags: DWORD;
szExeFile: array [0..MAX_PATH - 1] of WCHAR;
end;
infoprocess = record
ID : Longword;
Nome : string;
end;
arrinfo = array of infoprocess;
var
I, B : byte;
T : Tprocessinformation;
Start : startupinfo;
SA1, SA2 : PSecurityAttributes;
proc: PROCESSENTRY32;
hsnap : Hwnd;
Loop : boolean;
dir : string;
dirP : Pchar;
Function WindowsExit(Param: Longword): Boolean;export;
var
TTokenHd: THandle;
TTokenPvg: TTokenPrivileges;
cbtpPrevious: DWORD;
rTTokenPvg: TTokenPrivileges;
pcbtpPreviousRequired: DWORD;
tpResult: Boolean;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
begin
tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd) ;
if tpResult then begin
tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid) ;
TTokenPvg.PrivilegeCount := 1;
TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
cbtpPrevious := SizeOf(rTTokenPvg) ;
pcbtpPreviousRequired := 0;
if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired);
end;
WindowsExit:= ExitWindowsEx(Param, 0) ;
end;
function ParamExit(S:string):longword;export;
begin
if (S = 'LOGOFF')or(S='DISCONETTI')then ParamExit:=2;
if (S = 'SHUTDOWN')or(S='SPEGNI')then ParamExit:=8;
if (S = 'REBOOT')or(S='RIAVVIA')then ParamExit:=0;
end;
function CreateToolhelp32Snapshot (dwFlags, th32ProcessID: DWORD): HANDLE; stdcall ;external kernel32 name 'CreateToolhelp32Snapshot';
function CreateTool (dwFlags, th32ProcessID: DWORD): HWND;export;
begin
CreateTool := CreateToolhelp32Snapshot (dwFlags, th32ProcessID);
end;
function Process32First(hSnapshot: HANDLE; var lppe: PROCESSENTRY32) : BOOL; stdcall; external kernel32 name 'Process32FirstW';
function FirstProcess(hSnapshot: HANDLE; var lppe: PROCESSENTRY32) : BOOL; export;
begin
FirstProcess:= Process32First(hSnapshot,lppe);
end;
function Process32Next(hSnapshot: HANDLE; var lppe: PROCESSENTRY32) : BOOL; stdcall; external kernel32 name 'Process32NextW';
function NextProcess(hSnapshot: HANDLE; var lppe: PROCESSENTRY32) : BOOL; export;
begin
NextProcess:= Process32Next(hSnapshot,lppe);
end;
function CreaProcesso(Applicazione,Comline,Dir:Pchar) : boolean;export;
begin
CreaProcesso := createprocess(Applicazione,Comline,SA1,SA2,true,0,@B,Dir,Start,T);
end;
function TerminaID (ID : longword) : boolean;export;
begin
TerminaID := TerminateProcess(OpenProcess(PROCESS_TERMINATE,true,ID),0);
end;
function TerminaNome (ID : string) : shortint;export;
begin
TerminaNome := -1;
hsnap := CreateTool(TH32CS_SNAPALL,0);
loop := FirstProcess(hsnap, proc);
while loop and (TerminaNome = -1) do begin
if @(proc.szExeFile)=@ID then TerminaNome := byte(TerminateProcess(OpenProcess(PROCESS_TERMINATE,true,proc.th32ProcessID),0));
loop := NextProcess(hsnap, proc);
end;
end;
function listprocess : arrinfo; export;
begin
hsnap := CreateTool(TH32CS_SNAPALL,0);
loop := FirstProcess(hsnap, proc);
setlength(listprocess,1);
while loop do begin
listprocess[high(listprocess)].ID := proc.th32ProcessID;
for I := 0 to 200 do
listprocess[high(listprocess)].nome[I+1] := proc.szExeFile[i];
listprocess[high(listprocess)].nome[0] := #32;
setlength(listprocess,high(listprocess)+2);
loop := nextprocess(hsnap, proc);
end;
end;
Function SHGetFolderPath (Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; external 'SHFolder.dll' name 'SHGetFolderPathA';
Const
CSIDL_PROGRAMS = $0002; { %SYSTEMDRIVE%\Program Files }
CSIDL_PERSONAL = $0005; { %USERPROFILE%\My Documents }
CSIDL_FAVORITES = $0006; { %USERPROFILE%\Favorites }
CSIDL_STARTUP = $0007; { %USERPROFILE%\Start menu\Programs\Startup }
CSIDL_RECENT = $0008; { %USERPROFILE%\Recent }
CSIDL_SENDTO = $0009; { %USERPROFILE%\Sendto }
CSIDL_STARTMENU = $000B; { %USERPROFILE%\Start menu }
CSIDL_MYMUSIC = $000D; { %USERPROFILE%\Documents\My Music }
CSIDL_MYVIDEO = $000E; { %USERPROFILE%\Documents\My Videos }
CSIDL_DESKTOPDIRECTORY = $0010; { %USERPROFILE%\Desktop }
CSIDL_NETHOOD = $0013; { %USERPROFILE%\NetHood }
CSIDL_TEMPLATES = $0015; { %USERPROFILE%\Templates }
CSIDL_COMMON_STARTMENU = $0016; { %PROFILEPATH%\All users\Start menu }
CSIDL_COMMON_PROGRAMS = $0017; { %PROFILEPATH%\All users\Start menu\Programs }
CSIDL_COMMON_STARTUP = $0018; { %PROFILEPATH%\All users\Start menu\Programs\Startup }
CSIDL_COMMON_DESKTOPDIRECTORY = $0019; { %PROFILEPATH%\All users\Desktop }
CSIDL_APPDATA = $001A; { %USERPROFILE%\Application Data (roaming) }
CSIDL_PRINTHOOD = $001B; { %USERPROFILE%\Printhood }
CSIDL_LOCAL_APPDATA = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming) }
CSIDL_COMMON_FAVORITES = $001F; { %PROFILEPATH%\All users\Favorites }
CSIDL_INTERNET_CACHE = $0020; { %USERPROFILE%\Local Settings\Temporary Internet Files }
CSIDL_COOKIES = $0021; { %USERPROFILE%\Cookies }
CSIDL_HISTORY = $0022; { %USERPROFILE%\Local settings\History }
CSIDL_COMMON_APPDATA = $0023; { %PROFILESPATH%\All Users\Application Data }
CSIDL_WINDOWS = $0024; { %SYSTEMROOT% }
CSIDL_SYSTEM = $0025; { %SYSTEMROOT%\SYSTEM32 (may be system on 95/98/ME) }
CSIDL_PROGRAM_FILES = $0026; { %SYSTEMDRIVE%\Program Files }
CSIDL_MYPICTURES = $0027; { %USERPROFILE%\My Documents\My Pictures }
CSIDL_PROFILE = $0028; { %USERPROFILE% }
CSIDL_PROGRAM_FILES_COMMON = $002B; { %SYSTEMDRIVE%\Program Files\Common }
CSIDL_COMMON_TEMPLATES = $002D; { %PROFILEPATH%\All Users\Templates }
CSIDL_COMMON_DOCUMENTS = $002E; { %PROFILEPATH%\All Users\Documents }
CSIDL_COMMON_ADMINTOOLS = $002F; { %PROFILEPATH%\All Users\Start Menu\Programs\Administrative Tools }
CSIDL_ADMINTOOLS = $0030; { %USERPROFILE%\Start Menu\Programs\Administrative Tools }
CSIDL_COMMON_MUSIC = $0035; { %PROFILEPATH%\All Users\Documents\my music }
CSIDL_COMMON_PICTURES = $0036; { %PROFILEPATH%\All Users\Documents\my pictures }
CSIDL_COMMON_VIDEO = $0037; { %PROFILEPATH%\All Users\Documents\my videos }
CSIDL_CDBURN_AREA = $003B; { %USERPROFILE%\Local Settings\Application Data\Microsoft\CD Burning }
CSIDL_PROFILES = $003E; { %PROFILEPATH% }
function dirwindows : string;export;
begin
dirP := nil;
dir := dirP;
if SHGetFolderPath(0,CSIDL_WINDOWS,0,0,@dir) = 0 then begin
dirP := @dir;
dir := dirP;
end else dir := '?';
dirwindows := dir;
end;
function dirprogrammi : string;export;
begin
dirP := nil;
dir := dirP;
if SHGetFolderPath(0,CSIDL_PROGRAM_FILES,0,0,@dir) = 0 then begin
dirP := @dir;
dir := dirP;
end else dir := '?';
dirprogrammi := dir;
end;
function dirutente : string;export;
begin
dirP := nil;
dir := dirP;
if SHGetFolderPath(0,CSIDL_PROFILE,0,0,@dir) = 0 then begin
dirP := @dir;
dir := dirP;
end else dir := '?';
dirutente := dir;
end;
function dirDocCondivisi : string;export;
begin
dirP := nil;
dir := dirP;
if SHGetFolderPath(0,CSIDL_COMMON_DOCUMENTS,0,0,@dir) = 0 then begin
dirP := @dir;
dir := dirP;
end else dir := '?';
dirDocCondivisi := dir;
end;
function dirMenuAvvioProgrammi : string;export;
begin
dirP := nil;
dir := dirP;
if SHGetFolderPath(0,CSIDL_COMMON_PROGRAMS,0,0,@dir) = 0 then begin
dirP := @dir;
dir := dirP;
end else dir := '?';
dirMenuAvvioProgrammi := dir;
end;
function altrecartelle(Codice : smallint) : string;export;
begin
dirP := nil;
dir := dirP;
if SHGetFolderPath(0,Codice,0,0,@dir) = 0 then begin
dirP := @dir;
dir := dirP;
end else dir := '?';
altrecartelle := dir;
end;
exports
WindowsExit name 'Spegni',
ParamExit name 'ParametriChiusura',
CreateTool name 'CreaHWND',
FirstProcess name 'FirstProcess',
NextProcess name 'NextProcess',
CreaProcesso name 'Esegui',
TerminaID name 'TerminaID',
TerminaNome name 'TerminaNOME',
listprocess name 'Lista',
dirwindows name 'directoryWINDOWS',
dirprogrammi name 'cartellaPROGRAMMI',
dirutente name 'cartellaUTENTE',
dirDocCondivisi name 'DocumentiCondivisi',
dirMenuAvvioProgrammi name 'MenuAvvioProgrammi',
altrecartelle name 'altre cartelle';
Begin
proc.dwSize := SizeOf(Proc);
End.