Я пытаюсь получить формат даты, когда когда-либо пользователь меняет его в системной ОС, но я получаю ту же дату.
У меня есть такой код:
#include <windows.h>
#include <iostream>
#include <tchar.h>
#include <stdio.h> /* printf */
#include <time.h> /* time_t, struct tm, time, localtime, strftime */
#include <locale.h> /* struct lconv, setlocale, localeconv */
#include <stdlib.h>
using namespace std;
const TCHAR g_szClassName[] = TEXT("myWindowClass");
int getDate() {
time_t rawtime;
struct tm *timeinfo;
char system_date_buffer[80];
char iso_date_buffer[80];
int date_format;
struct lconv *lc;
time(&rawtime);
timeinfo = localtime(&rawtime);
setlocale(LC_ALL, "");
strftime(system_date_buffer, 80, "%x", timeinfo);
printf("System Date format is: %s\n", system_date_buffer);
strftime(iso_date_buffer, 80, "%Y-%m-%d", timeinfo);
printf("ISO Date format is: %s\n", iso_date_buffer);
return puts(iso_date_buffer);
return 0;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_SETTINGCHANGE: {
getDate();
cout << "event received - lParam: " << (char *)lParam << endl;
} break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = g_szClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&wc)) {
MessageBox(NULL, _T("Window Registration Failed!"), _T("Error!"),
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, g_szClassName,
_T("The title of my window"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL,
hInstance, NULL);
if (hwnd == NULL) {
MessageBox(NULL, _T("Window Creation Failed!"), _T("Error!"),
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
// ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
while (GetMessage(&Msg, NULL, 0, 0) > 0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
Когда-либо событие запускается и здесь учитывается регистр, я вызываю getDate()
метод:
case WM_SETTINGCHANGE: {
getDate(); // prints same date value
cout << "event received - lParam: " << (char *)lParam << endl;
}
Но он печатает тот же формат даты. Зачем? Такие переменные, как struct tm *timeinfo;
, создаются каждый раз, когда вызывается метод, я думаю, так почему он не печатает новый формат даты?