|
Момент отлова
|
|||
---|---|---|---|
#18+
Здравствуйте. Подскажите пожалуйста. Возможно ли отловить момент изменения изображения на экране? И возможно ли узнать в каком месте экрана(координаты) произошли изменения? Может есть в природе какая-нибудь API функция или класс .NET... Пишу аналог Radmin-а на C#. Хотелось бы не слать скриншоты(очень медленно) как это реализованно сейчас, а только изменившейся участок. Сравнение изображений попиксельно тоже получается очень медленно. Слышал про миррор драйвер, но для меня к сожалению эта тема пока не подъемная. Кто что посоветует? Заранее ОГРОМНОЕ человеческое спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2010, 07:39 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
1. бейте скриншот на квадраты 2. вычисляйте хэш для каждого 3. сравнивайте с предыдущим 4. если изменился - на сервер этот маленький кусок + его относительные координаты ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2010, 10:01 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Dr_Wolf1. бейте скриншот на квадраты 2. вычисляйте хэш для каждого 3. сравнивайте с предыдущим 4. если изменился - на сервер этот маленький кусок + его относительные координаты ничем не лучше. Если не хуже. А лучше - напрямую из видеокарты массив читать и передавать. В момент вывода на монитор. Весь. Поток перенаправлять в поток без дополнительной обработки. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 13:22 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Dr_Wolf, Угу, только все изменившиеся квадраты сразу. А то будет поквадратно обновлять, некрасиво получится. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 19:58 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Ну вообще в WinAPI есть такие интересные функции как GetUpdateRect & GetUpdateRgn Можно через p/invoke сделать к ним обертку ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 21:07 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Забыл добавить еще GetDC для отлова рабочего стола ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2010, 21:09 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Спасибо огромное за ответы и подсказки. Возникла проблема. Функция GetUpdateRect всегда возвращает false и пустой(с нулевыми значениями) RECT. В чем грабли? Спасибо. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2010, 06:56 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
1) Я не говорил про GetDesktopWindow. Было GetDC 2) В каждой функции явно пропишите Charser. Судя по типам, это фиолетово, но я всегда явно специфицирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2010, 10:47 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
К сожалению ничего не выходит :( Все равно "пустой" RECT :( Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2010, 13:45 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Удалось получить область изменения окна программы. Нужно было запустить в отдельном потоке. Работает как-то странно. Срабатывает только тогда когда я изменяю размер окна, но когда я к примеру рисую что-нибудь на форме, то ничего не происходит. Так как же получить регион(прямогольник) экрана в котором произошли изменения? Не могу сообразить... Пробовал передавать в функцию хендл раб. стола(GetDesktopWindow()), но нечего не происходит... Заранее спасибо за помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 12:46 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Вот код к моему предыдущему посту : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 12:50 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Ken@tGorloPavel, Всё украдено до вас Спасибо. Но к сожалению это не то что мне нужно. Данный пример использует компонент MS RDP. Мне необходимо использовать свой алгоритм получения(экрана) изображения. И в моей программе не нужно закрывать сеанс пользователя(как в Radmin). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 12:57 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
GorloPavel, То есть если заменить GetWindowDC на GetDC, у вас не работает? GetWindowDC -немного другая область применения. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 13:14 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Arm79, Результат GetDC куда передавать? В GetUpdateRect? Ведь там HandleRef. Есть перегруженый с IntPtr, но я не могу понять как получить IntPtr RECT ведь его мне надо передать вторым параметром в функцию. Может я не правильно мыслю? Помогите пожалуйста, если это возможно. Желательно кодом. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2010, 13:35 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
посмотрите статью вот еще получение скриншотов на Delphi : касаемо структур: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2010, 10:40 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Вот еще И еще может быть для обработки, кроме хендлов, нужно еще BitBlt присобачить За эти дни можно было легко нарыть еще кучу ссылок... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2010, 10:50 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Большое спасибо за ссылки. К сожалению ничего не получается. Получилось отлавливать момент перерисовки самого окна формы. Пришлось переопределить WndProc и отлавливать момент перерисовки: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2010, 13:33 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Хочу спросить у автора, получилось ли это сделать ? Просто у меня сейчас такая же проблема ) пишу наподобие программу ) и ломаю голову как получить изменения на экране. В общем если сможете ответить, напишите мне, буду ждать! ) Или даже на почту Spaun1991t@mail.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 01:15 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Spaun91пишу наподобие программу А что это? Экранный шпион? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 14:03 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Нет, это в планах учёбы состоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 16:41 |
|
Момент отлова
|
|||
---|---|---|---|
#18+
Spaun91Нет, это в планах учёбы состоит. Заранее извиняюсь за подрыв мотивации и авторитета преподавателей, но удержаться не могу. :-/ А чему-нибудь полезному, типа отображения на форме двух связанных таблиц они вас поучить не могут? Сама идея окошек - что соседним окнам абсолютно паралельно, что происходит в других окнах и тем более на экране как таковом... Где может пригодиться умение отслеживать изменения экрана - я просто не представляю. Даже шпион и то не получится так сделать.... Экран меняют часы, скринсейвер, автоматическая смена картинки на работчем столе, открытое окно браузера и много еще чего.... :-\ Отпад, короче... :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.02.2014, 17:01 |
|
|
start [/forum/topic.php?fid=20&msg=38550644&tid=1403307]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 159ms |
0 / 0 |