PDA

View Full Version : Tiles Metro-UI per applicazioni non-metro? Forse si può!


Otinademoniac
02-06-2012, 13:32
Salve a tutti!

Sono un utilizzatore di Windows 8 dalla developer preview ed ho imparato ad apprezzarne la nuova Start Page ed ad abituarmici. L'unica cosa che me la rende ancora "poco sopportabile" è la scarsa, se non quasi inesistente, customizzabilità delle icone delle applicazioni non-metro. Capisco che Windows voglia spingere verso la creazione di Metro Apps, ma la loro utilità su un PC-Desktop proprio non mi convince e, comunque, preferisco mille volte usare le applicazioni classiche.

Il punto è: come fare ad avere dei tiles per applicazioni desktop classiche che siano più gradevoli del quadretto monocolore con un'icona? Ho iniziato a cercare in lungo ed in largo su Internet, per la verità trovando molto poco (davvero questo problema non tocca nessuno?), ma qualcosa c'è.

- Non so fino a che punto giovi alla mia causa, ma è relativamente facile modificare le immagini per i Tiles Metro delle applicazioni metro installate, basta seguire questa (http://www.tech-recipes.com/rx/22405/hack-windows-8-metro-start-screen-tiles-icons/)guida.

- Per chi abbia conoscenze di programmazione C++, Javascript o, genericamente, qualunque linguaggio per Visual Basic, creare un tile per una propria applicazione è estremamente facile, tanto che l'ho fatto persino io scaricando Visual Studio RC gratuitamente da qui (http://www.microsoft.com/visualstudio/11/en-us). In pratica la guida da seguire è quella offerta dalla Windows stessa, cioè questa (http://msdn.microsoft.com/en-us/library/windows/apps/hh465437.aspx), facente parte di quest'altra guida (http://msdn.microsoft.com/en-us/library/windows/apps/br211386), più ampia, sulla creazione di applicazioni Metro.


In buona sostanza, è facilissimo creare tiles per applicazioni Metro, ma nessuno ancora ha pensato a crearne per applicazioni desktop standard, nemmeno la Microsoft stessa (che credo direttamente non voglia, appunto per incentivare il mercato Metro). Ma davvero non si può fare di più? La mia idea, che vorrei esporre a voi, è questa:

- E' possibile creare, con Visual Studio, applicazioni che si limitino ad aprirne altre? So che le Metro Apps funzionano un pò come delle sandbox, ma è possibile impostare i permessi per accedere a immagini, documenti e così via, dunque non dovrebbe essere impossibile effettuare al massimo un "doppio rimbalzo" (app metro che apre un collegamento nei Documenti che apre il programma desktop) senza rallentare troppo l'apertura del programma originario. Non credo sia troppo complesso, ma al contempo non ne sono capace da solo. Qualcuno può aiutarmi?

Un appello ai gestori del forum e del sito: credo che essere i primi su internet a fare una simile "scoperta" sarebbe un gran bel colpaccio!

EDIT 1: Aggiungo carne al fuoco: esistono già dei codici per VS RC che bypassano il problema della sandbox di Windows 8. Potete leggere il post del loro scopritore qui (http://forum.xda-developers.com/showthread.php?t=1541924) o scaricare direttamente il pacchetto che mette a disposizione, in cui di fatto spiega tutto come e meglio del post, CLICCANDO QUI. (http://suchan.cz/wp7/OutOfSandboxSample.7z)

Direi che avete tutto quello che vi serve, se solo avessi qualche competenza specifica ci proverei io stesso :-P

EDIT 2: Altra roba, meno pertinente, ma sempre molto interessante: il reverse-engineering di applicazioni dello Store. Potrebbe essere un'idea partire da una di queste, già fatta e "signed", per poi procedere alla modifica. Lo trovate qui (http://justinangel.net/ReverseEngineerWin8Apps).


EDIT 3, AGGIORNAMENTO RILEVANTE: QUI (http://stackoverflow.com/questions/9527644/launching-a-desktop-application-with-a-metro-style-app) qualcuno spiega una possibile soluzione al problema. Non ho capito bene come, non avendo competenze, ma non parrebbe così difficile per chi capisce il codice. La risposta corretta parrebbe quella data in cima da tale Pavel Minaev.

birmarco
03-06-2012, 23:30
Allora, lo stile delle icone classiche non fa impazzire neanche me. Dei tile personalizzati sarebbero sicuramente più carini :)

Creare tile in Visual studio è facilissimo, così come creare Metro App. Potenzialmente le App Metro essendo scritte in linguaggi .Net come Visual Basic possono potenzialmente fare qualsiasi cosa. Il problema di questa soluzione, secondo me, sono le prestazioni. Innanzitutto non so se le App Metro possono autochiudersi, se non fosse così, avresti una schiera di app aperte che non fanno nulla e intasano il sistema. A parte questo, una doppia apertura è sicuramente più lenta e non so quanto convenga.

La guida per modificare i tiles per le app Metro è semplice perchè le App Metro, se non ricordo male, usano un manifesto per indicare alcune informazioni e comportamenti. Modificare il manifesto è semplice. Per modificare il tile della app desktop non è possibile passare attraverso il manifesto, appunto perchè Win 8 non va a guardare quello. Dovresti modificare il comportamento stesso di Metro per fare in modo che guardi il manifesto anche per i programmi normali. Ovviamente dovrà essere necessario disporre di un manifesto per tutti i programmi. Questo, oltre ad essere molto probabilmente infattibile, porterebbe sicuramente a cause negative.

QUello che forse si può fare, è modificare la dimensione dell'icona nel tiles, dato che molto probabilmente dipenderà da un paio di parametri memorizzati da qualche parte.

Unrealizer
04-06-2012, 01:03
Non credo si possa fare, ma darò comunque un'occhiata ai tuoi link ;)

Otinademoniac
04-06-2012, 20:43
Lungi dal voler sembrare arrogante, a giudicare da quello che ho trovato parrebbe relativamente fattibile, altro che impossibile! :)

Ma, appunto, non ho competenze per esserne certo, difatti mi chiedevo se qualcuno fosse così pro da voler provare per me (e per se stesso, nonchè per la comunità! :D )

birmarco
04-06-2012, 21:12
Lungi dal voler sembrare arrogante, a giudicare da quello che ho trovato parrebbe relativamente fattibile, altro che impossibile! :)

Ma, appunto, non ho competenze per esserne certo, difatti mi chiedevo se qualcuno fosse così pro da voler provare per me (e per se stesso, nonchè per la comunità! :D )

Domani se ho tempo provo la tua idea dell'app che apre l'app ma penso che crei i problemi che ti ho già detto nel primo post. ;)

