Windowsの強力なスクリーンショットとアナログ入力ツールのソースコード


WinRobot@github
Windowsのデスクトップスクリーンショット機能を実現するには、ネット上で多くのソースコードを見つけることができ、実現するのも難しくありません.しかし、スクリーンショット機能の可用性が強く、様々な状況に対応することが望ましいが、容易ではなく、多くの穴が埋められている.
ここで紹介するオープンソースコードWinRobot@githubは、主に以下の利点があります.
  • これらのコードは、表示のために実装された単純なdemoではなく、良好な設計とテストを有する生産環境に使用可能なコード
  • である.
  • Winlogon、UAC、スクリーンセーバー、DirectShowOverlayの画像
  • を切り取ることができる.
  • 高性能で、プロセス間でメモリを共有する方式で、スクリーンショット時のデータのcopyをできるだけ避けることができ、従来の構成PCでは25 fps
  • に達することができる.
  • はjavaをサポートする、javaと互換性がある.awt.Robotインタフェース
  • はWindows 2000以上のプラットフォームをサポートし、32、64ビットシステム
  • をサポートする.

    C++
    #ifdef _WIN64
    #import "WinRobotCorex64.dll" raw_interfaces_only, raw_native_types,auto_search,no_namespace
    #import "WinRobotHostx64.exe" auto_search,no_namespace
    #else
    #import "WinRobotCorex86.dll" raw_interfaces_only, raw_native_types,auto_search,no_namespace
    #import "WinRobotHostx86.exe" auto_search,no_namespace
    #endif
    
    CComPtr pService;
    hr = pService.CoCreateInstance(__uuidof(ServiceHost) );
    
    //get active console session
    CComPtr pUnk;
    hr = pService->GetActiveConsoleSession(&pUnk);
    CComQIPtr pSession = pUnk;
    
    // capture screen
    pUnk = 0;
    hr = pSession->CreateScreenCapture(0,0,1024,768,&pUnk);
    
    // get screen image data(with file mapping)
    CComQIPtr pBuffer = pUnk;
    CComBSTR name;
    ULONG size = 0;
    pBuffer->get_FileMappingName(&name);
    pBuffer->get_Size(&size);
    CFileMapping fm;
    fm.Open(name,size,false);
    // do something with fm...
    

    JAVA
    import com.caoym.WinRobot;
    //...
    WinRobot robot;
    BufferedImage screen = robot.createScreenCapture(new Rectangle(0, 0, 1024, 768));