Cita:
|
Empezado por knife_sj
mi problema es como hago para "saber" cuando se ejecuta algún programa, es decir, cuando yo hago 2ble click sobre algo: como hago para que mi programa se entere de esto y compruebe que dicho software esta permitido ejecutar.
les agradezco desde ya las respuestas
|
Podrías hacer algún programa/servicio para monitorizar los programas o procesos que están ejecutándose en una máquina determinada, para ello podrías utilizar las antiguar funciones ToolHelp incluidas en el API de windows, pero en este sentido creo que existen procedimientos mejores... te pongo un poco de código de ejemplo:
Código Delphi
[-]
procedure TForm1.Button1Click(Sender: TObject);
Var
pidProcess: array [0..1023] of DWORD;
hProcess: DWORD;
dwCount: DWORD;
hMod: HMODULE;
ModuleFileName: array[0..MAX_PATH] of Char;
i: Integer;
Item : TListItem;
begin
ListView1.Items.Clear;
if EnumProcesses(@pidProcess, SizeOf(pidProcess), dwCount) then
for i := 0 to dwCount div SizeOf(DWORD) do
begin
Item := ListView1.Items.Add;
Item.Caption := IntToStr(pidProcess[i]);
Item.SubItems.Add(GetExeName( pidProcess[i]) );
end;
End;
***
Código Delphi
[-]
function GetExeName(ProcessID
Word):string;
var ProcHandle : THandle;
szName : array [0..Max_Path] of char;
ModHandle : HModule;
cb,cbNeeded,
NumModules : DWord;
begin
ProcHandle:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, ProcessID);
if ProcHandle<>0 then begin
try
cb:=SizeOf(ModHandle);
if EnumProcessModules(ProcHandle,
@ModHandle,
cb, cbNeeded) then begin
NumModules:=cbNeeded div SizeOf(HModule);
if (NumModules>0) and (GetModuleFileNameEx(ProcHandle,
ModHandle,
@szName,
SizeOf(szName))>0)
then
Result:=szName;
end;
finally
CloseHandle(ProcHandle);
end;
end;
end;
Ahora que ya tenemos la lista de programas en ejecución (sin utilizar las Toolhep), tienes varias opciones, por ejemplo:
- Tener en la máquina cliente una lista de programas permitidos y compararla con la lista de procesos en ejecución, si existen alguna anomalía, matar el proceso en cuestión...
- Si elaboras un programa cliente / servidor, podrías mandar esta lista de procesos al programa servidor y que sea este el que revise los procesos de una máquina, con otra lista de procesos permitidos, y si es el caso, que avise al operario de turno para patear al intruso...
La Forma de comunicación entre máquinas y el envío de paquetes podrías hacerlo según la idea que hace algunos días me propuso seoane, el hilo está
aquí.
Espero que esta información te resulte útil, esto es solamente una propuesta