Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Screen_capture_lite | 519 | a month ago | 15 | mit | C | |||||
cross platform screen/window capturing library | ||||||||||
Quicklib | 478 | 2 months ago | 29 | apache-2.0 | Pascal | |||||
Quick development library (AutoMapper, LinQ, IOC Dependency Injection, MemoryCache, Scheduled tasks, Json and Yml Config and Options pattern, Serializers, etc) with crossplatform support for Delphi/Firemonkey (Windows,Linux,OSX/IOS/Android) and freepascal (Windows/Linux). | ||||||||||
Adi | 221 | a year ago | 1 | October 14, 2019 | 3 | apache-2.0 | C | |||
ADI(Android Debug Intensive) 是通过 JVMTI 实现的 Android 应用开发调试的增强工具集,目前主要提供性能相关的监控能力。 | ||||||||||
Lagmonitor | 186 | 2 months ago | 27 | mit | Java | |||||
Monitor performance of your Minecraft server. Similar to VisualVM and Java Mission Control. | ||||||||||
Chronicle Threads | 136 | 17 | 4 | 7 days ago | 203 | August 24, 2022 | 7 | other | Java | |
Source Chat Relay | 78 | 18 days ago | 41 | gpl-3.0 | Rust | |||||
Communicate between Discord & In-Game, monitor server without being in-game, control the flow of messages and user base engagement! | ||||||||||
Threaddebugger | 75 | 1 | 1 | 3 years ago | 12 | December 15, 2019 | 3 | apache-2.0 | Java | |
Threads monitor and the thread pool factory. | ||||||||||
Jamonapi | 56 | a year ago | 13 | Java | ||||||
Another repo for jamonapi.com which is primarily hosted on sourceforge | ||||||||||
Anreye | 49 | 5 | 5 years ago | 5 | October 22, 2018 | 1 | mit | Objective-C | ||
Class for monitor excessive blocking on the main thread and return stacktrace of all threads | ||||||||||
Wdm | 41 | 9,537 | 27 | 7 years ago | 5 | July 09, 2015 | 15 | mit | C | |
Windows Directory Monitor (WDM) is a threaded directories monitor for Windows. |
Above Logo created by https://github.com/mansya
Master is where development happens and should NOT be considered stable. Use tags for stable releases.
Window/Linux/Mac
Cross-platform screen and window capturing library
linux: sudo apt-get install libxtst-dev libxinerama-dev libx11-dev libxfixes-dev
The image format is raw BGRA 32 bits per pixel. Alpha is unused for onNewFrame and onFrameChanged except for onMouseChanged where it IS USED!
The data exists like this if you were to march through with a for loop [A,R,G,B], [A,R,G,B], [A,R,G,B]. For a read on why this is check out the post here post here
https://github.com/smasherprog/screen_capture_lite/blob/master/Example_CPP/Screen_Capture_Example.cpp
//Setup Screen Capture for all monitors
auto framgrabber = SL::Screen_Capture::CreateCaptureConfiguration([]() {
//add your own custom filtering here if you want to capture only some monitors
return SL::Screen_Capture::SCL_GetMonitors();
})->onFrameChanged([&](const SL::Screen_Capture::Image& img, const SL::Screen_Capture::Monitor& monitor) {
})->onNewFrame([&](const SL::Screen_Capture::Image& img, const SL::Screen_Capture::Monitor& monitor) {
})->onMouseChanged([&](const SL::Screen_Capture::Image* img, const SL::Screen_Capture::MousePoint &mousepoint) {
})->start_capturing();
framgrabber->SCL_SetFrameChangeInterval(std::chrono::milliseconds(100));//100 ms
framgrabber->SCL_SetMouseChangeInterval(std::chrono::milliseconds(100));//100 ms
//Setup Screen Capture for windows that have the title "cmake" in it
auto windowframgrabber = SL::Screen_Capture::CreateCaptureConfiguration([]() {
auto windows = SL::Screen_Capture::SCL_GetWindows();
std::string srchterm = "cmake";
// convert to lower case for easier comparisons
std::transform(srchterm.begin(), srchterm.end(), srchterm.begin(), [](char c) { return std::tolower(c, std::locale());});
decltype(windows) filtereditems;
for(auto& a : windows) {
std::string name = a.Name;
std::transform(name.begin(), name.end(), name.begin(), [](char c) {return std::tolower(c, std::locale()); });
if(name.find(srchterm) != std::string::npos) {
filtereditems.push_back(a);
}
}
return filtereditems;
})->onFrameChanged([&](const SL::Screen_Capture::Image& img, const SL::Screen_Capture::Window& window) {
})->onNewFrame([&](const SL::Screen_Capture::Image& img, const SL::Screen_Capture::Window& window) {
})->onMouseChanged([&](const SL::Screen_Capture::Image* img, const SL::Screen_Capture::MousePoint &mousepoint) {
})->start_capturing();
windowframgrabber->SCL_SetFrameChangeInterval(std::chrono::milliseconds(100));//100 ms
windowframgrabber->SCL_SetMouseChangeInterval(std::chrono::milliseconds(100));//100 ms
c#
https://github.com/smasherprog/screen_capture_lite/blob/master/Example_CSharp/Program.cs
//Setup Screen Capture for all monitors
var framgrabber = SL.Screen_Capture.CaptureConfiguration.CreateCaptureConfiguration(() =>
{
var mons = SL.Screen_Capture.SCL_GetMonitors();
Console.WriteLine("Library is requesting the list of monitors to capture!");
for (int i = 0; i < mons.Length; ++i)
{
WriteLine( mons[i]);
}
return mons;
}).onNewFrame(( SL.Screen_Capture.Image img, SL.Screen_Capture.Monitor monitor) =>
{
}).onFrameChanged(( SL.Screen_Capture.Image img, SL.Screen_Capture.Monitor monitor) =>
{
}).onMouseChanged((SL.Screen_Capture.Image img, SL.Screen_Capture.MousePoint mousePoint) =>
{
}).start_capturing();
framgrabber.SCL_SetFrameChangeInterval(100);
framgrabber.SCL_SetMouseChangeInterval(100);
//Setup Screen Capture for windows that have the title "google" in it
var framgrabber = SL.Screen_Capture.CaptureConfiguration.CreateCaptureConfiguration(() =>
{
var windows = SL.Screen_Capture.SCL_GetWindows();
Console.WriteLine("Library is requesting the list of windows to capture!");
for (int i = 0; i < windows.Length; ++i)
{
WriteLine(windows[i]);
}
return windows.Where(a => a.Name.ToLower().Contains("google")).ToArray();
}).onNewFrame(( SL.Screen_Capture.Image img, SL.Screen_Capture.Window monitor) =>
{
}).onFrameChanged(( SL.Screen_Capture.Image img, SL.Screen_Capture.Window monitor) =>
{
}).onMouseChanged(( SL.Screen_Capture.Image img, SL.Screen_Capture.MousePoint mousePoint) =>
{
}).start_capturing();
framgrabber.SCL_SetFrameChangeInterval(100);
framgrabber.SCL_SetMouseChangeInterval(100);
Only define what are are interested in. Do not define a callback for onMouseChanged if you dont want that information. If you do, the library will assume that you want mouse information and monitor that --so DONT!
Again, DONT DEFINE CALLBACKS FOR EVENTS YOU DONT CARE ABOUT. If you do, the library will do extra work assuming you want the information.
The library owns all image data so if you want to use it for your own purpose after the callback has completed you MUST copy the data out!
Each monitor or window will run in its own thread so there is no blocking or internal synchronization. If you are capturing three monitors, a thread is capturing each monitor.
Calls to ICaptureConfiguration cannot be changed after start_capturing is called. You must destroy it and recreate it!
Calls to IScreenCaptureManager can be changed at any time from any thread as all calls are thread safe!