一个进程查看器的sdk实现[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

//
//////////////////////////////////////////////////////////////
//函数名:DoPropertySheet
//功能:创建属性表
//入口参数:
//        hwndOwner:属性表的拥有者窗口。NULL表示桌面
//出口参数:无
/////////////////////////////////////////////////////////////
//
void DoPropertySheet(HWND hwndOwner)
{
    PROPSHEETPAGE psp[2];
    PROPSHEETHEADER psh;

    psp[0].dwSize = sizeof(PROPSHEETPAGE);
    psp[0].dwFlags = PSP_USEICONID | PSP_USETITLE;//|PSP_USECALLBACK;
    psp[0].hInstance = g_hinst;
    psp[0].pszTemplate = MAKEINTRESOURCE(IDD_TABSHEET1);
    psp[0].pszIcon = 0;//MAKEINTRESOURCE(IDI_FONT);
    psp[0].pfnDlgProc =(DLGPROC)ProcessPageDlgProc;//进程页的对话框过程
    psp[0].pszTitle = "进程";
    psp[0].lParam = 0;
    psp[0].pfnCallback = NULL;

    psp[1].dwSize = sizeof(PROPSHEETPAGE);
    psp[1].dwFlags = PSP_USEICONID | PSP_USETITLE;//|PSP_USECALLBACK;
    psp[1].hInstance = g_hinst;
    psp[1].pszTemplate = MAKEINTRESOURCE(IDD_TABSHEET2);
    psp[1].pszIcon =0;// MAKEINTRESOURCE(IDI_BORDER);
    psp[1].pfnDlgProc = (DLGPROC)WindowPageDlgProc;//窗口页的对话框过程
    psp[1].pszTitle ="窗口";
    psp[1].lParam = 0;
    psp[1].pfnCallback = NULL;

    psh.dwSize = sizeof(PROPSHEETHEADER);
    psh.dwFlags = PSH_USEICONID | PSH_PROPSHEETPAGE|PSH_USECALLBACK;
    psh.hwndParent = hwndOwner;
    psh.hInstance = g_hinst;
    psh.pszIcon =0;// MAKEINTRESOURCE(IDI_CELL_PROPERTIES);
    psh.pszCaption = (LPSTR) "进程管理器";
    psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
    psh.nStartPage = 0;
    psh.ppsp = (LPCPROPSHEETPAGE) &psp;
    psh.pfnCallback =(PFNPROPSHEETCALLBACK)SheetProc;//属性表的回调函数

    PropertySheet((LPCPROPSHEETHEADER)&psh);
    return;
}

//
//////////////////////////////////////////////////////////////////////////
//函数:My_RunFileScan
//功能:将进程名显示在列表框上
//入口参数:
//        hwndListbox 列表框句柄
//出口参数:无
//////////////////////////////////////////////////////////////////////////
//
void My_RunFileScan(HWND hwndListbox)
{
    ProcessInfo p;
    HANDLE ProcessListHandle;
    PROCESSENTRY32 ProcessStruct;
 BOOL ok;
 //清列表框
 ListBox_ResetContent(hwndListbox);

 //创建进程快照
 ProcessListHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

 ProcessStruct.dwSize = sizeof(PROCESSENTRY32);
 ok = Process32First(ProcessListHandle,&ProcessStruct);
 for(int i=0; ok!=0; i++)
 {
  p= (ProcessInfo)malloc(sizeof(TProcessInfo));

  p->ExeFile = ProcessStruct.szExeFile;
  p->ProcessID = ProcessStruct.th32ProcessID;
  int n=ListBox_AddString(hwndListbox,ProcessStruct.szExeFile);
  //listbox的sort属性已改为false
  //MessageBox(0,"请观察是如何加入列表框的","~00~",0);
       
  //将p附加到列表框第n项(从0开始)
  ListBox_SetItemData(hwndListbox,n,p);

     //下面这段代码是调试时用来验证指针确实附加在列表项上
  //ProcessInfo p2 = (ProcessInfo)ListBox_GetItemData

(hwndListbox,n);
  //char buffer[100];
  //wsprinf(buffer,"%p",p2);
  //MessageBox(0,buffer,"~00~",0);
  
  ok = Process32Next(ProcessListHandle,&ProcessStruct);  
 } 
 CloseHandle(ProcessListHandle);     
}


//
//  Process WM_INITDIALOG message for window/dialog: ProcessPageDlg
//
BOOL ProcessPageDlg_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
 // TODO: Add your message processing code here...
 SendMessage(GetDlgItem(hwnd, IDC_LIST1), LB_SETHORIZONTALEXTENT, 500,

0);
 return TRUE;
}

本文关键:一个进程查看器的sdk实现
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top