新建一个文本文档,打开,Windows就会给这个文本文档的窗口临时分配唯一的一串数字来标识这个窗体,以区别于其他窗口,这串数字就叫句柄。

 
因为句柄是临时随机分配的,所以每次虽然是打开同一个文件,但是分配到的一串数字却是不一样的。
 
所以我们要通过窗体的标题栏来确定每次不同的句柄。
 
例如,我打开一个“新建 文本文档 (5).txt”,打开,文本文档的标题栏是“新建 文本文档 (5).txt - 记事本”,那么,我就通过“新建 文本文档 (5).txt - 记事本”(注意:不是文件名)来查找这个文本文档的句柄。
 
Hwnd = Plugin.Window.Find(0, "新建 文本文档 (5).txt - 记事本")
Delay 2000
 
然后通过句柄对这个文档进行最大化操作
 
Plugin.Window.Min Hwnd
Delay 2000
 
要对这个文本文档进行写入,就要另外单击文本区域,文本区域是这个窗体的一部分,有自己的句柄,我们称之为“子句柄”。我们可以通过刚才找到的窗口句柄,类(抓抓里面获取),来查找窗体里面的某一独立部分的子句柄。然后对子句柄所标识的窗体部分写入文本。
 
HwndEx = Plugin.Window.FindEx(Hwnd, 0, "Edit", 0)
Delay  2000
Call Plugin.Window.SendString(HwndEx, "hello,word,I am the king")  
Delay 2000
 
“全部命令”--“插件命令”--“windows 窗口插件” 可找到以上函数
 
 
 
 
后台:什么意思?
 
比如一个游戏,窗口最大化后,我们可以玩;但是我们把它最小化后,虽然我们看不见了,它还是没有停止,它还在幕后(前台后面)继续运行,这个就叫后台。
 
又例如,我们挪动鼠标双击我的电脑,这个过程可视;如果通过后台执行这个操作,我们虽然看不到鼠标挪动的过程,但是也可以达到双击我的电脑的效果。
 
Hwnd = Plugin.Window.MousePoint()  获得当前鼠标所在窗体的句柄的命令
Call Plugin.Bkgnd.LeftClick(Hwnd, 36, 98)  在后台单击选中“我的电脑”,前提是执行时候鼠标要挪到桌面上。貌似按键精灵对鼠标后台双击单击做得不好,有时不灵。
 
 
 
Hwnd = Plugin.Window.MousePoint()
XY = Plugin.Bkgnd.FindColor(Hwnd, 0, 0, 1024, 768, "0201E1")   '区域找色
ZB = InStr(XY, "|")
X = Clng(Left(XY, ZB - 1))
 Y = Clng(Right(XY, Len(XY) - ZB))
MsgBox "x"&X &"y"& Y                     '弹出窗口,指定颜色如果找到,显示他的点的坐标
 
注意:插入语句默认是X = Clng(Left(XY, ZB - 1)): Y = Clng(Right(XY, Len(XY) - ZB))这样的
要把冒号改掉,分2行。
 
获得句柄的几个函数。注意,如果不打开窗口,是无法获得句柄的。标题名也不能写错,写错也无法获取。但是会有返回值。
Hwnd = Plugin.Window.GetKeyFocusWnd()    获得当前激活的窗口句柄,激活的窗口鼠标不一定在上面
Hwnd = Plugin.Window.MousePoint()       获得鼠标当前停留的窗口的句柄,当前窗口状态未必激活(被点选)
Hwnd = Plugin.Window.Find(0, "无标题 - 记事本")  获取窗口标题栏为“无标题 - 记事本”的窗口的句柄
 
一般优先使用Plugin.Window.Find,如果窗口标题不固定,再考虑使用其他两个函数
 
Hwnd = Plugin.Window.Find(0, "新建 文本文档 (7).txt - 记事本")
sRect = Plugin.Window.GetClientRect(Hwnd)   '获取窗口的4个坐标
myArray=Split(srect,"|")       '分离出四个坐标 因为Split就是数组函数,所myArray虽然没有定义,也被默认定义成了动态数组变量
 
MessageBox myArray(0) & "," & myArray(1)  '显示出变量起始点的坐标
a = CLng(myArray(0))                      '将变量里的值从字符变为数字类型,然后才能用moveTo函数
b = CLng(myArray(1))
MoveTo a, b
 
 
获取窗口坐标的目的:窗口的位置不固定,但是窗口内的内容相对于窗口的位置是固定的,“绝对坐标”+“相对坐标”,结合ifColor函数,进行判断
 
KeyDown 就要记得 keyUp
 
截取一部分,才有共性。比如找图,找游戏人物,不建议截取增个人,因为人的穿着装备是会变化的;可以截取脸部或者其他一部分。
 
抓抓工具,可以设定起始坐标,来获得相对坐标。
 
用户自定义变量http://zy.anjian.com/index.php?action-viewnews-itemid-220
用户自定义变量,也就是说用户可以输入参数(在脚本属性--其他),然后传给程序执行,提高程序灵活性。
 
UserVar TheKeyYouPress "你要按下的键"   '注意最后的中文是固定格式,一定要有,不是注释
UserVar TheTimeYouWant "你要按几次"
 
