Ответы пользователя по тегу C#
  • Multiversion library. Не находит нужный тип?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    А сегодня добавил в список зависимостей библиотеку system.Io.compression и всё заработало. Неожиданность в том, что вчера я её уже добавлял, только не сработало. А сегодня сработало. Мистика...

    641074e341f40473511000.png
    Ответ написан
  • Как крякнуть защищенную программу?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Забей в гугле слово crackme (по-русски крякмис). Есть даже сайты с задачками на эту тему. И даже на русском языке. Можно постепенно подниматься от отлова диалоговых окон ввода серийников, до патчирования программ.

    Что касается dot.net, то посмотри dnspy. По мне так получше, чем стандартный ILSpy. Мне он очень иногда помогает. Им не ломать, но исследовать вполне себе на приличном уровне можно dot-net-овские приложения. Как-то довелось поисследовать работу nanocad. Не хотел мой плагин подключать. Пришлось заставлять.
    Ответ написан
    1 комментарий
  • Можете дать идеи для проектов на языке C#?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    А вот лично мне не хватает нормального форматтера для JSON. Стандартное форматирование с отступами - ну очень тупое даже для двух уровней. Например:
    // Отступы - отстой
    obj = {
      arr: [
        1,
        2,
        3,
        4,
      ]
    }
    
    // Так гораздо более симпатично и места меньше занимает.
    obj = {
      arr: [1, 2, 3, 4,]
    }

    Думаю, что не я один такой, кому не нравятся иерархические отступы )))
    Можешь придумать стили форматирования для JSON типа CSS?
    Ответ написан
    Комментировать
  • Почему не могу получить исходный код страницы?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Можно использовать cefsharp, чтобы инжектится в страницу с помощью c# и там уже ждать загрузки и срабатывания всех загрузочных скриптов. Если что, есть ещё cefsharp.offscreen (headless), если требуется запускать в качестве службы или в консоли.
    Ответ написан
    Комментировать
  • Как создать собственную библиотеку?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Если вопрос именно по созданию библиотеки, а не GUI, то из собственного опыта - вся диаграмма помещается в UserControl. как вы там расставляете - это ваше дело.

    5d51124627ab1372431729.png

    Одна тонкость - перед использованием UserControl - собрать проект, иначе будет не подцепить этот контрол даже в исходном проекте.
    Ответ написан
  • Get запрос. Как дать отработать всем скриптам?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Использовать Embedded Browser и запускать всё на компе, который запрашивает URL. Можно использовать встроенный IE: System.Windows.Forms.WebBrowser (не работает, пока не виден на экране) или Embedded Chrome в двух вариантах - CefSharp (Та же проблема, что и с IE) и его же версия, но CefSharp Healdess, но вот тут можно уже не выводить на экран.
    IE удобен тем, что подхватывает всё, что стоит в IE под пользователем - аутентификацию, куки, например. CefSharp сам по себе.
    Ответ написан
  • Почему я должен писать именно так, а не иначе?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Почему я должен писать именно так, а не иначе?
    Хороший вопрос. Один человек, изначально тоже подумал, а как бы вообще замутить такую конструкцию, чтобы я мог считать, что одно слово - это функция, а другое аргумент. И придумал письменность.
    Ответ написан
    Комментировать
  • Как настроить CORS для withCredentials: true?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Кто сталкивался помогите! Уже все запросы гугла помечены как прочитаны.
    - это вы должны ещё два дня по ним побегать. ;)
    Основной прикол в том, что CORS настраивается не на клиенте, а на сервере, к которому вы хотите обратиться. Пока сайт, который является сторонним по отношению к вашему приложению, не разрешит делать к себе CORS - всё! Никакие настройки CORS в браузере не помогут. Либо делать перезапрос с вашего web-сервера (с backend-а) или идти к тому сайту на поклон, чтобы он включил CORS на адрес вашего сайта. Вроде как вариантов по фен-шую больше и нет.

    UPDATE:
    Если сторонний сайт является вашим, то почитайте неплохую статью как его настраивать: https://learn.javascript.ru/xhr-crossdomain

    UPDATE 01:
    Собственно основной прикол, почему сделана такая схема - запросы всегда уходят на сайт с куками и если бы злоумышленник отправлял со своей страницы запрос на тот же https://facebook.com, то он бы мог пользоваться api этого сайта с данными вашего профиля. Ну вам этого бы не очень хотелось? Поэтому эта CORS задаётся именно на сайтах, к которым вы хотите обратиться по CORS и по этой причине он там и отключена.
    Ответ написан
  • Как на сервере рассчитать таблицу excel с использованием формул из таблицы?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Аналогичная задача сейчас в разработке. Только там ещё и макросы попросили добавить. Приходится запускать excel на сервере, загружать страницу и данные в неё, выполнять макросы, считывать данные и отдавать клиенту. Тут сильно большие ограничения на скорость, т.к. файл excel нужно открыть, а это 90% по общему времени задержки. Так же нужно следить, что excel может открыть диалоговое окно. Не вовремя.

    Однако, если у вас кроме формул ничего нет, то можете попробовать https://handsontable.com/docs/6.2.2/demo-formula-s.... Мне кажется, что вполне возможно добавить и свои формулы, если парсинг осилите.

    Не бесплатный компонент, но если сеть внутренняя, то для тестов можно и поковыряться с исходниками. )))
    Ответ написан
  • Как отловить место в программе, которое приводит к загрузке dll?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Проблема решена чисто философским путём. Попал пальцем в небо. Читая статью https://weblog.west-wind.com/posts/2012/Nov/03/Bac... (ещё от 2012 года!!!) обратил внимание на абзац:

    5bc0996c71590022855047.png

    И тут я повнимательнее глянул на код функции Main:

    5bc09af1cff3b746046260.png

    И тут у меня сложился этот пазл! Возникло предположение, что dot.net перед выполнением функции смотрит на тело функции и проверяет, а потребуются ли для этого кода загрузка библиотек? Идиотское предположение, но... почему бы не проверить. Вынес тело функции в отдельную функцию:

    5bc09c2145b1b590354662.png

    И теперь в функции Main библиотечный LongFile.AppendAllText метод не виден! И случилось ЧУДО! Программа нормально запустилась! Выходит от перестановки слагаемых результат меняется )))

    Решено.
    Ответ написан
    4 комментария
  • WPF XAML шаблон?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Да, можно. Нужно в проект добавить новый тип, называется "control". Назовём его MyControl.xaml. Он тоже является типом XAML и редактируется как обычное окно. Там можете создать любую структуру GUI, которая вам нужна (кнопки, чекбоксы, списки, вот это все). Потом возвращаетесь в код главного окна, в которое надо добавить этот control. Создаёте программно новый Control:
    MyControl ctrl = new MyControl();
    this(или подконтрол окна).Children.Add(ctrl);
    После этого ваш новый control появится в главном окне в runtime.
    Можно ещё добавлять новый control и визуально, но по моему опыту Visual Studio до 2017 версии неохотно работает в визуальном редакторе с пользовательскими контролами, много глючит и иногда даже требует перезагрузки Visual Studio. 2017-я стоит у меня не так давно, пока не довелось проверить на этот глюк.
    Ответ написан
    Комментировать
  • Как программно вызвать диалог использования программы по умолчанию для заданного протокола (http/https)?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Нашёл решение. На основе кода: https://github.com/joewalker/devtools-window/blob/...

    public static void NotifySystemOfNewRegistration() {
    
                tagOPENASINFO info = new tagOPENASINFO();
                info.cszFile = "https";
                info.cszClass = null;
                info.oaifInFlags = tagOPEN_AS_INFO_FLAGS.OAIF_FORCE_REGISTRATION |
                                   tagOPEN_AS_INFO_FLAGS.OAIF_URL_PROTOCOL |
                                   tagOPEN_AS_INFO_FLAGS.OAIF_REGISTER_EXT;
                SHOpenWithDialog(IntPtr.Zero, ref info);
            }
    
            // http://msdn.microsoft.com/en-us/library/windows/desktop/bb773363(v=vs.85).aspx 
            private struct tagOPENASINFO {
                [MarshalAs(UnmanagedType.LPWStr)]
                public string cszFile;
    
                [MarshalAs(UnmanagedType.LPWStr)]
                public string cszClass;
    
                [MarshalAs(UnmanagedType.I4)]
                public tagOPEN_AS_INFO_FLAGS oaifInFlags;
            }
    
            [Flags]
            private enum tagOPEN_AS_INFO_FLAGS {
                OAIF_ALLOW_REGISTRATION = 0x00000001,   // Show "Always" checkbox
                OAIF_REGISTER_EXT = 0x00000002,   // Perform registration when user hits OK
                OAIF_EXEC = 0x00000004,   // Exec file after registering
                OAIF_FORCE_REGISTRATION = 0x00000008,   // Force the checkbox to be registration
                OAIF_HIDE_REGISTRATION = 0x00000020,   // Vista+: Hide the "always use this file" checkbox
                OAIF_URL_PROTOCOL = 0x00000040,   // Vista+: cszFile is actually a URI scheme; show handlers for that scheme
                OAIF_FILE_IS_URI = 0x00000080    // Win8+: The location pointed to by the pcszFile parameter is given as a URI
            }
    
            // http://www.pinvoke.net/default.aspx/shell32.SHOpenWithDialog
            [DllImport("shell32.dll", EntryPoint = "SHOpenWithDialog", CharSet = CharSet.Unicode)]
            private static extern int SHOpenWithDialog(IntPtr hWndParent, ref tagOPENASINFO oOAI);

    Результат:

    59e7476d5d485533031337.png

    Диалоговое окно выводится.
    Ответ написан
    Комментировать
  • Почему не выполняется второй запрос C# + xNet?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    У c# как и любого браузера есть ограничение на одновременное подключение к одному сайту. Гляньте этот пост: https://stackoverflow.com/questions/1361771/max-nu...
    Ответ написан
    Комментировать
  • Отправка авторизации на сайт и получение кода страницы после авторизации. Как?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Даже если поиграться, то тема совсем не простая. Вот простой способ на "поиграться"
    https://stackoverflow.com/questions/32837084/use-w...
    Но для серьезной работы не очень подойдёт. Есть даже сильно более низкоуровневые способы, но это очень сильно на любителя: https://msdn.microsoft.com/ru-ru/library/debx8sh9(...
    Если вы нацеливаетесь на Web-scrapping, то лучше копать в сторону CefSharp. Там можно инжектировать функционал JavaScript в любую загруженную страницу, грабить любую инфу, картинки, в общем при должном усердии можно в прямом смысле изнасиловать любой сайт )))
    Ответ написан
    2 комментария
  • Как в запущенной ранее программе открыть новую ссылку в имеющемся WebBrowser через командную строку?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Если вы сделаете в своей программе внедрённый web-сервер и настроите у него простой обработчик url-параметров, то через эти параметры сможете передать ей любой url, чтобы его запустить в вашей программе.
    1. Вот на вскидку народ обсуждает embedded web-сервера на c#: https://stackoverflow.com/questions/4268814/embedd...
    2. Клиентом для вашей программы может быть любой браузер, в котором вы в качестве параметра укажете желаемый url, или напишите простого клиента на любом языке, чтобы только послать запрос. Для проверки работоспособности вашего внедрённого web-сервера можно использовать fiddler2.
    Можно эти два свойства объедениям и в одной программе.
    Ответ написан
    Комментировать
  • Как определиться с направлением c#?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Программирование вторично. Нужно тренировать своё видение решения. Решение - это полный набор технологий, которые обеспечивают желаемый сервис пользователю. И программирование только часть такого сервиса. Если какой-то "дядя", который продумывает архитектуру приложения ошибётся и перекинет проблему на программеров, то лично вы в проекте будете иметь много головной боли.
    Поэтому не забывайте подтягивать админку, поучитесь настраивать сервера, контейнеры приложений и т.д. Иногда программирование начинается через день, неделю и более после тестирования архитектуры.
    Ответ написан
    Комментировать
  • Есть ли "тестовый репозиторий" для десктопных Windows приложений?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    >> Я пишу десктопное Windows приложение и хочу прислать клиенту тестовую версию
    Такие вопросы должны быть прописаны в договоре. Что предоставляется, на каких этапах. По идее акт приёма-передачи. У вас есть какие-то официальные договорённости или всё на честном слове?
    Ответ написан
    Комментировать
  • Как подвязать куки к HttpWebRequest [C#]?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Скорее всего вы не ввели необходимые файлы куки (обычно нужное количество куки исчисляется единицами). Советую вам пропустить страницы через fiddler и глянуть все куки там, а не на странице.
    Поскольку у вас всё-таки проблема с задачей более высокого порядка - парсить залогиненного пользователя, то посоветую вам пользоваться не C# в чистом виде, а браузерным компонентом. Для простых случаев использовать c# WebBrowser, в нём логиниться пользователем, а потом парсить всё что загружено (там же и скрипты начальные загружаются и меняют DOM). Для сложных случаев отлично подходит CefSharp - Chrome для C#. Вот этот зверь очень послушно делает всё что вы ему прикажете. Я на нём с сайта гостов периодически документацию для своей фирмы загружаю, например.
    Вот, нашёл интересный пример: zennolab.com/discussion/threads/c-sharp-vs-webbrow...
    Ответ написан
    Комментировать
  • [Solved, решено как частный случай] Windows 8.1. C# задать новое положение окна без дёргания окна?

    AlexXYZ
    @AlexXYZ Автор вопроса
    O Keep Clear O
    Решил. Частный случай.
    Результат:

    041785659a30481b8f0b5832b9d51023.gif


    Решение:
    Разворачиваю главное окно программы на ВЕСЬ экран. Если экранов несколько, то суммирую их размеры, чтобы главное окно программы перекрывало все экраны. Главное окно прозрачное, поэтому его всё равно не видно. А теперь главный фокус: главное окно программы остаётся на месте всё время, а вот рамка и индикаторы перемещаются внутри главного невидимого окна, которое находится поверх экрана:

    046140d9ed7649dcbdc67ff4f45d470a.png

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

    Решено!
    Ответ написан
    Комментировать