Страницы

Поиск по вопросам

Показаны сообщения с ярлыком visual-basic. Показать все сообщения
Показаны сообщения с ярлыком visual-basic. Показать все сообщения

среда, 15 апреля 2020 г.

Как делают программы с интерфейсом Windows XP SP3, Vista, 7 и т.д.?

#windows #vista #visual_basic

                    
Я очень хотел делать программы с интерфейсом Windows, с трудом нашёл Visual Basic
и каково было моё разочарование, когда я узнал, что там кнопки (и другой интерфейс)
какие-то 2d-шные (как Chemax) и под Windows 98, NT, и другие дряхлые системы. А это
не то, что я хочу! Подскажите, на каком языке (в какой среде) делают приложения с интерфейсом
Windows XP, Vista, 7, и другие современные, в которых интерфейс зависит от темы и кнопки.
Короче, такие как Kaspersky Norton Win Doctor и т.д. и где взять учебники и как это
делать лучше? Пожалуйста, поподробнее.    


Ответы

Ответ 1



Это небось VB6? Помню, было такое дело. Рядом с ЕХЕ-шником кладите файл ИМЯEXE.manifest примерно следующего содержания: Windows Shell ВАЖНО. Все ocx-контролы (и dll)? которые используются для создания интерфейса (при добавлении которых появляются всякие списки, тривью (treeview)) должны быть не ниже версии 6.0. Пояснение: такой ЕХЕшник нельзя собрать на ОС ниже ХР. Или более продвинутый вариант - ставить Visual Studio 2003 и выше. Там это включается опцией в настройках формы и одной командой глобального объекта Application.

вторник, 17 марта 2020 г.

Извлечение случайного значения из массива в Visual Basic 2010

#массивы #php #visual_basic


Начал изучать Visual Basic и столкнулся с проблемой. Нужно сделать символьный массив
и получить случайное значение из этого массива в переменную. Я только начал изучать
Visual Basic, но на php это бы выглядело как:
$mass = array("lalka", "fsdfsd546", "heyt");//массив с названием $mass
$per = array_rand($mass, 1);//Извлекаю из этого массива одно значение в переменную
echo ($per);//Вывожу сообщение

Прошу написать как этот код будет выглядеть в Visual Basic.    


Ответы

Ответ 1



Поймите: Visual Basic и VB.NET - практически одно и тоже (синтаксис очень схож), отличие в том, что VB.NET[Visual Basic .NET] работает на платформе .NET Framework. Вы просите код на "Visual Basic 2010". Ппрактически, это он и есть, этот код будет работать и в "Visual Basic 2008", "Visual Basic 2005", и даже в "VS Express 2013 for Desktop"(который содержит Visual Basic). Почитайте спецификацию и определение Visual Basic 6/VB.NET/.NET Framework. Повторюсь, лучше учите C# (тоже на платформе .NET Framework)! Сама функция: Public Function RandomWord() ' Случайное число Dim rnd As New Random() ' Ваш массив: Dim massive() As String = {"lalka", "fsdfsd546", "heyt"} ' Случайное число, ограниченное количеством строк массива Dim random As Integer = rnd.Next(massive.Length) ' Вернуть результат: Return massive(random) End Function Затем используйте функцию, функция возвращает string: Dim randomword As String = RandomWord() И делайте вывод при помощи MessageBox.Show(randomword), Console.WriteLine(randomword) или другими

Ответ 2



Вариант Sub RndStr() Dim ArrStr() Dim sStr As String ArrStr = Array("lalka", "fsdfsd546", "heyt") Randomize sStr = ArrStr(Int((UBound(ArrStr) + 1) * Rnd)) MsgBox sStr End Sub

воскресенье, 5 января 2020 г.

Как получить время простоя компьютера?

#windows #net #visual_basic #visual_studio


Как выполнить некоторое событие, если компьютер простаивает определённое время. Подскажите,
пожалуйста, какую-нибудь умную API-функцию. Или если таких нет или вы знаете, как отследить
движение мыши вне окна своего приложения, и/или когда оно неактивно, то поделитесь
советом.    


Ответы

Ответ 1



Возможно, вам нужно это: GetLastInputInfo (Windows API) Только начиная с висты эта функция отдаёт структуру только для текущего пользователя - т.е. в сервисе использовать не получится.

