• 1stOpt批量处理方程


    1stOpt是一款世界领先的非线性曲线拟合,综合优化分析计算软件平台

    但是软件读入文件和保存结果实在是太复杂了,很难做到批量处理数据

    基于此,设计了一个能批量处理方程的小程序,以input.txt文本文件内容为输入,以output.txt文本内容为输出

    首先用Spy++获取1stOpt的窗口信息,获得代码输入框的handle和结果显示的handle,用sendmessage的方法设置文本获取文本

    HWND    hWndMain,hWndPage,hWndTRzTabSheetEdit,hWndTRzTabSheetResult,hWndTEditorFormEdit,hWndTSynEditEdit,hWndTSynEditResult;
    CFile fileInput;
    if (fileInput.Open(_T("input.txt"),CFile::modeRead) ==NULL) return 1;
    char *buf=new char[fileInput.GetLength()+1];
    memset(buf,0,fileInput.GetLength()+1);
    fileInput.Read(buf,fileInput.GetLength());
    fileInput.Close();
    
    hWndMain = ::FindWindow(NULL,_T("1stOpt - [Untitled1]"));
    if(!hWndMain)  
    {   
    	return 1;  
    }  
    hWndPage = ::FindWindowEx(hWndMain,NULL,_T("TRzPageControl"),NULL);
    
    hWndTRzTabSheetEdit = ::FindWindowEx(hWndPage,NULL,_T("TRzTabSheet"),_T("代码本 1 - [Untitled1]"));
    
    hWndTEditorFormEdit = ::FindWindowEx(hWndTRzTabSheetEdit,NULL,_T("TEditorForm"),NULL);
    hWndTSynEditEdit = ::FindWindowEx(hWndTEditorFormEdit,NULL,_T("TSynEdit"),NULL);
    
    
    int iRequiredSize = ::MultiByteToWideChar(CP_ACP, NULL, buf, -1, NULL, 0);
    WCHAR* pwchString = new WCHAR[iRequiredSize];
    ::MultiByteToWideChar(CP_ACP, NULL, buf , -1, pwchString, iRequiredSize);
    
    //CopyTheFileToEditor
    ::SendMessage(hWndTSynEditEdit,WM_SETTEXT,0,(LPARAM)pwchString);
    delete [] pwchString;
    delete [] buf;
    
    //F9
    ::Sleep(10);
    ::SendMessage(hWndMain,WM_KEYDOWN,VK_F9,0);
    ::SendMessage(hWndMain,WM_KEYUP,VK_F9,0);
    
    WCHAR bufResult[10000];
    //Sleep for a while
    ::Sleep(100);
    hWndTRzTabSheetResult = ::FindWindowEx(hWndPage,NULL,_T("TRzTabSheet"),_T(" 结  果 "));
    hWndTSynEditResult = ::FindWindowEx(hWndTRzTabSheetResult,NULL,_T("TSynEdit"),NULL);
    while (1)			
    {	
    	//ReadResult
    	::SendMessage(hWndTSynEditResult,WM_GETTEXT,10000,(LPARAM)bufResult);
    	if (wcsstr(bufResult,_T("======")) != NULL ) break;
    	//Sleep for a while
    	::Sleep(100);
    }
    
    CFile fileOutput;
    fileOutput.Open(_T("output.txt"), CFile::modeCreate | CFile::modeWrite);
    setlocale(LC_ALL, "chs");
    UINT resultLen = wcslen(bufResult);
    char * pChar=new char[resultLen*2];
    memset(pChar,0,resultLen*2);
    wcstombs(pChar,bufResult,resultLen*2);
    fileOutput.Write(pChar,resultLen*2);  
    fileOutput.Close();
    delete [] pChar;
  • 相关阅读:
    对我比较有用的网站
    ubuntu各种安装
    arabaraba
    镜像源相关
    硬盘相关
    python模块
    递归和循环两种方式实现未知维度集合的笛卡尔积
    单例模式的两种实现方式
    经典String str = new String("abc")内存分配问题
    js方法的命名不能使用表单元素的名称或ID
  • 原文地址:https://www.cnblogs.com/lartely/p/2394740.html
Copyright © 2020-2023  润新知