|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
[c++] modificare l'ora
Ciao a tutti! Vorrei sapere come è possibile modificare l'ora che compare nella barra di windows, sostituendovi per esempio una scritta. So che questi dati vengono modificati in (ditemi se sbaglio) HKEY_CURRET_USER > Control Panel > International nei file
- s1159 - s2359 - sTimeFormat - TimeFormat grazie. ciao. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
up...
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Ciao, che io sappia, nella chiave che hai detto, il valore s1159 indica il testo da aggiungere per l'ora "AM", il valore s2359 indica il testo da aggiungere per l'ora "PM" e il valore sTimeFormat indica appunto il formato completo dell'ora.
Puoi senz'altro modificare questi valori, mettendo ad esempio in sTimeFormat la stringa "Ciao" per avere questa stringa al posto dell'orologio. Ma tieni presente che questa è una impostazione globale per l'utente e quindi va ad influire anche su tutte le altre applicazioni che usano le funzioni di formattazione dell'ora!!! Quindi sei avvisato ...
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
#4 | |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
Quote:
PS: ho le basi del c++. |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Codice:
LONG lRet;
HKEY hKey;
CHAR szFormat[] = "Ciao";
lRet = RegOpenKeyEx (HKEY_CURRENT_USER, "Control Panel\\International",
0, KEY_WRITE, &hKey);
if (lRet == ERROR_SUCCESS)
{
lRet = RegSetValueEx (hKey, "sTimeFormat", 0, REG_SZ, (const BYTE*) szFormat, lstrlen (szFormat) + 1);
if (lRet == ERROR_SUCCESS)
{
/* Successo */
}
RegCloseKey (hKey);
}
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
ma quel codice non va inserito in un contesto?
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
|
#8 | |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
Quote:
|
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Se vuoi fare una applicazione Win32 console, il codice completo sarebbe, ad esempio: Codice:
#define STRICT
#include <windows.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
LONG lRet;
HKEY hKey;
CHAR szFormat[] = "Ciao";
lRet = RegOpenKeyEx (HKEY_CURRENT_USER, "Control Panel\\International",
0, KEY_WRITE, &hKey);
if (lRet == ERROR_SUCCESS)
{
lRet = RegSetValueEx (hKey, "sTimeFormat", 0, REG_SZ, (const BYTE*) szFormat, lstrlen (szFormat) + 1);
if (lRet == ERROR_SUCCESS)
printf ("Scrittura valore avvenuta correttamente!\n");
else
printf ("Scrittura valore fallita!\n");
RegCloseKey (hKey);
}
else
printf ("Errore nella apertura della chiave!\n");
return 0;
}
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
|
|
|
|
|
|
#10 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
grazie, sei stato molto utile.
mi chiedevo però una cosa. Con quel codice l'ora viene cambiata solo al riavvio. E' possibile farla cambiare appena eseguito l'exe? ![]() EDIT: il codice mi permette di immettere solo 4 caratteri? come posso aumentarli? EDIT_2: altra cosa bizzarra.. se scrivo "CIAO" me lo legge.. se scrivo "HOLA" mi compare "11OLA".. 11 perché sono le 11 e qualcosa.. ma perché fa così se i caratteri sono sempre 4? Ultima modifica di bouncey2k : 25-01-2006 alle 10:02. |
|
|
|
|
|
#11 | ||||
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Quote:
La soluzione comunque c'è! Inviare il messaggio WM_SETTINGCHANGE in broadcast a tutte le applicazioni con questo codice: Codice:
DWORD dwRetval; ... ... SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "intl", SMTO_ABORTIFHUNG, 10000, &dwRetval); Quote:
Quote:
Una soluzione potrebbe essere quella di mettere in "sTimeFormat" la stringa "tt" che indica di mettere il "time marker" cioè la dicitura relativa ad AM/PM ed impostare entrambi i valori "s1159" e "s2359" alla stringa che vuoi tu. Nota finale: oltre a scrivere in quei valori del registro, si possono cambiare le impostazioni del locale con la funzione SetLocaleInfo, che è il modo "pulito" di accedere a queste informazioni. L'accesso al registro (che è quello che fa poi la SetLocaleInfo) è comunque fattibile.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
||||
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Jan 2006
Messaggi: 271
|
1) mettendo il codice
Codice:
DWORD dwRetval; ... ... SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "intl", SMTO_ABORTIFHUNG, 10000, &dwRetval); 2) Non ho capito bene ancora una cosa sui caratteri.. Il massimo di caratteri che posso usare arrivare sulla 30ina circa.. 3) "Una soluzione potrebbe essere quella di mettere in "sTimeFormat" la stringa "tt" che indica di mettere il "time marker" cioè la dicitura relativa ad AM/PM ed impostare entrambi i valori "s1159" e "s2359" alla stringa che vuoi tu." .. in che modo? |
|
|
|
|
|
#13 | ||
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 5206
|
Quote:
Quote:
Codice:
SetLocaleInfo (LOCALE_USER_DEFAULT, LOCALE_STIMEFORMAT, "tt"); Quindi "cancella" quanto ti ho detto sulla SetLocaleInfo. Per quello che vuoi fare tu, devi per forza scrivere direttamente nel registry. Ecco il codice: Codice:
#define STRICT
#include <windows.h>
#include <stdio.h>
int main (void)
{
LONG lRet;
HKEY hKey;
DWORD dwRetval;
CHAR szFormat[] = "tt";
CHAR szText[] = "Hello da Andrea";
lRet = RegOpenKeyEx (HKEY_CURRENT_USER, "Control Panel\\International",
0, KEY_WRITE, &hKey);
if (lRet == ERROR_SUCCESS)
{
lRet = RegSetValueEx (hKey, "sTimeFormat", 0, REG_SZ, (const BYTE*) szFormat, lstrlen (szFormat) + 1);
printf ("Scrittura valore sTimeFormat: %s\n", lRet == ERROR_SUCCESS ? "OK" : "Errore");
lRet = RegSetValueEx (hKey, "s1159", 0, REG_SZ, (const BYTE*) szText, lstrlen (szText) + 1);
printf ("Scrittura valore s1159: %s\n", lRet == ERROR_SUCCESS ? "OK" : "Errore");
lRet = RegSetValueEx (hKey, "s2359", 0, REG_SZ, (const BYTE*) szText, lstrlen (szText) + 1);
printf ("Scrittura valore s2359: %s\n", lRet == ERROR_SUCCESS ? "OK" : "Errore");
RegCloseKey (hKey);
SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "intl", SMTO_ABORTIFHUNG, 10000, &dwRetval);
}
else
printf ("Errore nella apertura della chiave!\n");
return 0;
}
In effetti anche io ho notato un limite nella lunghezza della stringa. Nella barra di Windows riesco a far visualizzare un massimo di 36 caratteri. Penso che non si possa fare nulla per superare questo limite. Presumo che sia un limite di Explorer o delle funzioni di formattazione della data/ora.
__________________
Andrea, Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%) Java Versions Cheat Sheet |
||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:01.




