Ответ 2



Способ №1: Управление назначенными заданиями средствами командной строки. Часть 2 Способ №2: Task Scheduler Reference

Ответ 3



А что значит простаивает? Вы имеете в виду анализ загрузки процессора? Используйте PerformanceCounter. Если речь об отлове движения мыши и клавиатуры везде, то прочтите Processing Global Mouse and Keyboard Hooks in C#. Чтобы понять откуда ноги растут, прочтите How to set a Windows hook in Visual C# .NET

среда, 18 декабря 2019 г.

Как сгенерировать исключение которое не будет приводить к завершению работы приложения?

#c_sharp #net #visual_basic


Для тестирования функционала своего приложения решил написать простенькую тестовую
программу с которой будет работать моё приложение. 

В тестовой программе необходимо кроме всего прочего генерировать исключение которое
не будет приводить к завершению работы приложения. 

Вопрос: Как это сделать? Просто вызов throw new Exception() приводит к завершению
приложения.

Возможно мой вопрос не совсем понятен, поясню: я запускаю некоторую программу посредством
Process.Start(); И перенаправляю на себя StandardError stream. Как выглядит ситуация
когда запущенная программа выкидывает эксепшн и закрывается мне ясно и я его обрабатываю.
А вот как смоделировать ситуацию когда приложение выкидывает эксепшн и продолжает работу
мне неизвестно, собсна в этом и вопрос.

Пример эксепшена: http://blogsisadmina.ru/wp-content/uploads/2013/10/1.png 
В консольном приложении повторение финта с индексом всё равно приводит к завершению
работы приложения.
    


Ответы

Ответ 1



Все исключения должны быть отловлены. Это означает, что где-то в стеке вызовов должен быть try-catch, который проглотит исключение и, например, залогирует его. Хорошим тоном является отлавливание только исключений, которые вы предполагаете, а не просто базового типа исключения, потому что иначе вы можете прозевать проблемную ситуацию и получить повреждение данных где-то в другом месте, в результате поиск проблемы значительно усложнится. try { DoSomething(); } catch (FooException e) { Log.LogException(e); } // ... DoSomething() { throw new FooException(); } Если вы хотите запрятать от клиентов падучесть приложения и считаете, что важнее отсутствие падений, чем стабильная работа и отсутствие повреждений данных, то можете отлавливать разнообразные события unhandled exception (они есть у домена, задач, диспетчера) и отмечать исключения как обработанные, если это возможно. В этом случае приложение продолжит работать, но за состояние данных никто не будет отвечать. Dispatcher.CurrentDispatcher.UnhandledException += CurrentDispatcher_UnhandledException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException; Если исключения не будет нигде отловлены, то приложение упадёт, и информация об ошибке попадёт с системный журнал. Это не самый удобный способ, но им тоже можно пользоваться.

Ответ 2



Используйте try {..} catch(){} В блоке try вбрасываете исключение, с catch его ловите. int a = 5; try { if (a == 5) { throw new Exception("a > 5!"); } } catch(Exception e) { Console.WriteLine("Возникла ошибка!"); } Обратите внимание, что тип ошибки вбрасываемой ошибки должен совпадать с типом перехватываемой ошибки. Подробнее про try/catch: MSDN

Ответ 3



В общем я видимо только всех запутал... Мне необходимо было сгенерить подобный эксепшн: http://blogsisadmina.ru/wp-content/uploads/2013/10/1.png Проблема заключалась в том, что в консольном приложении генерация любого не перехваченного эксепшена приводила к завершению работы. И связано это судя по всему с тем, в какой поток консоль пишет исключения. Решение проблемы: использовать не консольное а winforms/wpf приложение. В этом случае любой эксепшн (ну или почти любой, все не проверял) выдаст требуемое окно с вариантом "продолжить". PS:Ну а поскольку мой вопрос был весьма сумбурным и лейб мотивом всё же была обработка и перехват эксепшенов То в качестве верного ответа я, пожалуй, укажу самый популярный на текущий момент ответ. Для большинства приходящих судя из гугла это будет то, что нужно, а тем кто будет искать ответ на тот же вопрос что и я не составит труда прочесть все комментарии

суббота, 6 июля 2019 г.