For TheTimeYouWant
KeyPress TheKeyYouPress, 1
Next
 
OCX界面(很鸡肋的一个功能,效果也不好,建议直接用“用户自定义变量”)
利用VB对C:\Program Files\按键精灵9\source\自定义界面例子(VB 6.0)\VB-BIG-001\QMacroUI.vbp修改制作界面,然后做成OCX文件。
然后再按键精灵右侧 脚本属性--其他--设置界面 里面,把OCX文件包含进来。
主要原理:例如,VB设计界面的时候,文本框的名称设置成 TheKeyYouPress 要和按键精灵脚本的自定义变量UserVar TheKeyYouPress "你要按下的键",两个要一样。
http://www.aipai.com/c9/ODY9JSknImgnaiYp.html 例子里面大致那样,实际用按键精灵9用起来还有一定问题。
例子里面改了很多地方,其实主要功能就是保存上次你输入的参数,一个将保存好的参数导出。
 

按键精灵 句柄 获得句柄 控制windows窗口 后台的更多相关文章

  1. 【笨嘴拙舌WINDOWS】实践检验之按键精灵【Delphi】

    通过记录键盘和鼠标位置和输入信息,然后模拟发送,就能够创建一个按键精灵! 主要代码如下: library KeyBoardHook; { Important note about DLL memory ...

  2. Windows窗口消息大全(转)

    Windows窗口消息大全,全不全自己看 ////////////////////////////////////////////////////////////////////////// #inc ...

  3. Windows窗口消息大全

    ////////////////////////////////////////////////////////////////////////// #include "AFXPRIV.H& ...

  4. 【转】Windows 窗口层次关系

    原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...

  5. 教程-隐藏/显示任务栏-程序不在任务显示-全面控制Windows

    1.隐藏任务条 var  h:THandle; //变量h:=FindWindow('Shell_TrayWnd',nil);ShowWindow(h,SW_hide); 2.显示任务条h:=Find ...

  6. win32 api Windows窗口的创建

    windows窗口的创建有以下几个步骤: 1.创建注册窗口类 2.创建窗口句柄 3.显示更新窗口 4.消息循环 1.创建注册窗口类 所谓创建窗口类就是定义一个WNDCLASS类对象,并将该对象进行初始 ...

  7. [MFC]_在vs2019中使用MFC快速构建简单windows窗口程序

    微软基础类库(英语: Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发 ...

  8. [教程] 以本论坛为例,手把手教你使用按键精灵POST登陆网页

    本帖最后由 isaacc 于 2012-2-26 11:08 编辑 整个操作,很无脑.只要你够勤快,你学不会,你来咬我.懒人和伸手党就直接复制代码去玩吧,但我不是叫你拿去干坏事. 准备工具:WPE和I ...

  9. Windows窗口的创建

    Windows窗口创建的基本代码: #include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); i ...

随机推荐

  1. Intent官方教程(5)在manifest中给组件添加<Intent-filter>

    Receiving an Implicit Intent To advertise which implicit intents your app can receive, declare one o ...

  2. 【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目(三)

    [项目管理和构建]十分钟教程,eclipse配置maven + 创建maven项目(三) 上篇博文中我们介绍了maven下载.安装和配置(二),这篇博文我们配置一下eclipse,将它和maven结合 ...

  3. Cheatsheet: 2013 10.01 ~ 10.08

    Other 20 Tips for becoming a better programmer Top 10 Movies for Programmers .NET RaptorDB - The Key ...

  4. DataTable或者DataRow转换对象

    public static IEnumerable<T> ConvertObject<T>(DataTable dt) where T : new() { var v = ty ...

  5. Devexpress TreeList选择父级联动

    Treelist当显示复选框后,父级和子级的复选框没有关联,使用过程中很不便,如图所示 自己给treelist添加父子级联动 /// <summary> /// 初始化TreeList,父 ...

  6. git commit时message的问题

    1: 在执行git commit的时候,有两种办法为该commit添加message信息一种是git commit -m 'your message'另一种是git commit会打开commit-e ...

  7. DJANGO基础学习之转义总结:escape,autoescape,safe,mark_safe

    何谓转义?就是把html语言的关键字过滤掉.例如,<div>就是html的关键字,如果要在html页面上呈现<div>,其源代码就必须是<div> PS:转义其实就 ...

  8. 在服务器上log4net没写日志

    登录到服务器上,发现log4net没写日志 在相应文件夹加上User用户的写权限后恢复正常了.

  9. POJ 1321棋盘问题

    题意: 给定一个n*n(n<=8)的棋盘, 有些地方能放棋子, 有些不能. 放m个棋子, 求能使这m个棋子不同行且不同列的方案数. 分析: 用一个一维数组标记行和列, 深搜一下. #includ ...

  10. Linux vi 中移动光标 命令

    移动光标 上:k nk:向上移动n行 9999k或gg可以移到第一行 G移到最后一行下:j nj:向下移动n行左:h nh:向左移动n列右:l nl:向右移动n列 w:光标以单词向前移动 nw:光标向 ...