Problemas para ocultar procesos

Hola tengo problemas al intentar ocultar mi aplicación de la lista de procesos encontré muchos códigos, pero ninguno funciona (por lo menos en windows xp), espero que e ayudes, por favor estoy desesperado.
Cuando ejecuto mi aplicación me sale este error:
No se encuentra punto de entrada del procedimiento
registerserviceprocess en la biblioteca de vínculos dinámicos.
Espero que me ayudes
Muchas gracias

1 respuesta

Respuesta
1
Ok mira estos componentes los instalas a mano, es decir no trae un setup al cual le das doble click y listo. No.
Ahí debe traer un archivo texto en el cual te dice como instalar. Pero básicamente según el delphi que tengas vienen archivos dpk para cada delphi, en archivo texto busca la instalación para el delphi que tengas, luego te va a indicar que abras ciertos dpk algunos solamente se compilan y otros se instalan y listo, te deberán aparecer 3 pestañas de componentes nuevas.
Si te diste cuenta en los componentes que bajaste viene una aplicación demos la cual engloba todos los componentes y si te das cuenta al correr ese demo al minimizarlo lo desaparece la lista de tareas.
Hola, gracias de nuevo por la ayuda, instale el rxlib y esta bueno, tiene muchas cosas interesantes, pero intente correr el proyecto que viene adjunto, y no corre, primero dice que hay un carácter ilegal, solucionado eso, me dice que no existe un dcu "designintf.dcu", pero los componentes funcionan, quería preguntarte si es que estos componentes me van a ayudar a resolver mi problema que es el de que no se vea mi aplicación en la lista de la pestaña procesos cuando hago ctr-alt-supr, espero por favor me respondas
Te agradezco muchísimo.
Ok mira, busca en la red estos componentes:
RxLib son gratuitos, entre ellos trae un componente llamado trayicon que es el que te oculta de la barra de tareas tu aplicación, al bajarlos ahí trae unos demos para que veas como se hace.
Hola, gracias por la ayuda, ya encontré el rxlib pero ahora tengo algunos problemas para instalarlos, no puedo instalarlo, espero me indiques como es que lo tengo que instalar, ya que busque como 4 hjoras en inter net y no encontré ninguno que remotamente funcione. Espero que me ayudes, y que estoy solucione mi problema de ocultar la aplicación de la lista de procesos, hasta ahora lo único que eh podido es solo bloquear el ctrl-alt-supr. Espero que me ayudes
Muchas gracias
A ver checa esta función a ver si funciona para xp.
Ocultar:
ShowWindow( FindWindowEx( FindWindow('Shell_TrayWnd', nil),
HWND(0), 'ReBarWindow32', nil),
Sw_Hide);
Mostrar:
ShowWindow( FindWindowEx( FindWindow('Shell_TrayWnd', nil),
HWND(0), 'ReBarWindow32', nil),
Sw_Show);
Bueno estos componentes te la ocultan de la barra de tareas, y creo que por ende al darle ctrl+alt+delete no deberá aparecer, más sin embargo en la pestaña de procesos si te va a aparecer.
Si esos componentes no te funcionan te mando 2 formas diferentes haber cual te funciona:
Primero, pon esta declaración en el implementation de tu form:
function RegisterServiceProcess (dwProcessID, dwType: DWord) : DWord;
stdcall; external 'KERNEL32.DLL';
Ahora, para ocultarla:
RegisterServiceProcess(GetCurrentProcessID,1);
Volver a mostrarla:
RegisterServiceProcess(GetCurrentProcessID,0);
Lord Trancos me comunica que en Windows 2000 no existe esa función en la Kernel32.DLL ... así que os fallará el truco.
Echarle un vistazo al truco:
[413] Saber si una DLL contiene una determinada función
Aqui teneis una nueva version de este truco, en el que la procedure RegisterServiceProcess es declarada dinámicamente, evitando el problema de si existe o no en Windows la jodía procedure...
Primero, debemos registrar el tipo de la función que queremos registrar, para que Delphi controle bien sus parámetros.
Lo haremos en el interface de la form:
unit Unit1;
Interface
Uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
{Esta linea/This Line}
type
TRegisterService = function (dwProcessID, dwType:DWord):Dword;stdcall;
Ahora, necesitamos una variable global a la form para guardar la direccion de la procedure.
Por ejemplo, la incluiremos en la parte private de la form:
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
RegisterServiceProcess: TRegisterService;
public
{ Public declarations }
end;
Ahora, necesitamos asignar la direccion a la procedure antes de poder usarla.
Lo haremos en el evento OnCreate de la form. Fíjate que usaremos una función que comprueba si la procedure existe o no, generando una excepción (que podemos capturar o dejarla pasar) si la procedure no existiese...:
procedure TForm1.FormCreate(Sender: TObject);
function AsignaProcedure(EnQueDll,Procedimiento: string):TFarProc;
var
MangoProc,
MangoLib : THandle;
begin
Result:=nil;
MangoLib:=GetModuleHandle(Pchar(EnQueDll));
if MangoLib <> 0 then
Result:=GetProcAddress(MangoLib,Pchar(Procedimiento));
{Si la DLL o la procedure no esta disponible... error}
if (MangoLib=0) or (Result=nil) then
raise Exception.create( Procedimiento+
' en '+
EnQueDll+
' no encontrado.');
end;
begin
try
@RegisterServiceProcess:=AsignaProcedure( 'KERNEL32.DLL',
'RegisterServiceProcess');
except
ShowMessage('Error, funcion RegisterServiceProcess no encontrada...');
end;
end;
Si te fijas, en este ejemplo capturo la excepción, dando el mensaje que a mi me da la gana. Si quitase el 'ShowMessage' podría hacerla silenciosa... es decir, que el usuario ni se enteraría de que existe ese problema. Tu mismo.
Es conveniente que nos vayamos acostumbrando a la manipulación de errores con excepciones, al final te quitan mucho trabajo.
Finalmente... nos queda el truco en sí, es decir... llamar a la función que tanto currelo nos ha dado declarar:
{Ocultar la aplicacion.../Hide the application...}
if Assigned(RegisterServiceProcess) then
RegisterServiceProcess(GetCurrentProcessID,1);
end;
Si te fijas, utilizo el If Assigned para asegurarme de que fue declarada, para evitar sorpresitas...
Hola, gracias por tu tiempo, probé las dos formas que me mandaste en la primera no encuentra kernel, y en la segunda lo que hace exactamente es capturar el error del try. except, es decir no encuentra RegisterServiceProcess en el KERNEL32.DLL, supongo que en las versiones de windows que no son 9x la función se encuentra en otro lugar, espero que puedas ayudarme a resolver el problema, o darme alguna idea de como resolverlo. Espero por favor me respondas.
Muchas gracias
Hola, probé la función es muy interesante desaparece todos los botones de la barra de tareas, funciona, yo encontré un componente, que viene con código en muchos lenguajes, todavía no lo vi muy bien, pero tiene muchísimas funciones y son increíblemente fácil de aplicarlas, pero para mi mala suerte (o por lo menos no la encontré) no tengo ninguna función que borre la aplicación de la lista de procesos, el componente se llama dWinlock pero es solo la versión trial, supongo que en la versión completa el componente trae más cosas, espero que lo veas, en este momento vi que hay un crack para eso pero no se si es para el componente, lo voy a ver, buscalo te recomiendo que lo veas, gracias de nuevo por ayudarme, espero que me ayudes a resolver mi problema.
Te agradezco muchísimo
Bueno mira, creo que va estar un poco complicado hacer que desaparezca de los procesos.
Quizá otra manera seria mejor, bloquear el task manager:
Añade registry en el uses de tu form
procedure TForm1.Button1Click(Sender: TObject);
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;
begin
//Desabilitamos el Ctrl-Alt-Del
//Disable Ctrl-Alt-Del
DisableTaskMgr (True);
end;
Hola, gracias por tu ayuda, ya logre bloquear el administrador de tareas, pero lo ideal sería que el proceso no aparezca en la lista de la pestaña procesos, pero en caso de que no pueda voy a usar el otro método (bloquear task manager), espero que si encuentras alguna forma de solucionar mi problema me ayudes, el código que use para bloquear el administrador de tareas es:
unit Unit1;
interface
Uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,registry, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
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;
begin
//Desabilitamos el Ctrl-Alt-Del (Con False vuelve a estar habilitado)
DisableTaskMgr (false);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
showwindow(application.Handle,SW_hide);// esta linea la desparece de la barra de tareas
end;
end.
probado en windows service pack 2
Espero que me puedas dar algún consejo acerca del problema
michas gracias.
Pues por el momento seria la única forma bloqueando el administrador de tareas.
Si encuentro algo para eliminarlo de la lista de procesos te lo menciono.
Si, termina esta, porque ya esta muy larga, y mandame una nueva.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas