C# определить высоту видимой области окна браузера

Леший

Client
Регистрация
03.02.2017
Сообщения
22
Благодарностей
2
Баллы
3
День добрый!
Помогите пожалуйста средствами C# определить высоту видимой области окна браузера.
Нужна именно видимая область, а не высота документа.

Раньше делал это средствами js:
var height = "innerHeight" in window
? window.innerHeight
: document.documentElement.offsetHeight;

return height;

Но наткнулся на сайт - http://www.lazurny.ru/resorts/kids-krasnodar-territory-list/ , а там js отказывается работать вообще.
 

Леший

Client
Регистрация
03.02.2017
Сообщения
22
Благодарностей
2
Баллы
3
Неужели ни у кого нет решения?
 

hovala1

Новичок
Регистрация
29.05.2019
Сообщения
3
Благодарностей
0
Баллы
1

luk911

Client
Регистрация
17.01.2013
Сообщения
1 542
Благодарностей
580
Баллы
113
тоже интересно, может кто знает
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
2 020
Благодарностей
1 127
Баллы
113
C#:
int window_heigth = Convert.ToInt32(instance.ActiveTab.MainDocument.EvaluateScript("return window.innerHeight"));
return window_heigth;
 
  • Спасибо
Реакции: orka13, luk911 и Sergodjan

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
Прошу помочь советом.
Тестирую небольшой кусочек кода и валится ошибка ибо не корректно определяется видимая часть окна браузера.
Запускаю зенку, вручную разворачиваю инстанс на весь экран - шаблон заходит на Яндекс, дергаю видимую часть окна методом
1623919774391.png

вывожу в лог значения, то что-то около 900 получаю, то около 1300 значения, то которое около 900 - это правдивое значение, 1300 ложь откровенная.
По идее всегда должно быть одно и тоже значение- инстанс всегда развернут на весь экран на ноуте.
А имею в итоге хрен пойми что!

Есть что-то идентичное этому - instance.ActiveTab.MainDocument.EvaluateScript("return window.innerHeight")?
Может типо проверку какую-то сделать тогда получится.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113
Прошу помочь советом.
Тестирую небольшой кусочек кода и валится ошибка ибо не корректно определяется видимая часть окна браузера.
Запускаю зенку, вручную разворачиваю инстанс на весь экран - шаблон заходит на Яндекс, дергаю видимую часть окна методом
Посмотреть вложение 78926

вывожу в лог значения, то что-то около 900 получаю, то около 1300 значения, то которое около 900 - это правдивое значение, 1300 ложь откровенная.
По идее всегда должно быть одно и тоже значение- инстанс всегда развернут на весь экран на ноуте.
А имею в итоге хрен пойми что!

Есть что-то идентичное этому - instance.ActiveTab.MainDocument.EvaluateScript("return window.innerHeight")?
Может типо проверку какую-то сделать тогда получится.
общий код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using ZennoLab.CommandCenter.TouchEvents;
using ZennoLab.CommandCenter.FullEmulation;
using ZennoLab.InterfacesLibrary.Enums;
using ZennoLab.OwnCode;
using System.Security.Cryptography;
using System.IO.Compression;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Diagnostics;


namespace ZennoLab.OwnCode
{
    /// <summary>
    /// A simple class of the common code
    /// </summary>
    public class CommonCode
    {
    public struct RECT
    {
        public readonly int Left;
        public readonly int Top;
        public readonly int Right;
        public readonly int Bottom;
    }
        
        
        [DllImport("user32.dll", SetLastError = true)]
        [return : MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);

        /// <summary>
        /// Lock this object to mark part of code for single thread execution
        /// </summary>
        public static object SyncObject = new object();

        // Insert your code here
    }
}
кубик c#:
var rect = new CommonCode.RECT();
CommonCode.GetWindowRect((IntPtr) instance.ActiveTab.Handle, ref rect);
return rect.Bottom-rect.Top;
 
  • Спасибо
Реакции: p-sergei

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
@Phoenix78 спасибо за код, сходу ничего не понять, но это нормально :D. Буду изучать.
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
@Phoenix78 - идею я понял, попробовал, ну что сказать - эта штука работает точно
78927

но возникает проблема, что это работает только на физически открытом окне, в зенке если инстансы будут крутиться где-то там под капотом, предложенный код выдаст 0.
Еще может есть какие варианты?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113
@Phoenix78 - идею я понял, попробовал, ну что сказать - эта штука работает точно
но возникает проблема, что это работает только на физически открытом окне, в зенке если инстансы будут крутиться где-то там под капотом, предложенный код выдаст 0.
Еще может есть какие варианты?
это предположение или проверено на зенке ?
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63

volody00

Client
Регистрация
06.09.2016
Сообщения
978
Благодарностей
1 067
Баллы
93
у меня js нормально отрабатывает
78931

галки не ставил для рандомизации разрешения? Может в этом дело?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113

volody00

Client
Регистрация
06.09.2016
Сообщения
978
Благодарностей
1 067
Баллы
93