Perchè la cosa sia fattibile bisogna vedere come è programmata metro ;)

Unrealizer
04-06-2012, 21:14
Lungi dal voler sembrare arrogante, a giudicare da quello che ho trovato parrebbe relativamente fattibile, altro che impossibile! :)

Ma, appunto, non ho competenze per esserne certo, difatti mi chiedevo se qualcuno fosse così pro da voler provare per me (e per se stesso, nonchè per la comunità! :D )

Pare che l'unico modo sia fare un'app Metro che faccia da "launcher" e poi in qualche modo usarla per aggiornare i tile... il punto è uscire dalla sandbox, fattibile come spiegato su XDA, ma il problema a questo punto è dover installare 3 software invece che 1! (software da lanciare, launcher, servizio "ponte")

birmarco
04-06-2012, 21:34
Pare che l'unico modo sia fare un'app Metro che faccia da "launcher" e poi in qualche modo usarla per aggiornare i tile... il punto è uscire dalla sandbox, fattibile come spiegato su XDA, ma il problema a questo punto è dover installare 3 software invece che 1! (software da lanciare, launcher, servizio "ponte")

Un'app metro quindi non può chiamare degli exe esterni? Non ha accesso al file system?

Unrealizer
04-06-2012, 22:08
Un'app metro quindi non può chiamare degli exe esterni? Non ha accesso al file system?

no, gira all'interno di una sandbox, e ha un sistema tipo quello usato da WP7 per decidere a cosa avere accesso, tramite le capabilities

Otinademoniac
05-06-2012, 14:02
Da ITAliano (Ignorante Totale Assoluto :D ) in materia, direi comunque che un'applicazione che si limita a chiamarne un altra dovrebbe essere abbastanza leggera per un hardware capace di far girare Windows 8, quindi il tempo (sicuramente maggiore) per fare un doppio rimbalzo sarebbe estremamente esiguo. La cosa un pò più noiosa sarebbe il lasciare aperte le applicazioni in background, ma immagino esista un comando.

Quanto al "come", io pensavo al creare (o meglio, da ITAliano come prima aspettare che qualcuno lo facesse):
- un'applicazione Metro capace aprire i programmi come già spiegato, da usare come base per tutte le altre;
- una in Visual Basic che, data la directory e le immagini PNG per il tile, modificava le parti di codice necessarie e ne creava una copia per applicazione pronta per essere installata.


