通达信CTRL+A批量标注的实现方法
-
相关简介:和谐作品都开通了多字标注+批量标注。这其中纶巾羽扇老师的7.49(5月10日版)最完善,支持CTRL+Q和CTRL+A两种批量标注方式。而多数其它作品就只有CTRL+Q一种方式了。而且。除了羽扇老师的版本支持CTRL+Q批量删除标注外,其它的都要去CTRL+A对话框,批量删除标注。
-
文章来源:股海网作者:股海网发布时间:2020-10-27浏览次数:
和谐作品都开通了多字标注+批量标注。这其中纶巾羽扇老师的7.49(5月10日版)最完善,支持CTRL+Q和CTRL+A两种批量标注方式。而多数其它作品就只有CTRL+Q一种方式了。而且。除了羽扇老师的版本支持CTRL+Q批量删除标注外,其它的都要去CTRL+A对话框,批量删除标注。
CTRL+Q批量标注的好处是便捷,不足是要依赖屏幕上的选择,一次操作数量受屏幕限制。这里分享两个用CTRL+A实现批量标注的方法。
1)模拟CTRL+Q,这个可以满足习惯了用CTRL+A批量操作者的路径依赖。
进入批量操作对话框后,按ESC退出对话框,再按CTRL+Q,就可以实现通过CTRL+Q的批量标注。程序修改就是,进入批量操作对话框后,当选择文字标注时,发送模拟键盘按键序列:ESC、CTRL+Q。参考代码如下。
call dword ptr ds:[<&USER32.GetActiveWindow>] ; user32.GetActiveWindow
mov esi, eax
push 0x4 ; GW_OWNER
push esi ; hWnd_Child
call dword ptr ds:[<&USER32.GetWindow>] ; user32.GetWindow
mov ebp, eax
push 0x0 ; lParam =0
push 0x1B ; wParam = 'esc'
push 0x100 ; WM_KEYDOWN
push esi ; hWnd
call dword ptr ds:[<&USER32.SendMessageA>] ; user32.SendMessageA
push 0x0 ; lParam = 0
push 0x83FC ; wParam = 33788(CTRL+Q)
push 0x111 ; WM_COMMAND
push ebp ; hWnd_Paraent
call dword ptr ds:[<&USER32.PostMessageA>] ; user32.PostMessageA
2)在CTRL+A中的直接实现
CTRL+A是针对一个板块全部股票轮巡,找出选择(前面打勾)的,进行批量操作,对于文字标注,每次要输入文字。这个不满足要求,我们要做的就是第一次遇到选择的股票时,弹出文字输入对话框,后面的直接用第一次录入的文字。这要求,a)保存第一次获得的文字,b)后面遇到打勾的股票在要弹出对话框时,直接用前面保存的文字替代。具体实现有些复杂,好在玺龙老师已经基本实现了,仅需要少量修改,就是 a)进入补码的时机,不是从轮巡股票的开始,而是遇到第一个文字输入对话框之后,b)补码的结束位置,不能直接跳回循环的开始,而是条件判断,当轮巡次数小于板块中股票数时跳回循环开始,否则,跳到调用返回处理。
进入时机修改的补码如下
mov dword ptr ds:[0x1BD92CA],eax ;保存股票是否被选择的标志
je tdxw_mar.0040DB69
jmp tdxw_mar.0040DA41
push eax
mov eax,dword ptr ds:[0x1BD92CA]
test eax,eax
pop eax
jje tdxw_mar.01BD92F0
jmp tdxw_mar.01BD9018 ;进入玺龙老师的补码
cmp ebp,eax
jl tdxw_mar.0040DA30
jmp tdxw_mar.0040DB7B
以上仅为实现的一种方式参考,没有程序修改基础的不必纠结。有了方法,更多老师会提供这个功能的。