Jump to content
Nokioteca Forum

[c++] Impostare Task Come Nascosto O Sistema


memoryn70
 Share

Recommended Posts

Ciao!

Mi servirebbe sapere un metodo in C++ da poter inserire in una libreria per python per rendere un task nascosto oppure come app di sistema, agendo senza bisogno di documento finestra o altro tenendo presente che devo fare un'estensione per python.

Una cosa del genere vorrei fare:

import taskutil

...

taskutil.set_hidden(u"Nome app o uid") #Soprattutto questo mi servirebbe

...

taskutil.set_system(u"Nome app o uid")

..

Grazie in anticipo! :thumbs:

Link to comment
Condividi su altri siti

Puoi evitare che venga visualizzata dal task manager di symbian usando il metodo CApaWindowGroupName::SetHidden, ma usando un programma che elenca i task lo vedrai in ogni caso.

Non ho capito il riferimento al documento finestra...

Si certo! Se si usa vedi nascoste si...

Cmq secondo te questo metodo CApaWindowGroupName::SetHidden funziona anche se eseguo da un'estensione di python?

Modificato da memoryn70
Link to comment
Condividi su altri siti

Si, agisce direttamente sul window server, dovrebbe funzionare anche se lo esegui da un'estensione python senza problemi.

Uhm ... io faccio cosi (ho visto da un altra estensione e ho modificato x il mio caso) ma non sembra che faccia niente, ho controllato con un programma ma rimane sempre normale in tutti e due i casi! Secondo te come posso fare? Sono sicuro che non da errori perché mi ritorna sempre 1

extern "C" PyObject *
set_system(PyObject* /*self*/, PyObject* args)
{
RWsSession ws(CEikonEnv::Static()->WsSession()); 
CApaWindowGroupName* wgName; 
wgName = CApaWindowGroupName::NewLC(ws); 

wgName->SetSystem(ETrue);

return Py_True;
}

extern "C" PyObject *
set_hidden(PyObject* /*self*/) //, PyObject* args)
{
RWsSession ws(CEikonEnv::Static()->WsSession()); 
CApaWindowGroupName* wgName; 

//CArrayFixFlat<TInt>* wgl = new (ELeave) CArrayFixFlat<TInt>(5);
//CleanupStack::PushL(wgl);

//User::LeaveIfError(ws.WindowGroupList(wgl));
wgName = CApaWindowGroupName::NewLC(ws); 

wgName->SetHidden(ETrue);

return Py_True;

}

Link to comment
Condividi su altri siti

Io non riesco più a capire niente :crying_anim02: Cioè sembra che il codice lo esegua in modo giusto ma non dà nessun risultato!! Secondo te dove sbaglio??

(Nessun warning oppure errori in compilazione)

extern "C" PyObject *
set_system(PyObject* /*self*/, PyObject* args) // Richiamo la funzione da python passandogli l'UID dell'app che mi interessa rendere nascosta
{
  TUid uid;
  if (!PyArg_ParseTuple(args, "i", &uid))
return NULL;
RWsSession& wsSession = CEikonEnv::Static()->WsSession();

CApaWindowGroupName* wgName=CApaWindowGroupName::NewL(wsSession);
CleanupStack::PushL(wgName);

CArrayFixFlat<TInt>* WindowGroupIds = new(ELeave)CArrayFixFlat<TInt>(1);
CleanupStack::PushL(WindowGroupIds);

User::LeaveIfError(wsSession.WindowGroupList(0,WindowGroupIds));
const TInt count = WindowGroupIds->Count();

for (TInt ii=0; ii<count; ii++)
{
	TInt wgId = WindowGroupIds->At(ii);
	wgName->ConstructFromWgIdL(wgId);
	if (wgName->AppUid()==uid)
	{
		wgName->SetHidden(ETrue); //Ne questo
		wgName->SetSystem(ETrue); //Ne questo vanno!
		CleanupStack::PopAndDestroy(2);//WindowGroupIds, wgName
		return Py_True; //Sono sicuro che arriva qui perchè mi ritorna 1
		//break;
	}
	//wgName->SetHidden(ETrue);

	//wgName->Caption()
	//wgName->AppUid().Name()
	//wgName->Hidden()
	//wgName->IsSystem()
	//wgName->IsBusy()
	//wgName->AppUid()

}
return Py_False; // Se metto un UID sbagliato va qui ovviamente

}

EDIT: ho trovato che si può cercare in un altro modo la finestra, provo pure questo!:

