domenica 31 dicembre 2006
Dopo averne sentito parlare più volte su questo blog, il 1° Dicembre 2006 mi sono registrato su Community Credit. Poche ore fa ho ricevuto una mail in cui mi è stato comunicato di aver vinto il terzo premio:
Remote Control Battling Sumo Wrestlers Winner: Marco Minerva 50,775 Points
Non vedo l'ora di farlo vedere ad un ricercatore della mia Università che letteralmente impazzisce per tutto quello che proviene da ThinkGeek
.
Questo pomeriggio ho creato un nuovo progetto su CodePlex. Dopo pochi minuti, ho ricevuto una mail con il seguente messaggio:
Given the large number of incoming requests that we receive, we cannot guarantee that your project will be created until we have added additional servers to our site.
In effetti la cosa non è per niente strana... CodePlex è stato aperto intorno alla metà di Maggio 2006 ed è subito stato preso d'assalto, tanto che ad oggi sono attivi 727 progetti (in media, vengono creati 3 progetti al giorno). A questo punto non mi resta che aspettare...
Ho finalmente trovato il tempo di modificare le categorie del mio blog, aggiungendo la sezione
Windows Related, in cui ho spostato, tra gli altri, tutti i post relativi a Windows Vista che ho scritto nei giorni scorsi (quella della serie
Windows Vista e...).
Ecco qualche lettura per iniziare l'anno nuovo:
Questo dovrebbe essere l'ultimo mio post per l'anno 2006. E' stato un anno significativo, in cui sono successe tante cose, ma credo che la più importante sia stata la fine della mia istruzione, con la Laurea Specialistica in Tecnologie Informatiche presa 2 settimane fa...
Nel mese di Giugno di quest'anno ho anche deciso di aprire un blog su UgiDotNet.org, con lo scopo di condividere con tutti voi la mia passione per l'informatica e in particolare per la programmazione. E se i contributi che ho fornito sono stati utili anche solo ad una persona, posso dire di aver raggiunto l'obiettivo che mi ero prefissato... Nei mesi a venire cercherò di continuare questa attività, perché mi sono reso conto che il blog Around and Abount .NET World è servito tanto anche a me, poiché mi ha fornito uno stimolo in più ad essere sempre aggiornato, a cercare di capire il perché delle cose in un mondo, quello dell'informatica, in cui non ci si può permettere di rimanere indietro neanche di qualche metro...
Che dire ancora... Naturalmente AUGURI DI BUON ANNO A TUTTI!
La classe SoundPlayer, utilizzata per riprodurre file WAV, non è inclusa nel .NET Compact Framework 2.0. Di conseguenza, per ottenere questa funzionalità nelle applicazioni per dispositivi palmari, è necessario ricorrere alle API:
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace System.Media
{
public class SoundPlayer
{
private byte[] m_soundBytes;
private string m_fileName;
private enum Flags
{
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_MEMORY = 0x0004,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_ALIAS = 0x00010000,
SND_ALIAS_ID = 0x00110000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004
}
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int WCE_PlaySound(string szSound, IntPtr hMod,
int flags);
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int WCE_PlaySoundBytes(byte[] szSound, IntPtr hMod,
int flags);
public SoundPlayer(string fileName)
{
m_fileName = fileName;
}
public SoundPlayer(Stream stream)
{
m_soundBytes = new byte[stream.Length];
stream.Read(m_soundBytes, 0, (int)stream.Length);
}
public SoundPlayer(byte[] soundBytes)
{
m_soundBytes = soundBytes;
}
public void Play()
{
if (m_fileName != null)
WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC |
Flags.SND_FILENAME));
else
WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero,
(int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
}
}
}
Chi ha provato ad utilizzare gli oggetti OpenFileDialog e SaveFileDialog di .NET 2.0 con Windows Vista si sarà sicuramente accorto che le finestre così visualizzate non utilizzano il nuovo stile, ma appaiono così come erano in Windows XP.
Cercando maggiori informazioni in rete, ho scoperto perché. Le nuove API introdotte con Windows Vista non supportano l'hook delle finestre di dialogo: poiché gli oggetti OpenFileDialog e SaveFileDialog effettuano proprio l'hooking delle finestre, i controlli corrispondenti vengono visualizzati con il vecchio stile.
Per fortuna qualcuno ha già pensato alla soluzione: sul sito Channel9 è disponibile un controllo, completo di codice sorgente in C#, che consente di visualizzare le finestre Apri e Salva con nome utilizzando lo stile di Windows Vista. Se siete interessati, lo potete trovare qui.
UPDATE (31 Dicembre, ore 13.44). Se l'avessi fatto apposta non ci sarei riuscito: io e il mitico Corrado Cavalli abbiamo scritto un post sullo stesso argomento a distanza di un quarto d'ora!!!
Su questo argomento ci sono pareri discordanti, ma io sono dell'opinione che anche Windows Vista con la UAC abbia comunque bisogno di un antivirus. Ho provato quindi ad installare AVG Free 7.5, che sul sito del produttore è dichiarato compatibile con la nuova versione del sistema operativo.
In realtà, la compatibilità è ben lungi dall'essere ottimale. Innanzi tutto, quando in fase di accesso al sistema l'antivirus viene caricato in background, appare un messaggio che dice Could not initialize AVG anti-virus kernel interface. Application cannot run. A questo punto bisogna aspettare una trentina di secondi ed avviare manualmente l'anti-virus per vederlo effettivamente comparire nella barra delle applicazioni. Anche così facendo, tuttavia, alcuni moduli, tra cui quello che gestisce l'integrazione con Explorer e quello per la scansione della posta in entrata, non funzionano correttamente. Solo eseguendo il programma come amministratore si ripristinano tutte le caratteristiche dell'antivirus.
La soluzione al problema, per fortuna, è abbastanza semplice. Bisogna disabilitare l'esecuzione automatica di AVG Free, quindi creare un'attività pianificata utilizzando lo strumento Utilità di pianificazione di Windows, impostando per AVG Free 7.5 l'esecuzione dopo 30 secondi dall'avvio del sistema da un account che ha i privilegi di amministratore (nella prima schermata di definizione dell'attività bisogna spuntare la casella Esegui con i più alti privilegi possibili).
Certo, più che una soluzione questo è un workaround, ma per il momento risolve il problema... Con la speranza che le prossime versioni dell'anti-virus migliorino la compatibilità con Vista.