Как делают программы с интерфейсом Windows XP SP3, Vista, 7 и т.д.?

Я очень хотел делать программы с интерфейсом Windows, с трудом нашёл Visual Basic и каково было моё разочарование, когда я узнал, что там кнопки (и другой интерфейс) какие-то 2d-шные (как Chemax) и под Windows 98, NT, и другие дряхлые системы. А это не то, что я хочу! Подскажите, на каком языке (в какой среде) делают приложения с интерфейсом Windows XP, Vista, 7, и другие современные, в которых интерфейс зависит от темы и кнопки. Короче, такие как Kaspersky Norton Win Doctor и т.д. и где взять учебники и как это делать лучше? Пожалуйста, поподробнее.


Ответ

Это небось VB6? Помню, было такое дело.
Рядом с ЕХЕ-шником кладите файл ИМЯEXE.manifest примерно следующего содержания:
Windows Shell ВАЖНО. Все ocx-контролы (и dll)? которые используются для создания интерфейса (при добавлении которых появляются всякие списки, тривью (treeview)) должны быть не ниже версии 6.0. Пояснение: такой ЕХЕшник нельзя собрать на ОС ниже ХР.
Или более продвинутый вариант - ставить Visual Studio 2003 и выше. Там это включается опцией в настройках формы и одной командой глобального объекта Application

четверг, 6 июня 2019 г.

Извлечение случайного значения из массива в Visual Basic 2010

Начал изучать Visual Basic и столкнулся с проблемой. Нужно сделать символьный массив и получить случайное значение из этого массива в переменную. Я только начал изучать Visual Basic, но на php это бы выглядело как: $mass = array("lalka", "fsdfsd546", "heyt");//массив с названием $mass $per = array_rand($mass, 1);//Извлекаю из этого массива одно значение в переменную echo ($per);//Вывожу сообщение Прошу написать как этот код будет выглядеть в Visual Basic.


Ответ

Поймите: Visual Basic и VB.NET - практически одно и тоже (синтаксис очень схож), отличие в том, что VB.NET[Visual Basic .NET] работает на платформе .NET Framework. Вы просите код на "Visual Basic 2010". Ппрактически, это он и есть, этот код будет работать и в "Visual Basic 2008", "Visual Basic 2005", и даже в "VS Express 2013 for Desktop"(который содержит Visual Basic). Почитайте спецификацию и определение Visual Basic 6/VB.NET/.NET Framework. Повторюсь, лучше учите C# (тоже на платформе .NET Framework)! Сама функция: Public Function RandomWord() ' Случайное число Dim rnd As New Random() ' Ваш массив: Dim massive() As String = {"lalka", "fsdfsd546", "heyt"} ' Случайное число, ограниченное количеством строк массива Dim random As Integer = rnd.Next(massive.Length) ' Вернуть результат: Return massive(random) End Function Затем используйте функцию, функция возвращает string: Dim randomword As String = RandomWord() И делайте вывод при помощи MessageBox.Show(randomword), Console.WriteLine(randomword) или другими

вторник, 5 февраля 2019 г.

Как получить время простоя компьютера?

Как выполнить некоторое событие, если компьютер простаивает определённое время. Подскажите, пожалуйста, какую-нибудь умную API-функцию. Или если таких нет или вы знаете, как отследить движение мыши вне окна своего приложения, и/или когда оно неактивно, то поделитесь советом.


Ответ

Возможно, вам нужно это: GetLastInputInfo (Windows API)
Только начиная с висты эта функция отдаёт структуру только для текущего пользователя - т.е. в сервисе использовать не получится.

вторник, 30 октября 2018 г.

Как сгенерировать исключение которое не будет приводить к завершению работы приложения?

Для тестирования функционала своего приложения решил написать простенькую тестовую программу с которой будет работать моё приложение.
В тестовой программе необходимо кроме всего прочего генерировать исключение которое не будет приводить к завершению работы приложения.
Вопрос: Как это сделать? Просто вызов throw new Exception() приводит к завершению приложения.
Возможно мой вопрос не совсем понятен, поясню: я запускаю некоторую программу посредством Process.Start(); И перенаправляю на себя StandardError stream. Как выглядит ситуация когда запущенная программа выкидывает эксепшн и закрывается мне ясно и я его обрабатываю. А вот как смоделировать ситуацию когда приложение выкидывает эксепшн и продолжает работу мне неизвестно, собсна в этом и вопрос.
Пример эксепшена: http://blogsisadmina.ru/wp-content/uploads/2013/10/1.png В консольном приложении повторение финта с индексом всё равно приводит к завершению работы приложения.


