Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Detectar estado inactivo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Detectar estado inactivo Responder citando

Bien se ha realizado un codigo de la siguiente manera

Código:
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
{
    switch ( Message.Msg ){
        case   WM_KEYDOWN:
       case   WM_MOUSEMOVE:
                if( !Message.WParam ){
                    this->Caption = "Actividad de Message.WParam";
                }else{
                    this->Caption = "no Actividad de Message.WParam";
                }
                break;
        case WM_SYSCOMMAND:
            switch ( Message.WParam ){
                case SC_SCREENSAVE:
                    this->Timer1Timer(0);
                    MessageBox(Handle,"El protector quiere iniciar",
                    "Aviso", MB_ICONINFORMATION);
                    break;
            }
            break;
        case WM_ACTIVATE:
            switch ( Message.WParam ){
                case 1://activo
                case 2://activo con moouse
                    this->Timer1->Enabled=false;
                    this->Caption = Message.WParam ;
                    break;
                case 0:
                    this->Caption = Message.WParam ;
                    this->Timer1->Enabled=true;
                    break;
             };
            break;

   }

  TForm::WndProc(Message);
}


y dentro del .h

Código:
class TForm1 : public TForm
{
__published:   // IDE-managed Components
    TTimer *Timer1;
void __fastcall WndProc(Messages::TMessage &Message);
private:   // User declarations
public:      // User declarations
        __fastcall TForm1(TComponent* Owner);
};


lo que se intenta, es detectar el estado de windows, cuando no se utilizan las teclas o el mouse, puede ser dentro del sistema de windows.. o bien mucho mejor dentro de la apliacion.. lo que se requiere hacer coneste codigo, es detectar a 30 segs, de inactividad, en la apliacacion para desconectarla, algo asi, como cuando el internet, se deja de trabajar y se desconceta..
alguna sugerencia..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

al parecer lo he logrado de la siguiente manera, esta funcion, detecta, el tiempo que pasa, una applicacion, sin presionar el mouse, y sin teclear, a travez de un contador.. pongo los archivos, para que los puedan ejecutar..

saludos

ARCHIVO .H
Código:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:   // IDE-managed Components
    TStatusBar *StatusBar1;
    TEdit *Edit1;
    TMemo *Memo1;
    TTimer *Timer1;
    void __fastcall Timer1Timer(TObject *Sender);
private:   // User declarations
//-------------------------------------------------
    int Tiempo;
    void __fastcall CapturarMessage(tagMSG &Msg,bool &Handled);
//-------------------------------------------------
public:      // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


ARCHIVO .CPP
Código:

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    Application->OnMessage=CapturarMessage;
    this->Tiempo=0;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CapturarMessage(tagMSG &Msg,bool &Handled)
{
    switch(Msg.message)
    {
        case WM_MOUSEMOVE: // capturamos el mouse
        case WM_KEYDOWN:   // capturamos el teclado.
            if(Msg.wParam) // si hay activad
            {
                Tiempo = 0; // reiniciamos el contador je je
                this->Timer1->Enabled=false; // apagamos el contador
            }
            break;
        default:
                if(Tiempo==5) // 5 segundos
                {
                    this->Timer1->Enabled=false; // apagamos para que no siga
                    Caption = "Desactivado"; // mostramos una accion
                }
                else{
                    this->Timer1->Enabled=true;//activamos el timer
                    this->Caption = Tiempo; // mostrarmos los segundos
                }
            break;
   }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    this->Tiempo++; // incrementamos el tiempo
    this->Timer1->Enabled=false; // apagamos el Timer
}
//---------------------------------------------------------------------------



Y EL CODIGO DEL FORM PARA PODER CREAR DIRECTAMENTE LOS ELEMENTOS DEL MENU QUE UTILICE,

YA SAVEN VIEW AS FORM, O VIEW AS TEXT, ESTO ES EL TEXTO HAY QUE PONERLO COMO VIEW AS FORM

Código:

object Form1: TForm1
  Left = 372
  Top = 181
  Width = 352
  Height = 324
  Caption = 'Form1'
  Color = 10526880
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object StatusBar1: TStatusBar
    Left = 0
    Top = 278
    Width = 344
    Height = 19
    AutoHint = True
    Panels = <>
    SimplePanel = False
  end
  object Edit1: TEdit
    Left = 32
    Top = 40
    Width = 121
    Height = 21
    TabOrder = 1
    Text = 'Edit1'
  end
  object Memo1: TMemo
    Left = 28
    Top = 76
    Width = 185
    Height = 89
    Lines.Strings = (
      'Memo1')
    TabOrder = 2
  end
  object Timer1: TTimer
    OnTimer = Timer1Timer
    Left = 232
    Top = 48
  end
end


pero solo funciona cuando la ventana esta activa, voy a intentar hacerlo, capturando todos los mensajes de windows.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

https://cppbuilder.es/viewtopic.php?p=26804#26804
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Cesar,

Por lo que veo funciona pero para controlar las pulsaciones de teclado o ratón de la aplicación, pero como podría hacerlo sobre el sistema? que funcione estando en cualquier otra aplicación sin necesidad de tener en primer plano la mía.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Trata con esto:
WH_KEYBOARD_LL y WH_MOUSE_LL junto con un Timer.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias,

Voy a probar y te cuento.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

No hace nada,

Imagino que algo estoy haciendo mal, he copiado el codigo de arriba pero con los que tu me dices y ahora no hace nada de nada.

Puedes darme un codigo de ejemplo sino es mucho pedir?

Un abrazo

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Se trata de hacer un Hook al teclado y otro al mouse a nivel de sistema. Si no detectas actividad de ratón ni de teclado en un determinado tiempo asumes inactividad de estos elementos y por tanto del usuario.

Te dejo dos link del foro, uno muestra un código que puse para hacer un hook al mouse, el otro es de _Leo, un Hook al teclado. Ninguno de los dos precisa de una DLL. Si buscas en el foro encontrarás algún otro ejemplo.

WH_MOUSE_LL
WH_KEYBOARD_LL

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchas gracias,

Voy a ponerme con ello.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Por fiiiiin,

Ya funciona perfectamente, muchas gracias Escafandra por tu ayuda.

Te debo una.

Un abrazo.

Carlos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.