Ripeto, molto umilmente cerco qualcuno capace di una simile programmazione...Nessuno? :mc:

birmarco
05-06-2012, 15:16
Da ITAliano (Ignorante Totale Assoluto :D ) in materia, direi comunque che un'applicazione che si limita a chiamarne un altra dovrebbe essere abbastanza leggera per un hardware capace di far girare Windows 8, quindi il tempo (sicuramente maggiore) per fare un doppio rimbalzo sarebbe estremamente esiguo. La cosa un pò più noiosa sarebbe il lasciare aperte le applicazioni in background, ma immagino esista un comando.

Quanto al "come", io pensavo al creare (o meglio, da ITAliano come prima aspettare che qualcuno lo facesse):
- un'applicazione Metro capace aprire i programmi come già spiegato, da usare come base per tutte le altre;
- una in Visual Basic che, data la directory e le immagini PNG per il tile, modificava le parti di codice necessarie e ne creava una copia per applicazione pronta per essere installata.


Ripeto, molto umilmente cerco qualcuno capace di una simile programmazione...Nessuno? :mc:

Di per sè è facile fare un programma del genere però va bene sono per un programma. L'applicazione che ne crea altre si chiama compilatore :D e creare un compilatore non è certamente alla portata di tutti, così come crearne uno integrato in un app ;)

Unrealizer
05-06-2012, 21:55
Da ITAliano (Ignorante Totale Assoluto :D ) in materia, direi comunque che un'applicazione che si limita a chiamarne un altra dovrebbe essere abbastanza leggera per un hardware capace di far girare Windows 8, quindi il tempo (sicuramente maggiore) per fare un doppio rimbalzo sarebbe estremamente esiguo. La cosa un pò più noiosa sarebbe il lasciare aperte le applicazioni in background, ma immagino esista un comando.

Quanto al "come", io pensavo al creare (o meglio, da ITAliano come prima aspettare che qualcuno lo facesse):
- un'applicazione Metro capace aprire i programmi come già spiegato, da usare come base per tutte le altre;
- una in Visual Basic che, data la directory e le immagini PNG per il tile, modificava le parti di codice necessarie e ne creava una copia per applicazione pronta per essere installata.


Ripeto, molto umilmente cerco qualcuno capace di una simile programmazione...Nessuno? :mc:

Non è una questione di prestazioni, è che è comunque un passaggio in più, con i suoi tempi morti, che anche se piccoli possono comunque essere fastidiosi :D

Comunque adesso faccio una prova, il tempo di capire come funziona quell'esempio di XDA... :D

Di per sè è facile fare un programma del genere però va bene sono per un programma. L'applicazione che ne crea altre si chiama compilatore :D e creare un compilatore non è certamente alla portata di tutti, così come crearne uno integrato in un app ;)

Non so ancora come siano i pacchetti di installazione delle app metro, ma se è come per WP7 è fattibilissimo

gli xap di wp7 non sono altro che zip: basta cambiare qualche file al suo interno e modificare il manifest con una nuova GUID

birmarco
06-06-2012, 00:05
Non è una questione di prestazioni, è che è comunque un passaggio in più, con i suoi tempi morti, che anche se piccoli possono comunque essere fastidiosi :D

Comunque adesso faccio una prova, il tempo di capire come funziona quell'esempio di XDA... :D



Non so ancora come siano i pacchetti di installazione delle app metro, ma se è come per WP7 è fattibilissimo

gli xap di wp7 non sono altro che zip: basta cambiare qualche file al suo interno e modificare il manifest con una nuova GUID

Pensavo fossero dei classici eseguibili :) io ho già scoperto con amarezza che un'app non potrà mai eseguire lo shutdown :(

Unrealizer
06-06-2012, 00:54
Pensavo fossero dei classici eseguibili :) io ho già scoperto con amarezza che un'app non potrà mai eseguire lo shutdown :(

Se dovessi riuscire ad eseguire codice fuori dalla sandbox, ti prometto che ne farò una, ok? :asd:

Comunque sono degli eseguibili (.net o nativi), ma sono particolari perché non possono essere eseguiti fuori dall'AppContainer

a meno che non si parli di app html+js: in quel caso, essendo linguaggi interpretati, viene copiato il codice sorgente :D

Otinademoniac
07-06-2012, 21:48
Novità dal mondo dei capaci in materia? :D

