类名 窗口句柄 结束进程

本程序主要是通过类名来查找窗口句柄(HWND),然后通过窗口句柄的进程的pID(DWORD),最后通过pID得到进程的句柄(HANDLE)

下面是代码 ter.cpp

/************************************************************************/
/* 
		本程序在运行之前,应该先打开一个计算器,然后就会得到相应的结果
                                                                     */
/************************************************************************/
#include <windows.h>
#include <iostream.h>

void main()
{
	DWORD pID;
	HWND hWnd=FindWindow("CalcFrame","计算器");// 通过类名 查找对应的窗口句柄
	if(!hWnd)
	{
		cout<<"Can't Find the Program!"<<endl;
		return;
	}
	GetWindowThreadProcessId(hWnd,&pID);
	HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pID);
	TerminateProcess(hProcess,1);
	if(WaitForSingleObject(hProcess,INFINITE)==STATUS_WAIT_0)
		cout<<"Process completed!"<<endl;
	else
		cout<<"Unexpected error"<<endl;
}


在Windows编程中,可以通过类名获取窗口句柄,这通常涉及到使用Windows API函数。以下是一个基本的步骤,以C++和Win32 API为例,说明如何通过类名获取窗口句柄: 1. 使用`FindWindow`函数:这是最直接的方法。`FindWindow`函数接受两个参数,一个是窗口类名,另一个是窗口标题。如果只需要通过类名获取,第二个参数可以设为NULL。例如: ```cpp HWND hwnd = FindWindow(className, NULL); ``` 其中`className`是你要查找的窗口类名,`hwnd`是返回的窗口句柄。 2. 使用`EnumWindows`函数:如果你需要枚举所有窗口并根据类名找到特定窗口,可以使用`EnumWindows`函数。它会为每一个顶层窗口调用一个回调函数。在回调函数中,你可以检查窗口类名是否与你所要查找的类名匹配,并保存相应的句柄。 ```cpp BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { // 假设你有一个目标类名字符串 LPCWSTR targetClassName = (LPCWSTR)lParam; // 获取当前枚举窗口类名 wchar_t windowClass[256]; GetClassName(hwnd, windowClass, ARRAYSIZE(windowClass)); // 如果类名匹配,则保存句柄 if (wcscmp(windowClass, targetClassName) == 0) { // 保存句柄的操作 // ... } return TRUE; // 继续枚举窗口 } EnumWindows(EnumWindowsProc, (LPARAM)className); ``` 3. 使用`FindWindowEx`函数:如果你知道父窗口句柄,或者想要递归查找子窗口,可以使用`FindWindowEx`函数。它允许你指定父窗口句柄来获取子窗口句柄。 请注意,这些API函数的使用需要正确的窗口类名,而且在不同的程序或系统版本中,窗口类名可能会有所不同。另外,这些API在64位Windows系统上运行32位程序时,会有特定的限制,称为WOW64,需要特别注意。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值