#c #windows #screenshot
#c #Windows #скриншот
Вопрос:
В настоящее время я создаю способ делать скриншоты Windows. Прямо сейчас я указываю PID приложения, для которого я хочу сделать снимок экрана. Я получаю HWND, которые связаны с этим PID, используя эту функцию
void GetAllWindowsFromProcessID(DWORD dwProcessID, std::vector <HWND> amp;vhWnds) {
// find all hWnds (vhWnds) associated with a process id (dwProcessID)
HWND hCurWnd = nullptr;
do {
hCurWnd = FindWindowEx(nullptr, hCurWnd, nullptr, nullptr);
DWORD checkProcessID = 0;
GetWindowThreadProcessId(hCurWnd, amp;checkProcessID);
if (checkProcessID == dwProcessID) {
vhWnds.push_back(hCurWnd);
}
} while (hCurWnd != nullptr);
}
Как только у меня есть вектор HWND, связанный с этим PID, я перебираю свой код скриншота и сохраняю скриншот каждого из них.
Когда я запускаю этот код с Notepad (PID 712) Я получаю 7 HWND, связанных с PID. Я проверил все 7 из них, и все они печатают черный экран, кроме последнего, который печатает Notepad . Если я попробую это в блокноте или калькуляторе, я просто получу черный экран.
Полный тестовый код, который я использую..
snip
Комментарии:
1. Вы уверены, что ваш код скриншота в порядке? Можете ли вы запустить его с помощью HWND калькулятора, который вы получаете от Spy ? Изображение тоже черное?
2. Нашел его в программе Spy . Попытаюсь жестко закодировать этот дескриптор.
3. Есть команда «Найти окно», Ctrl F, со значком «перекрестие» в нем — просто перетащите его в нужное вам окно.
4. Хорошо, я только что попробовал это с помощью дескриптора калькулятора. Я знаю, что это изменило калькулятор, потому что я меняю непрозрачность окна. И я вижу, что он становится прозрачным, поэтому я знаю, что у меня правильный дескриптор. Но он не захватил SS. Затем я снова попытался использовать дескриптор Notepad , используя тот же метод, и это сработало.
5. Это как бы указывает на проблему с вашим кодом захвата экрана; похоже, он не может захватывать прозрачные окна?