Capisco di non essere d'aiuto in questa fase, ma la possibilità dei tiles sulle applicazioni Windows mi intriga alquanto..!

EDIT RILEVANTE: Fulminato sulla via di Damasco, mi è venuta in mente una soluzione semplice ed elegante: non basterebbe modificare il registro di sistema per far apparire l'icona al centro del tiles nonchè grandi quanto quest'ultimo e fare delle icone per i programmi abbastanza grandi da non venire pixelate?

O meglio, sarebbe possibile? :P ho cercato un pò nel regedit su:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell\Grid

tuttavia ho trovato "solo" come ingrandire o rimpicciolire il tile stesso o il numero di file di questi. Ci sono un sacco di altri dati ma non ho competenza per capirne la funzione.

Qualcuno ha un idea? :-)

Otinademoniac
12-06-2012, 23:05
Scusate il doppio post, ho delle "novità" che potrebbero meritarlo. Consideratelo un "up", per favore :P

(scherzi a parte, spero di non esser contravvenuto ad alcuna regola in modo eccessivamente drastico)

Come sicuramente saprete (e potrete vedere qui (http://www.chromium.org/getting-involved/dev-channel)) la Google ha fatto uscire Google Chrome per interfaccia METRO, e non manca di avere particolarità:

1- Il programma non proviene dallo Store Windows ufficiale, ma è scaricabile dal sito del Chromium Project; di conseguenza, si installa al solito posto di Chrome (User/Appdata/Local) e non nella cartella WindowsApps. Questo è già di per se abbastanza atipico, dato che quest'ultima credevo fosse la cartella "esclusiva" delle applicazioni metro;

2- Ad una mia analisi è parso di capire che il programma che viene avviato, sia da desktop che da Metro Start, è sempre lo stesso, con la differenza che, se avviato dal secondo, si avvia in interfaccia metro. Una conferma la si ha notando che, di fatto, la cartella "Metro" contenuta nella directory del programma contiene solo l'userdata e non file specifici, che invece contiene la classica cartella di Google Chrome;

3- Sono abbastanza sicuro che tutti i file di Google Chrome si trovino nella cartella suddetta, giacchè ho trovato dentro il "Manifest" che dà a Windows l'indicazione su dove trovare le immagini dei tiles, oltre ovviamente a queste ultime. Provando a cambiare il PNG del tile e pulendo la cache è cambiato anche quello della barra di Start.

A questo punto, ho provato in vari modi a cercare di avere il tile Metro collegato all'applicazione desktop, sperando che questo mi portasse, dopo, a capire come avere tiles per tutte le applicazioni desktop.

Il primo passo, banale ma alla "perchè no?" è stato quello di copiare il manifest e la cartella delle immagini nella cartella di un altro programma (ovviamente cambiando le directory sul manifest attraverso il blocco note), ripulendo la cache e riavviando il PC. Non ha funzionato, e sinceramente non ci credevo più di tanto :D

Il successivo passo è stato quello di aprire la cartella "C:\Users\ILMIOPROFILO\AppData\Roaming\Microsoft\Windows\Start Menu\Programs" e cercare di capire meglio la natura del collegamento a Google Chrome, per capire come mai partisse l'applicazione Metro e non quella desktop...Per scoprire che il collegamento a Chrome non stava lì! Eppure ce l'avevo nella Metro Page...Qualcuno sa dove si trovi?

A questo punto ho deciso, come dicevo sopra, di cominciare cercando di avere il tile metro di Chrome senza dover avviare per forza la versione Metro, ma quella Desktop che parte cliccando sull'icona del desktop (appunto). Qui sono iniziate alcune stranezze che mi fanno pensare di essere sulla strada giusta.

Il mio primo passo, infatti, è stato quello di cancellare il collegamento a Google Chrome predefinito e crearne direttamente uno a "chrome.exe" nella Start Page. Il collegamento si crea facilmente con tastro destro e "Pin to start" ed è senza tile. Se cliccato, accade la stranezza: si avvia Chrome in versione desktop, ma tornando nella pagina Start il collegamento..Scompare! La cosa bella è che creandone un secondo lo chiamerà "chrome(2)", quindi il primo si suppone ci sia ancora! (ovviamente sparirà anche il secondo al primo click).

Questa stranezza mi fa pensare di aver toccato un punto delicato e che ci sia un sistema di "autoprotezione" di Windows.


A qualcuno queste informazioni possono tornare utili per risolvere il problema delle applicazioni desktop con tiles metro?

EDIT RILEVANTE: Dacchè qualcuno l'aveva chiesto, le applicazioni Metro possono autochiudersi: chiudendo tutte le tab aperte su Chrome per Metro, questo si chiude e rinvia alla Metro Start Page. Immagino che non sarebbe complicato far si che questo comando parta in automatico. D'altro quanto, quanto ho scritto sopra potrebbe rendere inutile lo stesso creare un'applicazione che apra applicazioni...Aspetto notizie da voi competenti :D

birmarco
12-06-2012, 23:27
Ho letto tutto :D

Allora, per il discorso doppio collegamento non so perchè ti sia successo così, cmq io ho creato in start un collegamento per IE Metro e uno per IE normale e posso tenere entrambi senza che si cancellino :) Mi sa che tu hai un problema che provoca la cancellazione

Il fatto che Chrome si comporti in modo strano partendo a volte come Metro e a volte come desktop dipende dal collegamento che lasci in Metro allo stesso modo in cui ho fatto con IE. La gestione dei browser poi è più complessa in quanto la versione che parte è Metro o Deskop a seconda che del browser che sia impostato di default.

Cmq, secondo me una strada è provare a far riconoscere a Windows i programmi normali come App Metro, installandoli nella cartella specifica, aggiungendogli la cartella Assets con i tiles e il manifest adeguatamente compilato. Poi però ci sono tutti i problemi relativi alla signature e a capire come far credere a Windows di aver installato una determinata App.

L'idea dell'app che apre l'app la escluderei perchè consuma molte risorse inutilmente. Infatti si va a creare un nuovo processo con i relativi thread con conseguenti allocazioni di risorse. Tutte operazioni molto costose.

Forse un'altra strada, probabilmente più facile, è cercare di modificare i parametri dei tile affinchè visualizzino solo l'icona del programma in maniera centrata e massimizzata. Così rimarrebbe solo da modificare l'icona creandone una più consona a start ;)

Tuttavia dubito che la cosa si limiti a qualche chiave di registro. Bisognerà sicuramente modificare qualcos'altro...

Otinademoniac
12-06-2012, 23:32
A Windows, a quanto pare, non serve che l'applicazione Metro sia nella cartella delle applicazioni Metro predefinita, l'esempio per antonomasia consiste proprio in Google Chrome, che peraltro non è neppure signato. La domanda è come.

Una cosa importante è che il problema della cancellazione del collegamento accade SOLO con Chrome: ho provato con Thunderbird ed il collegamento resta dov'è :confused:

Comunque anch'io penso che la via più semplice, a questo punto, consista nel mettere l'icona massimizzata al centro!

La domanda è: come? :muro:

birmarco
13-06-2012, 09:46
Devi iniziare a cercare nel registro per vedere se trovi qualcosa, altrimenti bisogna aspettare che qualcuno fottutamente bravo si metta a preparare fix per le dll :)

