English | ็ฎไฝไธญๆ
wgc_python/
โโโ wgc_python.py # Python API
โโโ test.py # ๆต่ฏ่ๆฌ
โโโ test_api.py # APIๅ่ฝๆต่ฏ
โโโ requirements.txt # Python ไพ่ต
โโโ wgc_python.dll # ็ผ่ฏๅ็ DLL (้ๅคๅถๅฐๆญค็ฎๅฝ)
โโโ wgc_python_dll/ # C++ DLL ๆบ็
โโโ WGCWindowCapture.h/cpp # ๆ ธๅฟๆ่ท็ฑป (ๅ็ผๅฒStaging็บน็ + Pause/Resume)
โโโ WGCExport.h/cpp # DLL ๅฏผๅบๆฅๅฃ
โโโ D3DInterop.cpp # D3D11 ไบๆไฝ
โโโ WindowEnumerator.h/cpp # ็ชๅฃๆไธพ
โโโ pch.h # ้ข็ผ่ฏๅคด
โโโ packages/ # NuGet ๅ
- Visual Studio 2022 (ๆฏๆ C++20)
- Windows 11 SDK (10.0.26100)
- NuGet ๅ
(ๅทฒๅ
ๅซๅจ
packages/็ฎๅฝ):- Microsoft.Windows.CppWinRT.2.0.240405.15
- Microsoft.Windows.ImplementationLibrary.1.0.240803.1
- Microsoft.Windows.SDK.CPP.10.0.26100.1
- ๆๅผ
wgc_python_dll/wgc_python_dll.sln - ้
็ฝฎ:
Release|x64 - ๅณ้ฎ้กน็ฎ โ ็ๆ
- ๅคๅถ DLL ๅฐ
wgc_python/็ฎๅฝ
# ๅจ wgc_python_dll ็ฎๅฝๆง่ก
msbuild wgc_python_dll.sln /p:Configuration=Release /p:Platform=x64
# ๅคๅถ DLL
copy "x64\Release\wgc_python.dll" "..\wgc_python.dll"| ้ ็ฝฎ | DLL ่ทฏๅพ |
|---|---|
| Release | wgc_python_dll\x64\Release\wgc_python.dll |
| Debug | wgc_python_dll\x64\Debug\wgc_python.dll |
# ๅฎ่ฃ
ไพ่ต
pip install numpy opencv-python
# ่ฟ่กๆต่ฏ
python test.py
python test_api.py| ๅฝๆฐ | ่ฏดๆ |
|---|---|
EnumerateWindows |
ๆไธพๆๆๅฏ่ง็ชๅฃ |
StartContinuousCapture |
ๅฏๅจ่ฟ็ปญๆ่ท |
GetLatestFrame |
่ทๅๆๆฐๅธง (BGRA) |
FreeImageData |
้ๆพๅพๅๆฐๆฎ |
StopContinuousCapture |
ๅๆญขๆ่ท |
IsCapturing |
ๆฏๅฆๆญฃๅจๆ่ท |
GetFrameCount |
ๅทฒๆ่ทๅธงๆฐ |
GetLastErrorMsg |
่ทๅ้่ฏฏไฟกๆฏ |
PauseCapture |
ๆๅๆ่ท (้ถ่ตๆบๅพ ๆบ) |
ResumeCapture |
ๆขๅคๆ่ท |
IsPaused |
ๆฏๅฆๅทฒๆๅ |
WGCๆ่ท โ GPU Surface็บน็
โ
CopyResource (GPUๅผๆญฅๅคๅถ)
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ๅ็ผๅฒStaging็บน็ โ
โ [0] ๅๅ
ฅ โโ [1] ่ฏปๅ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
Map/Unmap (CPUๆ้่ฏปๅ)
โ
Python numpyๆฐ็ป
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FrameArrived ๅ่ฐ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ if (m_isPaused) return; // ๆๅๆถ็ดๆฅ่ทณ่ฟ โ
โ โ
โ // ๆญฃๅธธๅค็๏ผGPU โ CPU ๆท่ด โ
โ CopyResource(stagingTexture, surfaceTexture); โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
Resume ๆถ Pause ๆถ
m_isPaused = false m_isPaused = true
ๅผๅงๅค็ๅธง ่ทณ่ฟๆๆๅธงๅค็
ๆ ธๅฟไผๅฟ๏ผ
- ๆๅๆถ๏ผGPU ๅๆญขๆท่ด๏ผCPU ๅ ็จๅฝ้ถ
- ๆขๅคๆถ๏ผ<1ms ๅปถ่ฟ๏ผๆ ้้ๆฐๅๅงๅ
- ไผ่ฏๅค็จ๏ผ้ฟๅ ้ข็นๅฏๅ็ 50ms+ ๅผ้
ๆฃๆฅ lambda ่กจ่พพๅผไธญ็็ฑปๅๅฃฐๆ๏ผไฝฟ็จๆพๅผ WinRT ็ฑปๅ่้ autoใ
็กฎไฟ wgc_python.dll ไธ wgc_python.py ๅจๅไธ็ฎๅฝใ
- ็กฎไฟ็ฎๆ ็ชๅฃๅฏ่ง
- ็กฎไฟ็ชๅฃๆ ้ข/็ฑปๅๆญฃ็กฎ
- ๆฃๆฅ
get_last_error()่ฟๅ็้่ฏฏไฟกๆฏ
็กฎไฟๅจๆ่ท็ถๆไธ่ฐ็จ๏ผis_capturing() ่ฟๅ True๏ผใ