admin
2022-07-08 ae66a5e07a2ebb455e83c65ded12697fd0fece98
'bug修复'
6个文件已修改
169 ■■■■ 已修改文件
ConsoleApplication/THSActionUtil.cpp 116 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/THSActionUtil.h 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/main.cpp 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/app.aps 补丁 | 查看 | 原始文档 | blame | 历史
app/appDlg.cpp 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/appDlg.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ConsoleApplication/THSActionUtil.cpp
@@ -2,8 +2,6 @@
#include "ImgDivider.h"
#include "Win32Util.h"
RecognitionManager* THSActionUtil::recognitionManager;
bool isMainScreen(string str) {
    if (str.find("同花顺(") != string::npos) {
        cout << str << endl;
@@ -17,7 +15,11 @@
}
bool isSecondScreen(string str) {
    return    str.find("同花顺(") != string::npos && str.find("副屏") != string::npos;
    return    str.find("同花顺(") != string::npos && str.find("副屏1") != string::npos;
}
bool isThirdScreen(string str) {
    return    str.find("同花顺(") != string::npos && str.find("副屏2") != string::npos;
}
std::list<cv::Mat> splitGPCodeNum(cv::Mat img) {
@@ -41,9 +43,23 @@
    return    nums;
}
//获取副屏2
HWND getThirdWindow() {
    list<HWND> wlist = Win32Util::searchWindow("同花顺(");
    list<HWND>::iterator ele;
    for (ele = wlist.begin();ele != wlist.end();ele++) {
        HWND hwnd = *ele;
        string str = Win32Util::getWindowName(hwnd);
        if (isSecondScreen(str))
        {
            return hwnd;
        }
    }
    return 0;
}
//获取副屏
//获取副屏1
HWND getSecondWindow() {
    list<HWND> wlist = Win32Util::searchWindow("同花顺(");
    list<HWND>::iterator ele;
@@ -78,6 +94,7 @@
    list<HWND> wlist = Win32Util::searchWindow("同花顺(");
    list<HWND>::iterator ele;
    bool fp = false;
    bool fp2 = false;
    bool zp = false;
    for (ele = wlist.begin();ele != wlist.end();ele++) {
        HWND hwnd = *ele;
@@ -85,6 +102,11 @@
        if (isSecondScreen(str))
        {
            fp = true;
        }
        if (isThirdScreen(str))
        {
            fp2 = true;
        }
        if (isMainScreen(str)) {
@@ -99,7 +121,11 @@
    if (!fp) {
        throw string("同花顺副屏没有打开");
        throw string("同花顺副屏1没有打开");
    }
    if (!fp2) {
        throw string("同花顺副屏2没有打开");
    }
    return true;
@@ -163,7 +189,7 @@
    }
}
//添加股票
bool THSActionUtil::setGP(std::string quickCode, list<std::string> codeList) {
bool THSActionUtil::setGP(std::string quickCode, list<std::string> codeList, RecognitionManager* recognitionManager) {
    list<std::string> tempCodeList;
    for (std::list<string>::iterator e = codeList.begin();e != codeList.end();e++) {
@@ -209,7 +235,7 @@
    std::list<string> addList;
    std::list<GPCodeArea> delList;
    std::list<GPCodeArea> resultList = recognitionNum(img, areaList);
    std::list<GPCodeArea> resultList = recognitionGPCodeNum(img, areaList,recognitionManager);
    for (std::list<GPCodeArea>::reverse_iterator ele = resultList.rbegin();ele != resultList.rend();++ele) {
@@ -269,7 +295,7 @@
    }
    img = ImgUtil::grayImage(oimg);
    areaList = recognitionGPArea(img);
    resultList = recognitionNum(img, areaList);
    resultList = recognitionGPCodeNum(img, areaList,recognitionManager);
    for (std::list<GPCodeArea>::iterator ele = resultList.begin();ele != resultList.end();++ele) {
        bool contains = false;
        std::list<string>::iterator e;
@@ -596,11 +622,8 @@
    return resultList;
}
std::list<GPCodeArea>   THSActionUtil::recognitionNum(cv::Mat img, std::list<GPCodeArea> areaList) {
std::list<GPCodeArea>   THSActionUtil::recognitionGPCodeNum(cv::Mat img, std::list<GPCodeArea> areaList, RecognitionManager *recognitionManager) {
    if (!recognitionManager) {
        recognitionManager = new RecognitionManager();
    }
    //识别数字
    std::list<GPCodeArea> codeList;
@@ -652,10 +675,10 @@
}
std::list<string> THSActionUtil::recognitionGPCode(cv::Mat img) {
std::list<string> THSActionUtil::recognitionGPCode(cv::Mat img, RecognitionManager* recognitionManager) {
    cv::Mat grayImg = ImgUtil::grayImage(img);
    std::list<GPCodeArea> areaList = recognitionGPArea(grayImg);
    std::list<GPCodeArea>  list = recognitionNum(grayImg, areaList);
    std::list<GPCodeArea>  list = recognitionGPCodeNum(grayImg, areaList,recognitionManager);
    std::list<string> resultList;
    for (std::list<GPCodeArea>::iterator ele = list.begin();ele != list.end();ele++) {
        resultList.push_back((*ele).code);
@@ -777,8 +800,8 @@
std::map<int, string> THSActionUtil::getListenL2GPCodes() {
    std::list<GPCodeArea> areaList = getListenL2GP();
std::map<int, string> THSActionUtil::getListenL2GPCodes(RecognitionManager* recognitionManager) {
    std::list<GPCodeArea> areaList = getListenL2GPAreaAndCode(recognitionManager);
    std::map<int, string> map;
    for (std::list<GPCodeArea>::iterator ele = areaList.begin();ele != areaList.end();ele++) {
        GPCodeArea data = (*ele);
@@ -791,7 +814,7 @@
}
std::list<GPCodeArea> THSActionUtil::getListenL2GP() {
std::list<GPCodeArea> THSActionUtil::getListenL2GPAreaAndCode(RecognitionManager *recognitionManager) {
    //截图当前有哪些股票代码
    list<HWND> wlist = Win32Util::searchWindow("同花顺(");
    HWND mainPage = 0;
@@ -862,10 +885,10 @@
    return fresultList;
}
bool THSActionUtil::setListenL2GP(int p, string code) {
bool THSActionUtil::setListenL2GP(int p, string code, RecognitionManager* recognitionManager) {
    std::list<GPCodeArea> resultList = getListenL2GP();
    std::list<GPCodeArea> resultList = getListenL2GPAreaAndCode(recognitionManager);
    HWND content = FindWindowExA(getL2Win(), NULL, "AfxFrameOrView100s", NULL);
@@ -884,4 +907,59 @@
        }
    }
    return false;
}
GPCodeArea THSActionUtil::recognitionPlateContentArea(cv::Mat grayImg) {
    int rows = grayImg.rows;
    int cols = grayImg.cols;
    int r;
    int contentStartRow = -1;
    for (r = 5;r < grayImg.rows;r++) {
        if (ImgDivider::isRowFull(grayImg, r, cols - 100, cols - 5, 2)) {
            contentStartRow = r;
        }
        if (contentStartRow > -1) {
            break;
        }
    }
    if (contentStartRow < 0) {
        throw string("起始行分隔出错");
    }
    //分隔列
    int c = 0;
    int startC = -1;
    int endC = -1;
    for (c = 50;c < cols;c++) {
        if (ImgDivider::isColFull(grayImg, c, contentStartRow + 5, contentStartRow + 100, 2)) {
            if (startC < 0) {
                startC = c;
            }
            else {
                if (c - startC < 20) {
                    startC = c;
                }
                else {
                    endC = c;
                    break;
                }
            }
        }
    }
    if (startC < 0 || endC < 0) {
        throw string("内容框分隔出错");
    }
    GPCodeArea area = GPCodeArea();
    area.startx = startC;
    area.starty = contentStartRow;
    area.endx = endC;
    area.endy = rows - 1;
    return area;
}
ConsoleApplication/THSActionUtil.h
@@ -29,9 +29,8 @@
class THSActionUtil
{
private:
    static RecognitionManager *recognitionManager;
    static void addGP(string code);
    static std::list<GPCodeArea> getListenL2GP();
    static std::list<GPCodeArea> getListenL2GPAreaAndCode(RecognitionManager* recognitionManager);
public:
@@ -43,22 +42,25 @@
    //打开同花顺的副屏幕
    static void openSecondScreen();
    //设置股票
    static bool setGP(std::string quickCode, list<std::string> codeList);
    static bool setGP(std::string quickCode, list<std::string> codeList,RecognitionManager* recognitionManager);
    //识别股票代码
    static std::list<GPCodeArea>  recognitionGPArea(cv::Mat img);
    //识别数字
    static std::list<GPCodeArea>  recognitionNum(cv::Mat img,std::list<GPCodeArea> areaList);
    static std::list<GPCodeArea>  recognitionGPCodeNum(cv::Mat img,std::list<GPCodeArea> areaList, RecognitionManager* recognitionManager);
    //识别代码
    static std::list<string> recognitionGPCode(cv::Mat img);
    static std::list<string> recognitionGPCode(cv::Mat img, RecognitionManager* recognitionManager);
    //设置获取level2的股票数据
    static bool setListenL2GP(int p,string code);
    static bool setListenL2GP(int p,string code, RecognitionManager* recognitionManager);
    //设置获取level2的股票代码
    static std::map<int, string> getListenL2GPCodes();
    static std::map<int, string> getListenL2GPCodes(RecognitionManager* recognitionManager);
    //识别板块内容区域
    static GPCodeArea recognitionPlateContentArea(cv::Mat grayImg);
ConsoleApplication/main.cpp
@@ -1,6 +1,7 @@
#include "ScreenDataCapture.h"
#include "CaptureUtil.h"
#include "THSActionUtil.h"
#include "Win32Util.h"
void gray();
void ths();
/*
@@ -95,12 +96,31 @@
}
int main() {
    HWND win = HWND(0x000313FE);
    RECT wrect;
    GetWindowRect(win, &wrect);
    cv::Mat img=    CaptureUtil::capture(win);
    cv::Mat grayImg= ImgUtil::grayImage(img);
    GPCodeArea area= THSActionUtil::recognitionPlateContentArea(grayImg);
    //SendMessage(win, WM_MOUSEMOVE,0, MAKEWORD(area.startx+50, area.starty + 100));
    for (int i = 0;i < 5;i++)
    {
        SendMessage(win, WM_MOUSEWHEEL, 0, MAKEWORD(wrect.right -  50, wrect.top + 50));
        Sleep(1000);
    }
    /*
    ImgUtil::init();
    ScreenDataCapture* capture = new ScreenDataCapture();
    capture->init(notify,nullptr);
    capture->start();
    capture->startAll();
    */
    /*
    RecognitionUtil::init();
    CaptureUtil::init("同花顺(v9.10.50) - 热门股888");// 热门股888
app/app.aps
Binary files differ
app/appDlg.cpp
@@ -61,6 +61,8 @@
// CappDlg 对话框
RecognitionManager* CappDlg::recognitionManager;
CappDlg::CappDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_APP_DIALOG, pParent)
{
@@ -70,6 +72,7 @@
    RecognitionUtil::init();
    ImgUtil::init();
    capture = new  ScreenDataCapture();
    recognitionManager = new RecognitionManager();
}
void CappDlg::DoDataExchange(CDataExchange* pDX)
@@ -248,13 +251,13 @@
            //暂停采集
            app->capture->stop(index);
            bool result = THSActionUtil::setGP(quickCode, codeList);
            bool result = THSActionUtil::setGP(quickCode, codeList, recognitionManager);
            if (!result) {
                throw string("设置版块监控的GP失败");
            }
            THSActionUtil::setListenL2GP(index, code);
            map<int, string> results = THSActionUtil::getListenL2GPCodes();
            THSActionUtil::setListenL2GP(index, code, recognitionManager);
            map<int, string> results = THSActionUtil::getListenL2GPCodes(recognitionManager);
            //设置代码
            for (map<int, string>::iterator ele = results.begin();ele != results.end();ele++) {
                int key = (*ele).first;
@@ -454,7 +457,7 @@
    if (!capture->isRunning()) {
        try {
            map<int, string> result = THSActionUtil::getListenL2GPCodes();
            map<int, string> result = THSActionUtil::getListenL2GPCodes(recognitionManager);
            //设置代码
            for (map<int, string>::iterator ele = result.begin();ele != result.end();ele++) {
                int key= (*ele).first;
@@ -505,7 +508,7 @@
    for (list<CString>::iterator ele = paths.begin();ele != paths.end();ele++) {
        CString path = *ele;
        std:string p = cstring2String(path);
        std::list<string> resultList =    THSActionUtil::recognitionGPCode(cv::imread(p));
        std::list<string> resultList =    THSActionUtil::recognitionGPCode(cv::imread(p), recognitionManager);
        for (std::list<string>::iterator ele1 = resultList.begin();ele1 != resultList.end();ele1++) {
            bool contains = false;
            for (std::list<string>::iterator e = fResultList.begin();e != fResultList.end();e++) {
@@ -546,7 +549,7 @@
    for (list<CString>::iterator ele = paths.begin();ele != paths.end();ele++) {
        CString path = *ele;
    std:string p = cstring2String(path);
        std::list<string> resultList = THSActionUtil::recognitionGPCode(cv::imread(p));
        std::list<string> resultList = THSActionUtil::recognitionGPCode(cv::imread(p), recognitionManager);
        for (std::list<string>::iterator ele1 = resultList.begin();ele1 != resultList.end();ele1++) {
            bool contains = false;
            for (std::list<string>::iterator e = fResultList.begin();e != fResultList.end();e++) {
app/appDlg.h
@@ -6,6 +6,7 @@
#include "SocketManager.h"
#include "ScreenDataCapture.h"
#include "CaptureUtil.h"
#include "RecognitionManager.h"
@@ -17,6 +18,7 @@
private:
    static RecognitionManager* recognitionManager;
    SocketManager *socketManager;
    ScreenDataCapture* capture;
    void OnDataCallback(int index, list<TradeData> dataList);