Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Làm sao để lấy handle của 1 process

    Mình có 1 process đang chạy làm sao để lấy được handle của nó vậy bạn ?

    mình goole thấy cách code get handle theo process name, nhưng hình như ko được hay lắm, ví dụ mình có cái của "tung hủa (trung quốc)" chạy thì làm sao mà biết được cái chữ loằng ngoằng đấy là gì ? có cái thì ko có tên nữa, làm sao đây ? Lại thêm vấn đề là , code của VC6.0 thì chuỗi là ansi, nhưng mình làm việc với vs2010 thì toàn chuỗi unicode, mệt thật. Có cách nào lấy được handle của process theo app name (ví dụ ts.exe) ko bạn?

    Nếu có thể shared code thì càng cám ơn bạn.


    à mình cho mình hỏi luôn, vậy mình muốn lấy name của 1 process "tung hủa" đấy (để lưu vào file ất mà) thì làm thế nào vậy?


    xin lỗi vì sự ngu ngốc của mình[IMG]images/smilies/11.gif[/IMG] và cám ơn bạn rất nhiều

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Những hàm api của windows đều có 2 phiên bản A và W, ví dụ CreateFileA/CreateFileW. Phiên bản W là phiên bản hỗ trợ unicode.

    Muốn có handle của process thì phải gọi hàm OpenProcess và truyền processId ( pid ) vào. Pid có thể kiếm được bằng cách duyệt danh sách process và tìm. Mà muốn duyệt danh sách process thì cần 2 hàm Process32First và Process32Next hoặc EnumProcess.

    Sau đây là một đoạn code minh họa nhỏ :


    Mã:
    #include <windows.h>#include <tlhelp32.h>  DWORD FindProcessByName(wchar_t *processName){    DWORD pid = 0;    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);    PROCESSENTRY32W pe32;    pe32.dwSize = sizeof(PROCESSENTRY32);    BOOL cont = Process32FirstW(hSnapshot, &pe32);     while (cont)    {        if (lstrcmpiW(pe32.szExeFile, processName) == 0)        {            pid = pe32.th32ProcessID;            break;        }                cont = Process32NextW(hSnapshot, &pe32);    }     CloseHandle(hSnapshot);        return pid;}                         void KillNotepad(){    DWORD pid = FindProcessByName(L"notepad.exe");    if (pid > 0)    {        HANDLE hProcess = OpenProcess(PROCESS_TERMINATE,FALSE,pid);        TerminateProcess(hProcess, 0);        CloseHandle(hProcess);    }}

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    EnumProcess thường không đầy đủ các Process bằng cách CreateToolhelp32Snapshot
    ( vài process hệ thống nó không Enum ra - không biết có phải do MS cố tình hay không)

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi meoconlongvang
    Những hàm api của windows đều có 2 phiên bản A và W, ví dụ CreateFileA/CreateFileW. Phiên bản W là phiên bản hỗ trợ unicode.

    Muốn có handle của process thì phải gọi hàm OpenProcess và truyền processId ( pid ) vào. Pid có thể kiếm được bằng cách duyệt danh sách process và tìm. Mà muốn duyệt danh sách process thì cần 2 hàm Process32First và Process32Next hoặc EnumProcess.

    Sau đây là một đoạn code minh họa nhỏ :


    Cpp code:
    </div> đã nắm được vấn đề hờ hờ
    cám ơn bạn mèo rất nhiều [IMG]images/smilies/kiss.gif[/IMG][IMG]images/smilies/kiss.gif[/IMG]

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •