211 lines
7.4 KiB
C#
211 lines
7.4 KiB
C#
using DevExpress.Utils.Extensions;
|
|
using DevExpress.XtraPrinting.Native;
|
|
using DevExpress.XtraWaitForm;
|
|
using ScanToTextProgram.OCR;
|
|
using System;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Linq;
|
|
using System.Reflection.Emit;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Runtime.InteropServices;
|
|
using System.Windows.Forms;
|
|
|
|
namespace ScanToTextProgram
|
|
{
|
|
public partial class MainForm : Form
|
|
{
|
|
DataTable dataTable = null;
|
|
|
|
Rectangle rectangle = new Rectangle();
|
|
|
|
OcrProcessor ocrProcessor = new OcrProcessor();
|
|
|
|
public MainForm()
|
|
{
|
|
InitializeComponent();
|
|
|
|
dataTable = new DataTable();
|
|
dataTable.Columns.Add("시가");
|
|
dataTable.Columns.Add("고가");
|
|
dataTable.Columns.Add("저가");
|
|
dataTable.Columns.Add("종가");
|
|
dataTable.Columns.Add("구름(상)");
|
|
dataTable.Columns.Add("구름(하)");
|
|
dataTable.Columns.Add("40_1(상)");
|
|
dataTable.Columns.Add("40_1(하)");
|
|
dataTable.Columns.Add("40_2(상)");
|
|
dataTable.Columns.Add("40_2(하)");
|
|
|
|
treeList1.DataSource = dataTable;
|
|
}
|
|
|
|
// 스캔 영역 설정
|
|
private void simpleButton_SetScanPoin_Click(object sender, EventArgs e)
|
|
{
|
|
var screenCapture = new ScreenCapture();
|
|
rectangle = screenCapture.SelectArea();
|
|
}
|
|
|
|
// 스캔 버튼 클릭
|
|
private void simpleButton_SetScanPoin_Click_1(object sender, EventArgs e)
|
|
{
|
|
scanToOcr();
|
|
}
|
|
|
|
// 설정된 영역에 따라 스캔하고 OCR 변경하기
|
|
public void scanToOcr()
|
|
{
|
|
var screenCapture = new ScreenCapture();
|
|
var selectedArea = rectangle;
|
|
var screenshot = screenCapture.CaptureScreen(selectedArea);
|
|
|
|
string extractedText = ocrProcessor.ExtractTextFromImage(screenshot);
|
|
|
|
var splitLine = extractedText.Split('\n').ToList();
|
|
|
|
var 시가 = 0.0;
|
|
var 고가 = 0.0;
|
|
var 저가 = 0.0;
|
|
var 종가 = 0.0;
|
|
var 구름_상 = 0.0;
|
|
var 구름_하 = 0.0;
|
|
var _40_1_상 = 0.0;
|
|
var _40_1_하 = 0.0;
|
|
var _40_2_상 = 0.0;
|
|
var _40_2_하 = 0.0;
|
|
|
|
for (var i = 0; i < splitLine.Count(); i++)
|
|
{
|
|
var str1 = splitLine[i].Trim();
|
|
|
|
if (string.IsNullOrEmpty(str1)) splitLine.Remove(splitLine[i]);
|
|
}
|
|
|
|
for (var i = 0; i < splitLine.Count(); i++)
|
|
{
|
|
if (string.IsNullOrEmpty(splitLine[i])) continue;
|
|
|
|
var line = splitLine[i];
|
|
|
|
// 시가, 고가, 저가, 종가
|
|
if (i == 0)
|
|
{
|
|
var 시고저종s = line.Split(' ');
|
|
|
|
var cnt = 시고저종s.Count() - 1;
|
|
|
|
var str_시가 = 시고저종s[cnt - 5].Remove(0, 1);
|
|
var str_고가 = 시고저종s[cnt - 4];
|
|
var str_저가 = 시고저종s[cnt - 3].Remove(0, 1);
|
|
var str_종가 = 시고저종s[cnt - 2];
|
|
|
|
if (!str_시가.Contains('.')) str_시가 = str_시가.Insert(str_시가.Length - 1, ".");
|
|
if (!str_고가.Contains('.')) str_고가 = str_고가.Insert(str_고가.Length - 1, ".");
|
|
if (!str_저가.Contains('.')) str_저가 = str_저가.Insert(str_저가.Length - 1, ".");
|
|
if (!str_종가.Contains('.')) str_종가 = str_종가.Insert(str_종가.Length - 1, ".");
|
|
|
|
시가 = Convert.ToDouble(str_시가);
|
|
고가 = Convert.ToDouble(str_고가);
|
|
저가 = Convert.ToDouble(str_저가);
|
|
종가 = Convert.ToDouble(str_종가);
|
|
}
|
|
// 구름떼
|
|
else if (i == 1)
|
|
{
|
|
var 구름떼s = line.Split(' ');
|
|
|
|
var str_data1 = 구름떼s[구름떼s.Count() - 1];
|
|
var str_data2 = 구름떼s[구름떼s.Count() - 2];
|
|
|
|
if (!str_data1.Contains('.')) str_data1 = str_data1.Insert(str_data1.Length - 1, ".");
|
|
if (!str_data2.Contains('.')) str_data2 = str_data2.Insert(str_data2.Length - 1, ".");
|
|
|
|
var data1 = Convert.ToDouble(str_data1);
|
|
var data2 = Convert.ToDouble(str_data2);
|
|
|
|
if (data1 > data2)
|
|
{
|
|
구름_상 = data1;
|
|
구름_하 = data2;
|
|
}
|
|
else
|
|
{
|
|
구름_상 = data2;
|
|
구름_하 = data1;
|
|
}
|
|
}
|
|
else if (i == 2)
|
|
{
|
|
var 볼린저_40_2s = line.Split(' ');
|
|
|
|
var str_40_2_상 = 볼린저_40_2s[볼린저_40_2s.Count() - 2];
|
|
var str_40_2_하 = 볼린저_40_2s[볼린저_40_2s.Count() - 1];
|
|
|
|
if (!str_40_2_상.Contains('.')) str_40_2_상 =str_40_2_상.Insert(str_40_2_상.Length - 1, ".");
|
|
if (!str_40_2_하.Contains('.')) str_40_2_하 = str_40_2_하.Insert(str_40_2_하.Length - 1, ".");
|
|
|
|
_40_2_상 = Convert.ToDouble(str_40_2_상);
|
|
_40_2_하 = Convert.ToDouble(str_40_2_하);
|
|
}
|
|
else if (i == 3)
|
|
{
|
|
var 볼린저_40_1s = line.Split(' ');
|
|
|
|
var str_40_1_상 = 볼린저_40_1s[볼린저_40_1s.Count() - 2];
|
|
var str_40_1_하 = 볼린저_40_1s[볼린저_40_1s.Count() - 1];
|
|
|
|
if (!str_40_1_상.Contains('.')) str_40_1_상 = str_40_1_상.Insert(str_40_1_상.Length - 1, ".");
|
|
if (!str_40_1_하.Contains('.')) str_40_1_하 = str_40_1_하.Insert(str_40_1_하.Length - 1, ".");
|
|
|
|
_40_1_상 = Convert.ToDouble(str_40_1_상);
|
|
_40_1_하 = Convert.ToDouble(str_40_1_하);
|
|
}
|
|
else if (i == 4)
|
|
{
|
|
|
|
}
|
|
else if (i == 5)
|
|
{
|
|
|
|
}
|
|
else if (i == 6)
|
|
{
|
|
}
|
|
}
|
|
|
|
|
|
dataTable.Rows.Clear();
|
|
var row = dataTable.Rows.Add();
|
|
row["시가"] = Convert.ToDouble(시가);
|
|
row["고가"] = Convert.ToDouble(고가);
|
|
row["저가"] = Convert.ToDouble(저가);
|
|
row["종가"] = Convert.ToDouble(종가);
|
|
row["구름(상)"] = Convert.ToDouble(구름_상);
|
|
row["구름(하)"] = Convert.ToDouble(구름_하);
|
|
row["40_1(상)"] = Convert.ToDouble(_40_1_상);
|
|
row["40_1(하)"] = Convert.ToDouble(_40_1_하);
|
|
row["40_2(상)"] = Convert.ToDouble(_40_2_상);
|
|
row["40_2(하)"] = Convert.ToDouble(_40_2_하);
|
|
|
|
treeList1.DataSource = dataTable;
|
|
treeList1.RefreshDataSource();
|
|
}
|
|
|
|
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
|
|
{
|
|
HookHandler.Unhook();
|
|
}
|
|
|
|
private void MainForm_Load(object sender, EventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void simpleButton_KeyHookStart_Click(object sender, EventArgs e)
|
|
{
|
|
HookHandler.SetHook(this);
|
|
}
|
|
}
|
|
}
|