文档库 最新最全的文档下载
当前位置:文档库 › 学会用按键精灵获取子窗口句柄

学会用按键精灵获取子窗口句柄

学会用按键精灵获取子窗口句柄
学会用按键精灵获取子窗口句柄

学会用按键精灵获取子窗口句柄

来源:按键学院【按键精灵】电脑的桌面是最顶级的窗口,在桌面里的其他程序窗口是桌面的子窗口。那到底父窗口和子窗口是怎么理解的呢?

【父窗口与子窗口】

每一个窗体form都是一个父窗口,它不是其他任一个窗体的子窗口.窗体上的所有控件,按钮等就是窗体的子窗口.一个窗口(除了窗体)既可能是父窗口,也可能是子窗口.比如窗体里面有一个frame,frame里面的控件就是frame的子窗口,但frame同时也是窗体的子窗口.就像容器里面装着容器.最大的那个容器就是窗体.每一个容器里面的东西就是其子窗口. 【常见的父窗口和子窗口的关系】

【父窗口对应一个子窗口】

1、有类名没有标题(有标题没有类名)

例如:记事本,它只有一个子窗口,子窗口只有类名没有标题。

我们要如何查找获取到这个子窗口的句柄呢?

首先,我们先复习下按键里的获取子窗口句柄的命令。

命令名称:FindEx 查找子窗口

命令功能:根据父窗口句柄查找子窗口匹配类名或者匹配标题

命令参数:参数1 整数型,父窗口句柄

参数2 整数型,子窗口句柄

参数3 字符串型,匹配类名

参数4 字符串型,匹配标题

㈠先要获取父窗口的句柄,然后根据父窗口的句柄来找子窗口。

记事本父窗口的标题是:无标题- 记事本类名是:Notepad hwnd= Plugin.Window.find("Notepad" ,"无标题- 记事本") //获取记事本父窗口句柄

㈡获取到父窗口句柄之后,我们还需要知道子窗口的类名,类名为:Edit

zhwnd = Plugin.Window.findex(hwnd, 0, "Edit", 0) //获取子窗口句柄

*这里子窗口句柄的值设置为0,可能会有很多童鞋很困惑,findex命令不就是获取子窗口句柄的吗?那这里还设置一个子窗口句柄的值干嘛?我要知道还要用findex来找吗?

小编刚接触这个命令的时候,对于这个参数也非常疑惑,后来发现是这样的:

findex命令里的子窗口句柄,指的是当前要查找的子窗口上面一个子窗口的句柄。

例如上图:当我们要找创建时间这个子窗口的时候,findex命令里的子窗口句柄参数就设置为红框里子窗口的句柄。

2、没有类名也没有标题

父窗口下只有一个子窗口的情况,标题和类名不设置是可以的。

hwnd= Plugin.Window.find(0,"无标题- 记事本")

zhwnd = Plugin.Window.findex(hwnd, 0, 0, 0)

TracePrint zhwnd

结果:

【父窗口对应多个子窗口】

1、多个子窗口的类名或标题不一样

拿有道云笔记窗口作为例子:

它的这两个子窗口的类名标题都不一样,这样的情况我们按照前面介绍的父窗口下只有一个子窗口的方式来查找就可以了。

代码:

hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")

zhwnd = Plugin.Window.findex(hwnd, 0, "NETEASE POPO2007 List", 0)

TracePrint zhwnd

结果:

2、多个子窗口的类名或标题一样

有道云笔记下的这两个子窗口的类名、标题都是一样的。

hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")

HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0) 上面的代码只能找到第一个类名为Popo.UI.Controls.Class.SkinSplitter的子窗口,第二

个无法找到。这样的情况,该怎么找第二个呢?

在前面我们提到过,findex里的子窗口句柄这个参数,在这里我们就可以利用它。

思路如下:

1、获取父窗口句柄

2、获取第一个子窗口句柄

3、根据父窗口句柄以及第一个子窗口句柄,获取第二个子窗口句柄

代码:

hwnd = Plugin.Window.find(0,"有道云笔记 Haiye")

HwndEx = Plugin.Window.findex(hwnd, 0, "Popo.UI.Controls.Class.SkinSplitter", 0)

TracePrint HwndEx

HwndEx = Plugin.Window.findex(hwnd, HwndEx, "Popo.UI.Controls.Class.SkinSplitter", 0)

