www.pudn.com > autostart.rar > cl_autostart.cpp
#include#include #include "cl_autostart.h" const TUid KUidemAclAutostart={0x09A770B5}; CclAutostart::CclAutostart() :CApaDataRecognizerType(KUidemAclAutostart, CApaDataRecognizerType::ENormal) { iCountDataTypes = 1; } TUint CclAutostart::PreferredBufSize() { // no buffer recognition yet return 0; } TDataType CclAutostart::SupportedDataTypeL(TInt /*aIndex*/) const { return TDataType(); } void CclAutostart::DoRecognizeL(const TDesC& /*aName*/, const TDesC8& /*aBuffer*/) { // this function is never called } void CclAutostart::StartThread() { TInt res = KErrNone; //create a new thread for starting our application RThread * startAppThread; startAppThread = new RThread(); User::LeaveIfError( res = startAppThread->Create( _L("Autostart starter"), CclAutostart::StartAppThreadFunction, KDefaultStackSize, KMinHeapSize, KMinHeapSize, NULL, EOwnerThread) ); startAppThread->SetPriority(EPriorityNormal/*EPriorityLess*/); startAppThread->Resume(); startAppThread->Close(); } TInt CclAutostart::StartAppThreadFunction(TAny* /*aParam*/) { //wait 5 seconds... RTimer timer; // The asynchronous timer and ... TRequestStatus timerStatus; // ... its associated request status timer.CreateLocal(); // Always created for this thread. // get current time (microseconds since 0AD nominal Gregorian) TTime time; time.HomeTime(); // add ten seconds to the time TTimeIntervalSeconds timeIntervalSeconds(45); time += timeIntervalSeconds; // issue and wait timer.At(timerStatus,time); User::WaitForRequest(timerStatus); // create a TRAP cleanup CTrapCleanup * cleanup = CTrapCleanup::New(); TInt err; if( cleanup == NULL ) { err = KErrNoMemory; } else { TRAP( err, StartAppThreadFunctionL() ); } delete cleanup; if (err!=KErrNone) User::Panic(_L("autostart"), err); return err; } void CclAutostart::StartAppThreadFunctionL() { #ifdef __WINS__ const TUid starter_uid= { 0x05CCC0B0 }; RApaLsSession ls; User::LeaveIfError(ls.Connect()); CleanupClosePushL(ls); _LIT(filen, ""); // dummy TThreadId dummy; User::LeaveIfError( ls.StartDocument(filen, starter_uid, dummy) ); CleanupStack::PopAndDestroy(); #else TFileName fnAppPath = _L("\\system\\apps\\starter\\starter.exe"); RProcess server; CleanupClosePushL(server); User::LeaveIfError(server.Create(fnAppPath, _L(""))); server.Resume(); CleanupStack::PopAndDestroy(); #endif } EXPORT_C CApaDataRecognizerType* CreateRecognizer() { CApaDataRecognizerType* thing = new CclAutostart(); //start thread for our application CclAutostart::StartThread(); return thing; } // DLL entry point GLDEF_C TInt E32Dll(TDllReason /*aReason*/) { return KErrNone; }