| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 19 Ago, 2004 10:12 pm Asunto: Detectar estado inactivo |
|
|
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.. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Mar 07 Dic, 2004 10:25 pm Asunto: |
|
|
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. _________________
 |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 26 May, 2009 4:29 pm Asunto: |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 26 May, 2009 5:38 pm Asunto: |
|
|
Gracias,
Voy a probar y te cuento.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 26 May, 2009 5:48 pm Asunto: |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mar 26 May, 2009 7:13 pm Asunto: |
|
|
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 |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mar 26 May, 2009 8:10 pm Asunto: |
|
|
Muchas gracias,
Voy a ponerme con ello.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
Carlos J. Fernandez Master


Registrado: 27 Oct 2004Mensajes: 574
|
Publicado: Mie 27 May, 2009 11:37 am Asunto: |
|
|
Por fiiiiin,
Ya funciona perfectamente, muchas gracias Escafandra por tu ayuda.
Te debo una.
Un abrazo.
Carlos |
|
| Volver arriba |
|
 |
|