UAC: с чем едят?

Привет всем!

Здесь я хочу немного рассказать об UAC и о том как же взаимодействовать с ним в NET'е.

Для начала давайте вспомним что же такое этот UAC:

Контроль учётных записей пользователей (англ. User Account Control, UAC) — компонент операционных систем Microsoft Windows, впервые появившийся в Windows Vista. Этот компонент запрашивает подтверждение действий, требующих прав администратора, в целях защиты от несанкционированного использования компьютера.

Как видно из цитаты в Окнах без UAC никуда. И дабы не отставать от моды давайте рассмотрим пару примеров написанных на VB.NET.

Функция проверки на наличие прав Администратора у программы:

Private Function CheckAdmin() As Boolean
    Dim wp As New System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent())
    Return wp.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator)
End Function

Запуск программы с правами Администратора (с UAC, то бишь вылетит вопрошающие окно):

Dim startInfo As New ProcessStartInfo(Application.ExecutablePath)
startInfo.UseShellExecute = True
startInfo.WorkingDirectory = Environment.CurrentDirectory
startInfo.Verb = "runas"

Try
    Process.Start(startInfo)
Catch ex As System.ComponentModel.Win32Exception
    MsgBox(ex.Message)
End Try

Добавить на Button красивый щит, как бы говоря конечному пользователю "У нас всё серьёзно!":

'Импорт:
Private Declare Auto Function SendMessage Lib "user32.dll" _
         (ByVal hwnd As IntPtr, _
          ByVal msg As UInteger, _
          ByVal wParam As UInteger, _
          ByVal lParam As UInteger) As UInteger

'В процедуру/функцию/куда угодно:
ИМЯ_КНОПКИ.FlatStyle = FlatStyle.System
SendMessage(ИМЯ_КНОПКИ.Handle, 5644, 0, &HFFFFFFFFUI)

Вот так это выглядит: 1920131433 UAC: с чем едят?

Статью и примеры для вас подготовил Gemorg. Прошу любить и жаловать)

P.S. Должно работать на Окнах старше XP (не включая).

P.P.S. Тестировалось только на Win 8.

  Метки: ,
  Gemorg
  Просмотров: 4 283
  Запись опубликована в 20:28

Ноя 17, 2013 - Разное    2 комментария

Методичка по Pascal

Вот уже идет третий месяц учебы.

На паре "Основы программирования и алгоритмизации" перешли к изучению паскаля по методичке самого преподавателя.

Не пожалел, что отдал за нее деньги, все описано на столько понятно, что даже далекие люди начинают втягиваться.

Кому интересно, пишите, поделюсь с вами.

20131117 131543 225x300 Методичка по Pascal

20131117 131607 225x300 Методичка по Pascal

  Метки: , , ,
  Евгений
  Просмотров: 5 740
  Запись опубликована в 09:28

Решение мат. выражений средствами .NET

Решение.NET  Решение мат. выражений средствами .NET

До этого мы разбирали пример, решения выражения с помощью метода Eval из VBS, а сегодня разберем, как средствами .NET вычислить результат строки (выражения)

Решение.NET.zip

