
DWORD PID;
PID = GetProcessPID(L"testexe");
//获取进程pid函数
DWORD GetProcessPID(LPCTSTR pName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)){
if (!_tcsicmp(peszExeFile, pName)) {
CloseHandle(hSnapshot);
return peth32ProcessID;
}
}
return NULL;
}
//由进程pid获取进程句柄,置顶
HWND hh = GetProcessTopWindows(PID);
HWND GetProcessTopWindows(DWORD dwPID){
count = 0;
EnumWindows((WNDENUMPROC)EnumWndProc, (LPARAM)dwPID);
if(count > 0) {
//cout << "窗口句柄是:" << nhWnd[count -1] << endl;//输出句柄,可用spy++工具核对
return (nhWnd[count -1]);
}
return NULL;
}
别忘了添加对应头文件。
用管道:
通过fgets(buf, n, ptr)buf就可以得到命令“ps -ef"一样的信息,
读帮助”man popen":
char cmd = "ps -ef";
FILE ptr;
if ((ptr = popen(cmd, "r")) != NULL)
while (fgets(buf, n, ptr) != NULL)
(void) printf("%s ",buf);
UID PID PPID C STIME TTY TIME CMD
root 0 0 0 Sep-30 00:00:01 sched
root 1 0 0 Sep-30 00:00:06 /etc/init -a
root 2 0 0 Sep-30 00:00:00 vhand
root 3 0 0 Sep-30 00:00:27 bdflush
root 4 0 0 Sep-30 00:00:00 kmdaemon
root 5 1 0 Sep-30 00:00:50 htepi_daemon /
root 6 0 0 Sep-30 00:00:00 strd
root 2941 1 0 Oct-08 tty01 00:00:00 /bin/login ccb
root 43 1 0 Oct-08 00:00:02 /etc/syslogd
root 47 1 0 Oct-08 00:00:00 /etc/ifor_pmd
root 48 47 0 Oct-08 00:00:13 /etc/ifor_pmd
root 36 1 0 Oct-08 00:00:00
HANDLE GetProcessHandle(int nID)
{
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, nID);
}
HANDLE GetProcessHandle(LPCTSTR pName)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (INVALID_HANDLE_VALUE == hSnapshot) {
return NULL;
}
PROCESSENTRY32 pe = { sizeof(pe) };
BOOL fOk;
for (fOk = Process32First(hSnapshot, &pe); fOk; fOk = Process32Next(hSnapshot, &pe)) {
if (!_tcscmp(peszExeFile, pName)) {
CloseHandle(hSnapshot);
return GetProcessHandle(peth32ProcessID);
}
}
return NULL;
}
PS你的代码不够精炼,所以重新写了一个。你看下这个能用不,不能用再帮你找找你的错误。主要你的代码太长了,所以没细看,你的Pn酱紫初始化啊,还有既然是DLL的,那就应该分别做LPCWSTR和LPCSTR两个版本,看你在LPCSTR版本里还用Process32FirstW,是不是有些混乱了?Pn被填充了UNICODE字符集再去和LPCSTR做比较,怎么能得出正确结果呢? 还有那个那个连COM的东西也出来了,完全被雷倒了,休克中
===================================
贴上来的代码都已很负责任的运行通过,不会有错你再检查看看是由于什么引起编译错误可以把出错信息贴上来然后帮你分析看看
另外,workingroy说要提权,DLL是不是应该自作主张提权有待商榷,提权完全可以由客户程序负责决定可以在调用函数前提权,函数调用完恢复原来的权限另外就是提权 *** 作也有消耗,对于系统管理员身份运行(通常我们都是系统管理员身份登陆WINDOWS),不需要提权当然,有高手指出,VISTA和7对系统管理员的权限已经有了修改,既是是系统管理员,权限也受到了某些限制这个我没研究过持保留意见当然楼主的函数应该在提供一个参数,用来传递要打开的进程句柄的权限一般不需要PROCESS_ALL_ACCESS的
以上就是关于C语言中如何获得当前进程句柄,谢谢!全部的内容,包括:C语言中如何获得当前进程句柄,谢谢!、如何用C遍历unix/linux下的所有进程,取得PID,名称等等、高分求解。VC++ 通过进程名或进程ID获取进程句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)