進程模塊查看器

来源:http://www.cnblogs.com/shouce/archive/2016/01/19/5141035.html
-Advertisement-
Play Games

主要界面如下:主要代碼如下:BOOL CEnumProcessDlg::OnInitDialog(){ CDialog::OnInitDialog(); // 將“關於...”菜單項添加到系統菜單中。 // IDM_ABOUTBOX 必須在系統命令範圍內。 ASSERT((I...


主要界面如下:

主要代碼如下:

BOOL CEnumProcessDlg::OnInitDialog()
{
    CDialog::OnInitDialog();

    // 將“關於...”菜單項添加到系統菜單中。

    // IDM_ABOUTBOX 必須在系統命令範圍內。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        CString strAboutMenu;
        strAboutMenu.LoadString(IDS_ABOUTBOX);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 設置此對話框的圖標。當應用程式主視窗不是對話框時,框架將自動
    //  執行此操作
    SetIcon(m_hIcon, TRUE);            // 設置大圖標
    SetIcon(m_hIcon, FALSE);        // 設置小圖標

    // TODO: 在此添加額外的初始化代碼
    LONG lStyle;
    lStyle = GetWindowLong(m_ctrlList.m_hWnd, GWL_STYLE);
    lStyle &= ~LVS_TYPEMASK;
    lStyle |= LVS_REPORT;
    SetWindowLong(m_ctrlList.m_hWnd, GWL_STYLE, lStyle);

    DWORD dwStyle = m_ctrlList.GetExtendedStyle();
    dwStyle |= LVS_EX_FULLROWSELECT;
    dwStyle |= LVS_EX_GRIDLINES;
    m_ctrlList.SetExtendedStyle(dwStyle);
    m_ctrlList.InsertColumn(0, _T("Process ID"), LVCFMT_LEFT, 75);
    m_ctrlList.InsertColumn(1, _T("Process Name"), LVCFMT_LEFT, 120);
    m_ctrlList.InsertColumn(2, _T("Parent Process ID"), LVCFMT_LEFT, 115);
    m_ctrlList.InsertColumn(3, _T("Thread Count"), LVCFMT_LEFT, 90);
    ListProcess();

    return TRUE;  // 除非將焦點設置到控制項,否則返回 TRUE
}

void CEnumProcessDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialog::OnSysCommand(nID, lParam);
    }
}

// 如果向對話框添加最小化按鈕,則需要下麵的代碼
//  來繪製該圖標。對於使用文檔/視圖模型的 MFC 應用程式,
//  這將由框架自動完成。

void CEnumProcessDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用於繪製的設備上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使圖標在工作矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 繪製圖標
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}

//當用戶拖動最小化視窗時系統調用此函數取得游標顯示。
//
HCURSOR CEnumProcessDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}


void CEnumProcessDlg::ListProcess(void)
{
    HANDLE hProcessSnap;
    PROCESSENTRY32 pe32;
    
    hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hProcessSnap == INVALID_HANDLE_VALUE)
    {
        CString strErr;
        strErr.Format(_T("CreateToolhelp32Snapshot failed:%d"), GetLastError());
        AfxMessageBox(strErr);
        return;
    }

    pe32.dwSize = sizeof(PROCESSENTRY32);

    int index = 0;
    if (!Process32First(hProcessSnap, &pe32))
    {
        CString strErr;
        strErr.Format(_T("Process32First failed:%d"), GetLastError());
        AfxMessageBox(strErr);
        CloseHandle(hProcessSnap);
        return;
    }

    do 
    {
        CString strID;
        strID.Format(_T("%d"), pe32.th32ProcessID);
        m_ctrlList.InsertItem(index, strID);
        m_ctrlList.SetItemText(index, 1, pe32.szExeFile);
        strID.Format(_T("%d"), pe32.th32ParentProcessID);
        m_ctrlList.SetItemText(index, 2, strID);
        strID.Format(_T("%d"), pe32.cntThreads);
        m_ctrlList.SetItemText(index++, 3, strID);
    } while (Process32Next(hProcessSnap, &pe32));

    CloseHandle(hProcessSnap);
}

void CEnumProcessDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
    // TODO: 在此處添加消息處理程式代碼
    CMenu menu;

    if (menu.CreatePopupMenu() == FALSE)
    {
        return;
    }
    
    if (pWnd == &m_ctrlList)
    {
        menu.AppendMenu(MF_STRING , ID_SCANMODULE , _T("查看依賴模塊"));
        if(m_ctrlList.GetSelectedCount() < 0)
        {
            menu.EnableMenuItem(ID_SCANMODULE , MF_DISABLED | MF_GRAYED);
        }
    }

    menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);
}

void CEnumProcessDlg::ScanModule(UINT nID)
{
    switch (nID)
    {
    case ID_SCANMODULE:
        {
            CString strProcessID = m_ctrlList.GetItemText(m_ctrlList.GetSelectionMark(), 0);
            CProcessModule dlgProcessModule;
            dlgProcessModule.m_dwProcessID = _tcstoul(strProcessID, 0, 10);
            dlgProcessModule.DoModal();
        }
        break;
    default:
        break;
    }
}

void CEnumProcessDlg::OnNMDblclkListProcess(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 在此添加控制項通知處理程式代碼
    CString strProcessID = m_ctrlList.GetItemText(m_ctrlList.GetSelectionMark(), 0);
    CProcessModule dlgProcessModule;
    dlgProcessModule.m_dwProcessID = _tcstoul(strProcessID, 0, 10);
    dlgProcessModule.DoModal();
    *pResult = 0;
}

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用PHP的array_unique()函數允許你傳遞一個數組,然後移除重覆的值,返回一個擁有唯一值的數組。這個函數大多數情況下都能工作得很好。但是,如果你嘗試在一個大的數組裡使用array_unique()函數,它會運行地慢一些。 有一個比較好而且更快的函數array_flip()來替代使用ar...
  • Ruby對象數組的排序作者剛剛接觸Ruby,因之前總認為腳本語言語法不規範,對腳本語言有些偏見,如不是項目需要並不會去學習PYTHON、RUBY等語言。現在項目中需要實現對象數組排序的任務,對於昨天開始看ruby的我來說壓力山大啊!【汗】但是經過一番查詢資料,終於初步實現了自己想要的結果,現將自己做...
  • 在百度知道上看到一個排列組合的一個提問,一想還是比較容易的主要採用取餘的方法. 這裡用C寫了一段代碼測試了一下.代碼比較水,主要看後面的數學分析. 想想還是高中生 的時候比較厲害,啥都會,啥都算的快. 現在打游戲都力不從心了. 同學們四年游戲專業一定要好好學.不留遺憾.
  • 原文鏈接這篇文章介紹了Python中list是如何實現的。在Python中list特別有用。讓我們來看下list的內部是如何實現的。來看下麵簡單的程式,在list中添加一些整數並將他們列印出來。>>> L = []>>> L.append(1)>>> L.append(2)>>> L.append(...
  • 腳本無故中斷,程式平常正常運行但是某天無故出現錯誤,線下測試一切正常線上總是運行不起來... 你是否遇到過上面揪心的問題,你是否很難找出原因,你是否很難對嚴重問題進行預警... 那麼,所有的答案都在這裡
  • JAXB(Java Architecture for XML Binding) 是一個業界的標準,是一項可以根據XML Schema產生Java類的技術。該過程中,JAXB也提供了將XML實例文檔反向生成Java對象樹的方法,並能將Java對象樹的內容重新寫到XML實例文檔。從另一方面來講,JAXB...
  • 先安照路徑放好如圖。簡單使用無logo:public function qrcode(){ Vendor('phpqrcode.phpqrcode'); //生成二維碼圖片 $object = new \QRcode(); $url='http...
  • index_uploads index_uploads.php "; print_r($_FILES); echo ""; ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...