关于C++ OpenProcess()取不到值的问题 20
HWNDhWnd=::FindWindow(NULL,TEXT("Myprocess2"));DWORDnProcId;nProcId=GetWindowThreadPr...
HWND hWnd=::FindWindow(NULL,TEXT("Myprocess2"));
DWORD nProcId;
nProcId=GetWindowThreadProcessId(hWnd, &nProcId);
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, nProcId);
MyProcess2是创建的一个子进程,nProcId可以取到值,但是hProcess取到的值总是为0;给当前进程加权限:
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) //得到进程的令牌句柄;
{
MessageBox("OpenProcessToken failed!");
}
LookupPrivilegeValue(NULL, SE_RESTORE_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识,查询权限
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限
if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges enable failed!");
}
再调用OpenProcess()还是不行,怎么解决?
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, nProcId)
调试过去这一句之后得到的如图 展开
DWORD nProcId;
nProcId=GetWindowThreadProcessId(hWnd, &nProcId);
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, nProcId);
MyProcess2是创建的一个子进程,nProcId可以取到值,但是hProcess取到的值总是为0;给当前进程加权限:
TOKEN_PRIVILEGES tkp;
HANDLE hToken;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) //得到进程的令牌句柄;
{
MessageBox("OpenProcessToken failed!");
}
LookupPrivilegeValue(NULL, SE_RESTORE_NAME,&tkp.Privileges[0].Luid); //获得本地机唯一的标识,查询权限
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES) NULL, 0); //调整获得的权限
if (GetLastError() != ERROR_SUCCESS)
{
MessageBox("AdjustTokenPrivileges enable failed!");
}
再调用OpenProcess()还是不行,怎么解决?
hProcess=OpenProcess(PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ, FALSE, nProcId)
调试过去这一句之后得到的如图 展开
展开全部
PID=GetWindowThreadProcessId(hwnd,&PID);
改成
GetWindowThreadProcessId(hwnd,&PID);
就可以了。
说明:
GetWindowThreadProcessId
函数的第二个参数接受进程ID,而返回值是线程ID,所以你的语句
得到的是线程ID,改后的语句才是得到的进程ID。
祝你好运!
改成
GetWindowThreadProcessId(hwnd,&PID);
就可以了。
说明:
GetWindowThreadProcessId
函数的第二个参数接受进程ID,而返回值是线程ID,所以你的语句
得到的是线程ID,改后的语句才是得到的进程ID。
祝你好运!
更多追问追答
追问
你复制的这个答案我看过耶试过,没用
追答
是吗?
这样也没有用吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询