Con ésté trozo de código se puede obtener la lista de los procesos (nombre del ejecutable) que están en marcha en ese momento en la máquina:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| var
i: Integer;
bContinue: BOOL;
begin
// Limpiar la lista
ListBox1.Items.Clear;
// Recoge la lista de procesos en éste momento
aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
// Acceder al primer proceso
bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
// Recorerr los procesos activos
while (Integer(bContinue) <> 0) do begin
// Añadirlo a la lista
ListBox1.Items.Add(ExtractFileName(aProcessEntry32.szExeFile));
// Hay más?
bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
end;
// cerrar la estructura
CloseHandle(aSnapshotHandle); |
var
i: Integer;
bContinue: BOOL;
begin
// Limpiar la lista
ListBox1.Items.Clear;
// Recoge la lista de procesos en éste momento
aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
// Acceder al primer proceso
bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
// Recorerr los procesos activos
while (Integer(bContinue) <> 0) do begin
// Añadirlo a la lista
ListBox1.Items.Add(ExtractFileName(aProcessEntry32.szExeFile));
// Hay más?
bContinue := Process32Next(aSnapshotHandle, aProcessEntry32);
end;
// cerrar la estructura
CloseHandle(aSnapshotHandle);
Utilizando aProcessEntry32 se puede obtener más información de cada uno de los procesos, como:
* Identificador
* Nombre competo
* …
IntToHex(aProcessEntry32.th32ProcessID, 4)
aProcessEntry32.szExeFile
Creando tres sencillos procedimientos en un formulario se pueden mover controles visuales en Runtime colocados en un form siempre que deriven de TControl. Basta con definir los siguientes procedimientos y asignarlos a todos los controles que queramos mover; Además se deben definir dos variables en la parte privada del form:
NOTA: Los procedimientos se deben definir no en la parte privada, sino como eventos del form.
En la parte final de artículo se puede descargar un ejemplo compilado con Delphi 6.
- procedure MouseMove;
- procedure MouseUp;
- procedure MouseDown;
// Definirlos como ventos del form
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
...
// Definir éstas variables en la parte privada...
private
Capturing:Boolean;
MouseDownSpot:TPoint;
....
// IMPLEMENTACION
// Procedimintos a asignar a los eventos de los controles...
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
// Estamos capturando?
if Capturing then begin
// Mover el componente
TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Estamos capturando?
if Capturing then begin
ReleaseCapture; // Liberar la captura
Capturing := false;
TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Comenzar la captura y movimiento
Capturing := true;
MouseDownSpot.X := x;
MouseDownSpot.Y := Y;
end; |
// Definirlos como ventos del form
procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
...
// Definir éstas variables en la parte privada...
private
Capturing:Boolean;
MouseDownSpot:TPoint;
....
// IMPLEMENTACION
// Procedimintos a asignar a los eventos de los controles...
procedure TForm1.MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
begin
// Estamos capturando?
if Capturing then begin
// Mover el componente
TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Estamos capturando?
if Capturing then begin
ReleaseCapture; // Liberar la captura
Capturing := false;
TControl(Sender).Left := TControl(Sender).Left - (MouseDownSpot.x - x);
TControl(Sender).Top := TControl(Sender).Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
// Comenzar la captura y movimiento
Capturing := true;
MouseDownSpot.X := x;
MouseDownSpot.Y := Y;
end;
Se puede descargar un ejemplo:
Descargar