如何获取窗体句柄

如何获取窗体句柄,第1张

首先 你要定义下列的两个函数原形到模块中:

要在模块里定义:

Public Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long

Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Public Declare Function FindWindowa Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetForegroundWindow Lib "user32" () As Long

Public Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Public Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long

然后在要获取句柄的地方 输入下列代码:

Dim hwnd As Long

Dim str1 As String, len1 As Long

hwnd = FindWindowA("[这个窗口的类名(定义于RegisterClass中)]", "[要获取句柄的标题栏名称]")

str1 = Space(255) '定义接收字串

GetWindowText hwnd, str1, 1024

Do While hwnd <> 0

hwnd = GetNextWindow(hwnd, 2) '只有2才表示找下一个窗口

len1 = GetWindowText(hwnd, str1, Len(str1))

If (InStr(1, str1, "API", 1) > 0) Then

Exit Do

End If

Loop

SetWindowText hwnd, "我把API阅读器的标题改变了"

hwnd = GetNextWindow(hwnd, 5) '5表示子窗口

Do While hwnd <> 0

hwnd = GetNextWindow(hwnd, 2) '只有2才表示找下一个窗口

GetWindowText hwnd, str1, Len(str1)

SetWindowText hwnd, "我改变了改钮2"

Loop

有的,获得指定进程句柄的方法很多

首先用 CreateToolhelp32Snapshot 获得系统快照然后用 Process32First 获得第一个进程然后用 Process32Next 获得下一个进程依次类推,然后判断如果是想呀的进程用 OpenProcess就可以打开这个进程,获得进程的句柄,然后你可以比如用 TerminateProcess 之类的结束进程

另外你说的那个API不知道有没有,我懒得去查,不过估计有有的话意思是

Get + Current + Process 翻译过来就是得到当前进程,返回值应该是个句柄算了帮你查下

HANDLE GetCurrentProcess(VOID)

解释是:The GetCurrentProcess function returns a pseudohandle for the current process

意思大致是这个API函数返回当前进程的句柄(pseudohandle 不知道什么意思应该是,没见过这个单词呵呵!)

在VC的窗口类中有一成员变量:m_hWnd

,它代表这个窗口的句柄

。因此在VC中通过一些得到窗口指针的函数,然后再访问它的成员变量,应该可以得到所要的句柄。

比如用这个函数得到窗口指针,然后访问它的m_hWnd

AfxGetMainWnd(

);

如果窗口是现有程序的,使用VS自带的spy++获取窗口的相关信息,然後使用WinAPI获取句柄,具体参考spy++的使用方法和winapi的使用

FindWindow(

lpClassName, {窗口的类名}

lpWindowName: PChar {窗口的标题}

): HWND; {返回窗口的句柄; 失败返回 0}

//FindWindowEx 比 FindWindow 多出两个句柄参数:

FindWindowEx(

Parent: HWND; {要查找子窗口的父窗口句柄}

Child: HWND; {子窗口句柄}

ClassName: PChar; {}

WindowName: PChar {}

): HWND;

如果窗口是你的程序动态生成的,使用如下语句

Form _FORM=new Form();

IntPtr _P = _FORMHandle;

_P就是你实例化的窗口句柄

它涉及BeginPaint和EndPaint两个函数,这两个函数需要窗口句柄(作为参数传给窗口消息处理程序)和PAINTSTRUCT结构的变量(在WINUSERH表头文件中定义)的地址为参数。Windows程序写作者通常把这一结构变量命名为ps并且在窗口消息处理程序中定义它:PAINTSTRUCT ps ;在处理WM_PAINT消息时,窗口消息处理程序首先呼叫BeginPaint。BeginPaint函数一般在准备绘制时导致无效区域的背景被擦除。该函数也填入ps结构的字段。BeginPaint传回的值是设备内容句柄,这一传回值通常被保存在叫做hdc的变量中。它在窗口消息处理程序中的定义如下:HDC hdc;HDC数据型态定义为32位的无正负号整数。然后,程序就可以使用需要设备内容句柄的TextOut等GDI函数。呼叫EndPaint即可释放设备内容句柄。方法二虽然最好是在处理WM_PAINT消息处理期间更新整个显示区域,但是您也会发现在处理非WM_PAINT消息处理期间绘制显示区域的某个部分也是非常有用的。或者您需要将设备内容句柄用于其它目的,如取得设备内容的信息。要得到窗口显示区域的设备内容句柄,可以呼叫GetDC来取得句柄,在使用完后呼叫ReleaseDC:hdc = GetDC (hwnd) ;使用GDI函数ReleaseDC (hwnd, hdc) ;在MFC中,通过如下方法获得名柄:HDC hdc;hdc = CreateDC(0,0,0,0);//获得设备句柄

以上就是关于如何获取窗体句柄全部的内容,包括:如何获取窗体句柄、如何取得某进程的句柄 = =谢谢了、MFC中如何获取窗口的句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9506405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存