Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
4 / 4 / 1
Регистрация: 25.11.2015
Сообщений: 26

Скриншот окна стороннего приложения

13.03.2016, 23:36. Показов 1956. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Подскажите, как сделать фото участка программы, зная не хэндл, а полный путь к программе? Потому что разработчики того, откуда надо брать фотографию по кой-то фиг заложили изменение хэндла после каждого незначительного изменения в программе. Неудобно, но ничего не поделаешь... Пробовал реализовать через

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Imports System.IO
Imports System.Security.Cryptography
 
Public Class Form1
 
    Dim screenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
    Dim q As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(screenGrab)
    Dim ScreenSize As Size = New Size(10, 10)
 
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
screen()
 End Sub
 
Private Sub screen()
 
 Dim index As Integer = 0
        While index < 1000000
            index += 1
            Me.Visible = False
            q.CopyFromScreen(1250, 20, 1260, 30, ScreenSize)
            Me.Visible = True
 End While
 End Sub
Ну а дальше идет снятие хэша файла, сравнения с исходным и дальше или повторение цикла или выход из него...

Работает, но моргает - уж больно противно. Может возможно по полному адресу брать кусок именно из этой программы? Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2016, 23:36
Ответы с готовыми решениями:

Закрепление окна стороннего приложения
Пожалуйста подскажите, а лучше с примером. Как реализовать следующее: 1.жму на Form1 кнопку(&quot;закрепить&quot; к примеру). ...

Перемещение окна стороннего приложения
Среда - WindowsXP Программе известен дескриптор окна стороннего приложения. Как переместить данное окно? Погуглив, понимаю, что нужно...

Как установить координаты окна стороннего приложения
как сделать чтобы моя программа перенесла окно(например текстового докум) на определенные координаты?!

11
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
14.03.2016, 10:48
А что мешает вновь получить дескриптор? Класс окна же не меняется или его имя.
0
4 / 4 / 1
Регистрация: 25.11.2015
Сообщений: 26
14.03.2016, 14:23  [ТС]
приложение расположено по адресу в переменной x8664 типа string
VB.NET
1
2
3
4
5
6
7
If My.Computer.FileSystem.DirectoryExists("C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)") Then
            x8664 = "C:\Program Files\Adobe\Adobe Photoshop CS5 (64 Bit)\Photoshop.exe"
        End If
 
        If My.Computer.FileSystem.DirectoryExists("C:\Program Files\Adobe\Adobe Photoshop CS5") Then
            x8664 = "C:\Program Files\Adobe\Adobe Photoshop CS5\Photoshop.exe"
        End If
По ходу исполнения программы происходит открытие этого окна, но хэндл его изменяется в зависимости от того, что открыто, в каком масштабе, что выполнено и т.д.
Необходимо открыть фотографию в нем для режима полноэкранного редактирования. Я это реализовал через сравнение двух фотографий участков экрана:
VB.NET
1
2
3
4
Using stream As Stream = File.OpenRead(Application.StartupPath & "\2.bmp")
            hashCode = MD5.Create.ComputeHash(stream)
        End Using
        hash2 = hashCode
и, соответственно,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub screen()
        Dim index As Integer = 0
        While index < 1000000
            index += 1
            q.CopyFromScreen(7, 211, 35, 515, ScreenSize)
            screenGrab.Save(Application.StartupPath & "\Screen.bmp")
            Using stream As Stream = File.OpenRead(Application.StartupPath & "\Screen.bmp")
                Form1.hashCode = MD5.Create.ComputeHash(stream)
            End Using
            Form1.hashFile = Form1.hashCode
            If Form1.hashFile(1) <> Form1.hash2(1) Then
                Form1.PsID = Shell(Form1.x8664, AppWinStyle.NormalFocus)
                System.Threading.Thread.Sleep(200)
                SendKeys.SendWait("+{F}") ' фото на весь экран
                System.Threading.Thread.Sleep(700)
                Continue While
            End If
            If Form1.hashFile(1) = Form1.hash2(1) Then
                Exit While
            End If
        End While
 
    End Sub
Паузы выставлены, чтобы фотошоп успевал среагировать.
И так-то всё работает, только не надо пользователю это видеть, как оно то открывается, то раскрывается, то изменяется как-то. Я попытался сделать через me.visible=false до фотографии и обратном me.visible=true после. Но моргает как не знаю что...
Поэтому и обращаюсь: помогите пожалуйста это дело реализовать. Потому что прям засада.... И сроки горят...
Спасибо!
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
14.03.2016, 15:05
Так, давайте разберемся, вам надо открыть фотошоп в полноэкранном режиме?
0
4 / 4 / 1
Регистрация: 25.11.2015
Сообщений: 26
14.03.2016, 21:34  [ТС]
Да, но самое главное понять принцип, потому что таких сторонних приложений несколько

