Скриншот окна и вывод на второе окно.

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Ldmitri
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.08.2006 (Ср) 18:11

Скриншот окна и вывод на второе окно.

Сообщение Ldmitri » 09.08.2006 (Ср) 18:22

Здравствуйте, уважаемые.
Столкнулся с такой задачей, может кто что подскажет как лучше сделать.
Афигенно навороченная программа из серии "для заполнения бланков" с кучей формочек, списков, логических заполнений и т.п. для компьютера с 2 мониторами. Один развернут к посетителю, второй, главный, к оператору.
Оператор в главном окне все что нужно скурпулезно заполняет, а посетитель-клиент должен видеть в более-менее реальном времени все, что делает на своем мониторе (в своем окне) оператор.
Как сие реализовать? логика подсказывает 2 пути.

Путь первый- раз в секунду скриншотить главное окно, развернутое оператору и засылать картинку на 2 окно, затем возвращать фокус обратно оператору, если вдруг уплывет туда. Проблема - КАК ЭТО СДЕЛАТЬ?

Вариант 2, запасной, если первый не удается. По таймеру или onChange всех полей заполнять аналогичные поля на 2 форме. Способ очень не изящный....корявый.... Да и всяких формочек-списков там дофигищща...

Может кто знает как реализовать вариант 1 или предложет оригинальный алгортм? Или вдруг у кого что готовое есть по теме :)
Буду признателен.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.08.2006 (Ср) 20:50

Алгоритм оригинален донельзя.

Любая видюха, которую я знаю, которая поддерживает два монитора, поддерживает также режим dual clone, при котором винда сама выводит на два монитора одно и то же.
Правой кнопкой па рабочему столу кликни.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ldmitri
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.08.2006 (Ср) 18:11

Сообщение Ldmitri » 09.08.2006 (Ср) 22:45

не :)
Это к сожалению не годится. 2 монитор подключен как "продолжение первого" в ширину. Когда там не открыта моя программа, там идет видео презентация типа "покупайте нашу колбасу". Заставить пользователя переключать настройки монитора - :) не вариант. и к тому же на мониторе оператора в других режимах слишком много того, что посетителю видеть не нужно.
Я могу без проблем выводить 2 окно на заданные координаты, скажем на (1650,0) и 2 окно там будет показываться. Вот только как сформировать второе окно = клон первого ....

Кстати, 3 вариант, а может знаете как через VB.NET переключать свойства монитора? Так чтобы по кнопке из консоли администратора 2 монитор менял состояние из режима "продолжения" в режим "dual". Хотя я думаю это еще больший геммор - там проблемы с дровами наверное будут....

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Скриншот окна и вывод на второе окно.

Сообщение GSerg » 09.08.2006 (Ср) 23:28

Ну тогда
Ldmitri писал(а):Проблема - КАК ЭТО СДЕЛАТЬ?



Код: Выделить всё
  <Security.SuppressUnmanagedCodeSecurity()> _
  Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hSrcDC As IntPtr, ByVal xSrc As Integer, ByVal ySrc As Integer, ByVal dwRop As Integer) As Integer
  <Security.SuppressUnmanagedCodeSecurity()> _
  Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As IntPtr) As IntPtr
  <Security.SuppressUnmanagedCodeSecurity()> _
  Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal hdc As IntPtr) As Integer

  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    With Me.CreateGraphics

      Dim hd As IntPtr = GetDC(IntPtr.Zero)
      Dim h As IntPtr = .GetHdc

      BitBlt(hd, 500, 400, Me.ClientSize.Width, Me.ClientSize.Height, h, 0, 0, &HCC0020)

      .ReleaseHdc(h)
      ReleaseDC(IntPtr.Zero, hd)

      .Dispose()
    End With
  End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ldmitri
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.08.2006 (Ср) 18:11

Сообщение Ldmitri » 18.08.2006 (Пт) 12:42

Спасибо, работает до безобразия замечательно :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 102

    TopList