Otinademoniac
20-06-2012, 14:34
Ancora niente ...! Questo è abbastanza frustrante, sto cercando davvero profondamente il modo di modificare l'interfaccia utente METRO, ma non ho ancora trovato alcunchè. Qualsiasi aiuto?

Il modo in cui penso sarebbe più facile è quello di centrare e rendere più grande l'icona all'interno dei Tiles Metro. Sto cercando di usare un editor di risorse in Windows, ma non ho trovato ancora nulla.

birmarco
20-06-2012, 17:10
Prova a cercare a fondo nella documentazione ufficiale, anche se penso troverai poco visto che tutto il codice è chiuso...

|Rey]X[z|
10-11-2012, 16:06
Appena ho preso dimestichezza con Windows 8 ho pensato la stessa tua identica cosa, ma in rete non ho trovato nulla, oltre a questo topic ovviamente.

Comunque conosco solo qualche base di C++ e zero di javascript, quindi non credo di poter essere molto d'aiuto. Confido in voi! Aspetto aggiornamenti :)

Khronos
10-11-2012, 16:21
Oblytile. (click). (http://www.hwupgrade.it/forum/showthread.php?t=2517109)

|Rey]X[z|
10-11-2012, 18:36
Per quanto mi riguarda, non è proprio quello che cercavo. Infatti io intendevo il tile di dimensioni 120x240 (credo), ma già in questo modo si riesce ad ottenere un buon risultato e, a questo punto, credo che sia possibile anche raggiungere il mio obiettivo.. detto questo grazie per la segnalazione ;)