PDA

View Full Version : [C/C++]modifica data windows xp


$te
15-01-2008, 23:22
esiste un modo x poter sapere se la data del pc viene modificata?
ho un programma che usa una funzione in c per acquisire la data dal pc, se pero viene modificata la data nel pc (manualmente) mi sfasa tutto, quindi dovrei sapere qnd la data viene cambiata, oppure usare un'altra data (escludiamo quelle via internet).
grazie

kk3z
16-01-2008, 09:50
WM_TIMECHANGE (http://msdn2.microsoft.com/en-us/library/ms725498.aspx), ma la documentazione non è molto chiara... non si capisce se viene inviato a tutte le finestre

71104
16-01-2008, 11:12
WM_TIMECHANGE (http://msdn2.microsoft.com/en-us/library/ms725498.aspx), ma la documentazione non è molto chiara... non si capisce se viene inviato a tutte le finestre hai ragione ma francamente dubito che quel messaggio arrivi pure alle check box :D :D :D
saranno solo le top-level penso, di solito per i messaggi broadcast è così.

kk3z
16-01-2008, 12:04
Ma ciuerto, intendevo tutte le finestre top level :) attento il ragazzo :D

$te
16-01-2008, 13:13
in ke senso nn a tutte le finestre?

io ho provato ad inserire questo nel mio programma

if((WindowProcedure( hwnd, WM_TIMECHANGE, 0,0))==NULL)
return 0;

ma nn accade nulla se cambio la data

kk3z
16-01-2008, 17:00
if((WindowProcedure( hwnd, WM_TIMECHANGE, 0,0))==NULL)
return 0;

:cry: non si chiama la window procedure come una funzione! E poi tu lo devi gestire il messaggio, non inviartelo alla tua procedura da solo. Non hai ancora chiara la gestione dei messaggi. Prova a compilare questa piccola applicazione, avviala e cambia la data:
#include <windows.h>

LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "CodeBlocksWindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{
HWND hwnd;
MSG messages;
WNDCLASSEX wincl;

wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;
wincl.style = CS_DBLCLKS;
wincl.cbSize = sizeof (WNDCLASSEX);

wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;
wincl.cbClsExtra = 0;
wincl.cbWndExtra = 0;
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

if (!RegisterClassEx (&wincl))
return 0;

hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Code::Blocks Template Windows App", /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

ShowWindow (hwnd, nCmdShow);

while (GetMessage (&messages, NULL, 0, 0))
{
TranslateMessage(&messages);
DispatchMessage(&messages);
}

return messages.wParam;
}

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_TIMECHANGE:
MessageBox(hwnd, "Il tempo è cambiato!", 0,0);
break;

case WM_DESTROY:
PostQuitMessage (0);
break;

default:
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}

$te
16-01-2008, 18:20
ah ok...era piu semplice del previsto:P
grazie mille (non palleggio ancora bene la gestione dei messaggi)