TracePrint HwndEx

结果:

【子窗口下还有子窗口】

例如按键抓抓窗口:

抓抓父窗口下类名为#32770的子窗口,它还有它的子窗口,我们如果要找#32770的子窗口下标题为句柄的窗口,该如何查找呢?

思路:

1、获取抓抓父窗口句柄

2、根据父窗口句柄找#32770的子窗口句柄

3、以#32770的子窗口作为父窗口,继续查找下一级子窗口

代码:

hwnd= Plugin.Window.find(0,"按键抓抓辅助工具2014.00.14006")

zhwnd = Plugin.Window.findex(hwnd, 0, "#32770", 0)

zzhwnd = Plugin.Window.findex(zhwnd, 0, 0, "句柄")

TracePrint zzhwnd

结果:

C#中使用FindWindow函数详解 从标题获取句柄

C#中使用FindWindow函数详解从标题获取句柄 FindWindow用来根据类名和窗口名来得到窗口句柄的。但是这个函数 不能查找子窗口,也不区分大小写。 如果要从一个窗口的子窗口中查找需要使用FindWindowEX。 1.在C#中使用方法如下: [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtrFindWindow(string lpClassName,stringlpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtrFindWindowEx(IntPtrhwndParent, IntPtrhwndChildAfter, string lpClassName, string lpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPtrFindWindow(string lpClassName,stringlpWindowName); [DllImport("User32.dll", EntryPoint = "FindWindowEx")] private static extern IntPtrFindWindowEx(IntPtrhwndParent, IntPtrhwndChildAfter, string lpClassName, string lpWindowName); 2. 实例参考: IntPtrhWnd = FindWindow(null, "test Demo"); 这样会查找所有title是"test Demo"的窗口。 参考下面的资料解释 3. FindWindow参数详解: Parameters

VCMFC编程各种窗口句柄获取函数详解

AfxGetMainWnd AfxGetMainWnd获取自身窗口句柄 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函数功能:该函数检查与特定父窗口相联的子窗口z序(Z序:垂直屏幕的方向,即叠放次序),并返回在z序顶部的子窗口的句柄。 函数原型:HWND GetTopWindow(HWND hWnd); 参数: hWnd:被查序的父窗口的句柄。如果该参数为NULL,函数返回Z序顶部的窗口句柄。返回值: 如果函数成功,返回值为在Z序顶部的子窗口句柄。如果指定的窗口无子窗口,返回值为NULL。 GetForegroundWindow 函数功能:该函数返回当前系统的前台窗口的窗口句柄。 函数原型:HWND GetForegroundWindow(VOID) 返回值:函数返回前台窗回的句柄。 GetActiveWindow 函数功能:该函数可以获得与调用该方法的线程的消息队列相关的活动窗口的窗口句柄(就是取得当前进程的活动窗口的窗口句柄)。 函数原型:HWND GetActiveWindow(VOID) 返回值:返回值是与调用线程的消息队列相关的活动窗口的句柄。否则,返回值为NULL。 GetSafeHwnd 函数功能:获取某个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数。 通过下面的例子来看其理由: CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->m_hwnd; //得到它的HWND 这样的代码当开始得到的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,因为一般不能对一个NULL指针访问其成员,如果用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到资源管理器 HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND 就不会出现问题,因为尽管当pwnd是NULL时,GetSafeHwnd仍然可以用,只是返回NULL IsWindowVisible 函数功能:该函数获得给定窗口的可视状态。 函数原型:BOOL IsWindowVisible(HWND hWnd); 参数; hWnd:被测试窗口的句柄。 返回值:

获取当前鼠标所在的窗口句柄

用到的API函数: GetCursorPos 基本信息 函数功能:该函数检取光标的位置,以屏幕坐标表示。 函数原型:BOOL GetCursorPos(LPPOINT lpPoint); 参数: IpPoint:POINT结构指针,该结构接收光标的屏幕坐标。 使用时要先定义一个数据结构: Public Type POINTAPI x As Long y As Long End Type 例如: dim biao as POINTAPI GetCursorPos biao 那么biao.x用来存放当前光标的x轴坐标,biao.y用来存放当前y轴的坐标。 返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。 备注: 1.光标的位置通常以屏幕坐标的形式给出,它并不受包含该光标的窗口的映射模式的影响。该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。 2.此函数为api函数,调用时要函数声明:Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long 速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。 WindowFromPoint 函数功能:该函数获得包含指定点的窗口的句柄。 函数原型:HWND WindowFromPoint(POINT Point); 参数:

Point:指定一个被检测的点的POINT结构。 返回值S:返回值为包含该点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。如果该点在静态文本控件之上,返回值是在该静态文本控件的下面的窗口的句柄。 备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序应该使用ChildWindowFromPoint函数进行无限制查询,这样就可以获得静态文本控件的句柄。 速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。 获取当前鼠标所在的窗口句柄代码: POINT pNow = {0,0}; If (GetCursorPos(&pNow)) { HWND hwndPointNow = NULL; hwndPointNow = WindowFromPoint(pNow); if (hwndPointNow) cout <<“Success!!”<< endl; else cout <<“Error!!”<< endl; } else cout <<“Error!!”<< endl;

用进程名获取进程ID取窗口句柄

以前用输入法注入的时候需要用到的代码,写的还不错,分享一下吧,顺便当个备用 view source print? 01 //根据进程名获取进程ID 02 DWORD GetPidByProcessName(TCHAR * pProcess) 03 { 04 HANDLE hSnapshot; 05 PROCESSENTRY32 lppe; 06 //创建系统快照 07 hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); //#include 08 if (hSnapshot == NULL) 09 return 0; 10 //初始化 lppe 的大小 11 lppe.dwSize = sizeof (lppe); 12 //查找第一个进程 13 if (!::Process32First(hSnapshot, &lppe)) 14 return false ; 15 do

