【发布时间】:2016-05-08 05:37:02
【问题描述】:
我在"how i get the conhost process" 之后搜索了很多网站,但没有什么是我真正想要的。
我已经搜索过了。
superuser/stackoverflowwhen-is-conhost-exe-actually-necessarystackoverflowhow-can-a-win32-process-get-the-pid-of-its-parentstackoverflowc-how-to-fetch-parent-process-idstackoverflowc-how-to-determine-if-a-windows-process-is-runningstackoverflowget-full-running-process-list-visual-cstackoverflowms-c-get-pid-of-current-processstackoverflowget-list-of-dlls-loaded-in-current-process-with-their-reference-countscodeprojectGet-Parent-Process-PIDcplusplusGetting list of running processesmsdn.microsoftGetModuleFileNameExmsdn.microsoftGetModuleFileNamemsdn.microsoftGetCurrentProcessIdmsdn.microsoftGetProcessIdmsdn.microsoftGetModuleHandlemsdn.microsoftGetConsoleWindowmsdn.microsoftTool Helpmsdn.microsoftCreateToolhelp32Snapshotmsdn.microsoftNextModule32msdn.microsoftDebugActiveProcessmsdn.microsoftEnumerating All Modules For a Process
我找不到任何关于 "how to get the conhost process" 的信息。
我有一些适用于当前"cmd.exe / program.exe" 的代码,这给了我"PID, NAME, PATH, READ/WRITE ADDRESS"。
我可以得到parent 进程但那不是conhost.exe。
代码"need to link library 'psapi' first":
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <psapi.h>
#include <iostream>
#include <tlhelp32.h>
int PrintModules(DWORD processID) {
HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded;
unsigned int i;
printf( "\nProcess ID: %u\n", processID);
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
if(NULL == hProcess) return 1;
if(EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) {
for(i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) {
TCHAR szModName[MAX_PATH];
if(GetModuleFileNameEx(hProcess, hMods[i], szModName,sizeof(szModName) / sizeof(TCHAR))) {
_tprintf( TEXT(" %s (0x%08X)\n"), szModName, hMods[i]);
}
}
}
CloseHandle(hProcess);
return 0;
}
int main(void) {
DWORD cpid = GetCurrentProcessId();
PrintModules(cpid);
int ppid = -1;
HANDLE h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe = { 0 };
pe.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(h, &pe)) {
do {
if(pe.th32ProcessID == cpid) {
printf("PID: %i; PPID: %i\n", cpid, pe.th32ParentProcessID);
ppid = pe.th32ParentProcessID;
}
} while(Process32Next(h, &pe));
}
PrintModules(ppid);
CloseHandle(h);
std::cin.get();
return 0;
}
我无法找到获取当前conhost 进程的方法。
当您打开使用控制台的program 时,会创建一个conhost.exe 进程。
我的问题是我如何获得conhost.exe 进程...
谢谢! :)
【问题讨论】:
-
你打算用conhost进程做什么? conhost 进程是一个可能随时更改的实现细节。 (确实,某些版本的 Windows 根本没有主机。)
-
我将通过
WriteProcessMemory更改SetTextCol函数,然后将颜色更改为我想要的颜色。 @雷蒙德 -
@CodeAway 你为什么要劫持主机?为什么不能在自己的代码中调用
SetConsoleTextAttribute()? -
我想使用所有
RGB colors。 @andlabs -
@CodeAway that is the question you should have asked instead of this one. 但我看到你已经决定继续走这条路了,祝你好运。 (反正我也不知道答案。)
标签: c++ windows winapi console-application