Mi è capitato di un PC nuovo di fiamma, con Windows XP Home Edition installato, che non era in grado di mostrare i DVD Video dentro Windows Media Player.
Il cliente si era aggiornato autonomamente da Windows Media Player 9 a 10, senza successo. Di fatto, dopo avere controllato, ho visto che mancava il codec per il playback dei DVD, cosa in ogni caso alquanto strana, perchè chiunque si aspetterebbe che una macchina nuova con Windows XP Home Edition aggiornata all'ultimo service pack (SP2), indipendentemente dal fatto che ci sia ultimo WMP, sia in grado di fare playback di comuni DVD.
Â
Cosa c'è da scaricare? Cercare sulla rete uno dei seguenti software:
Oggi sono incappato in uno degli arcani controlli che fa l'UAC di Windows Vista. Chi è l'UAC di Vista? E' lo User Access Control che, tradotto in italiano, corrisponde al Controllo dell'Account Utente.
Il misterioso controllo che ci ha impediva di far eseguire un nostro eseguibile in modalità standard, senza bisogno di effettuare una escalation ad un utente amministratore, è il fatto che il nome del file eseguibile contiene la parola 'Update'. Chiamatelo 'PippoUpdate.exe' o chiamatelo 'UpdateSoMama.exe' e non funziona. O meglio: quando lo lanciate, il sistema vi chiederà di autorizzare il lancio dell'eseguibile classificato come 'non identificato'.
Se invece il file eseguibile non contiene la parolina magica 'update', allora tutto fila liscio e non vi chiede nulla. Ovviamente esiste la possibilità di lanciarlo senza la richiesta di autorizzazioni, se iniettate al file un altro file manifest, in cui in sostanza gli si dice di bypassare i controlli standard di Microsoft Vista.
Per ottenere la lista dei font installati in Windows, questo il poco di codice da invocare sulla Win32. L'esempio vi mostra come fare ad ottenere tale lista di nomi con Visual Basic 6, ma con poche modifiche potete farlo in Visual C++. Nel caso in cui abbiate bisogno di fare la stessa cosa in ambiente .NET Framework, le cose sono decisamente semplificate, per il fatto che il framework ha praticamente tutto già pronto.
Create il vostro progettino VB6 con due file, un modulo ed una form:
Nel modulo:
Public Const NTM_REGULAR = &H40&
Public Const NTM_BOLD = &H20&
Public Const NTM_ITALIC = &H1&
Public Const TMPF_FIXED_PITCH = &H1
Public Const TMPF_VECTOR = &H2
Public Const TMPF_DEVICE = &H8
Public Const TMPF_TRUETYPE = &H4
Public Const ELF_VERSION = 0
Public Const ELF_CULTURE_LATIN = 0
Public Const RASTER_FONTTYPE = &H1
Public Const DEVICE_FONTTYPE = &H2
Public Const TRUETYPE_FONTTYPE = &H4
Public Const LF_FACESIZE = 32
Public Const LF_FULLFACESIZE = 64
Type LOGFONT
lfHeight As Long
lfWidth As Long
lfEscapement As Long
lfOrientation As Long
lfWeight As Long
lfItalic As Byte
lfUnderline As Byte
lfStrikeOut As Byte
lfCharSet As Byte
lfOutPrecision As Byte
lfClipPrecision As Byte
lfQuality As Byte
lfPitchAndFamily As Byte
lfFaceName(LF_FACESIZE) As Byte
End Type
Type NEWTEXTMETRIC
tmHeight As Long
tmAscent As Long
tmDescent As Long
tmInternalLeading As Long
tmExternalLeading As Long
tmAveCharWidth As Long
tmMaxCharWidth As Long
tmWeight As Long
tmOverhang As Long
tmDigitizedAspectX As Long
tmDigitizedAspectY As Long
tmFirstChar As Byte
tmLastChar As Byte
tmDefaultChar As Byte
tmBreakChar As Byte
tmItalic As Byte
tmUnderlined As Byte
tmStruckOut As Byte
tmPitchAndFamily As Byte
tmCharSet As Byte
ntmFlags As Long
ntmSizeEM As Long
ntmCellHeight As Long
ntmAveWidth As Long
End Type
Declare Function EnumFontFamiliesEx Lib "gdi32" Alias "EnumFontFamiliesExA" _
(ByVal hdc As Long, lpLogFont As LOGFONT, ByVal lpEnumFontProc As Long, _
ByVal LParam As Long, ByVal dw As Long) As Long
Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, _
ByVal FontType As Long, LParam As Long) As Long
Dim FaceName As String
'converte la stringa ritornata in formato Unicode
FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)
'stampiglia da qualche parte la stringa in questione
Form1.Print Left(FaceName, InStr(FaceName, vbNullChar) - 1)
'prosegui con l'enumerazione, visto che quella corrente e' una callback
EnumFontFamProc = 1
End Function
Nella form invece mettete questo codice:
'In a form
Private Sub Form_Load()
Dim LF As LOGFONT
'impostiamo il metodo di disegno della form come persistente
Me.AutoRedraw = True
'invochiamo l'enumerazione sulla API della Win32
EnumFontFamiliesEx Me.hdc, LF, AddressOf EnumFontFamProc, ByVal 0&, 0
End Sub
Se lanciate il prompt e digitate "telnet", rimarrete sorpresi al fatto che su Vista telnet è sparito.
Per riattivarlo basta seguire questi passi:
andare nel Pannello di Controllo
aprire il controllo Programmi e Funzionalità
cliccare la voce a sinistra "Attivazione o disattivazione delle funzionalità Windows">
spuntare il "Client Telnet"
Attendete che Windows Vista si ripigli dall'installazione locale tutte le sue cosine, nel caso mio ben 6 minuti ed un riavvio, neanche il Telnet lo dovesse cuocere in tegame a cottura lenta e riavrete il vostro fido client per terminali.
Sto sviluppando da qualche giorno un'applicazione per un mio cliente e mi sono accorto che ogni volta che cambio l'elemento selezionato all'interno di un controllo di tipo ListView, Vista emette un suono, un din per la precisione. Probabilmente il problema c'è solo con Vista, ma non ho avuto modo di provare con altri sistemi operativi in queste ore.
Ho pertanto cercato sul web ed ho trovato svariate soluzioni al problema a partire da questo indirizzo.
A parte le rischiose soluzioni di mettere mano al registro con Regedit, sostanzialmente i passi da effettuare per eliminare il problema sono questi:
aprire il Pannello di controllo
scegliere il pannello Audio
andare alla pagina Suoni
nel riquadro Eventi cercare tra le ultime voci del nodo Windows la voce Seleziona
associare un suono alla voce Selezione, magari provando col tasto Prova
Il problema dovrebbe sparire immediatamente senza bisogno di riavviare Vista.
Prestate attenzione all'opzione disponibile in Windows XP e in Windows Vista che potete trovare in:
cartella Pannello di controllo > Sistema
pannello Avanzate
riquadro Prestazioni e bottone Impostazioni...
nel dialogo Opzioni prestazioni andate nel pannello Protezione esecuzione programmi
Generalmente l'impostazione predefinita è impostata sulla voce Attiva Protezione esecuzione programmi solo per i programmi e i servizi essenziali di Windows.
Per i più esperti questo significa che il sistema tenta di bloccare eventuali tentativi di code injection in zone di memoria di processi di sistema.
In teoria si può alzare o cambiare il livello di protezione da code injection, scegliendo l'altra voce, ossia Attiva Protezione esecuzione programmi per tutti i programmi e i servizi tranne quelli selezionati, con possibilità di specificare la lista degli eseguibili.
Mi è capitata proprio una macchina, dove era stata modificata tale impostazione e sono andato incontro a tutta una serie di anomalie minori alquanto strane e tutte riconducibili a questo setup non standard del sistema.
Non riuscivo per esempio ad applicare una delle patch a Microsoft .NET Framework 1.0, ma non riuscivo nemmeno a disinstallarlo correttamente, nè tantomeno a reinstallarlo da zero.
Altro fenomeno stranissimo era un crash praticamente sistematico di Explorer al tentativo di far partire il Visualizzatore di immagini e fax, cioè l'applicazione di anteprima che parte quando fate doppio clic su un'immagine.
Sui sistemi Windows come Windows 2000, XP, 2003, Vista, Windows 7 o superiori, per avere una stima più o meno precisa di quando è stato effettuato l'ultimo riavvio del sistema, esistono due modi.
Per entrambi i metodi è necessario anzitutto invocare il prompt di sistema attraverso il comando cmd.
net statistics workstation
net statitics workstation mostra tra le tante informazioni una linea "Statistics since..." nel suo output - nel caso di un sistema in italiano trattasi del testo "Statistiche da...". Senza finire in casi particolari questo servizio di sistema parte automaticamente quando parte Windows. A dire il vero non è un indicatore molto preciso, ma si può pensare che l'errore sia approssimativamente inferiore a 60 secondi. In teoria si può snellire l'output dato dal comando filtrando la sola riga in questo modo:
net statistics workstation | find "Statistics since"
net statistics workstation | find "Statistiche da"
In alternativa a questo servizio si può usare un comando molto più preciso, che è systeminfo. Il suo output è però molto più lungo da essere elaborato, ma contiene al suo interno il momento esatto in cui è stato fatto il boot.
systeminfo
Anche in questo caso si può ricorrere al filtraggio delle righe per avere solo l'output che interessa:
systeminfo | find "System Up Time"
systeminfo | find "Tempo di avvio sistema"
In circolazione esistono comunque degli eseguibili specifici per avere tale informazione, ma non sono forniti nell'installazione di Windows. Uno di questi è uptime.exe, che è disponibile per il download dal sito Microsoft a partire da Windows NT SP4 o superiore.
Stando a questo articolo trovato su Hwfiles.it, sotto sito del più famoso Hwupgrade.it pare che Microsoft abbia lavorato sodo nel migliorare i fondamentali del sistema operativo, cioè il ridisegno dello schermo e di tutti i principali comparti grafici che non riguardano l'accelerazione spinta 3D, per i quali esistono già motori di rendering molto affinati e raffinati.
L'accelerazione generale implementata in Windows 8 dovrebbe sgravare la CPU e utilizzare più massicciamente la GPU attraverso DirectX 11.1 per operazioni di grafica come la compressione e la decompressione di immagini JPEG, il disegno del testo ed il disegno di forme e primitive geometriche principali.
La CPU viene liberata e vengono utilizzati i vari core grafici presenti nelle schede grafiche attraverso DirectX.
Speriamo davvero che sia così al rilascio anche per le piattaforme Windows non nuove di zecca.
Che sia la volta buona che elimino il mio Windows Vista a 32 bit e passo direttamente a Windows 8 a 64 bit sul mio Vaio?
Non servono molte parole per descrivere questa situazione: basta guardare l'immagine qui sotto.
Ora non so di quale diavoleria sia diventato vittima il computer che mi è finito tra le mani in questi giorni, ma senza dubbio trattasi di una cosa singolare, che al momento non ha un corrispettivo caso sul web.
Una situazione dove la cartella Desktop dell'utente punta dentro se stessa, senza soluzione di continuità.
L'unica cosa che mi è venuta in mente, su questa installazione di Windows Vista Home Premium SP1 in italiano, è stata quella di creare un altro utente e di eliminare l'utente con la referenza circolare della cartella.
Che ci sia traccia di Infinite Loop in questa installazione di Windows?
Non è una novità che Skype sia stata acquisita a suo tempo da Microsoft. Solo che da allora non mi pare che questa acquisizione commerciale abbia giovato dal punto di vista tecnico all'applicazione estone.
Tutti si sarebbero aspettati un'evoluzione dell'applicazione sia come funzionalità che come performance ed invece pare che siamo andati indietro invece che avanti.
Infatti rimango allibito quando apro il Task Manager di Windows Vista e scopro che il processo di Skype si sta allocando per i fatti suoi ben 49 MB, semplicemente per essere pronto a rispondere a dei testi in chat ed eventualmente a qualche chiamata audio!
Reading
Fabio Volo - E' una vita che ti aspetto
Michael Guillen - Le 5 equazioni che hanno cambiato il mondo
Sophie Kinsella - I love shopping a New York