View Full Version : [C/C++]modifica data windows xp
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
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
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ì.
Ma ciuerto, intendevo tutte le finestre top level :) attento il ragazzo :D
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
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;
}
ah ok...era piu semplice del previsto:P
grazie mille (non palleggio ancora bene la gestione dei messaggi)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.