jsm.standard 1.0.3

dotnet add package jsm.standard --version 1.0.3
                    
NuGet\Install-Package jsm.standard -Version 1.0.3
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="jsm.standard" Version="1.0.3" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="jsm.standard" Version="1.0.3" />
                    
Directory.Packages.props
<PackageReference Include="jsm.standard" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add jsm.standard --version 1.0.3
                    
#r "nuget: jsm.standard, 1.0.3"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package jsm.standard@1.0.3
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=jsm.standard&version=1.0.3
                    
Install as a Cake Addin
#tool nuget:?package=jsm.standard&version=1.0.3
                    
Install as a Cake Tool

jsm.standard

NuGet .NET Standard License

자동화 및 봇 기능을 제공하는 .NET Standard 2.0 기반의 종합 라이브러리

마우스 제어, 화면 캡처, 이미지 매칭, 윈도우 관리, REST API 클라이언트, 이메일/SMS 발송, FTP/SFTP, 암호화, CSV 처리, 압축 등 다양한 자동화 기능을 하나의 패키지로 제공합니다.

✨ 주요 특징

  • 🎯 완전한 .NET Standard 2.0 호환 - 모든 .NET 플랫폼에서 사용 가능
  • 🚀 고성능 GPU 가속 - CUDA 및 OpenCL을 활용한 이미지 매칭
  • 🔒 보안 강화 - AES, SEED, MD5 등 다양한 암호화 알고리즘 지원
  • 📦 의존성 최소화 - .NET Standard 기본 라이브러리 활용
  • 🛠️ 간편한 API - 직관적이고 사용하기 쉬운 메서드 제공
  • 📝 JSON 기반 규칙 시스템 - 선언적 방식으로 자동화 작업 정의

📦 설치

.NET CLI

dotnet add package jsm.standard

Package Manager Console

Install-Package jsm.standard

PackageReference

<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");

REST API 호출

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);

SMS 발송 (Aligo API)

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}");
}

파일 전송 (FTP/SFTP)

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"
);

CSV 처리

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.Http

HTTP/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.SMS

SMS 발송

  • 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.CSV

CSV 파일 처리

  • CSV - CSV 파일 읽기/쓰기

jsm.standard.Compress

압축/해제

  • Zip - ZIP 파일 압축/해제 (.NET Standard 2.0 호환)

jsm.standard.Rules

규칙 실행 시스템

  • RuleExecutor - 규칙 파일 실행기
  • ActionDefinition - 액션 정의

🔧 요구사항

  • .NET Standard 2.0 이상
  • Windows 운영체제 (Windows API 사용 기능의 경우)
    • 마우스 제어, 화면 캡처, 윈도우 관리 기능은 Windows 전용
    • HTTP, 이메일, SMS, FTP/SFTP, 암호화, CSV, 압축 기능은 크로스 플랫폼

📦 의존성

  • 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을 사용하므로 추가 의존성이 없습니다.

🎯 사용 사례

  • 자동화 봇: 반복적인 작업 자동화
  • 테스트 자동화: UI 테스트 자동화
  • 데이터 수집: 웹 스크래핑 및 데이터 수집
  • 모니터링: 화면 모니터링 및 알림
  • 파일 관리: FTP/SFTP를 통한 파일 관리
  • 통신: 이메일/SMS 발송 및 REST API 호출
  • 보안: 데이터 암호화 및 보안 처리

🚀 성능 최적화

GPU 가속 이미지 매칭

대량의 이미지 검색이 필요한 경우 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를 환영합니다!

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📞 지원

📄 변경 이력

1.0.3

  • .NET Standard 2.0 호환성 개선
  • ICSharpCode.SharpZipLib 의존성 제거 (System.IO.Compression 사용)
  • README 개선

1.0.2

  • 초기 안정 버전

jsm.standard - 자동화를 위한 강력한 도구 모음

Made with ❤️ by Berrysoft

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on jsm.standard:

Package Downloads
jsm.extension

jsm.standard의 확장 라이브러리입니다. SignalR 서버/클라이언트, 통화 기능(VoiceCall) 등 .NET 8.0 기반의 고급 기능을 제공합니다.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.3 295 11/13/2025