
The GetProcessHandleFromHwnd function retrieves a process handle from a window handle
HANDLE WINAPI GetProcessHandleFromHwnd(
HWND hwnd,
);
这个函数通过窗口句柄获得进程句柄。有了进程句柄,PID是不是就知道怎么获得了?什么?不知道?那我告诉你,GetProcessId可以通过进程句柄获得进程ID:
DWORD WINAPI GetProcessId(
__in HANDLE Process
);
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;
}
别忘了添加对应头文件。
通过在正在运行的进程上设置 SeDebugPrivilege 权限,您可以获取进程句柄的任何运行的应用程序。获取进程句柄,然后可以指定 PROCESS_ALL_ACCESS 标志,这将允许该进程句柄,您通常不能在不同 Win32 Api 调用。一些可以成功调用 Win32 Api 包括以下︰
TerminateProcess
CreateRemoteThread
应用程序 #1 (Term01exe)
在 Visual Basic 50 中创建一个新的标准 EXE 项目。
将项目名称更改为 Term01。
将 Form1 重命名为 frmTerm01。
将命令按钮添加到 frmTerm01 中。
为向"终止记事本。"Command1 设置标题
将下面的代码添加到 frmTerm01 中︰
Option Explicit
Private Sub Command1_Click()
' This is a simple application that attempts
' to shut down any process that is passed in through
' the command line
Call TerminateProcess(CLng(Command$), 0)
End Sub
向项目中添加一个标准模块并将其重命名为 MdlApi01。
将下面的代码添加到 MdlApi01 中︰
Option Explicit
Declare Function TerminateProcess Lib "kernel32" _
(ByVal hProcess As Long, _
ByVal uExitCode As Long) As Long
保存项目并使 exe 文件 (Term01exe)。
以上就是关于已知某个窗口的句柄,如何获取拥有这个窗口的进程的句柄全部的内容,包括:已知某个窗口的句柄,如何获取拥有这个窗口的进程的句柄、C语言中如何获得当前进程句柄,谢谢!、如何使用该 SeDebugPrivilege 获取任何进程句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)