findtext 方法学习收藏

本文介绍了在飞腾浏览器中实现查找功能时使用的findText方法。详细解释了如何通过iFlags参数实现全字匹配和区分大小写的查找,并提供了示例代码。
部署运行你感兴趣的模型镜像

createRange 中发现findText这个方法,找了篇文章收藏,谢过原作者

http://blog.youkuaiyun.com/jiangqiaohua/archive/2008/10/17/3091979.aspx

==============

呵呵,一直以来都是去别人BLOG搜刮资料

这次偶也写一点分享一下。

最近在做飞腾浏览器(FlyIe)的的查找功能,(打下广告@_@)

关键字高亮和向上向下查找都差不多了

遇到了全字匹配和区分大小写的问题。

后来到MSDN一查,原来findText()方法都有。

findText Method
Searches for text in the document and positions the start and end points of the range to encompass the search string.

Syntax


bFound = TextRange.findText(sText [, iSearchScope] [, iFlags])

Parameters

sText Required. String that specifies the text to find.
iSearchScope Optional. Integer that specifies the number of characters to search from the starting point of the range. A positive integer indicates a forward search; a negative integer indicates a backward search. 
iFlags Optional. Integer that specifies one or more of the following flags to indicate the type of search: 0 Default. Match partial words.


0 Default. Match partial words.
1 Match backwards.
2 Match whole words only.
4 Match case.
131072 Match bytes.
536870912 Match diacritical marks.
1073741824 Match Kashida character.
2147483648 Match AlefHamza character.

iFlags 参数为0表示部分匹配,比如

@a,@ADD,@a Abba @AB  超找@a 为四个

iFlags 参数为1表示查找最后一个关键字,比如

@a,@ADD,@a Abba @AB 查找@a 就到 @AB 这里去了

iFlags 参数为2表示全字匹配,比如

@a,@ADD,@a Abba @AB 查找@a 就到 只有一个就是 @a

iFlags 参数为3表示全字匹配,比如

@a,@ADD,@a Abba @AB 查找@a 就到 只有一个就是 @a

iFlags 参数为4表示大小写匹配,比如

@a,@ADD,@a Abba @AB 查找a 就到 只有三个

iFlags 参数为5表示按字节匹配

剩下几个参数不知道什么意思,也不重要就不说了。

 

 

那假如即要全字匹配又要大小写匹配怎么办呢?

很简单

If oRange.findText(nWord, , 2) Then
    If oRange.findText(nWord, , 4) Then
        nPosBM = oRange.getBookmark
        'Call oRange.moveToBookmark(nPosBM)
        Call oRange.Select
       
        FindWord2 = True
    End If
Else
    'Set nPosBM = Nothing
    nPosBM = vbNullString
    FindWord2 = False
End If

加个IF 循环就好了

 

 

 

 

其他参数就靠其他大虾解释了

This example creates a TextRange over the body of the document, and then uses the findText method to search for text with various flag combinations. The results are indicated in the example code comments.

 Copy Code
<HTML>
<BODY>
Leonardo da Vinci was one of the great masters of the High
Renaissance, especially in painting, sculpture, architecture,
engineering, and science.
</BODY>
</HTML>

<SCRIPT>
   var oRange = document.body.createTextRange();
      // record the current position in a bookmark
   var sBookMark = oRange.getBookmark(); 
      // true - case-insensitive and partial word match
   oRange.findText('leo');              
      // reset the range using the bookmark
   oRange.moveToBookmark(sBookMark);
      // false - matches whole words only 
   oRange.findText('engineer', 0, 2);   
   oRange.moveToBookmark(sBookMark);
      // false - case-sensitive
   oRange.findText('high', 0, 4);       
   oRange.moveToBookmark(sBookMark);
      // true - case-sensitive and matches whole words
   oRange.findText('Leonardo', 0, 6);   

      // the degenerate case
   oRange.moveToBookmark(sBookMark);
      // make the range degenerate
   oRange.collapse();
      // false - must specify large character count in this case
   oRange.findText('Leonardo', 0, 6);
      // true - no third parameter passed, so no count needed
   oRange.findText('Leonardo');
      // true - a large count covers the range
   oRange.findText('Leonardo', 1000000000, 6);   
