Làm cách nào để lấy tên quy trình từ PID bằng C++ trong Windows?Cách lấy tên quy trình trong C++
Trả lời
Nếu bạn đang cố gắng lấy tên hình ảnh thực thi của một quy trình cụ thể, hãy xem GetModuleFileName.
Tôi đoán chức năng OpenProcess sẽ hữu ích, với điều kiện quy trình của bạn có các quyền cần thiết. Một khi bạn có được một xử lý cho quá trình này, bạn có thể sử dụng chức năng GetModuleFileNameEx để có được đường dẫn đầy đủ (đường dẫn đến tệp .exe) của quá trình.
#include "stdafx.h"
#include "windows.h"
#include "tchar.h"
#include "stdio.h"
#include "psapi.h"
// Important: Must include psapi.lib in additional dependencies section
// In VS2005... Project > Project Properties > Configuration Properties > Linker > Input > Additional Dependencies
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE Handle = OpenProcess(
PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE,
8036 /* This is the PID, you can find one from windows task manager */
);
if (Handle)
{
TCHAR Buffer[MAX_PATH];
if (GetModuleFileNameEx(Handle, 0, Buffer, MAX_PATH))
{
// At this point, buffer contains the full path to the executable
}
else
{
// You better call GetLastError() here
}
CloseHandle(Handle);
}
return 0;
}
Thật thú vị khi biết làm thế nào để có được một PID ở nơi đầu tiên, mặc dù điều này không được hỏi bởi OP. – Jaywalker
@Jaywalker Cuộc gọi wmi và lớp win32_process sẽ thực hiện thủ thuật – ROAR
@Jaywalker: Bạn có thể sử dụng EnumProcesses (http://msdn.microsoft.com/en-us/library/ms682629.aspx) –
Bạn có thể lấy tên quy trình bằng cách sử dụng WIN32 API GetModuleBaseName sau khi xử lý quy trình. Bạn có thể xử lý quy trình bằng cách sử dụng OpenProcess.
Để có được tên thực thi, bạn cũng có thể sử dụng GetProcessImageFileName.
Kiểm tra các chức năng enumprocess trong thư viện công cụ trợ giúp:
http://msdn.microsoft.com/en-us/library/ms682629(v=vs.85).aspx
Ví dụ tốt @http://msdn.microsoft.com/en-us/library/ms682623(v=vs.85).aspx
Hãy thử chức năng này:
std::wstring GetProcName(DWORD aPid)
{
PROCESSENTRY32 processInfo;
processInfo.dwSize = sizeof(processInfo);
HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (processesSnapshot == INVALID_HANDLE_VALUE)
{
std::wcout << "can't get a process snapshot ";
return 0;
}
for(BOOL bok =Process32First(processesSnapshot, &processInfo);bok; bok = Process32Next(processesSnapshot, &processInfo))
{
if(aPid == processInfo.th32ProcessID)
{
std::wcout << "found running process: " << processInfo.szExeFile;
CloseHandle(processesSnapshot);
return processInfo.szExeFile;
}
}
std::wcout << "no process with given pid" << aPid;
CloseHandle(processesSnapshot);
return std::wstring();
}
- 1. Cách lấy tên quy trình của ứng dụng?
- 2. Cách lập trình để lấy tên biến trong C?
- 3. Cách lấy tên người dùng trong C/C++ trong Linux?
- 4. Lấy tên quy trình từ pid hoặc xử lý
- 5. Cách lấy tên tháng trong C#?
- 6. cách lấy danh sách quy trình
- 7. Làm cách nào để lấy id tiến trình từ tên quy trình?
- 8. Cách đa nền tảng để lấy PID bằng tên quy trình trong python
- 9. Cách chỉ định tên quy trình AddIn?
- 10. Lấy tên của tất cả các chốt trong quy trình hiện tại
- 11. Cách lấy tên tệp quy trình từ pid, nếu OpenProcess() không thành công với ACCESS_DENIED?
- 12. Tên quy trình đầy đủ từ task_struct
- 13. Lấy một tên lớp C++ theo lập trình
- 14. Làm cách nào để lấy tên chương trình trong Racket?
- 15. Cách lấy tên hàm từ con trỏ hàm trong C#?
- 16. Cách lấy tên cột của bảng khi chạy trong C#?
- 17. Cách lấy tên tệp từ FILE * struct trong C
- 18. PHP: lấy tên trình duyệt
- 19. Lấy tên chương trình Java
- 20. Tạm dừng quy trình trong C#
- 21. lấy tên biến trong trình hiển thị trình gỡ lỗi
- 22. Các cách thoát khác nhau của quy trình trong C++
- 23. Lấy danh sách đầy đủ các quy trình của Windows trong C
- 24. Nhận tên quy trình hiện tại (thực thi) trong Go?
- 25. C++ Windows - Cách lấy đường dẫn quá trình từ PID
- 26. Cách lấy tên người dùng trong Active Directory từ tên hiển thị trong C#?
- 27. cách thay đổi tên của quy trình đăng ký Java?
- 28. Cách lấy thư mục hiện tại trong chương trình C?
- 29. Cách lấy kiểu giá trị từ trình lặp trong C++?
- 30. Làm thế nào để tôi nhận được tên quy trình của một cổng mở trong C#?
GetModuleFileName không mất PID trong việc xem xét . Nó chỉ cung cấp đường dẫn đầy đủ cho tệp chứa mô-đun được chỉ định. –