volody00

Client
Регистрация
06.09.2016
Сообщения
978
Благодарностей
1 067
Баллы
93

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
галки не ставил для рандомизации разрешения? Может в этом дело?
хм, да похоже что собака тут зарыта. Я думал js снимает показания с того что я вижу физически когда пытаюсь наблюдать за выполнением, а это не так.
Поставил принудительно размер - instance.SetWindowSize(1920, 900),
развернул инстанс - физически при выполнении. у меня высота получается была 977, а js возвращает строго 900.
Спасибо за помощь, понятно в чем теперь я заблуждался.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113
JS возвращает высоту видимого текущего окна. а инстанс состоит из нескольких окон. и видимый размер это не размер всего инстанса. Поэтому если у вас будет разрешение меньше разрешения экрана (например 753, 900), то вы не получите ошибок. а если размер инстанса будет больше (1200 по высоте например, при экране 1080) то как у меня получите в ПМ не тот размер. в ЗП может и будет нормально, а при работе в ПМ может жестко тупить.
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
JS возвращает высоту видимого текущего окна. а инстанс состоит из нескольких окон.
я это понимаю что это должно быть так, а сейчас это вот так
78936

херня какая-то откровенно говоря.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113

volody00

Client
Регистрация
06.09.2016
Сообщения
978
Благодарностей
1 067
Баллы
93
JS возвращает высоту видимого текущего окна. а инстанс состоит из нескольких окон. и видимый размер это не размер всего инстанса. Поэтому если у вас будет разрешение меньше разрешения экрана (например 753, 900), то вы не получите ошибок. а если размер инстанса будет больше (1200 по высоте например, при экране 1080) то как у меня получите в ПМ не тот размер. в ЗП может и будет нормально, а при работе в ПМ может жестко тупить.
шо-то не получается
78937

я это понимаю что это должно быть так, а сейчас это вот так
Посмотреть вложение 78936

херня какая-то откровенно говоря.
всё правильно. если у тебя размер окна 1920 х 1080 , то и видимая область у тебя 1920 х 1080
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
всё правильно. если у тебя размер окна 1920 х 1080 , то и видимая область у тебя 1920 х 1080
нет не правильно, проджектмейкер у меня выдает именно высоту окна браузера 970 например, при установленном размере
- instance.SetWindowSize(1920, 1080);
это похоже косяк что я работаю из кода VS, там половина методов криво себя ведут.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113
нет не правильно, проджектмейкер у меня выдает именно высоту окна браузера 970 например, при установленном размере
- instance.SetWindowSize(1920, 1080);
это похоже косяк что я работаю из кода VS, там половина методов криво себя ведут.
так это и в зенке так.
 

volody00

Client
Регистрация
06.09.2016
Сообщения
978
Благодарностей
1 067
Баллы
93
ладно, я сваливаю, это походу надолго. не знаю, что там у вас, у меня если установил 1920 x 1080, он выдает 1080 хоть в zp, хоть в pm. Если ничего не устанавливал, то выдает столько, сколько у тебя окошко (имеется ввиду в project maker, в zp естественно нет, т.к. там уже хз по каким алгоритмам он будет ставить разрешение, если ты сам его не прописал и галки не поставил). 5.4.0.0
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63

volody00

Client
Регистрация
06.09.2016
Сообщения
978
Благодарностей
1 067
Баллы
93
базара нет
1.png
P.S. Ширина чаще всего не совпадает на несколько пикселей, высота норм (в ZP лень проверять)
2.png

C#:
instance.SetWindowSize(600,1680);
instance.ActiveTab.Navigate("http://myresolutionis.ru/");
instance.ActiveTab.WaitDownloading();

int window_heigth = Convert.ToInt32(instance.ActiveTab.MainDocument.EvaluateScript("return window.innerHeight"));
int window_width = Convert.ToInt32(instance.ActiveTab.MainDocument.EvaluateScript("return window.innerWidth"));
project.SendInfoToLog(window_width + "x" + window_heigth.ToString(), true);
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
я уже запутался, у меня js из кубика и из VS ведут себя по разному
1623932945115.png

из кубика выдает верное значение
из VS - какая-то фигня.
и высота у тебя не норм, это высота всего окна, а должна быть высота окна минус типо шапка браузера!

У тебя в проджектмейкере код себя ведет как у меня в VS.
Короче я уже запутался, что вообще происходит.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 728
Баллы
113
думаю можно на этом закрыть тему 8-)

C#:
int window_heigth = Convert.ToInt32(instance.ActiveTab.MainDocument.EvaluateScript("return document.documentElement.clientHeight;"));
 

p-sergei

Client
Регистрация
20.12.2016
Сообщения
554
Благодарностей
266
Баллы
63
думаю можно на этом закрыть тему 8-)
у меня такой код тоже из кубика отрабатывает нормально выдает - 977
а из студии дает полную высоту установленно экрана -1080.
Похоже это баг - надо бы оформить багрепорт
78946
 

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)