</SCRIPT>

 

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think> 首先,用户的问题是关于AutoHotkey(AHK)中findtext功能的信息。他们询问findtext功能的介绍和使用方法。 根据系统级指令,我需要: - 所有行内数学表达式使用$...$格式,但由于这个问题是关于AHK的脚本,可能没有数学表达式,所以我不需要添加数学公式。 - 独立公式使用$$...$$格式,但同样,这里没有数学内容。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,比如[^1]。 用户提到了一个引用:[^1],它在系统指令中显示了关于AHK的clickable.ahk和findtext.ahk的代码片段。引用说: > 引用[1]:[AutoHotkey]clickable.ahk。声明:... findtext.ahk [^1] 所以,我需要参考这个引用。引用[^1]是关于findtext.ahk的,但用户的问题是直接询问findtext功能。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 然而,在对话历史中,我没有看到“用户上一次的问题”。在这个查询中,这是第一个用户消息,所以我应该专注于当前问题。 用户消息是:“我想查找关于AutoHotkey(AHK)中findtext功能的相关信息 请问AutoHotkey findtext功能介绍及使用方法” 所以,核心是提供findtext功能的介绍和使用方法。 从引用[^1]中,我知道findtext.ahk是相关的,它可能是AHK中用于查找图片或文本的功能。 在AHK中,FindText()是一个流行的用户定义函数,用于在屏幕上查找文本或图像,基于像素匹配。 我需要结构化回答: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 步骤: 1. **介绍findtext功能:** 解释什么是findtext,它在AHK中的作用。 2. **使用方法:** 提供如何使用findtext的步骤或代码示例。 3. **引用:** 由于有引用[^1],我应该在相关部分添加引用标识。 引用[^1]描述了win.FindPic(Text)和类似功能,所以在描述这些时添加引用。 4. **生成相关问题:** 在回答结束时,添加相关问题部分。 生成相关问题示例: - 如何安装和使用findtext库? - findtext的性能优化方法? - 常见问题解决? 最后,使用中文回答。 大纲回答: - 开头:简要介绍findtext功能。 - 详细部分:解释功能、参数、方法。 - 代码示例:提供简单的AHK脚本示例。 - 结尾:总结和生成相关问题。 引用标识:在提到win.FindPic或类似内容时添加[^1]。 在用户消息中,引用是[^1],所以我应该使用它。 </think>### AutoHotkey FindText 功能介绍及使用方法 在 AutoHotkey(AHK)中,`FindText()` 是一个强大的用户定义函数库,主要用于在屏幕上查找并定位文本或图像(基于像素匹配),而无需依赖 OCR 技术。它常用于自动化脚本中,例如游戏辅助、GUI 测试或重复性任务。`FindText()` 的核心是通过捕获屏幕区域的位图(图像),并将其转换为文本描述(称为“文本代码”),然后通过比较来查找匹配位置。这个功能在 `findtext.ahk` 库中实现,通常需要单独下载和包含到脚本中[^1]。下面我将逐步介绍其功能和使用方法,确保内容清晰可靠。 #### 1. **功能概述** - **核心作用**:`FindText()` 允许脚本在屏幕上搜索特定图像或文本区域,返回匹配坐标(X,Y),以便后续操作如点击或输入。 - **工作原理**: - **捕获阶段**:使用 `FindText()` 的辅助工具(如抓图控件)捕获屏幕区域,生成一个“文本代码”(一串描述像素信息的字符)。 - **搜索阶段**:在运行时,脚本使用这个文本代码扫描屏幕,比较像素差异(基于灰度或颜色阈值),找到匹配位置。 - 优势:相比 AHK 内置的 `ImageSearch`,`FindText()` 更灵活,支持部分匹配、模糊搜索和抗干扰能力强[^1]。 - **适用场景**:自动化点击按钮、识别验证码、监控屏幕变化等。例如,在引用中提到的 `win.FindPic(Text)` 就是基于此库的功能,用于在指定窗口查找图片[^1]。 #### 2. **使用方法** 使用 `FindText()` 需要先下载并包含 `findtext.ahk` 库(通常来自 AHK 社区资源)。以下是基本步骤和代码示例: **步骤 1: 下载和包含库** - 从可靠来源下载 `findtext.ahk` 文件(如官方论坛或 GitHub)。 - 在你的 AHK 脚本开头包含该库: ```ahk #Include path\to\findtext.ahk ; 替换为实际路径 ``` **步骤 2: 捕获图像并生成文本代码** - 使用 `FindText` 提供的工具(如 `FindText_Capture()`)捕获屏幕区域: 1. 运行脚本后,调用 `FindText_Capture()` 函数。 2. 拖动鼠标选择屏幕区域,工具会自动生成文本代码(例如:"|<>*123$abc...")。 3. 复制此代码到脚本中作为搜索依据。 **步骤 3: 在脚本中使用 FindText() 搜索** - 基本语法:`FindText(X1, Y1, X2, Y2, TextCode, Options)`。参数解释: - `X1, Y1, X2, Y2`:搜索区域坐标(屏幕或窗口),可选(默认为全屏)。 - `TextCode`:捕获步骤生成的文本代码。 - `Options`:可选参数,如设置匹配阈值(0.8 表示 80% 相似度)。 - 函数返回:一个数组,包含匹配位置的坐标(X,Y)和宽度高度(W,H)。 - **示例脚本**:搜索屏幕上的某个按钮并点击。 ```ahk ; 包含库后定义文本代码(假设是捕获的按钮图像) ButtonCode := "|<>*123$abc..." ; 替换为实际生成的代码 ; 在屏幕区域 (0,0,1920,1080) 中搜索 Found := FindText(0, 0, 1920, 1080, ButtonCode, 0.8) ; 检查是否找到匹配 if (Found) { ; 获取第一个匹配位置 X := Found.1.x Y := Found.1.y ; 点击该位置 Click, %X%, %Y% MsgBox, 找到按钮并点击成功! } else { MsgBox, 未找到匹配项。 } ``` **步骤 4: 高级功能** - **模糊搜索**:通过调整阈值参数(如 `0.7`)处理图像变化。 - **多匹配处理**:返回数组包含多个匹配项,可以遍历处理。 - **结合其他函数**:如引用中提到的 `win.FindPic(Text)`,它基于 `FindText()` 实现,用于在特定窗口查找图片[^1]。 ```ahk ; 示例:在窗口 ahk_pid 12345 中查找图片 win := new Clickable("ahk_pid 12345", 0.5, true) ; 创建 Clickable 对象 winRect := win.GetRect() ; 获取窗口矩形 Found := win.FindPic(ButtonCode) ; 在窗口内搜索 if (Found) { win.DoClick(Found.1.x, Found.1.y) ; 在匹配位置点击 } ``` #### 3. **注意事项** - **可靠性**:匹配精度取决于图像质量(避免动态背景),建议在静态环境下测试。 - **性能**:搜索大区域可能较慢,优化方法包括缩小搜索范围或使用多线程。 - **引用依赖**:本文基于 `findtext.ahk` 库的常见实现,具体语法可能因版本而异(参考社区文档)[^1]。 #### 常见问题解决 - **问题1: 找不到匹配?** 检查文本代码是否正确生成,或降低阈值(如 `0.6`)。 - **问题2: 脚本错误?** 确保 `#Include` 路径正确,并下载最新 `findtext.ahk`。 - **资源推荐**:访问 AHK 官方论坛(autohotkey.com)或 GitHub 仓库获取完整库和教程。 总之,`FindText()` 是 AHK 自动化中强大的工具,通过文本代码实现图像搜索。如有具体场景,可提供更多细节以优化脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值