elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Capturar señal WM_QUERYENDSESSION
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Capturar señal WM_QUERYENDSESSION  (Leído 3,955 veces)
gxg

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Capturar señal WM_QUERYENDSESSION
« en: 24 Febrero 2011, 23:00 pm »

Hola necesito un codigo en  C para saber cuando windows ha lanzado esta señal.
La idea es ejecutar un trozo de codigo antes de que se apague el pc.


Gracias


En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: Capturar señal WM_QUERYENDSESSION
« Respuesta #1 en: 24 Febrero 2011, 23:04 pm »

tienes que usar WinAPI

en el bucle de mesajes, pones un

Código
  1. case WM_QUERYENDSESSION:
  2. code
  3. break;

y ya

el bucle de mensajes seria algo asi

Código
  1. LRESULT CALLBACK WindowsProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  2. {
  3.    switch(msg)                //Analizamos el mensaje que recibe como parametro la función
  4.    {
  5.        case WM_PAINT:         //En caso que ocurra WM_PAINT
  6.            HDC hDC;   //Creamos un dispositivo de contexto (para poder dibujar)
  7.            //Contiene información que puede ser usada para pintar el área de cliente de una ventana por la propia aplicación.
  8.            PAINTSTRUCT ps;
  9.            hDC = BeginPaint(hwnd, &ps);  //Prepara la ventana para dibujar sobre ella
  10.            RECT  rectangulo;      //Creamos un rectangulo en la ventana para dibujar sobre el
  11.            GetClientRect(hwnd, &rectangulo);   //Agregamos el rectangulo a la ventana
  12.            //Función que dibuja un texto sobre el rectangulo creado
  13.            DrawText(hDC,                                   //Identificador del dispositivo de context
  14.                     "Hola Mundo!!!!!",                     //Texto a dibujar en pantalla
  15.                     -1,                                    //Dejamos que la función ajuste automaticamente el tamaño del texto.
  16.                     &rectangulo,                            //Dirección del rectangulo donde se dibujará el texto
  17.                     DT_SINGLELINE | DT_CENTER | DT_VCENTER  //Formato del texto (una sola linea centrada horizontal y vericalmente)
  18.                     );
  19.            EndPaint(hwnd, &ps);        //Termina el proceso de dibujo en la ventana
  20.        break;
  21.  
  22.        case WM_DESTROY:          //En caso que ocurra WM_DESTROY
  23.            PostQuitMessage(0);  //Ocurre el mensaje WM_QUIT para terminar la aplicación
  24.            return 0;
  25.        break;
  26.    }
  27.  
  28.    //Esta función procesa los mensajes no tratados por WindowsProc(), como redimensionar
  29.    //la ventana, maximizarla, etc.. , es decir, hace lo predterminado sin alterar su función
  30.    return DefWindowProc(hwnd, msg, wParam, lParam);
  31. }


mirate este post que explican mejor que yo
http://foro.elhacker.net/programacion_cc/principios_basicos_de_programacion_windows_lenguaje_c-t299760.0.html


En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Capturar señal WM_QUERYENDSESSION
« Respuesta #2 en: 25 Febrero 2011, 00:53 am »

post repetido

Y algo asi esta hecho en este hilo
En línea

gxg

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Capturar señal WM_QUERYENDSESSION
« Respuesta #3 en: 25 Febrero 2011, 09:19 am »

Ya lei todos esos enlaces antes de que pusiera este post.
Llevo 3 meses programando, no quiero que me digais como se hace necesito el trozo de codigo contreto, porque tras buscar mucho informacion no soy capaz de hacerlo por mi mismo.
En el enzace anterior no estra en c.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Capturar señal WM_QUERYENDSESSION
« Respuesta #4 en: 25 Febrero 2011, 11:35 am »

gxg: vas a tener que poner mas esfuerzo de tu parte.

raul338: no dejes mas enlaces sobre VB por favor, este no es el subforo adecuado para eso.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
gxg

Desconectado Desconectado

Mensajes: 37


Ver Perfil
Re: Capturar señal WM_QUERYENDSESSION
« Respuesta #5 en: 2 Marzo 2011, 16:04 pm »

Lo he hecho de esta forma pero no me funciona, ¿Alguien me puede ayudar?

MSG msg;


while(1)
{
GetMessage(&msg, NULL, 0, 0)

if(msg.wParam==WM_QUERYENDSESSION)
//Codigo a ejecutar cuando se apaga el pc
}


Mi SO es windows xp

EI: juntando mensajes.

Ahora estoy utilizando este codigo, pero no me funciona porque al apagar el pc no me sale ninguna ventana ni se me borra el archivo que tengo en  c:\apagar.txt


Código:
#include <windows.h>
#include <stdio.h>
LRESULT CALLBACK YourWindowProc(HWND hWnd, UINT uMsgId, WPARAM wParam, LPARAM lParam)
{
  switch(uMsgId) {
    case WM_QUERYENDSESSION:
        {
            remove("C:\\apagar.txt ");       
            MessageBoxA(0, "adios", "dw", 0);
           
            return 0;
            break;
        }
  }
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wc;
    MSG msg;
    wc.lpfnWndProc = YourWindowProc;
    BOOL bRet;
   
 
    while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0)
    {
  if (bRet == -1)
  {
   
     
  }
  else
  {
       
       
    TranslateMessage(&msg);
   
    DispatchMessage(&msg);
  }
    }
    return 0;
}
« Última modificación: 6 Marzo 2011, 12:03 pm por Eternal Idol » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Capturar TV
Multimedia
Arcade 3 1,977 Último mensaje 3 Marzo 2004, 18:41 pm
por Songoku
Señal wifi universidad a unos 800mtros, la mejor para amplificar señal
Materiales y equipos
zolio 6 9,904 Último mensaje 16 Octubre 2009, 15:51 pm
por motocros_elche
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines