자동화 및 봇 기능을 제공하는 .NET Standard 2.0 기반의 종합 라이브러리입니다. 마우스 제어, 화면 캡처, 이미지 매칭, 윈도우 관리, REST API 클라이언트, 이메일/SMS 발송, FTP/SFTP, 암호화, CSV 처리, 압축 등 다양한 기능을 포함합니다.
$ dotnet add package jsm.standard자동화 및 봇 기능을 제공하는 .NET Standard 2.0 기반의 종합 라이브러리
마우스 제어, 화면 캡처, 이미지 매칭, 윈도우 관리, REST API 클라이언트, 이메일/SMS 발송, FTP/SFTP, 암호화, CSV 처리, 압축 등 다양한 자동화 기능을 하나의 패키지로 제공합니다.
dotnet add package jsm.standard
Install-Package jsm.standard
<ItemGroup>
<PackageReference Include="jsm.standard" Version="1.0.3" />
</ItemGroup>
using jsm.standard.Hardware;
// 마우스를 특정 좌표로 이동
MouseHelper.MoveTo(100, 200);
// 부드러운 애니메이션 이동 (500ms 동안)
MouseHelper.MoveSmooth(500, 500, 500);
// 클릭 동작
MouseHelper.LeftClick();
MouseHelper.RightClick();
MouseHelper.DoubleClick();
using jsm.standard.Hardware;
using System.Drawing;
// 전체 화면 캡처
Bitmap screenshot = ScreenHelper.CaptureScreen();
// 특정 영역 캡처
Rectangle region = new Rectangle(0, 0, 800, 600);
Bitmap regionScreenshot = ScreenHelper.CaptureScreen(region);
// 특정 윈도우 캡처
IntPtr windowHandle = WindowHelper.FindWindowByTitle("Notepad");
Bitmap windowScreenshot = ScreenHelper.CaptureWindow(windowHandle);
// 파일로 저장
screenshot.Save("screenshot.png");using jsm.standard.Http;
// 간단한 GET 요청
string result = REST_API.Get("https://api.example.com/users");
// JSResult로 받기 (타입 안전)
JSResult data = REST_API.Get_JSResult("https://api.example.com/user/1");
string name = data.GetStringValue("name");
int age = data.GetIntValue("age") ?? 0;
// POST 요청
string json = "{\"name\":\"test\",\"email\":\"test@example.com\"}";
string response = REST_API.Post("https://api.example.com/users", json);
// 비동기 방식
string result = await REST_API.GetAsync("https://api.example.com/users");using jsm.standard.ImageProcessing;
// 이미지 검색
var matcher = new ImageMatcher();
var result = matcher.FindImage("button.png", threshold: 0.9);
if (result.Found)
{
Console.WriteLine($"이미지 발견: ({result.X}, {result.Y})");
MouseHelper.MoveTo(result.X, result.Y);
MouseHelper.LeftClick();
}
// GPU 가속 이미지 매칭 (CUDA/OpenCL)
var gpuMatcher = new GpuImageMatcher();
var gpuResult = await gpuMatcher.FindImageAsync("button.png", threshold: 0.9);using jsm.standard.Email;
// 간편한 이메일 발송 (메일 타입 자동 감지)
var result = await Email.SendMailEasyAsync(
"sender@gmail.com",
"password",
"recipient@example.com",
"제목",
"본문"
);
// 고급 옵션
var options = new EmailOptions
{
From = "sender@example.com",
To = new[] { "recipient1@example.com", "recipient2@example.com" },
Subject = "제목",
Body = "<h1>HTML 본문</h1>",
IsHtml = true,
Attachments = new[] { "file1.pdf", "file2.jpg" }
};
var result = await Email.SendMailAsync(options);using jsm.standard.SMS;
var options = new SmsOptions
{
ApiKey = "your_api_key",
UserId = "your_user_id",
Sender = "01012345678",
Receivers = new[] { "01011111111", "01022222222" },
Message = "테스트 메시지"
};
var result = await SMS.SendSmsAsync(options);
if (result.IsSuccess)
{
Console.WriteLine($"발송 성공: {result.MessageId}");
}using jsm.standard.FTP;
// FTP 업로드
await FTP.UploadFileAsync(
"ftp.example.com",
"username",
"password",
"/remote/path/file.txt",
"local/path/file.txt"
);
// SFTP 업로드
await SFTP.UploadFileAsync(
"sftp.example.com",
22,
"username",
"password",
"/remote/path/file.txt",
"local/path/file.txt"
);using jsm.standard.CSV;
// CSV 읽기
var data = CSV.Read_CSV<MyClass>("data.csv");
// CSV 쓰기
var items = new List<MyClass> { /* ... */ };
CSV.Write_CSV("output.csv", items);using jsm.standard.Compress;
// 폴더 압축
Zip.Compression("source_folder", "output.zip");
// ZIP 파일 해제
Zip.Decompression("archive.zip", "destination_folder", overwrite: true);using jsm.standard.Security;
using System.Text;
// AES-128 암호화
byte[] key = Encoding.UTF8.GetBytes("1234567890123456");
byte[] plainBytes = Encoding.UTF8.GetBytes("암호화할 텍스트");
byte[] encrypted = AES128.Encrypt(plainBytes, key);
byte[] decrypted = AES128.Decrypt(encrypted, key);
// MD5 해시
string hash = MD5.GetHash("text");
byte[] hashBytes = MD5.GetHashBytes(plainBytes);JSON 기반 규칙 파일(rule.json)을 생성하여 복잡한 자동화 작업을 선언적으로 정의할 수 있습니다:
{
"version": "1.0.0",
"name": "기본 예제",
"variables": {
"targetX": 500,
"targetY": 300
},
"actions": [
{
"type": "move",
"x": "{{targetX}}",
"y": "{{targetY}}"
},
{
"type": "click",
"button": "left"
},
{
"type": "findImage",
"imagePath": "button.png",
"threshold": 0.9,
"moveToFound": true,
"clickOnFound": true
}
]
}코드에서 실행:
using jsm.standard.Rules;
var executor = new RuleExecutor();
await executor.ExecuteRuleFileAsync("rule.json");jsm.standard.Hardware하드웨어 제어 기능
MouseHelper - 마우스 이동, 클릭, 드래그ScreenHelper - 화면 캡처 (전체/영역/윈도우)WindowHelper - 윈도우 찾기, 관리MonitorHelper - 다중 모니터 정보 및 관리jsm.standard.HttpHTTP/REST API 클라이언트
REST_API - 간편한 REST API 호출 (정적 메서드)RestApiClient - 타입 안전한 REST API 클라이언트JSResult / JSResults - 데이터베이스 결과 형식 지원jsm.standard.ImageProcessing이미지 처리 및 매칭
ImageMatcher - CPU 기반 이미지 매칭 엔진GpuImageMatcher - GPU 가속 이미지 매칭 (CUDA/OpenCL)ImageProcessor - 이미지 처리 유틸리티jsm.standard.Actions규칙 시스템용 액션 클래스
Actions.Mouse.* - 마우스 관련 액션Actions.Capture.* - 캡처 관련 액션Actions.Window.* - 윈도우 관련 액션Actions.Monitor.* - 모니터 관련 액션Actions.Find.* - 찾기 관련 액션Actions.Control.* - 제어 관련 액션 (조건, 반복, 시퀀스)jsm.standard.Email이메일 발송
Email - 이메일 발송 기능 (SMTP)jsm.standard.SMSSMS 발송
SMS - SMS 발송 기능 (Aligo API)jsm.standard.FTP파일 전송
FTP - FTP 클라이언트SFTP - SFTP 클라이언트jsm.standard.Security보안 및 암호화
AES128 - AES-128 암호화/복호화MD5 - MD5 해시CRC32 - CRC32 체크섬SEED - SEED 암호화 알고리즘Userpermit - 하드웨어 기반 사용자 허가증jsm.standard.CSVCSV 파일 처리
CSV - CSV 파일 읽기/쓰기jsm.standard.Compress압축/해제
Zip - ZIP 파일 압축/해제 (.NET Standard 2.0 호환)jsm.standard.Rules규칙 실행 시스템
RuleExecutor - 규칙 파일 실행기ActionDefinition - 액션 정의MailKit (4.8.0) - 이메일 발송MimeKit (4.8.0) - 이메일 MIME 처리Microsoft.Win32.Registry (5.0.0) - 레지스트리 접근QRCoder (1.6.0) - QR 코드 생성SSH.NET (2023.0.0) - SFTP 클라이언트System.Drawing.Common (8.0.0) - 이미지 처리System.Text.Json (9.0.10) - JSON 처리참고: ZIP 압축/해제 기능은 .NET Standard 2.0의
System.IO.Compression을 사용하므로 추가 의존성이 없습니다.
대량의 이미지 검색이 필요한 경우 GPU 가속을 사용하세요:
var gpuMatcher = new GpuImageMatcher();
// CUDA 또는 OpenCL을 자동으로 감지하여 사용
var result = await gpuMatcher.FindImageAsync("template.png", threshold: 0.9);I/O 작업은 비동기 메서드를 사용하여 성능을 향상시키세요:
// 동기 방식 (블로킹)
string result = REST_API.Get("https://api.example.com/data");
// 비동기 방식 (논블로킹, 권장)
string result = await REST_API.GetAsync("https://api.example.com/data");MIT License
버그 리포트, 기능 제안, Pull Request를 환영합니다!
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)ICSharpCode.SharpZipLib 의존성 제거 (System.IO.Compression 사용)jsm.standard - 자동화를 위한 강력한 도구 모음
Made with ❤️ by Berrysoft