-
07-08-2010, 10:43 AM #1Junior Member
- 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ềuView more random threads:
- Làm việc với File trong VC++, dùng CreateFile, ReadFile, WriteFile như thế nào?
- Lỗi khi kết hợp WM_MOUSEMOVE và BITMAP
- Tính số Icon Trong 1 File exe ?
- anti hidetoolz, ẩn luôn cả chương trình của mình. ai biết chỉnh giúp mình với
- Hàm tìm kiếm tất cả các file loại trừ một số thư mục?
- Win32API và C for Window có liên quan đến nhau không?
- Sử dụng Windows API nào để đọc cấu trúc file và folder trên đĩa cứng
- SendInput Với tham số INPUT_MOUSE
- Cryptography Next Generation Cách nào chạy trên windows XP ?
- Ứng dụng 64Bit bị crash khi hook keyboard do nguyên nhân nào?
-
07-08-2010, 12:51 PM #2Junior Member
- 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); }}
-
07-08-2010, 03:06 PM #3Junior Member
- 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)
-
07-08-2010, 06:37 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi meoconlongvang
cám ơn bạn mèo rất nhiều [IMG]images/smilies/kiss.gif[/IMG][IMG]images/smilies/kiss.gif[/IMG]
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...