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
Благодарностей
579
Баллы
113
тоже интересно, может кто знает
 

Valandersi

Client
Регистрация
19.01.2015
Сообщения
1 868
Благодарностей
1 114
Баллы
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 790
Благодарностей
5 683
Баллы
113

p-sergei

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

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

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

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 683
Баллы
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
Сообщения
523
Благодарностей
255
Баллы
63
@Phoenix78 спасибо за код, сходу ничего не понять, но это нормально :D. Буду изучать.
 

p-sergei

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

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

Phoenix78

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

p-sergei

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

volody00

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

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

Phoenix78

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

volody00

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

volody00

Client
Регистрация
06.09.2016
Сообщения
792
Благодарностей
810
Баллы
93
хотя не знаю, почему так. у меня чё то не воспроизводится78934
 

p-sergei

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

Phoenix78

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

p-sergei

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

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

Phoenix78

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

volody00

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

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

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

p-sergei

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

Phoenix78

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

volody00

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

p-sergei

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

volody00

Client
Регистрация
06.09.2016
Сообщения
792
Благодарностей
810
Баллы
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
Сообщения
523
Благодарностей
255
Баллы
63
я уже запутался, у меня js из кубика и из VS ведут себя по разному
1623932945115.png

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

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

Phoenix78

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

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

p-sergei

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

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