16 { 17 if(StrCmp(lppe.szExeFile, pProcess) == 0)//#include 18 { 19 return lppe.th32ProcessID; 20 } 21 } 22 while (::Process32Next(hSnapshot, &lppe)); //查找下一个进程 23 24 return 1; 25 } 26 27 //根据进程ID获取窗口句 柄 28 HWND GetHwndByPid(DWORD dwProcessID) 29 { 30 //返回Z序顶部的窗口句 柄 31 HWND hWnd = ::GetTopWindow(0); 32 while ( hWnd ) 33 { 34 DWORD pid = 0;

大漠插件后台找图、自动获取坐标窗口句柄鼠标多点左单击脚本

大漠插件后台找图、自动获取坐标窗口句柄鼠标多点左单击 脚本 一、准备工作 第一步:下载大漠插件、解压,运行“注册大漠插件到系统.bat”,把全部东东都复制到按键精灵的plugin目录下吧~ 第二步:创建一个文件夹,以d:\test 为例。把你要找的图(60.bmp)、大漠插件里的dm.dll 和RegDll.dll复制到这个文件夹。 第三步:打开按键精灵,创建一个新脚本。往附件(在软件左边框选项)里面添加dm.dll、Reg.dll和图60.bmp 二、复制以下代码到按键精灵 dim ys1,ys2,ys3,a,b,zbx,zby//自定义变量 ys1=9000//1和2点延时 ys1=9000//2和3点延时 ys1=9000//3和1点延时 a=15//纵向下移15单位 b=-15//纵向上移15单位 zbx=100//获取窗口句柄给定的坐标x zby=100//获取窗口句柄给定的坐标y PutAttachment "d:\test", "*.*" //意思是释放所有附件到d:\test目录。就是把有用的文件打包到test目录下 PutAttachment ".\Plugin", "RegDll.dll" //意思是释放RegDll.dll文件到按键精灵安装目录的Plugin目录下,用来完成大漠插件的注册 Call Plugin.RegDll.Reg("d:\test\dm.dll") //调用大漠插件,在按键精灵中使用 Set dm = createobject("dm.dmsoft") //用大漠插件创建一个对象dm dm_ret = dm.SetPath("d:\test") // 设置全局路径,以后你找图用的图片都默认是test目录里的图片了,否则你要用绝对路径d:\test\1.bmp来该表示图片 dm_ret = dm.LoadPic("*.bmp") // 字面意思是加载test目录下的所有图片 Hwnd = dm.GetPointWindow(zbx,zby)//用大漠软件获取给定坐标(zbx,zby)的窗口句柄,保存在Hwnd里 Call Plugin.Window.Move(Hwnd, 0, 0) // 把窗口移到屏幕的(0,0),即左上角 dm_ret = dm.BindWindow(Hwnd,"gdi","windows","windows",0) //这句用来绑定辅助操作的对象窗口 //下面是一条判断语句,如果绑定失败就会提示。那就从前面几几步中找原因吧 Delay 10 If dm_ret = 1 Then Else MessageBox "绑定失败,重启脚本或联系作者" EndScript

易语言模拟输入方法和窗口句柄的获取

易语言模拟输入方法和窗口句柄的获取 IE打开不同选项卡,发现却有相同的句柄。 打开新的选项卡时,必须重新对句柄进行初始化。可以用以下三种方式来取句柄, ·直接用顶级句柄0 ·窗口_取句柄_模糊(,“IEFrame”)) ·IEhandle(“IEFrame”,“用户登录_微贷网官网专业的理财平台-Windows Internet Explorer”),这句页面不存在时,标题更换了,取不到句柄。 打开新页面时,必须加入延时,等待页面载入完成,可用网页填表.就绪判断(“可用余额”)穿透网页框架时,要用微凉网页填表模块。 取余额时,用标签名可取网页填表.取操作元素(“SPAN[15]”,元素对象,) 对链接不能用网页填表.按钮_点击(“id=submit”,1),而要用以下取元素对象再点击的方式 .如果(网页填表.取操作元素(“innerText=我要投资”,元素对象,)) 网页填表.操作元素_点击(元素对象)'也许是因为链接不能用按纽的形式点击 .否则调试输出(“获取操作元素对象innerText=我要投资失败!”) 若取所有的窗口句柄和窗口标题时 窗口_枚举子窗口(0,子句柄数组,) .计次循环首(5,i)'计次循环首(取数组成员数(子句柄数组),i) 输出调试文本(取窗口标题(子句柄数组[i])) .计次循环尾() 对账号及密码输入,可用 网页填表.文本框_写内容(“name=userName”,编辑框1.内容,) 网页填表.文本框_写内容(“name=password”,编辑框3.内容,) 模拟输入方式 方式一 置剪辑板文本(“918236”) 网页填表.取操作元素(“name=password”,元素对象,) '编辑框3.获取焦点() 网页填表.操作元素_置焦点(元素对象)'必须要焦点,否则密码没地方输入 模拟按键(#Ctrl键,#V键,)'必须加延时,否则网页递交时密码还未提交 '网页填表.按钮_点击(“btn_submit”)‘该方式不行,必须用上面操作元素点击的方式延迟(1000) 方式二 网页填表.取操作元素(“name=password”,元素对象,)

VB_API调用,实现获取窗口信息

VB编程:浅谈API的应用——实现获取目标窗口的信息 1.第一部分 废话不说,先把几个用到的API声明源码发出来,我是在“模块”里声明的 Option Explicit Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long '窗口置顶 Declare Function SetCapture Lib "user32" (ByVal hwnd As Long) As Long '捕获鼠标所在窗口信息 Declare Function ReleaseCapture Lib "user32" () As Long ' 与setcapture对应 Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long '返回鼠标所在窗口的句柄 Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long '坐标转化 Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '获取指定窗口类名 Public Type POINTAPI X As Long Y As Long End Type 大家看到了,这里我用到了6个API,每个API声明的后面我都把它的功能注释出来了。 2.第二部分 下面是实现获取窗口信息源码,我是写在“窗体”源码里的 Dim TuBiaoFlag As Boolean Dim ShuBiao As POINTAPI Private Sub Check1_Click() ZhiDing (Check1.Value) End Sub Private Sub Form_Load() Picture1.Picture = LoadPicture(App.Path & "\pass.ico") TuBiaoFlag = 0

C利用句柄操作窗口

C# 实现过程: 过程一:找到当前鼠标位置的句柄 您的使用2个WinAPI(俺喜欢自己封装下来用): View Code [DllImport("", EntryPoint = "GetCursorPos")] public static extern bool GetCursorPos(out Point pt); [DllImport("", EntryPoint = "WindowFromPoint")] public static extern IntPtr WindowFromPoint(Point pt);

ndexOf; } public override string ToString() { StringBuilder result = new StringBuilder(); for (WinHWND winHandle = this; winHandle != null; winHandle = { ("{0}:{1};", Escape, if == -1) break; }

return ().TrimEnd(';'); } private static string GetBaseMark(string sMark) { string[] sMarks = (';'); return sMarks[ - 1].Split(':')[0]; } private static string[] GetChildMarks(string sMark) {

string[] sMarks = (';'); string[] sChildMarks = new string[ - 1]; for (int i = 0; i < ; i ++ ) { sChildMarks[i] = sMarks[i ]; } return sChildMarks; } .是不是都匹配 foreach (IntPtr baseHwnd in baseHwnds)

MFC窗口

MFC窗口的创建过程详细解析 作者:https://www.wendangku.net/doc/8f3305890.html, 关于MFC的窗口创建过程一直感觉比较神秘,那么我们来看下MFC中的窗口创建到底是一个什么过程(窗口创建前的窗口类准备就直接忽略了,与标准Win32窗口类准备大同小异)。MFC中窗口创建主要涉及三个重要的函数,分别是CWnd::CreateEx(或者CWnd::Create)、AfxHookWindowCreate、AfxCbtFilterHook函数,首先是大概介绍下MFC 的窗口创建过程,当CWnd::CreateEx被调用时,CWnd::CreateEx在调用API函数::CreateWindowEx创建窗口前会通过调用AfxHookWindowCreate安装一个名为_AfxCbtFilterHook的线程钩子,并将需要创建的窗口的CWnd指针保存到线程状态结构中,在API函数::CreateWindowEx真正创建窗口前AfxCbtFilterHook会被调用,AfxCbtFilterHook 会执行子类化操作,把要创建的窗口的窗口过程子类化为线程状态结构中的窗口过程(AfxGetModuleState()->m_pfnAfxWndProc),即MFC的标准窗口过程,这样MFC的窗口(CWnd及其派生类)都可以通过消息映射机制接收和响应包括从创建开始的各种各样的消息。(关于AfxCbtFilterHook可以参考MSDN中关于SetWindowsHookEx的解释。) 1. CWnd::CreateEx BOOL CWnd::CreateEx(DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam) { // allow modification of several common create parameters 准备一个结构给PreCreateWindow函数使用,这样就允许应用程序在创建窗口前修改窗口创建参数,比如给cs.lpszClass重新指定一个窗口类给CreateWindow函数。CREATESTRUCT cs; cs.dwExStyle = dwExStyle; cs.lpszClass = lpszClassName; cs.lpszName = lpszWindowName; cs.style = dwStyle;

如何通过句柄获取外部程序的窗口的内容

如何通过句柄获取外部程序的窗口的内容 Option Explicit'常数申明Public Const LVM_FIRST As Long = &H1000Public Const LVM_GETHEADER As Long = LVM_FIRST + 31Public Const LVM_GETITEMCOUNT As Long = LVM_FIRST + 4Public Const LVM_GETITEMTEXT As Long = LVM_FIRST + 45Public Const HDM_FIRST As Long = &H1200Public Const HDM_GETITEMCOUNT As Long = (HDM_FIRST + 0)Public Const PROCESS_VM_OPERATION As Long = &H8Public Const PROCESS_VM_READ As Long = &H10Public Const PROCESS_VM_WRITE As Long = &H20Public Const MAX_LVMSTRING As Long = 255Public Const MEM_COMMIT As Long = &H1000Public Const MEM_RELEASE As Long = &H8000&Public Const PAGE_READWRITE As Long = &H4Public Const LVIF_TEXT As Long = &H1'类型申明Public Type LV_ITEMA mask As Long iItem As Long iSubItem As Long State As Long stateMask As Long pszText As Long cchTextMax As LongEnd Type'API申明Public

用Windows API取得窗体句柄二例

用Windows API取得窗体句柄二例 文/胡克 Windows通过句柄(Handle)识别每个窗体、控件、菜单和菜单项,当程序运行时,它所包含的每个部件都有一个惟一确定的句柄同其他的部件相区别句柄在Windows API中具有举足轻重的作用,现举三例,有兴趣的读者不妨一试。 获取窗体和控件的句柄 步骤如下: 1、为了看到显示于屏幕上所有的窗体和控件的句柄,用SetWindowPos函数设置窗口始终在最上面,其他窗口不能覆盖它,并使其只以标题显示于屏幕左上角。 (1)新建一工程,打开API Viwer:Add-ins→API Viewer→File→Load text file→Win32api.txt。 (2)将SetWindowPos函数的声明粘贴到窗体的声明部分:Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long。 (3)程序启动时调用SetWindowPos函数,窗体Load事件代码如下: Private Sub Form_Load() SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, conSwpNoActivate Or conSwpShowWindow'使窗体一直置于最顶层 End Sub 卧龙传说提醒:当第二个参数hWndInsertAfter的值为-1时置于顶层;值为-2时不置于顶层。 2、为了找到鼠标指针的X和Y坐标,用上面同样的方法,通过API Viewer工具把获取的鼠标指针位置的API函数GetCursorPos的声明和结构类型声明粘贴到窗体的声明部分: Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Private Type POINTAPI x As Long

C 操作窗口类 句柄操作

C#写个类操作窗口(句柄操作) 实现过程: 过程一:找到当前鼠标位置的句柄 您的使用2个WinAPI(俺喜欢自己封装下来用): ViewCode [DllImport("user32.dll",EntryPoint="GetCursorPos")] publicstaticexternbool GetCursorPos(out Pointpt); [DllImport("user32.dll",EntryPoint="WindowFromPoint")] publicstaticextern IntPtrWindowFromPoint(Pointpt); //鼠标位置的坐标 publicstatic PointGetCursorPosPoint() { Pointp=new Point(); if(GetCursorPos(out p)) { return p; } returndefault(Point); } ///

///找到句柄 ///

///坐标 /// publicstatic IntPtrGetHandle(Pointp) { return WindowFromPoint(p); } 过程二:改变窗口的Text 您的使用1个WinAPI: ViewCode [DllImport("user32.dll",EntryPoint="SendMessage")] privatestaticexternint SendMessage(IntPtrhWnd,int Msg,IntPtrwParam,string lParam); /// ///给窗口发送内容 /// ///句柄 ///要发送的内容 publicstaticvoid SetText(IntPtrhWnd,string lParam)

如何获得窗口句柄(HWND )和改变窗口属性

1、对于一个窗口如何进行操作呢,首先要得到其使用句柄,我们可以用FindWindow()函数来获取当前窗口句柄,具体使用如下: HWND hFig = ::FindWindow(NULL,HWND); 如果得到找到,则返回窗口的句柄,否则返回NULL。当然我们可以使用SetWindowPos(HWND hWnd, HWND hWndIsertAfter, int X, int Y, int cx, int cy , UINT Uflags) 改变窗口的大小和位置,Uflags是标志窗口的显示属性,具体值可以是SWP_NOMOVE 、SWP_NOZORDER 、SWP_N OACTIVATE 、SWP_FRAMECHANGED等。具体的调用实例如下: HWND hFig = ::FindWindow(NULL,"Fig No. 1"); //找到窗口,并返回窗口句柄 if(hFig == NULL) { AfxMessageBox("未能产生Figure窗口,图形绘制失败!"); return; } // 获取绘图区域的位置和大小 RECT PlotRec; CWnd *PlotArea = GetDlgItem(IDC_PLOTAREA); // 获取绘图区域指针 PlotArea->GetWindowRect(&PlotRec); // 将绘图区域矩形赋给定义矩形 long Width = PlotRec.right - PlotRec.left; long Height = PlotRec.bottom - PlotRec.to p; // 获得绘图区域的宽和高 // 设置Figure窗口为绘图区域窗口的子窗口并调整其位置 ::SetParent(hFig,PlotArea->GetSafeHwnd()); // 设置绘图区域窗口为Figure窗口的父窗口 ::SetWindowPos(hFig,NULL,1,1,Width,Height,SWP_NOZORDER | SWP_NOACTIVATE); // 设置绘图窗口的大小和位置 // 设置窗口可见 SetVisible(h_a,mwArray("ON")); // 进入窗口等待状态 bWait = 1; mlfHGWaitForFiguresToDie(); 2、当然你想改变窗口属性的话,还可以增加以下函数来改变窗口的属性 long lStyle. = ::GetWindowLong(hFig,GWL_STYLE); ::SetWindowLong(hFig,GWL_STYLE,lStyle. & (~WS_CAPTION) & (~WS_THICKFRAM E)); ::SetWindowPos(hFig,NULL,0,0,0,0,SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTI VATE | SWP_FRAMECHANGED);

句柄函数

#region 获取句柄,触发事件 // InPtr 平台整数类型,lpWindowName 窗体的标题 [DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)] extern static IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); [DllImport("user32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam); [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern int ShowWindow(IntPtr hwnd, int nCmdShow); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int MoveWindow(IntPtr hWnd, int x, int y, int nWidth, int nHeight, bool BRePaint); private void TouchInptr() { //mAEvent.WaitOne(); string path = ClsCDGlobVar.strAppTempPath + @"/H/gridanalysis.exe";//"C:\\WINDOWS\\system32\\calc.exe"; //ProcessStartInfo startInfo = new ProcessStartInfo(path); //startInfo.WindowStyle = ProcessWindowStyle.Hidden; //startInfo.CreateNoWindow = true; //Process p = Process.Start(startInfo); //.... Process p = new Process(); p.StartInfo.FileName = path; p.StartInfo.RedirectStandardOutput = true; https://www.wendangku.net/doc/8f3305890.html,eShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; p.Start(); if (p == null) MessageBox.Show("Warning:process may already exist"); IntPtr mainWindows = FindMainWindowHandle("接地网接地性能分析", 100, 25); IntPtr MainWindow2 = FindMainWindowHandle("分析内容选择", 100, 25); //MoveWindow(mainWindows, -1, -1, 0, 0, true);

学会用按键精灵获取子窗口句柄

学会用按键精灵获取子窗口句柄 来源:按键学院【按键精灵】电脑的桌面是最顶级的窗口,在桌面里的其他程序窗口是桌面的子窗口。那到底父窗口和子窗口是怎么理解的呢? 【父窗口与子窗口】 每一个窗体form都是一个父窗口,它不是其他任一个窗体的子窗口.窗体上的所有控件,按钮等就是窗体的子窗口.一个窗口(除了窗体)既可能是父窗口,也可能是子窗口.比如窗体里面有一个frame,frame里面的控件就是frame的子窗口,但frame同时也是窗体的子窗口.就像容器里面装着容器.最大的那个容器就是窗体.每一个容器里面的东西就是其子窗口. 【常见的父窗口和子窗口的关系】 【父窗口对应一个子窗口】 1、有类名没有标题(有标题没有类名) 例如:记事本,它只有一个子窗口,子窗口只有类名没有标题。

我们要如何查找获取到这个子窗口的句柄呢? 首先,我们先复习下按键里的获取子窗口句柄的命令。 命令名称:FindEx 查找子窗口 命令功能:根据父窗口句柄查找子窗口匹配类名或者匹配标题 命令参数:参数1 整数型,父窗口句柄 参数2 整数型,子窗口句柄 参数3 字符串型,匹配类名 参数4 字符串型,匹配标题 ㈠先要获取父窗口的句柄,然后根据父窗口的句柄来找子窗口。 记事本父窗口的标题是:无标题- 记事本类名是:Notepad hwnd= Plugin.Window.find("Notepad" ,"无标题- 记事本") //获取记事本父窗口句柄 ㈡获取到父窗口句柄之后,我们还需要知道子窗口的类名,类名为:Edit

zhwnd = Plugin.Window.findex(hwnd, 0, "Edit", 0) //获取子窗口句柄 *这里子窗口句柄的值设置为0,可能会有很多童鞋很困惑,findex命令不就是获取子窗口句柄的吗?那这里还设置一个子窗口句柄的值干嘛?我要知道还要用findex来找吗? 小编刚接触这个命令的时候,对于这个参数也非常疑惑,后来发现是这样的: findex命令里的子窗口句柄,指的是当前要查找的子窗口上面一个子窗口的句柄。 例如上图:当我们要找创建时间这个子窗口的时候,findex命令里的子窗口句柄参数就设置为红框里子窗口的句柄。 2、没有类名也没有标题 父窗口下只有一个子窗口的情况,标题和类名不设置是可以的。 hwnd= Plugin.Window.find(0,"无标题- 记事本") zhwnd = Plugin.Window.findex(hwnd, 0, 0, 0) TracePrint zhwnd 结果:

C#操作窗口类(句柄操作) (2)

C# 实现过程: 过程一:找到当前鼠标位置的句柄 您的使用2个WinAPI(俺喜欢自己封装下来用): ViewCode [DllImport("user32.dll",EntryPoint="GetCursorPos")] publicstaticexternbool GetCursorPos(out Pointpt); [DllImport("user32.dll",EntryPoint="WindowFromPoint")] publicstaticextern IntPtrWindowFromPoint(Pointpt); //鼠标位置的坐标 publicstatic PointGetCursorPosPoint() { Pointp=new Point(); if(GetCursorPos(out p)) { return p; } returndefault(Point); } ///

///找到句柄 ///

///坐标 /// publicstatic IntPtrGetHandle(Pointp) { return WindowFromPoint(p); } 过程二:改变窗口的Text 您的使用1个WinAPI: ViewCode [DllImport("user32.dll",EntryPoint="SendMessage")] privatestaticexternint SendMessage(IntPtrhWnd,int Msg,IntPtrwParam,string lParam); /// ///给窗口发送内容 /// ///句柄 ///要发送的内容 publicstaticvoid SetText(IntPtrhWnd,string lParam)

C#操作窗口类(句柄操作)

C#写个类操作窗口(句柄操作)实现过程: 过程一:找到当前鼠标位置的句柄 您的使用2个WinAPI(俺喜欢自己封装下来用): View Code [DllImport("user32.dll", EntryPoint = "GetCursorPos")] public static extern bool GetCursorPos(out Point pt); [DllImport("user32.dll", EntryPoint = "WindowFromPoint")] public static extern IntPtr WindowFromPoint(Point pt); //鼠标位置的坐标 public static Point GetCursorPosPoint() { Point p = new Point(); if (GetCursorPos(out p)) { return p; } return default(Point); } ///

///找到句柄 ///

///坐标 /// public static IntPtr GetHandle(Point p) { return WindowFromPoint(p); } 过程二:改变窗口的Text 您的使用1个WinAPI: View Code [DllImport("user32.dll", EntryPoint = "SendMessage")] private static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam); /// ///给窗口发送内容 /// ///句柄

按键精灵9 得到鼠标指向的窗口句柄

//得到鼠标指向的窗口句柄 Hwnd = Plugin.Window.MousePoint() //得到窗口句柄的客户区大小 sRect = Plugin.Window.GetClientRect(Hwnd) Dim MyArray MyArray=Split(sRect,"|") Ux=MyArray(0) Uy=MyArray(1) MoveTo ux,uy //MessageBox "游戏窗口左上角的坐标:"&Vbcrlf&Ux&","&Uy&Vbcrlf&"句柄是:"&Hwnd '&是字符串连接符, Vbcrlf是换行符 //坐标定位 Hx=Ux+756 //好友菜单 Hy=Uy+277 Hx1=Ux+640 //第一位好友 Hy1=Uy+170 Jlx=Ux+380 //确定获得奖励 Jly=Uy+395 Scx1=Ux+483 //与他赛车 Scy1=Uy+577 Scx2=Ux+315 //赛一场 Scy2=Uy+503 Gtx=Ux+55 //快速过图 Gty=Uy+481 Cjx=Ux+380 //去抽奖 Cjy=Uy+422 Cjx1=Ux+272 //抽奖一 Cjy1=Uy+467 Cjqx=Ux+313 //抽奖确认 Cjqy=Uy+348 Cjjsx=Ux+377 //抽奖结束 Cjjsy=Uy+547 '==========传说中的分割线========== '=====打开好友菜单 For 8 MoveTo hx, hy Delay 500 MoveTo hx1, hy1 Delay 40 LeftClick 1 Delay 400

'=====单击获得奖励MoveTo JLx, JLy Delay 5000 LeftClick 1 Delay 400 '=====单击与他比赛MoveTo Scx1, Scy1 Delay 400 LeftClick 1 Delay 400 '=====单击赛一场,开始比赛MoveTo Scx2, Scy2 Delay 400 LeftClick 1 Delay 400 '=====快速跳过比赛MoveTo Gtx, Gty Delay 1000 LeftClick 1 Delay 400 '=====单击开始抽奖MoveTo Cjx, Cjy Delay 3000 LeftClick 1 Delay 400 MoveTo Cjx1, Cjy1 Delay 200 LeftClick 1 Delay 400 For 2 Cjx1= Cjx1+110 MoveTo Cjx1, Cjy1 Delay 200 LeftClick 1 Delay 400 MoveTo Cjqx, Cjqy Delay 200 LeftClick 1

相关文档
相关文档 最新文档