## 无句柄的控件元素如何操作?
一般来说,windows下的桌面程序的窗口以及里面的控件,例如按钮、输入框等都是有句柄的,但是仍旧有不少程序没有句柄,例如我们熟悉的微信桌面版、qq等等,只有窗口有句柄,里面的按钮输入框什么的都没有句柄。
## 原因是什么呢?
因为它们都用的一些UI套件(例如:DUI库、QT、WPF等)开发的,里面的元素都是他们框架套件自绘上去的,所以并不会看到句柄,不过有些可以通过一些特殊方法例如公开或者非公开的接口可以得到,但是由于实在太复杂,而且一般这方面的资料特别少,作者也是无从下手,如果各位高手有什么好的解决方案可以在下面评论。
## 该怎么办呢?
> 1.最简单粗暴的办法,即:鼠标定位、点击。
相关的方法有:
[SetCursor](SetCursor方法.md)
[ClickPoint](ClickPoint方法.md)
通常我们用ClickPoint就可以了,可以计算下你的目标窗口中要点击的元素,然后执行点击即可。
具体案例参考:[02控制QQ发送消息](02控制QQ发送消息.md)
中的第1个函数中的代码:
```
w.ClickPoint w.Left + 35, w.Top + w.Height - 100, absolute, , 300, 500
```
它是获取qq对话框,然后分析底部向上大概100像素就是输入框的地方了。那么用w.Top + w.Height - 100即可定位到输入框。具体这个100像素是怎么得到的,可以用qq的截图功能,从底部向上截图立马可以看到高、宽多少像素。

> 2.分析看看按钮等操作是否有快捷键。
通常一个成熟的软件上面都会有快捷键,例如qq的发送按钮上面的文字是“发送(S)”,大家应该都知道这里的字母S表示什么意思吧?意思就是你在键盘上按快捷键Alt+S就相当于点击了这个发送按钮,那么这样就简单了,我们将这个聊天窗口设为焦点,然后发送快捷键就好。
同样参考案例:[02控制QQ发送消息](02控制QQ发送消息.md)
中的第2个函数中的代码:
```
SendKeys "%{s}"
```

- 关于clsWindow
- 一、获取窗口
- GetWindowByTitle 函数
- GetWindowByTitleEx 函数
- GetWindowByClassName 函数
- GetWindowByClassNameEx 函数
- GetWindowByPoint 函数
- GetWindowByAppName 函数
- GetWindowByAppNameEx 函数
- GetWindowByCursorPos 函数
- GetWindowByPID 函数
- GetWindowByHwnd 函数
- Load 函数(同GetWindowByHwnd)
- 二、操作窗口
- Focus 方法
- SetFocus 方法(同Focus)
- FadeIn 方法
- FadeOut 方法
- Transparent 函数
- SetTransparent 函数(同Transparent)
- MakeTransparent 函数(同Transparent)
- Shake 方法
- CloseWindow 函数
- ClassName 属性
- Caption 属性
- Text 属性(同Caption)
- Title 属性(同Caption)
- Value 属性(同Caption)
- ZOrder 方法
- Left 属性
- Top 属性
- Width 属性
- Height 属性
- Visible 属性
- Enabled 属性
- WindowState 属性
- AlphaBlend 属性
- TransparentColor 属性
- CheckWindow 函数
- Move 函数
- MoveToCenter 函数
- Show 函数
- Hide 函数
- Refresh 方法
- SetPosBottom 函数
- SetPosFront 函数
- SetPosNormal 函数
- SetTop 函数
- IsTopMost 函数
- IsForegroundWindow 属性
- Maximized 函数
- Minimized 函数
- Normal 函数
- Restore 函数(同Normal)
- 三、操作控件
- GetElementHwndByText 函数
- GetElementHwndByClassName 函数
- GetElementTextByText 函数
- GetElementTextByClassName 函数
- GetClassNameByHwnd 函数
- GetTextByHwnd 函数
- GetCaptionByHwnd 函数(同GetTextByHwnd)
- SetElementTextByText 函数
- SetElementTextByClassName 函数
- SelectComboBoxIndex 函数
- AppendElementTextByClassName 函数
- Click 函数
- ClickElementByText 函数
- ClickElementByClassName 函数
- SendKeys 方法
- Paste 方法
- FileToClipboard 函数
- ClipboardSetText 函数
- 四、鼠标坐标相关
- ClickCurrentPoint 方法
- ClickPoint 方法
- ClickPointBackground 方法
- SetCursor 方法
- MoveCursor 方法(同SetCursor)
- MoveCursorTo 方法(同SetCursor)
- SetPoint 方法(同SetCursor)
- GetCursorPoint 函数
- GetCursorPosCurrent 函数(同GetCursorPoint)
- MouseLeftDown 方法
- MouseLeftUp 方法
- MouseRightDown 方法
- MouseRightUp 方法
- DragTo 方法
- DragToEx 方法
- 五、应用程序相关
- AppPath 函数
- AppName 函数
- IsWin64 函数
- CommandLine 函数
- AppCommandLine 函数(同CommandLine)
- CloseApp 函数
- ProcessID 函数
- PID 函数(同ProcessID)
- 六、公有方法属性等
- hWnd 公有变量
- DebugMe 公有变量
- Wait 方法
- Version 方法
- 使用范例
- 01 控制微信发送消息
- 02 控制QQ发送消息
- 03 QQ登录器
- 04 花式调用计算器
- 05 用鼠标在画图工具上画圆
- 06 控制记事本输入并保存
- 07 随机移动鼠标防锁屏
- 08 根据ID进入腾讯课堂
- 09 限制程序重复打开
- 10 控制c2p软件将ceb转换为pdf格式
- 11 实战:微便签-窗口特效
- 12 实战:窗口图钉-窗口置顶
- 13 实战:微型按键精灵,录制和播放鼠标动作
- 一些Q&A
- 01 这个框架是免费的吗?
- 02 无句柄的控件元素如何操作?
- 03 目标窗体中有相同类名输入框如何区分填写?
- 04 为什么win10下最大化不生效?
- 05 如何确定绝对或相对坐标?
- 06 相同标题的窗口如何得到所有句柄?
- 联系我们
