Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2005
NPIdea NPIdea is offline
Miembro
 
Registrado: feb 2005
Posts: 121
Poder: 20
NPIdea Va por buen camino
Solucionadooooooooooo

Jejeje, pues he encontrado este componente, como no, en otra gran página sobre el fascinante mundo de Delphi, despues de probar montones de formas, con privilegiios, mensajes, capturas, etc, etc. Y lo peor es que cada vez que se pulsa el maldito botón hay que arrancar el sistema.

Sin más rollos ni dilaciones os presento a PowerButton (Lo publico tal como lo he encontrado):

Código Delphi [-]
unit PowerButton;
///////////////////////////////////////////////////////////////////////////////////////
//Dies ist eine Komponente um den Powerknopf anzusteuern.
//Eigenschaften:
//PowerOffEnable:boolean
//  >false lässt den Pc nicht mehr herunterfahren
//Ereignisse:
//  OnPowerbuttonpress
//  >Wird ausgeführt wenn der Powerbutton gedrückt wurde
//
//Programmed by CTV => www.ctvnet.ch
//
//Komponente darf frei für alles verwendet werden copyright darf nicht entfernt werden
///////////////////////////////////////////////////////////////////////////////////////

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Menus, ShellApi, ExtCtrls, Dialogs;
 
type
  TPowerButton = class(TComponent)
  private
    FHooked: Boolean;
    FOnPowerbuttonPress: TNotifyEvent;
    PPowerOffEnable: Boolean;
    function MessageHook(var Msg: TMessage): Boolean;
  protected
    procedure DoPowerbuttonPress; dynamic;
  public
    Version, Hersteller: string;
    IResultHi, IResultLo, ILParamHi, ILParamLo, IWParamHi, ILParam,
    IWParamLo, IWparam, Imsg, IResult: Integer;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    {events}
    property OnPowerbuttonPress: TNotifyEvent
      read FOnPowerbuttonPress write FOnPowerbuttonPress;
    {properties}
    property PowerOffEnable: Boolean read PPowerOffEnable write PPowerOffEnable;
  end;
procedure Register;
implementation
const
  PBT_APMQUERYSUSPEND = 536; {Request for permission to suspend.}
procedure Register;
begin
  RegisterComponents('Zusätzlich', [TPowerButton]);
end;
constructor TPowerButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Version    := '1.0.0.0';
  Hersteller := 'CTVNet.ch';
  FHooked    := False;
  if not (csDesigning in ComponentState) then
  begin
    Application.HookMainWindow(MessageHook);
    FHooked := True;
  end;
end;
procedure TPowerButton.DoPowerbuttonPress;
begin
  if Assigned(FOnPowerbuttonPress) then FOnPowerbuttonPress(Self);
end;
function TPowerButton.MessageHook(var Msg: TMessage): Boolean;
begin
  IResultHi := Msg.ResultHi;
  IResultLo := Msg.ResultLo;
  ILParamHi := Msg.LParamHi;
  ILParamLo := Msg.LParamLo;
  IWParamHi := Msg.WParamHi;
  ILParam   := Msg.lParam;
  IWParamLo := Msg.WParamLo;
  Imsg      := Msg.Msg;
  IResult   := Msg.Result;
  IWparam   := Msg.wParam;
  if (Msg.Msg = PBT_APMQUERYSUSPEND) and (Msg.wParam = 0) then //win95/98
  begin
    if PPowerOffEnable = False then
    begin
      Msg.Result := PWR_FAIL;
    end;
  end;
  if (Msg.Msg = PBT_APMQUERYSUSPEND) and (Msg.wParam = 0) then //winNT,2k,XP
  begin
    if PPowerOffEnable = False then
    begin
      Msg.Result := BROADCAST_QUERY_DENY;
    end;
  end;
  if (Msg.Msg = PBT_APMQUERYSUSPEND) and (Msg.wParam = 0) then //excute Event
  begin
    DoPowerbuttonPress;
  end;
end;
destructor TPowerButton.Destroy;
begin
  if FHooked then Application.UnhookMainWindow(MessageHook);
  inherited Destroy;
end;
end.

Última edición por roman fecha: 31-03-2005 a las 18:58:05.
Responder Con Cita
  #2  
Antiguo 31-03-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola NPIdea,

Me tomé la libertad de editar tu mensaje para agregar las etiquetas [delphi] para que fuera más legible el código.

Muy interesante, ahora sabemos algo más y agradezco que hayas publicado la solución que encontraste.

// Saludos
Responder Con Cita
  #3  
Antiguo 31-03-2005
NPIdea NPIdea is offline
Miembro
 
Registrado: feb 2005
Posts: 121
Poder: 20
NPIdea Va por buen camino
Cita:
Empezado por roman
Hola NPIdea,

Me tomé la libertad de editar tu mensaje para agregar las etiquetas [delphi] para que fuera más legible el código.

Muy interesante, ahora sabemos algo más y agradezco que hayas publicado la solución que encontraste.

// Saludos
Tranquilo, muy bien hecho, hasta yo me entero y todo,jeje.

Saludicos y a otra cosa.
Responder Con Cita
  #4  
Antiguo 11-10-2017
GUILLERMOMEJIA GUILLERMOMEJIA is offline
Registrado
 
Registrado: abr 2008
Posts: 2
Poder: 0
GUILLERMOMEJIA Va por buen camino
La solución más fácil era...

Jejeje... hola a todos. Me he encontrado este hilo tantos años después y recordé lo fácil que solucioné el tema del miserable botón de apagado en el teclado, siempre cerca de una tecla de uso contínuo: para mí bastó un destornillador y arrancar la teclita de todos mis teclados!!!... jaaaaaajajajaja... lástima que no lo leí entonces... abrazo para todos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 18:48:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi