欢迎光临

窗口句柄 VB查找窗口句柄有哪些方法

是不是取某个程序的窗口句柄?我以前写辅助的时候弄过使用的API函数是findWindow首先声明一下API在你窗口最顶的位置上写上Private Declare Function 取窗口句柄 Lib “user32” Alias “FindWindowA” (ByVal lClassName As String, ByVal lWindowName As String) As Long’由于VB支持中文的 我就定义成 取窗口句柄 这个了 ‘在窗体中添加一个按钮里面放进下面代码就OK了Private Sub Command1_Click()Dim 窗口句柄 As Long ‘声明窗口句柄变量存储窗口句柄 = 取窗口句柄(vbNullString, “新建 文本文档txt – 记事本”) ‘取窗口标题的句柄 把得到窗口标题句柄赋予给刚才 窗口句柄 这变量里If 窗口句柄 = 0 Then ‘判断窗口句柄是否等于0 如果等于0表示无法找到窗口句柄 MsgBox “无法找到需要的窗口句柄”Else MsgBox “已找到窗口句柄 句柄数为:” 窗口句柄End IfEnd Sub纯手工+VB写出来的代码 完全不是自己找的

窗口句柄

FindWindow获取窗口的句柄

[DllImport(“user32dll”,SetLastError = true)]

privatestaticexternIntPtr FindWindow(string lpClassName, string lpWindowName);

参数:lpClassName窗口的类名;lpWindowName窗口的标题(上一篇文章中介绍了如何获取,不在赘述)

[DllImport(“user32dll”,EntryPoint = “FindWindowEx”)]

privatestaticexternIntPtr FindWindowEx(IntPtrhwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

参数: hwndParent要查找子窗口的父窗口句柄;hwndChildAfter子窗口句柄;lpszClass窗口的类名;lpszWindow窗口的标题

ShowWindow设置窗口的显示状态

[DllImport(“user32dll”,EntryPoint = “ShowWindow”,SetLastError = true)]

staticexternint ShowWindow(IntPtr hWnd, uint nCmdShow);

参数:hWnd窗口句柄;nCmdShow窗口如何显示

具体的nCmdShow对应的值参加下表详细内容:

MoveWindow改变指定窗口的位置和大小

[DllImport(“user32dll”,SetLastError = true)]

privatestaticexternbool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);

参数:hwnd窗口的句柄;x,y窗口左上角的起点;cx,cy窗口的宽度和高度;repaint是否立即重绘。为true时系统会立即发送WM_PAINT到窗口程序(会调用UpdateWindow 函数),为false时不会发生任何类型的重绘操作

SetWindowPos实现窗口的移动

[DllImport(“user32dll”)]

privatestaticexternbool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint uFlags);

参数:hWnd窗口的句柄;hWndlnsertAfter窗口的Z顺序(多个窗口时本窗口显示的顺序);x,y窗口左上角的起点;cx,cy窗口的宽度和高度;uFlags选项;hWndlnsertAfter和uFlags的可选值见下面详细

hWndlnsertAfter参数可选值:

HWND_TOP = 0; {在前面}

HWND_BOTTOM = 1; {在后面}

HWND_TOPMOST = HWND(-1); {在前面, 位于任何顶部窗口的前面}

HWND_NOTOPMOST = HWND(-2);{在前面, 位于其他顶部窗口的后面}

uFlags 参数可选值:

SWP_NOSIZE = 1; {忽略 cx、cy, 保持大小}

SWP_NOMOVE = 2; {忽略 X、Y, 不改变位置}

SWP_NOZORDER = 4; {忽略 hWndInsertAfter, 保持 Z 顺序}

SWP_NOREDRAW = 8; {不重绘}

SWP_NOACTIVATE = $10; {不激活}

SWP_FRAMECHANGED = $20; {强制发送 WM_NCCALCSIZE 消息, 一般只是在改变大小时才发送此消息}

SWP_SHOWWINDOW = $40; {显示窗口}

SWP_HIDEWINDOW = $80; {隐藏窗口}

SWP_NOCOPYBITS = $100; {丢弃客户区}

SWP_NOOWNERZORDER = $200; {忽略 hWndInsertAfter, 不改变 Z 序列的所有者}

SWP_NOSENDCHANGING = $400; {不发出 WM_WINDOWPOSCHANGING 消息}

SWP_DRAWFRAME = SWP_FRAMECHANGED; {画边框}

SWP_NOREPOSITION = SWP_NOOWNERZORDER;{}

SWP_DEFERERASE = $2000; {防止产生 WM_SYNCPAINT 消息}

SWP_ASYNCWINDOWPOS = $4000; {若调用进程不拥有窗口, 系统会向拥有窗口的线程发出需求}

赞(0)
版权声明:本文内容/及图片/由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭/侵权/违法违规的内容, 请发送邮件至 yangcongsoon@qq.com 举报,一经查实,本站将立刻删除。17攻略 » 窗口句柄 VB查找窗口句柄有哪些方法