Ответы пользователя по тегу C#
  • Как получить все запросы в WebBrowser в Windows Forms?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Самый простой способ — сделать обычный прокси для перехватов запросов. Чуть посложнее — использовать готовые библиотеки для перехвата запросов.
    Ответ написан
    Комментировать
  • WindowsForm окно имеет декартову систему координат(C#)?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Да.
    Ответ написан
    Комментировать
  • Как правильно написать простенький тест на 3 варианта ответа?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Правильно организовать на самом деле очень просто и достаточно использовать стандартные организационные методы:
    1. Подготовить ТЗ
    2. Собрать требования, ограничения
    3. Подготовить ЧТЗ
    4. Сделать декомпозицию задачи на подзадачи/подсистемы/подмодули
    5. Разработать архитектуру
    6. Проработать подзадачи/подсистемы/подмодули
    7. Разработать тесты, при необходимости
    8. Поэтапно произвести процесс разработки
    Ответ написан
    Комментировать
  • Как сэмулировать нажатие клавиши в игре?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    А еще есть DirectInput для DirectX игр. Для OpenGL игр и всего остального, что не принимает предыдущие варианты надо писать свой драйвер, который будет в нулевом кольце и который будет либо писать данные сразу в буфер клавиатуры или сам прикинется драйвером. А в новомодных и современных виндах драйвер вроде еще должен быть и подписанным — иначе не прокатит. В XP и ниже вроде проще можно сделать. Если я конечно все правильно помню, как это все делается. Попробуйте поискать готовый шаблон или пример драйвера клавиатуры / мышки.
    Ответ написан
  • Как сделать приложение готовым к передаче клиенту на Visual Studio?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Упакуйте приложение в дистрибутив/установщик и передавайте его клиенту, если это конечно входит в ТЗ. Например NSIS или NSIS + ModernUI или InnoSetup и еще куча всего. Если в ТЗ нет пункта о дистриубтиве — то просто передавайте файлы клиенту в архиве.
    Ответ написан
    Комментировать
  • Как отловить место в программе, которое приводит к загрузке dll?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    А как эта библиотека подключена? В ссылках или вручную? Если вручную - то оттуда же сразу можно перейти на все места, где оно используется. Если в ссылках - то смотреть, где используется и добавить там мониторинг. Самый простой способ - начать с мониторинга доступа к файловой системе.
    https://docs.microsoft.com/en-us/sysinternals/down... - добавляете фильтры на: процесс - ваше приложение, тип события - файловая система, содержит - название dll файла.
    Ответ написан
  • Как обратиться к типу базового класса?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    b.GetType().BaseType
    Ответ написан
    Комментировать
  • Где взять задачи по С#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Комментировать
  • Нужно написать аналог regedit в Windows для курсовой на c++ или c# с графическим интерфейсом. С чего начать? Каие библиотеки и технологии посоветуете?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Совсем не обязательно икать прямые WinAPI вызовы для работы с реестром (так-то конечно лучше все таки изучить и понимать механику их работы — облегчает работу с реестром). В C# есть уже готовые обертки для работы с реестром:
    using Microsoft.Win32;
    И далее работаем с реестром.
    https://docs.microsoft.com/en-us/dotnet/csharp/pro...

    В данном случае все крайне просто: кидаете на форму в левой части контрол тип "дерево", а в правую часть контрол типа "таблица/список". И далее просто используете готовые обертки для заполнения контролов данными. Можно использовать как WinForms, так и WPF.
    Ответ написан
    2 комментария
  • Как облегчить написание простого ПО на С# с интеграцией AD?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Иметь гугл/StackOverflow под рукой — большинство проблем решаются именно там. Для облегчения ваших задач — идете на сайта nuget, вбиваете что вам надо и выбираете подходящую под ваши нужды/требования библиотеку. Рисование простейших элементов GUI легко делается в конструкторе VS.
    Ответ написан
    Комментировать
  • Как обмениваться данными с сервером, на приложении xamarin?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Если кратко: точно так же как и в любом другом фреймворке/ЯП — подключиться к серверу и передать данные.
    Если чуть подробнее, то:
    1. Для начала изучить что такое сеть и как она работает (Сетевая модель OSI, уровни сети и вот это все).
    2. Каким образом осуществляется сетевое соединение — клиент, сервер, сокеты и прочее.
    3. Изучить какие сетевые протоколы бывают и зачем они вообще нужны.
    4. Изучить основные понятия в программировании и разработке ПО.
    5. Изучить HTTP, построение API, что такое фронт-энд, бэк-энд и т.п.
    6. Применить полученные знания на практике.
    Ответ написан
    4 комментария
  • Почему изображение моргает в pictureBox?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Двойная буферизация не включена скорее всего кроме того, изображение может перерисовываться еще от кучи причин, а механизм/API рендеринга этого вот всего древний как сами знаете что.
    Ответ написан
    Комментировать
  • Как передать функцию в c#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    namespace coordinates
    {
        class Example
        {
            public string Name;
            public Action MainFunc;
    
            public Example(string name, Action callback)
            {
                Name = name;
                MainFunc = callback;
            }
    
            public void Init()
            {
                MainFunc?.Invoke();
            }
        }
    }

    var r = new Example("Example name", () => Console.WriteLine("Example MainFunc"));
    Ответ написан
    Комментировать
  • Почему не открывается конструктор в Visual Studio?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Смотрите ошибки конструктора, возможно изменили код конструктора, что угодно может быть. Конструктор частенько бывает в ступоре из-за разного кода или положения элементов. Для простых форм — он отличен, но когда надо что-то нестандартное или сложное, то лучше ручками писать. Имеет смысл создать новую форму и в неё ручками потихоньку перенести код конструктора старой формы и смотреть на каком этапе конструктор ломается.
    Ответ написан
    Комментировать
  • Как разобрать ответ JSON в C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    https://app.quicktype.io/#r=json2csharp - вот, используйте для генерации парсеров JSON.
    Ответ написан
    Комментировать
  • Как правильно описать класс для библиотеки Newtonsoft.Json C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Элементарно: https://app.quicktype.io/#r=json2csharp - слева вставляете JSON, справа на выходе получаете готовый класс для парсинга. Удобнейший сервис.

    Пример:
    {
      "greeting": "Welcome to quicktype!",
      "instructions": [
        "Type or paste JSON here",
        "Or choose a sample above",
        "quicktype will generate code in your",
        "chosen language to parse the sample data"
      ]
    }

    namespace QuickType
    {
        using System;
        using System.Collections.Generic;
    
        using System.Globalization;
        using Newtonsoft.Json;
        using Newtonsoft.Json.Converters;
        using J = Newtonsoft.Json.JsonPropertyAttribute;
        using R = Newtonsoft.Json.Required;
        using N = Newtonsoft.Json.NullValueHandling;
    
        public partial class Welcome
        {
            [J("greeting")]     public string Greeting { get; set; }      
            [J("instructions")] public string[] Instructions { get; set; }
        }
    
        public partial class Welcome
        {
            public static Welcome FromJson(string json) => JsonConvert.DeserializeObject<Welcome>(json, QuickType.Converter.Settings);
        }
    
        public static class Serialize
        {
            public static string ToJson(this Welcome self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
        }
    
        internal static class Converter
        {
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
                DateParseHandling = DateParseHandling.None,
                Converters = {
                    new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
                },
            };
        }
    }


    Я конвертер выношу в отдельный класс и файл:
    using Newtonsoft.Json;
    
        /// <summary>
        /// Конвертер JSON 
        /// </summary>
        public static class Converter
        {
            /// <summary>
            /// Настройки конвертации JSON
            /// </summary>
            public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
            {
                MetadataPropertyHandling = MetadataPropertyHandling.Ignore,     // Пропускаем аттрибуты
                DateParseHandling = DateParseHandling.None,                     // Выключаем парсинг дат
                NullValueHandling = NullValueHandling.Ignore                    // Пропускаем пустые значения 
                                                                                // (API-вызов при создании запроса 
                                                                                // сам заполняет нужные поля)
            };
        }


    А парсинг/конвертацию JSON выношу в отдельный класс, от которого уже наследую классы для парсинга данных:
    /// <summary>
        /// Абстрактный класс - сетевое сообщение: парсинг и 
        /// генерация JSON из экземпляров наследуемого класса
        /// </summary>
        /// <typeparam name="T"></typeparam>
        public abstract class APIMessage<T>
        {
            /// <summary>
            /// Конвертация в JSON
            /// </summary>
            /// <returns></returns>
            public string ToJson()
            {
                return JsonConvert.SerializeObject(this, Converter.Settings);
            }
    
            /// <summary>
            /// Парсинг JSON в указанный тип
            /// </summary>
            /// <param name="json"></param>
            /// <returns></returns>
            public static T FromJson(string json)
            {
                try
                {
                    return JsonConvert.DeserializeObject<T>(json, Converter.Settings);
                }
                catch (Exception e)
                {                
                    throw new ServerConnectionException(
                        "Server response parse error!\nResponse type: <" + typeof(T).FullName
                        + ">\nError: " + e.Message
                    );
                }
            }
        }


    Как-то так получается:
    public class Request : APIMessage<Request>
    {
        <описание JSON свойств>
    }
    Ответ написан
    3 комментария
  • Библиотека вместо selenium, есть ли?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    NWJS отлично подходит для таких вещей. Из сторонних приложений отлично рулится через веб-сокеты.
    Ответ написан
    Комментировать
  • Как написать систему автоматизации ресторана на C#?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Делал такую систему. Реализуется элементарно: сервер, на нем веб-приложение, которое показывает меню с фотками блюд и кнопками заказа, в столах планшеты с NWJS, который показывает это самое меню и несет дополнительный функционал по управлению плашетом (яркость экрана, включено/выключено и т.п.), плюс отдельное веб-приложение для управления планшетами (добавить, удалить, переименовать, настроить и т.п.). Планшеты MS Surface были — не рекомендую, в винде регулярно что-то не так происходит и надо костыли вставлять. Удобнее и оптимальнее линукс использовать для клиентов. Сервер можно писать на чем угодно.

    Вот так выглядит клиент для планшетов: https://freelansim.ru/projects/105943
    Ответ написан
    Комментировать
  • Как правильно реализовать кнопку "запомнить" в программе?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Используйте стандартный механизм хранения настроек приложения:
    https://habr.com/post/271483/
    https://stackoverflow.com/questions/453161/best-pr...
    Ответ написан
    Комментировать