Az egyetemi lét egyik nagy előnye, hogy az ember legálisan szakíthat magának időt arra, hogy azzal foglalkozzon, ami érdekli. Tudományos körökben ezt kutatásnak hívják, ám aki nem a doktorija megszerzéséért csinálja, annál ez az a pont, ahol a programozás visszaalakulhat egy rövid időre hobbivá. Nálam ez a terület például a mobil alkalmazásfejlesztés, mostanában éppen Windows Phone 7-re.
Mivel legtöbbször webes alkalmazásokat készítek, ezért a WP7-es fejlesztés percenként hoz újdonságokat számomra. Na jó, bevallom, elég gyakran elakadok. Ilyenkor persze guglizok egy fél órát, meglesz a megoldás és már lépek is tovább. Mivel a net már elég “zajos”, sokszor futok bele olyan kódrészletekbe, amik egyáltalán nem is működnek, ezért rászoktam arra, hogy ész nélkül bemásolom a talált kóddarabkát a programomba, és ha működik, akkor rászánom az időt, hogy megértsem és kipofozzam a kódot. Így sikerült véletlenül rájönni arra, hogyan lehet desktop alkalmazásokat futtatni Windows Phone 7-en.
Történt ugyanis, hogy épp a hálózat paramétereit lekérdező kódra vadásztam a neten, találtam egyet, bemásoltam, működött is. Aztán amikor jobban megnéztem a kódot, nagyon meglepődtem:
RegistryKey root = Registry.LocalMachine;
string key = @"SYSTEM\CurrentControlSet\Services\Tcpip\Parameters";
RegistryKey dnsKey = root.OpenSubKey( key );
string server = (string) dnsKey.GetValue( "NameServer" );
Bizony, nem valamilyen API-n keresztül kéri le a DNS szervereket, hanem a registry-ből olvassa ki. Ezek szerint van registry WP7-en is! Sőt, jobban utána olvasva megtudtam, hogy mások már registry editort is írtak hozzá. Ezzel kiexportáltam a telefon registry-jét, áttöltöttem egy asztali gépre, ahol kényelmesebben tudtam körülnézni benne. Nem kellett sok hozzá és máris ismerős kulcsra leltem:
Ez az a kulcs, ami alapján a Winlogon service elindítja azt a programot, ami shellként funkcionál. Eddig azt sem tudtam, hogy van Winlogon service a telefonon, azt meg végképp nem, hogy a shellt tulajdonképpen explorwp.exe-nek hívják. Vajon mi történik, ha ez a process meghal? Próbáljuk ki! Bele is írtam a saját programomba:
Process shell = Process.GetProcessesByName( "explorwp.exe" );
shell.Kill();
Látszólag nem történt semmi, de miután a programom kilépett, ez “jelent meg” az emulátorban:
Sehol egy hibaüzenet, a rendszer látszólag működik, csak épp nem mutat semmit. Na ezzel nem sokra megyek. De legalább van egy fél task managerem, már csak annyit kell hozzáírni, hogy indítsa újra a processt:
Process.Start( "exporer.exe" );
És ez is lefutott, annak ellenére, hogy megszokásból elírtam az exe nevét. Tehát nem csak explorwp.exe van a telefonon, hanem explorer.exe is! Ezt csinálja, amikor fut:
Ismét csak meglepő eredmény, ugyanúgy viselkedik, mint az asztali változat. Ezek után már megnéztem a laptopomon és a telefonomon lévő fájl méretét és mindkettő épp 2870272 bájt. Gyanús. Lehet, hogy teljesen ugyanaz a kettő?
Megint felderítő munka következett, ezúttal a \Windows mappában, ahol nagyon sok ismerős fájlra bukkantam. Közben eszembe jutott, hogy vajon mit kezdene ezzel a mappával a Windows Explorer. Meg is kérdeztem tőle:
Process.Start( "\Windows" );
A legszebb az egészben, hogy ezt nem lehet megtenni, amíg a gyári shell fut, mert AccessDeniedExceptiont eredményez. Most viszont, hogy nem állt az utunkba a mindenre vigyázó explorwp.exe, az operációs rendszer szó nélkül megette:
Azt eddig is tudtam, hogy a Windows Phone készülékek nagyon izmosak, de azért ezt legmerészebb álmomban sem gondoltam volna. Innen már csak két lépés volt hátra, felmásolni néhány fájlt, és consumer eszközről lévén szó, elindítani egy érdekesebb processt:
Itt tartunk most, és egyelőre úgy néz ki, hogy a legtöbb asztali alkalmazás hiba nélkül fut ezen a kis eszközön, a remote desktop kliens éppúgy, mint a World of Warcraft. Eddig azokkal akadtunk csak el, amik közvetlenül próbálták olvasni a C: meghajtót, vagy nyomtatni próbáltak, a többivel nem volt gond. Kicsit szokatlan, hogy az ablakok úgy lógnak ki a képernyőről, hogy nincs scrollbar, de a gesztusok működnek, lehet ujjal tologatni a képernyőt.
A mobilos kollégák felvetették, hogy a következő lépés egy iPhone emulátor futtatása lehetne, így az alkalmazások portolása egy csapásra megoldódna és valóban működne magyar bankkártyával a vásárlás. Ez mindenképp érdekes kutatási terület, de a biztonság kedvéért felvettük a kapcsolatot a Microsofttal, hogy vajon jogilag megtehetjük-e.
Te milyen programot futtatnál szívesen a telefonodon?