/* Copyright (c) 2003, Nokia. All rights reserved */
#include <e32def.h>
#include <coemain.h>
#include <apaid.h>
#include <apgcli.h>
#include <badesca.h>
#include <gdi.h>
#include <w32std.h>
#include <eikclbd.h>
#include <eikfrlb.h>
#include <aknquerydialog.h>
#include <aknnotewrappers.h>
#include <eikdll.h>
#include <taskmgr.rsg>
#include <hal.h>
#include <hal_data.h>
#include <pathinfo.h>
#include <aknmessagequerydialog.h>
#include <AknCommonDialogs.h>
#include <akntitle.h>
#include <plpvariant.h>
#include <plpvar.h>
#include "taskmgrAppView.h"
const TUid KUidtaskmgrApp = {0x10005B60};
TKeyResponse CtaskmgrAppView::OfferKeyEventL(
const TKeyEvent& aKeyEvent,
TEventCode aType )
{
if ( aType != EEventKey ){
return EKeyWasNotConsumed;
}
switch ( aKeyEvent.iCode ){
// Up & Down arrow key's event transfer to list box
case EKeyUpArrow:
case EKeyDownArrow:
if ( iListBox ){
return iListBox->OfferKeyEventL( aKeyEvent, aType );
}
break;
default:
break;
}
return EKeyWasNotConsumed;
}
TInt CtaskmgrAppView::CountComponentControls() const
{
return 1; // return nbr of controls inside this container
// return nbr of controls inside this container
}
// ---------------------------------------------------------
// CSIPBySipUAContainerAddressBook::ComponentControl(TInt aIndex) const
// ---------------------------------------------------------
//
CCoeControl* CtaskmgrAppView::ComponentControl(TInt aIndex) const
{
switch ( aIndex ){
case 0:
return iListBox;
default:
return NULL;
}
}
CtaskmgrAppView* CtaskmgrAppView::NewL(const TRect& aRect)
{
CtaskmgrAppView* self = CtaskmgrAppView::NewLC(aRect);
CleanupStack::Pop(self);
return self;
}
CtaskmgrAppView* CtaskmgrAppView::NewLC(const TRect& aRect)
{
CtaskmgrAppView* self = new (ELeave) CtaskmgrAppView;
CleanupStack::PushL(self);
self->ConstructL(aRect);
return self;
}
CtaskmgrAppView::CtaskmgrAppView()
{
// No implementation required
}
CtaskmgrAppView::~CtaskmgrAppView()
{
delete iListBox;
if(iAppList){
iAppList->Reset();
delete iAppList;
iAppList = NULL;
}
if(iProcList){
iProcList->Reset();
delete iProcList;
iProcList = NULL;
}
// No implementation required
}
void CtaskmgrAppView::CreateListBoxL(const TRect&/* aRect*/)
{
//Delete the list box if already exists.
if ( iListBox ){
delete iListBox;
iListBox = NULL;
}
iListBox = new (ELeave ) CAknDoubleStyleListBox();
iListBox->ConstructL(this, EAknListBoxSelectionList );
iListBox->SetContainerWindowL(*this);
//add scroll bar to the list
iListBox->CreateScrollBarFrameL(ETrue);
iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn,
CEikScrollBarFrame::EAuto);
const TPoint aPoint(0,0);
const TSize aSize(180,150);
//most important line , else the lst box simply disappears
iListBox->SetExtent(aPoint,aSize);
//Fill list box with the data
InitTaskList();
iListBox->HandleItemAdditionL();
iListBox->ActivateL();
iListBox->DrawNow();
}
void CtaskmgrAppView::HandleListBoxEventL(CEikListBox* /*aListBox*/,TListBoxEvent /*aEventType*/ )
{
}
//This fucntion will get the present task list and
//add it to the UI list
void CtaskmgrAppView::InitTaskList()
{
CEikStatusPane* sp=iEikonEnv->AppUiFactory()->StatusPane();
CAknTitlePane* tp=(CAknTitlePane*)sp->ControlL(TUid::Uid(EEikStatusPaneUidTitle));
tp->SetTextL(_L("Task List")); // Set the text string.
if(iProcList){
iProcList->Reset();
delete iProcList;
iProcList = NULL;
}
_LIT(KItemFormatString,"\t%S\t%S\t");
RApaLsSession RSession;
TInt AAppCount = 0;//get the number of applications
RSession.Connect();
RSession.AppCount(AAppCount);
iAppCount = AAppCount;
iAppList = new (ELeave) CDesCArrayFlat(iAppCount);
RSession.GetAllApps();
iListBox->Reset();
if(AAppCount > 0){
CDesCArray *itemList = new (ELeave) CDesCArrayFlat(AAppCount);
TBuf<200> Item;
TApaAppInfo AppInfo;
TApaTaskList aList(CEikonEnv::Static()->WsSession());
TInt ListCount = 0;
for(TInt i=0;i<AAppCount;i++){
RSession.GetNextApp(AppInfo);
TApaTask ATask3 = aList.FindApp(AppInfo.iUid);
if(ATask3.Exists())
{
if(AppInfo.iFullName.Find(_L("Phone.app"))!=KErrNotFound)
{
iPhoneIndex = ListCount;
}
Item.Format(KItemFormatString,&AppInfo.iCaption,&AppInfo.iFullName);
itemList->AppendL(Item);
UidArray[ListCount++] = AppInfo.iUid;
}
}
//set items and ownership
iListBox->Model()->SetItemTextArray(itemList);
iListBox->Model()->SetOwnershipType(ELbmOwnsItemArray);
}
else{
iEikonEnv->InfoMsg(_L("No tasks!!"));
}
iListBox->SetCurrentItemIndex(0);
iListBox->SetFocus(ETrue);
RSession.Close();
}
void CtaskmgrAppView::ConstructL(const TRect& aRect)
{
CreateWindowL();
CreateListBoxL(aRect);
SetRect(aRect);
ActivateL();
}
// Draw this application's view to the screen
void CtaskmgrAppView::Draw(const TRect& /*aRect*/) const
{
/* // Get the standard graphics context
CWindowGc& gc = SystemGc();
// Gets the control's extent
TRect rect = Rect();
// Clears the screen
gc.Clear(rect);
*/
}
void CtaskmgrAppView::RefreshList()
{
if(iAppState == ETaskListState){
InitTaskList();
}else if (iAppState == EProcessListState){
InitProcessList();
}
iListBox->HandleItemAdditionL();
iListBox->ActivateL();
iListBox->DrawNow();
}
void CtaskmgrAppView::KillApp()
{
TInt ItemSelected;
ItemSelected = iListBox->CurrentItemIndex();
TUid KillThisUid = UidArray[ItemSelected];
TApaTaskList aList(CEikonEnv::Static()->WsSession());
TApaTask ATask3 = aList.FindApp(KillThisUid);
if(ATask3.Exists())
ATask3.KillTask();
RefreshList();
}
void CtaskmgrAppView::NewApp()
{
CAknTextQueryDialog* dlg;
TBuf<512> aText;
dlg = new(ELeave)CAknTextQueryDialog(aText, CAknQueryDialog::ENoTone);
dlg->SetMaxLength(512);
TBool answer( dlg->ExecuteLD( R_AKNEXQUERY_ONELINE_DATA_QUERY ) );
if(answer){
//now check if thing is app or exe and then
//launch it accordingly
_LIT(KExe,".exe");
_LIT(KApp,".app");
if(aText.Find(KExe)!=KErrNotFound){
EikDll::StartExeL(aText);
}
else if(aText.Find(KApp)!=KErrNotFound){
CApaCommandLine* commandLine = CApaCommandLine::NewLC();
commandLine->SetLibraryNameL( aText );
commandLine->SetCommandL( EApaCommandRun );
EikDll::StartAppL(*commandLine);
CleanupStack::PopAndDestroy(); // commandLine
}
}
}
void CtaskmgrAppView::TaskInfo()
{
/*buf = "
//ThreadId : %d\n
WindowGroup Id : %d\n
Heap Size : %d kb\n
Stack Size : %d kb\n
Protected : %S\n
CPU usage : %d\n mcrsecs";
*/
if(iAppState == ETaskListState){
TInt ItemSelected = iListBox->CurrentItemIndex();
TUid SelectedAppUid = UidArray[ItemSelected];
TApaTaskList aList(CEikonEnv::Static()->WsSession());
TApaTask ATask3 = aList.FindApp(SelectedAppUid);
TInt WinGrpId = ATask3.WgId();
TThreadId AppThreadId = ATask3.ThreadId();
//now get this thread related info
RThread AppThread;
AppThread.Open(AppThreadId);
TInt HeapSize,StackSize;
AppThread.GetRamSizes(HeapSize,StackSize);
TTimeIntervalMicroSeconds CpuTime;
AppThread.GetCpuTime(CpuTime);
HBufC *aText = iEikonEnv->AllocReadResourceLC( R_TASK_INFO);
HBufC *aText1 = HBufC::NewLC(650);
TBuf<10> IfProtected;
IfProtected.Copy(AppThread.Protected()?_L("YES"):_L("NO"));
aText1->Des().Format(aText->Des
TASKMANAGER
需积分: 0 166 浏览量
更新于2008-10-27
收藏 18KB RAR 举报
标题“TASKMANAGER”指的是Windows操作系统中的任务管理器,这是一个非常重要的系统工具,用于监控和管理正在运行的进程、应用程序、服务以及系统性能。在Windows系统中,任务管理器是用户了解计算机当前状态,查找资源占用过高导致电脑卡顿问题,以及结束不响应程序的关键工具。
任务管理器提供以下主要功能:
1. **进程**:任务管理器会列出所有正在运行的进程,包括应用程序、后台进程和系统进程。用户可以查看每个进程的CPU、内存、硬盘I/O和网络使用情况,以了解哪些程序占用了大量资源。
2. **性能**:此选项卡提供了计算机整体性能的概述,包括CPU、内存、硬盘和网络的使用率。用户可以在这里监视系统的实时性能变化,帮助识别性能瓶颈。
3. **应用历史**:展示应用程序的资源使用历史,有助于分析哪些程序在特定时间段内消耗了大量资源。
4. **启动**:允许用户管理开机自启动的应用程序,通过禁用不必要的启动项来提高系统启动速度和性能。
5. **用户**:显示当前登录的所有用户及其相关的进程,方便管理多个用户账户。
6. **详细信息**:提供更详细的进程信息,包括PID(进程ID)、会话ID、CPU时间、窗口站和桌面等。
7. **服务**:展示系统中所有服务的状态、类型和启动类型,可以在这里启动、停止或重启服务。
描述中提到的“进程内存”和“进程CPU占用”是任务管理器的核心关注点。进程内存是指一个程序在运行时占用的物理内存和虚拟内存,而CPU占用则是指进程对处理器时间的使用程度。这两个指标对于诊断系统性能问题至关重要。
从提供的压缩包文件名“TaskManager_for_6600_source”来看,这可能是一个针对特定设备(如诺基亚6600或其他类似设备)的任务管理器的源代码。源代码是程序的基础,包含了编写程序的原始指令,通常由程序员使用编程语言编写。通过分析源代码,开发者可以了解任务管理器的工作原理,对其进行定制、优化或扩展功能,适应特定设备或操作系统的需要。
任务管理器是一个强大的工具,不仅用于监控系统状态,还为用户提供了管理和优化计算机性能的能力。无论是个人用户还是专业开发人员,理解并充分利用任务管理器的功能,都能提升工作效率和系统稳定性。对于IT专业人士而言,深入研究任务管理器的源代码,可以进一步了解操作系统级别的资源调度和管理机制,这对于系统级编程和优化具有重要价值。