Может быть этот кусок кода как-то можно адаптировать?? Помогите пожалуйста, товарищи-форумчане... Задача по-сути - сделать фотографию куска запущенного окна с исполняемым файлом в "C:\Program Files\Adobe\Adobe Photoshop CS5\Photoshop.exe" при условии того, что это окно развернуто на весь экран, а поверх него - форма разрабатываемого приложения с обязательным параметром topmost=true

VB.NET
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
Public Class Form1
    Public Declare Function PrintWindow Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal hDC As IntPtr, ByVal nFlags As UInteger) As Boolean
    Public Declare Auto Function GetWindowInfo Lib "user32" (ByVal hwnd As IntPtr, ByRef pwi As WINDOWINFO) As Boolean
 
    <System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)> Structure WINDOWINFO
        Dim cbSize As Integer
        Dim rcWindow As Rectangle
        Dim rcClient As Rectangle
        Dim dwStyle As Integer
        Dim dwExStyle As Integer
        Dim dwWindowStatus As UInt32
        Dim cxWindowBorders As UInt32
        Dim cyWindowBorders As UInt32
        Dim atomWindowType As UInt16
        Dim wCreatorVersion As Short
    End Structure
 
    Public Function GetScreenCustomWindow(HWND As Integer) As Image
 
        Dim info As New WINDOWINFO : GetWindowInfo(HWND, info)
 
        Dim bmp As New Bitmap(info.rcWindow.Width, info.rcWindow.Height)
        Using g As Graphics = Graphics.FromImage(bmp)
            Dim dc = g.GetHdc()
            PrintWindow(HWND, dc, 0)
            Return bmp
        End Using
    End Function
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.BackgroundImage = GetScreenCustomWindow(Me.Handle)
    End Sub
End Class
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
15.03.2016, 00:05
Ваш пример делает скриншот фотошопа (просто я сомневаюсь в этом)? Скажите зачем вам это, проверять скриншоты и т.п. может есть нормальный метод сделать то, что вы хотите.
0
4 / 4 / 1
Регистрация: 25.11.2015
Сообщений: 26
15.03.2016, 15:11  [ТС]
Мой пример (указанный выше) делает скриншот части любого окна, открытого под формой. Предварительно это окно становится активным через AppWinStyle.NormalFocus
В моем случае мне необходим фотошоп. Для чего это нужно и возможно ли сделать проще или не в фотошопе, на самом деле, к постановке задачи не относится. Но отвечу. Пишется научная работа по раку мочевого пузыря и необходимо обводить несколько вариантов фотографий образований. Без фотошопа - нельзя. Вычисление площади, наложение вариантов обводки - все только тут. Практический выход: http://www.terramedica.spb.ru/... 5-f334.pdf

Фамилия моя Соломатников, я автор этой статьи.
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
15.03.2016, 15:55
Так, ну значит вы получаете скриншот фотошопа? Что тогда надо?
0
4 / 4 / 1
Регистрация: 25.11.2015
Сообщений: 26
15.03.2016, 16:18  [ТС]
чтобы это получение шло не скрывая мою форму, расположенную сверху
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4360 / 3430 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
15.03.2016, 16:49
послушайте, а с чего вы взяли что фотошоп меняет свой хэндл? нет же, он всего лишь меняет заголовок окна, а его хэндл остается... как вы получали хэндл фотошопа и как вы поняли что он меняется? очень интересно...
зная хэндл - можно слать команды и не надо этих манипуляций со скриншотами.
0
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
15.03.2016, 17:01
6-й фотошоп, при открытии в режиме полноэкранного, действительно, меняется не только заголовок, так-же меняется дескриптор окна. Но дескриптор можно спокойно получить по классу окна.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4360 / 3430 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
15.03.2016, 19:12
согласен. ну Spy++ в помошь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2016, 19:12
Помогаю со студенческими работами здесь

SetWindowText не меняет заголовок окна стороннего приложения
Здравствуйте, я хочу поменять заголовок окна приложения: Private Declare Function SetWindowText Lib &quot;user32&quot; Alias...

Чтение из файла построчно и заполнение полей окна стороннего приложения
Привет уважаемые форумчане. Нужна ваша помощь. Нужно чтобы прога читала текстовый файл и вписывала данные в диалоговое окно приложения ...

Как получить hWnd окна стороннего приложения, которое свёрнуто в трей
Здравствуйте, есть такая функция, как IsWindowVisible, которая может вычислять, свернуто окно приложения в трей или нет, но ей требуется...

Активация окна стороннего приложения с помещением его поверх всех окон
мы получаем список процессов ,выбираем из них например хром как вот это приложение активировать поверх всех остальных окон и изменить...

Скриншот активного окна
Скриншот экрана я знаю как сделать, но как сделать скриншот активного окна? Dim bmp As Bitmap = New...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru