社区
进程/线程/DLL
帖子详情
请问:怎样才能获得一个正在运行的进程的句柄呐?
hukk3029
2004-09-10 10:01:35
请问:怎样才能获得一个正在运行的进程的句柄呐?
...全文
180
9
打赏
收藏
请问:怎样才能获得一个正在运行的进程的句柄呐?
请问:怎样才能获得一个正在运行的进程的句柄呐?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Mr-Chen
2004-09-13
打赏
举报
回复
BOOL CGraphApp::ListProcesses()
{
//初始化
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
//获得句柄
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hProcessSnap == (HANDLE)-1)
{
printf("\nCreateToolhelp32Snapshot()failed:%d",GetLastError());
return 0;
}
pe32.dwSize = sizeof(PROCESSENTRY32);
//列举所有进程名称
if (Process32First(hProcessSnap, &pe32))
{
do
{CString str=pe32.szExeFile;
//AfxMessageBox(str.Left(8));
if(str.Left(8)=="GraphSee")//进程名
{
CloseHandle (hProcessSnap);
return 1;}
}
while (Process32Next(hProcessSnap, &pe32));//直到列举完毕
}
else
{
printf("\nProcess32Firstt() failed:%d",GetLastError());
CloseHandle (hProcessSnap);
return 0;
}
//关闭句柄
CloseHandle (hProcessSnap);
return 0;
}
Mr-Chen
2004-09-13
打赏
举报
回复
FindWidow
或枚举进程
Avoid
2004-09-10
打赏
举报
回复
#define BUFFSIZE 4096
BOOL KillProcess(DWORD processID);
BOOL KillAndStartExplorer()
{//终止和启动Explorer
CWnd *wnd = new CWnd;
HWND hwnd = wnd->m_hWnd;
unsigned int nLoop;
DWORD paProc[1024],cbNeeded,cProcesses;
CRegDlgApp *pApp = (CRegDlgApp *) AfxGetApp();
if ( !EnumProcesses(paProc, BUFFSIZE, &cbNeeded ))
return FALSE;
cProcesses = cbNeeded / sizeof(DWORD);
for ( nLoop = 0; nLoop < cProcesses; nLoop++ )
KillProcess( paProc[nLoop]);
Sleep(1000);
if ( !EnumProcesses(paProc, BUFFSIZE, &cbNeeded ))
return FALSE;
cProcesses = cbNeeded / sizeof(DWORD);
for ( nLoop = 0; nLoop < cProcesses; nLoop++ )
{
if (!StartProcess( paProc[nLoop]))
{
ShellExecute(hwnd,"open","explorer.exe","","", SW_SHOW );
}
}
CloseHandle(hwnd);
delete wnd;
return TRUE;
}
BOOL KillProcess(DWORD processID)
{//终止Explorer
char szProcessName[MAX_PATH] = "unknown";
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS,FALSE, processID );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName) );
CString str = szProcessName;
str.MakeUpper();
if (str == "EXPLORER.EXE")
{
TerminateProcess(hProcess,0);
return TRUE;
}
}
return FALSE;
}
CloseHandle( hProcess );
return FALSE;
}
BOOL StartProcess(DWORD processID)
{//启动Explorer
char szProcessName[MAX_PATH] = "unknown";
HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS,FALSE, processID );
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,sizeof(szProcessName) );
CString str = szProcessName;
str.MakeUpper();
if (str == "EXPLORER.EXE")
{
return FALSE;
}
}
}
CloseHandle( hProcess );
return TRUE;
}
自己改吧,终止和启动Explorer
Avoid
2004-09-10
打赏
举报
回复
#include <windows.h>
#include <stdio.h>
#include "psapi.h"
void PrintProcessNameAndID( DWORD processID )
{
char szProcessName[MAX_PATH] = "unknown";
// Get a handle to the process.
HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
PROCESS_VM_READ,
FALSE, processID );
// Get the process name.
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod),
&cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName) );
}
else return;
}
else return;
// Print the process name and identifier.
printf( "%s (Process ID: %u)\n", szProcessName, processID );
CloseHandle( hProcess );
}
void main( )
{
// Get the list of process identifiers.
DWORD aProcesses[1024], cbNeeded, cProcesses;
unsigned int i;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
// Calculate how many process identifiers were returned.
cProcesses = cbNeeded / sizeof(DWORD);
// Print the name and process identifier for each process.
for ( i = 0; i < cProcesses; i++ )
PrintProcessNameAndID( aProcesses[i] );
}
iamzxx
2004-09-10
打赏
举报
回复
应当知道执行程序的名字吧,GetModuleHandle(PCTSTR pszModule)可得到他的句柄
hukk3029
2004-09-10
打赏
举报
回复
该程序在硬盘上的存储路径是已知的.
DentistryDoctor
2004-09-10
打赏
举报
回复
BOOL EnableDebugPrivilege(BOOL fEnable/* =TRUE */)
{
BOOL fOK = FALSE;
HANDLE hToken = NULL;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken)){
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount =1;
LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken,FALSE,&tp,sizeof(tp),NULL,NULL);
fOK = (GetLastError()==ERROR_SUCCESS);
CloseHandle(hToken);
}
return fOK;
}
DentistryDoctor
2004-09-10
打赏
举报
回复
如果是当然进程,GetCurrentProcess(),如果是其它,需要找到其它进程的ID然后使用OpenPrcess,记住,你的进程需要相应的权限。
flyelf
2004-09-10
打赏
举报
回复
CreateToolhelp32Snapshot
ProcessFirst
ProcessNext
根据
进程
ID枚举所有窗口
获得
窗口
句柄
这是
一个
C++实现的类,用于枚举窗口并获取指定
进程
ID的主窗口
句柄
。CWindowIterator基类提供窗口枚举功能,CMainHWnd派生类则专注于获取
进程
主窗口。
通过
进程
号ID
获得
窗口的
句柄
本文介绍了三种通过
进程
ID获取窗口
句柄
的方法,包括使用FindWindow API函数、EnumWindows与GetWindowThreadProcessId组合以及GUITHREADINFO和GetGUIThreadInfo。这些方法适用于VC6.0环境,对于需要操控其他
进程
窗口的应用场景具有参考价值。
进程
的
句柄
,PID及线程
本文详细解析了
进程
和线程的概念,阐述了它们在计算机系统中的作用和区别,包括
进程
ID、
进程
句柄
、线程ID及线程
句柄
的特性,帮助读者深入理解多任务处理机制。
通过
进程
ID
获得
主窗口
句柄
本文介绍了一种通过
进程
ID获取其主窗口
句柄
的方法,包括如何排除DLL窗口
句柄
干扰,确保正确获取到宿主窗口
句柄
的过程。
MFC中通过窗口
句柄
获得
进程
路径
本文介绍了在MFC中如何通过窗口
句柄
获取
进程
路径,详细讨论了两种方法:使用EnumProcessModules和GetModuleFileNameEx(64位系统限制)以及GetProcessImageFileName(返回驱动层路径,需要转换)。还详细解释了OpenProcess函数的参数及权限设置。
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章