社区
进程/线程/DLL
帖子详情
请问:怎样才能获得一个正在运行的进程的句柄呐?
hukk3029
2004-09-10 10:01:35
请问:怎样才能获得一个正在运行的进程的句柄呐?
...全文
146
9
打赏
收藏
请问:怎样才能获得一个正在运行的进程的句柄呐?
请问:怎样才能获得一个正在运行的进程的句柄呐?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
windows
进程
句柄
权限控制
进程
句柄
是Windows系统中用于标识和管理对象(如文件、窗口、设备等)的一种方式,而权限控制则确保了只有拥有适当权限的
进程
才能执行特定操作。下面我们将深入探讨这一主题。 首先,我们需要理解什么是
进程
句柄
。...
【PB代码】获取和结束
进程
一旦
获得
了
进程
句柄
,可以使用`TerminateProcess`函数来结束指定的
进程
。需要注意的是,这个操作是立即的且不可逆,因此在执行前应谨慎。 3. **处理多用户情况**: 描述中提到,这个例子没有处理多用户同时登录的...
获得
当前
句柄
- 使用`OpenProcess`函数:通过
进程
ID来打开并获取
进程
句柄
,可以指定访问权限。 - 使用`OpenThread`函数:通过线程ID来打开并获取线程
句柄
,同样可以指定访问权限。 3. **获取设备
句柄
**: - 对于文件操作,`...
操作系统—
进程
管理实验报告
- **
进程
与程序的区别**:
进程
是指正在
运行
的
一个
程序实例,每个
进程
都有自己的地址空间、内存段、栈等。相比之下,程序是一组静态的指令集合,需要被操作系统加载到内存中才能变成
进程
。 - **并发执行的实质**:...
在程序中
运行
另
一个
EXE程序直到它
运行
结束(1KB)
标题“在程序中
运行
另
一个
EXE程序直到它
运行
结束(1KB)”指的是如何在我们的主程序中启动
一个
外部的EXE文件,并确保该外部程序执行完毕后,我们的主程序才能继续执行后续的代码。这个过程涉及到系统API调用、
进程
管理...
进程/线程/DLL
15,473
社区成员
49,171
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章