Imports System.CodeDom.Compiler
Imports System.Reflection
Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Label1.Text = "Ответ: " & Решить(TextBox1.Text)
    End Sub
    Public Function Решить(ByVal выражение As String) As String
        Dim myCode As CodeDomProvider = CodeDomProvider.CreateProvider("VB")
        Dim myPar As New CompilerParameters()
        'формируем виртуальный класс, в котором будет производиться расчет
        Dim myCodeBody As New System.Text.StringBuilder()
        myCodeBody.AppendLine("Public Class MyCalculator")
        myCodeBody.AppendLine("Public Function Calc() As Double")
        'TextBox1.Text.ToLower().Replace(«x», TextBox2.Text) — меняем икс в формуле (TextBox1) на число указанное в TextBox2
        '.Replace(«,», «.») — меняем запятые на точки, т.к. в VB в качестве десятичного разделителя используются точки
        myCodeBody.AppendLine(String.Format("Return {0}", выражение))
        myCodeBody.AppendLine("End Function")
        myCodeBody.AppendLine("End Class")
        'компилируем
        Dim myResult As CompilerResults = myCode.CompileAssemblyFromSource(myPar, myCodeBody.ToString())
        If myResult.Errors.HasErrors Then
            'какие-то ошибки
            For i As Integer = 0 To myResult.Errors.Count - 1
                If myResult.Errors(i).ErrorText = "Ожидалось выражение." Then
                    MsgBox(myResult.Errors(i).ErrorText, MsgBoxStyle.Critical, "Ошибка")
                End If
            Next
            Return "Ошибка!"
        End If
        'ошибок нет, выдергиваем наш класс
        Dim myAsm As Assembly = myResult.CompiledAssembly()
        Dim myCls As Object = myAsm.CreateInstance("MyCalculator", True)
        'выводим результат
        Return myCls.Calc().ToString
    End Function
End Class
  Метки: , , ,
  Евгений
  Просмотров: 5 826
  Запись опубликована в 09:13

Отключение монитора (Спящий режим)

samsung f2380m feature13 150x150 Отключение монитора (Спящий режим)

Выйти из спящего режима можно пошевелив мышью.

Public Class Form1
    <Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)> _
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function
    Private Const MONITOR_ON = -1&
    Private Const MONITOR_LOWPOWER = 1&
    Private Const MONITOR_OFF = 2&
    Private Const SC_MONITORPOWER = &HF170 '&
    Private Const WM_SYSCOMMAND = &H112
    'Отключение
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF)
    End Sub
    'Включение
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        SendMessage(Me.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_ON)
    End Sub
End Class
  Метки:
  Евгений
  Просмотров: 4 475
  Запись опубликована в 07:03

Ссылки со страницы

На форму кидаем:

  • Button
  • ListBox
  • WebBrowser

В WebBrowser пишите любой сайт, я взял https://ya.ru/

Ну и сам код:

Dim H As HtmlElementCollection = WebBrowser1.Document.Body.GetElementsByTagName("a")
For Each Url As HtmlElement In H
ListBox1.Items.Add(Url.GetAttribute("href"))
Next

Также можно получить, как ссылку так и текст к ней.

ListBox1.Items.Add(Url.GetAttribute("href") & "|" & Url.InnerHtml)

URL 300x214 Ссылки со страницы

  Метки:
  Евгений
  Просмотров: 7 879
  Запись опубликована в 07:12

Типы данных в PascalABC.NET

Любая переменная в PascalABC.NET имеет определённый тип. Каждый тип, используется для определённых целей и имеет свои уникальные возможности.

Типы в PascalABC.NET:

  • Shortint - целочисленный тип. Любое число от -128 до 127. Занимает 1 байт памяти.
  • Smallint - целочисленный тип. Любое число от -32768 до 32767. Занимает 2 байта памяти.
  • Integer, Longint - целочисленные типы. Любое число от -2147483648 до 2147483647. Занимает 4 байта памяти.
  • Int64 - целочисленный тип. Любое число от -9223372036854775808 до 9223372036854775807. Занимает 8 байт памяти.
  • Byte - целочисленный тип. Любое число без знака от 0 до 255. Занимает 1 байт памяти.
  • Word - целочисленный тип. Любое число без знака от 0 до 65535. Занимает 2 байт памяти.
  • Longword, Cardinal - целочисленный тип. Любое число без знака от 0 до 4294967295. Занимает 4 байт памяти.
  • Uint64 - целочисленный тип. Любое число без знака от 0 до 18446744073709551615. Занимает 8 байт памяти.
  • Real, Double - вещественный тип. Любое число от -1.8∙10308 до 1.8∙10308. Имеет двойную точность, кол-во значащих цифр 15. Занимает 8 байт памяти.
  • Single - вещественный тип. Любое число от -1.8∙1038 до 1.8∙1038. Кол-во значащих цифр 7. Занимает 4 байта памяти.
  • Boolean - логический тип. Может принимать 2 значения: Истина (True) и Ложь (False). Занимает 2 байта памяти.
  • Char - символьный тип. Может содержать 1 любой символ. Занимает 2 байта памяти.
  • String - строковый тип. Может содержать произвольное кол-во символов.
  • Так-же имеется множество других типов (перечислимый, диапазонный, процедурный, файловый и пр.) с которыми мы познакомимся позже.

Чаще всего используется только 4 типа: Integer, String, Real и Boolean. А теперь, приступим к самому интересному - практике.

Все переменные в PascalABC.NET объявляются в секции var, например:

var
  i: integer;

begin
  // Тут код программы
end.

В этом примере мы объявили переменную "i", целочисленного типа. Имя переменной обязательно должно быть на английском языке и не может начинаться с цифры. Также можно объявить сразу несколько переменных:

var
  a, b, c: integer;

Тут мы объявили стразу 3 переменных (a, b, c) типа Integer. Присваивание значений переменным:

// Объявляем переменные
var
  i: integer;
  r: real;
  s: string;
  b: boolean;

begin
// Присваиваем значения переменным
  i := 10;
  r := 1.2;
  s := 'Hello World';
  b := True;
end.

Как видно из этого примера каждой переменной можно присвоить определённый тип данных. Такой код вызовет ошибку:

var
  i: integer;

begin
  i := 'Текст';
end.

Можно присвоить значение переменной, сразу после объявления:

var
  i: integer := 10; // Сразу присвоили значение
  s := 'Hello World'; // Можно присвоить значение, без объявления типа.

begin
  WriteLn(i);
  WriteLn(s);
end.

В этом примере я использовал процедуру WriteLn для вывода переменной на экран.

  Метки:
  BaboshinSD
  Просмотров: 47 871
  Запись опубликована в 09:46

Ох, эти рабочие будни!

Дорогие друзья, хочу извиниться за такое редкое написание статей на блог, но это скоро исправим.

Как я уже обещал, что скоро выйдет новая версия FastScreen, которую я планировал добавить в те выходные, но все сложилось иначе, так что выход новой версии запланирован на 22 сентября(воскресенье).

Также хочу похвастаться поделится тем, что я назначен модератором в раздел Visual Basic.NET на КиберФоруме!

Это большая честь для меня и я буду делать все, чтобы дальше развивать раздел, следить за порядком и помогать в решении вопросов!

Screenshot 19 09 18 31 36 300x168 Ох, эти рабочие будни!

  Метки: ,
  Евгений
  Просмотров: 2 982
  Запись опубликована в 14:42

С Днем Программиста!

Чуть не забыл про этот замечательный праздник.

От души желаю всем программистам хороших программ, по меньше багов и удачи в жизни!

С Днем Программиста 300x200 С Днем Программиста!

  Метки:
  Евгений
  Просмотров: 2 183
  Запись опубликована в 09:00

Стабильная версия FastScreen — СКОРО

Уже совсем скоро выйдет стабильная версия FastScreen.

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

По нашим подсчетам программой сделано ~ 10 тысяч скриншотов и загружено ~ 5 тысяч.

Статистика в принципе радую, с каждым днем создается все больше и больше скриншотов, а с новой версией будет еще больше!

header Стабильная версия FastScreen   СКОРО

Пару новых скриншотов:

1234 300x260 Стабильная версия FastScreen   СКОРО

Скриншот окна 300x150 Стабильная версия FastScreen   СКОРО

  Метки: ,
  Евгений
  Просмотров: 6 557
  Запись опубликована в 15:24

Страницы:«1...33343536373839...46»