微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按名称获取C进程ID

我试图通过进程名称(例如, notepad.exe )获取进程ID,但StackOverflow上的以前的解决scheme似乎不能正常工作。 这是我试过的:

DWORD FindProcessId(const char *processname) { HANDLE hProcessSnap; PROCESSENTRY32 pe32; DWORD result = NULL; // Take a snapshot of all processes in the system. hProcessSnap = Createtoolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (INVALID_HANDLE_VALUE == hProcessSnap) return(FALSE); // Retrieve @R_851_4045@ion about the first process,// and exit if unsuccessful if (!Process32First(hProcessSnap,&pe32)) { CloseHandle(hProcessSnap); // clean the snapshot object return(FALSE); } do { if (0 == _stricmp(processname,pe32.szExeFile)) { result = pe32.th32ProcessID; break; } } while (Process32Next(hProcessSnap,&pe32)); CloseHandle(hProcessSnap); return result; }

我传入“notepad.exe”并确认它正在我的系统上运行,并且该应用程序以pipe理员身份运行,并具有所需的正确权限。 海拔是这样做的:

if (GetmodulefileName(NULL,szPath,ARRAYSIZE(szPath))) { // Launch itself as administrator. sei.lpVerb = TEXT("runas"); sei.lpFile = szPath; sei.hwnd = NULL; sei.nShow = SW_norMAL; if (!ShellExecuteEx(&sei)) { MessageBox(NULL,TEXT("The program needs to be elevated to work properly."),APP_TITLE,MB_OK); return -1; } } return 0;

它永远不会发现进程ID – 每次都返回Null。

这是使用C,而不是C ++。

VSTO Windows Hook keydown事件被称为10次

如何在Linux上重新实现(或包装)系统调用函数

无法从docker运行asp.net 5

cedet-semantic错误parsinglinux内核文件“jiffies.h”时,“空闲服务错误semantic-idle-summary-idle-function-Arithmetic error”

我如何尝试创build一个文件,并返回一个值,指出它是否被创build?

.NET Process.GetProcesses()“访问被拒绝”。

如何获得富文本框字符颜色?

如何检查C#中的Windows许可证状态?

PROCESS_MEMORY_COUNTERS结构中的哪个成员给出当前使用的内存

在linux上编译SFML(ubuntu)

解决方法是在获取进程快照后简单地设置pe32.dwSize 。 在这里完成固定代码

DWORD FindProcessId(const char *processname) { HANDLE hProcessSnap; PROCESSENTRY32 pe32; DWORD result = NULL; // Take a snapshot of all processes in the system. hProcessSnap = Createtoolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if (INVALID_HANDLE_VALUE == hProcessSnap) return(FALSE); pe32.dwSize = sizeof(PROCESSENTRY32); // <----- IMPORTANT // Retrieve @R_851_4045@ion about the first process,&pe32)) { CloseHandle(hProcessSnap); // clean the snapshot object printf("!!! Failed to gather @R_851_4045@ion on system processes! n"); return(NULL); } do { printf("Checking process %lsn",pe32.szExeFile); if (0 == strcmp(processname,&pe32)); CloseHandle(hProcessSnap); return result; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