void CExampleAppUi::SendKeyTest()

  {
  TKeyEvent event;
  event.iRepeats=0;
  event.iScanCode=0;
  event.iModifiers=EModifierCtrl | EModifierShift;
  event.iCode=CTRL('t'); // defined in COEDEF.H

  _LIT(KAppCaption,"System");
  RWsSession& ws=iEikonEnv->WsSession();
  TInt previous=0;
  CApaWindowGroupName::FindByCaption(KAppCaption,ws,previous);
  TApaTask task(ws);
  task.SetWgId(previous);
  if (!task.Exists())
		User::Leave(KErrNotFound);task.BringToForeground(); // So we can see the results
  task.SendKey(event);
  }

Modificato da memoryn70
Link to comment
Condividi su altri siti

:crying_anim02::worried: Neanche cosi va..mi rendo conto che sbaglio io qualcosa allora!!

	  
  _LIT(KAppCaption,"Python");
  //RWsSession& ws=iEikonEnv->WsSession();
  RWsSession& ws = CEikonEnv::Static()->WsSession();
  TInt previous=0;
  CApaWindowGroupName::FindByCaption(KAppCaption,ws,previous);
  CApaWindowGroupName* wgName=CApaWindowGroupName::NewL(ws);
  //TInt wgId = WindowGroupIds->At(ii);
  wgName->ConstructFromWgIdL(previous);
  wgName->SetHidden(ETrue);

Dammi 1 mano Socio!! :lol:

Modificato da memoryn70
Link to comment
Condividi su altri siti

Fossi in te proverei il primo metodo togliendo pero' il controllo sull'UID.

Quello dovrebbe nascondere tutti quanti i task...

for (TInt ii=0; ii<count; ii++)
   {
       TInt wgId = WindowGroupIds->At(ii);
       wgName->ConstructFromWgIdL(wgId);
       wgName->SetHidden(ETrue); 
       wgName->SetSystem(ETrue); 
   }
CleanupStack::PopAndDestroy(2);//WindowGroupIds, wgName

Se funzia dovrai poi aggiustare solo l'if, non so come perche' ad occhio sembra corretto, ma evidentemente c'e' qualche "impiccio" aggiuntivo.

Modificato da Il.Socio
Link to comment
Condividi su altri siti

Ce l'ho fatta per il SetSystem!!! :)

Ho risolto cosi:

extern "C" PyObject *
set_system(PyObject* /*self*/) //, PyObject* args)
{

CEikonEnv::Static()->SetSystem(ETrue);

return Py_True;
}

Quindi appena lo attivo non c'è il problema del tasto rosso...

Per nascondere non ho ancora risolto niente purtroppo....Cosi come ho fatto sopra non va perchè manca il metodo e con il ciclo for non c'è verso che va!

Vabbè intanto 1 cosa l'ho fatta...

Modificato da memoryn70
Link to comment
Condividi su altri siti

Finalmente ce l'ho fatta !!!

Ho fatto cosi (trovato in internet e modificato iEkonEnv con CEikonEnv::Static())

Cosi si nasconde il task nel quale viene eseguito

	TInt wgId = CEikonEnv::Static()->RootWin().Identifier();
RWsSession session = CEikonEnv::Static()->WsSession();
CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(session, wgId);
wgName->SetHidden(ETrue);
wgName->SetWindowGroupName(CEikonEnv::Static()->RootWin());
CleanupStack::PopAndDestroy(); // wgName

Era ora che andasse!! :D

Grazie Socio cmq per le dritte ;)

Ora sistemo la libreria per python e poi posto

Modificato da memoryn70
  • Mi Piace 1
Link to comment
Condividi su altri siti

  • 5 anni dopo...

Finalmente ce l'ho fatta !!!

Ho fatto cosi (trovato in internet e modificato iEkonEnv con CEikonEnv::Static())

Cosi si nasconde il task nel quale viene eseguito

TInt wgId = CEikonEnv::Static()->RootWin().Identifier();
	RWsSession session = CEikonEnv::Static()->WsSession();
	CApaWindowGroupName* wgName = CApaWindowGroupName::NewLC(session, wgId);
	wgName->SetHidden(ETrue);
	wgName->SetWindowGroupName(CEikonEnv::Static()->RootWin());
	CleanupStack::PopAndDestroy(); // wgName
Era ora che andasse!! :thumbs:

Grazie Socio cmq per le dritte :wink:

Ora sistemo la libreria per python e poi posto

Grazie Memory! Anche dopo 5 anni la tua risposta mi è stata utilissima per nascondere un'app dal TaskManager! :D

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy