1、要善用spy++

2、不同的控件主要靠GetDlgCtrlID去区分

3、要获得另一个进程的焦点窗口(GetFocus)需要调用AttachThreadInput

4、尽量少用keybd_event模拟键盘输入,主要是该函数不能保证按键消息一定能被特定进程接收到。取而代之的SendMessage(hwnd, WM_IME_CHAR, ...)。而模拟回车按下要用PostMessage (hFocus, WM_KEYDOWN, VK_RETURN, 0),SendMessage不知为何不起作用

5、通达信在按下第一个数字键后会弹出键盘精灵,此时焦点窗口会转移到键盘精灵上,要重新调用GetFocus一次

6、GetWindow(hMainWnd, GW_ENABLEDPOPUP)可以获得当前的弹出窗口句柄

7、PostMessage(hPopup, WM_COMMAND, MAKEWPARAM(IDOK, BN_CLICKED), NULL),模拟“确定”键被按下

8、EnumChildWindows函数可以枚举一个窗口的所有子窗口:

class ThreadHandler
{#region P/Invoking and constants definitionconst uint WM_GETTEXT = 0x000D;[DllImport("user32.dll")]static extern IntPtr SetFocus(IntPtr hWnd);[DllImport("user32.dll")]private static extern int GetWindowThreadProcessId(IntPtr hWnd, uint lpdwProcessId = 0);delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);[DllImport("user32.dll")]static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,IntPtr lParam);[DllImport("user32.dll")]static extern bool AttachThreadInput(int idAttach, int idAttachTo, bool fAttach);[DllImport("kernel32.dll")]static extern int GetCurrentThreadId();[DllImport("user32.dll", CharSet = CharSet.Auto)]static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, int wParam, StringBuilder lParam);#endregionpublic readonly string ProcessName, WindowName;protected readonly int TargetThreadID, CurrentThreadID;protected readonly IntPtr TargetWindowHandle;public ThreadHandler(string processName, string windowName){CurrentThreadID = GetCurrentThreadId();ProcessName = processName;WindowName = windowName;object[] objs = GetWindowThread(processName, windowName);if (objs == null){throw new ArgumentException("Could not find the specified process/window.");}TargetThreadID = (int)objs[0];TargetWindowHandle = (IntPtr)objs[1];}public ThreadHandler(string processName){CurrentThreadID = GetCurrentThreadId();ProcessName = processName;var processes = Process.GetProcessesByName(ProcessName);if (processes.Length == 0){throw new ArgumentException("Could not find the specified process.");}var appProc = processes[0];WindowName = appProc.MainWindowTitle;TargetThreadID = GetWindowThreadProcessId(appProc.MainWindowHandle);TargetWindowHandle = appProc.MainWindowHandle;}public bool AttachThreadInput(){return AttachThreadInput(CurrentThreadID, TargetThreadID, true);}public bool DetachThreadInput(){return AttachThreadInput(CurrentThreadID, TargetThreadID, false);}public void SetFocus(){SetFocus(TargetWindowHandle);}static object[] GetWindowThread(string processName, string windowName){var processes = Process.GetProcessesByName(processName);if (processes.Length > 0){//Fill a list of handlesvar handles = new List<IntPtr>();foreach (ProcessThread thread in processes[0].Threads)EnumThreadWindows(thread.Id,(hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);//Create a stringbuilder to function as storage unitStringBuilder nameBuffer = new StringBuilder(64);foreach (var hWnd in handles){//And finally compare the caption of the window with the requested namenameBuffer.Clear();SendMessage(hWnd, WM_GETTEXT, nameBuffer.Capacity, nameBuffer);if (nameBuffer.ToString() == windowName){return new object[2] { GetWindowThreadProcessId(hWnd), hWnd };}}}return null;}

不过最终是否能实现,还需要再完善或者再进行接口程序优化,仅供大家参考。

通达信自动交易软件步骤分析相关推荐

  1. 通达信自动交易软件 z

    1.要善用spy++ 2.不同的控件主要靠GetDlgCtrlID去区分 3.要获得另一个进程的焦点窗口(GetFocus)需要调用AttachThreadInput 4.尽量少用keybd_even ...

  2. python 通达信自动下载收盘和财务数据

    python 通达信自动下载收盘和财务数据,自动启动通达信,鼠标自动操作: 通达信直接从官网下载免费版,可下载财务数据. 自动识别屏幕尺寸(目前为1440x900.1920x1080.1366*768 ...

  3. 通达信自动交易系统接口安装方式

    通达信自动交易系统接口安装方式 1方式一 1yum安装 yum install -y keepalived 2查看版本 rpm -qa|grep keepalived rpm -qc keepaliv ...

  4. 通达信自动交易系统接口定义

    通达信自动交易系统接口定义,接口是⼀个或多个方法签名的集合,任何类型的方法集中只要拥有与之对应的全部方法,就表示它"实现"了该接口,无须在该类型上显式添加接口声明.所谓对应方法,是 ...

  5. 通达信自动交易接口设置止损程序解析

    通达信自动交易接口设置止损程序并不是很难,对于交易者来说,还是需要去学习一些编程知识,像交易中的止损程序,可以这样去编写和输入你的止损策略:  (1)# 设置买卖止损值     def set_sto ...

  6. 通达信自动交易接口怎么显示大宗流入?

    通达信自动交易接口怎么显示大宗流入?原因主要是两个: 一.受沪港通直接利好的AH折价股.稀缺标的股前期已被资金大幅炒高,利好兑现出货正式A股市场短炒资金的一贯风格. 二.以创业板为代表的中小高成长类个 ...

  7. [ahk]通达信股票交易软件持仓数据获取(招商证券、中银国际、通达信官方版等测试可用)

    新版通达信持仓获取方式,得启动通达信,点击资金股份,再按热键F9,脚本如下,运行环境请去ahk英文官网下载 Current Version. ; Tested with AHK v1.1.31.00 ...

  8. 通达信自动提示穿头破脚K线组合形态(含指标公式源码)

    内容提要:本文主要介绍了穿头破脚K线组合形态的概念以及穿头破脚通达信指标公式的两种写法. 阳康归来,今天给大家介绍一个比较应景的K线组合形态--穿头破脚. 一.穿头破脚介绍 穿头破脚K线组合形态由两根 ...

  9. 通达信自动提示启明星、黄昏星K线组合形态(含指标公式源码)

    内容提要:本文主要介绍了启明星(早晨之星)和黄昏星(黄昏之星)K线组合形态的概念以及启明星和黄昏星通达信指标公式的写法,并设置K线颜色,添加文字标记. 一.启明星(也称早晨之星) 启明星K线组合形态是 ...

  10. 代码下移快捷键_收藏细看!最全面的通达信快捷键一览

    壹.通达信网上交易软件快捷键分为四种 数字键:比如1,61,81,10,91等 点系列键:比如.101,.201,.301.... .909等 功能键:比如F1,F2... 空格键,减号键,TAB等 ...

最新文章

  1. tcpdump保存数据包
  2. strut2以及路径的一些问题
  3. Microsoft.VsHub.Server.HttpHost
  4. Nginx(五):动静分离
  5. 早晨有好多学生在买早餐吃,这样好吗?家长不给孩子做饭吗?
  6. 【NLP】语义角色标注(Semantic Role Labelling)
  7. SSI与Biss、Endat、Hipeface
  8. python绝对值编程_如何在python中取绝对值
  9. 用U盘安装ubuntu系统
  10. ios 侧滑返回停顿_iOS侧滑卡死解决方法
  11. 微信每日早安推送 Windows版
  12. 爱情是人类最高贵的情感
  13. C# 浅谈基于Wpf下的MVVM模式的设计思想
  14. 使用XMAPP启动MySQL出现Error: MySQL shutdown unexpectedly 的解决办法
  15. 【SAP-SD】史上最全的SAP凭证类型总结
  16. cocos2dx-2.2.0孤狼优化整合版安装视频
  17. 惊喜or惊吓?开发者眼中的苹果新品发布会
  18. epic显示访问服务器次数过多,EpicGames客户端错误代码大全的解决办法
  19. Python中使用Tkinter 快速布局编写桌面GUI程序
  20. 【mcuclub】时钟模块DS1302

热门文章

  1. ContextCapture与Pix4D生成正射影像并进行拼接修图(附航测练习数据下载)
  2. js 对中文字符的 解码 与 编码
  3. C语言的sqrt函数的调用
  4. 盘点 | 2018年IoT蓄势待发
  5. 如何写好一篇博客(文章)
  6. syntaxhighlighter高亮动态代码
  7. 简单的java游戏编程代码_java游戏编程(1)线程
  8. 密码编码学之公钥密码学及RSA
  9. MapGuide Windows编译
  10. 学校实训密码锁设计(基于STC51单片机)报告