Ответ

Все исключения должны быть отловлены. Это означает, что где-то в стеке вызовов должен быть try-catch, который проглотит исключение и, например, залогирует его. Хорошим тоном является отлавливание только исключений, которые вы предполагаете, а не просто базового типа исключения, потому что иначе вы можете прозевать проблемную ситуацию и получить повреждение данных где-то в другом месте, в результате поиск проблемы значительно усложнится.
try { DoSomething(); } catch (FooException e) { Log.LogException(e); }
// ...
DoSomething() { throw new FooException(); }
Если вы хотите запрятать от клиентов падучесть приложения и считаете, что важнее отсутствие падений, чем стабильная работа и отсутствие повреждений данных, то можете отлавливать разнообразные события unhandled exception (они есть у домена, задач, диспетчера) и отмечать исключения как обработанные, если это возможно. В этом случае приложение продолжит работать, но за состояние данных никто не будет отвечать.
Dispatcher.CurrentDispatcher.UnhandledException += CurrentDispatcher_UnhandledException; AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
Если исключения не будет нигде отловлены, то приложение упадёт, и информация об ошибке попадёт с системный журнал. Это не самый удобный способ, но им тоже можно пользоваться.

понедельник, 1 октября 2018 г.

Для чего нужен throw new NotImplementedException()

Не могу понять до конца, для чего используют конструкции вида throw new NotImplementedException(), и чем throw, например в try-catch, отличается от throw new


Ответ

В .NET есть несколько "системных" исключений, которые существуют, чтобы сообщить о причине отсутствия метода, но которые не надо ловить:
NotImplementedException — метод не реализован, но будет реализован в будущем. Вариация на тему комментария TODO, которая приводит к падению при выполнении. NotSupportedException — метод не реализован и никогда не будет реализован. Используется, если базовый класс или реализуемый интерфейс имеют широкий API, и от потомков не предполагается реализация всех методов (например, потому что какая-то возможность не поддерживается).
По умолчанию при реализации интерфейса IDE генерирует методы с throw new NotImplementedException(), предполагая, что вы реализуете их. Если вы не собираетесь этого делать (например, ваша коллекция релизует IList<>, но не поддерживает запись), то следует заменить этот код на throw new NotSupportedException("Foo is not supported due to...") с сообщением о причине отсутствия реализации (например, в случае коллекци только для чтения сообщение может быть "Коллекция только для чтения не может быть изменена.").
Если вы хотите проверить код в работе, и throw new NIE вам мешает, то можно заменить код на заглушку, например, return null; // TODO Implement Foo() method

Для чего нужен throw new NotImplementedException()

Не могу понять до конца, для чего используют конструкции вида throw new NotImplementedException(), и чем throw, например в try-catch, отличается от throw new


Ответ

В .NET есть несколько "системных" исключений, которые существуют, чтобы сообщить о причине отсутствия метода, но которые не надо ловить:
NotImplementedException — метод не реализован, но будет реализован в будущем. Вариация на тему комментария TODO, которая приводит к падению при выполнении. NotSupportedException — метод не реализован и никогда не будет реализован. Используется, если базовый класс или реализуемый интерфейс имеют широкий API, и от потомков не предполагается реализация всех методов (например, потому что какая-то возможность не поддерживается).
По умолчанию при реализации интерфейса IDE генерирует методы с throw new NotImplementedException(), предполагая, что вы реализуете их. Если вы не собираетесь этого делать (например, ваша коллекция релизует IList<>, но не поддерживает запись), то следует заменить этот код на throw new NotSupportedException("Foo is not supported due to...") с сообщением о причине отсутствия реализации (например, в случае коллекци только для чтения сообщение может быть "Коллекция только для чтения не может быть изменена.").
Если вы хотите проверить код в работе, и throw new NIE вам мешает, то можно заменить код на заглушку, например, return null; // TODO Implement Foo() method