Необычные функции

Здесь можно оставить пожелание относительно функций, которых в программе нет, но которые вам хотелось бы в ней видеть.

Модератор: motyara

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Откпывать файлы от другого имени

Сообщение Qwertiy »

Для exe-файлов в Windows существует пункт контекстного меню "Запуск от имени...". Очень не хватает такой же возможности для других типов файлов, особенно msi. Нельзя ли добавить такую функцию?

PS: Если Вы предложете reg-файл, добавляющий соответствующий пункт (и, по возможности, не требующий прав администратора для интеграции в реестр), то я возражать не буду...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Для exe-файлов в Windows существует пункт контекстного меню "Запуск от имени...". Очень не хватает такой же возможности для других типов файлов, особенно msi. Нельзя ли добавить такую функцию?

PS: Если Вы предложете reg-файл, добавляющий соответствующий пункт (и, по возможности, не требующий прав администратора для интеграции в реестр), то я возражать не буду...
Вообще-то этот пункт контекстного меню является системным и отображается не только в Проводнике, но и в Unreal Commander тоже. При желании можно попытаться зайти в каталог "System Volume Information" и в ответ на запрос согласиться зайти от имени другой учетной записи (программа будет запущена от имени другой учетной записи).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):Для exe-файлов в Windows существует пункт контекстного меню "Запуск от имени...". Очень не хватает такой же возможности для других типов файлов, особенно msi. Нельзя ли добавить такую функцию?

PS: Если Вы предложете reg-файл, добавляющий соответствующий пункт (и, по возможности, не требующий прав администратора для интеграции в реестр), то я возражать не буду...
Вообще-то этот пункт контекстного меню является системным и отображается не только в Проводнике, но и в Unreal Commander тоже. При желании можно попытаться зайти в каталог "System Volume Information" и в ответ на запрос согласиться зайти от имени другой учетной записи (программа будет запущена от имени другой учетной записи).
С этим я не спорю. Пункт есть, но, как и в Проводнике, только для программ, т. е. exe-файлов. А я хочу не только для них, а для всех типов, особенно для msi.

PS: запустить UC от другого имени - не проблема... Просто обычно не хочется производить кучу лишних действий только для того, чтобы открыть один файл от другого имени...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):PS: запустить UC от другого имени - не проблема... Просто обычно не хочется производить кучу лишних действий только для того, чтобы открыть один файл от другого имени...
Такой вариант пока что в планах отсутствует. Лично у меня запускаются две копии Unreal Commander от разных учетных записей и соответственно я просто переключаюсь между ними.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Такой вариант пока что в планах отсутствует. Лично у меня запускаются две копии Unreal Commander от разных учетных записей и соответственно я просто переключаюсь между ними.
Держать специально запущенную копию ради запуска пары msi'шников в день? Не очень-то удобно...

Уже написал нужную программу, но явно слишком запутанно:

Код: Выделить всё

Public Class Form1

Private [Step] As Integer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  Dim Args As String = LTrim(Command$()) & "        "
  If Args.StartsWith("step=2") Then
    Me.Text &= " - Шаг 2 - Собственно запуск"
    [Step] = 2
    TxtCmd.Text = Trim(Args.Substring(8))
    TxtArgs.Text = ""
    TxtUser.Enabled = False
    TxtPass.Enabled = False
    TxtDomain.Enabled = False
    ChkAuto.Checked = False
    ChkAuto.Enabled = False
    If Args.Chars(6) = "a"c Then
      ChkAuto.Checked = True
      BtnOk_Click(sender, e)
    End If
  Else
    Me.Text &= " - Шаг 1 - Ввод имени и пароля"
    [Step] = 1
    TxtCmd.Text = My.Application.Info.DirectoryPath & "\" & My.Application.Info.AssemblyName & ".exe"
    If Args.StartsWith("step=1 ") Then
      TxtArgs.Text = "step=2  " & Trim(Args.Substring(8))
    Else
      TxtArgs.Text = "step=2  " & Args
    End If
    TxtCmd.Enabled = False
    TxtArgs.Enabled = False
    ChkAuto.Checked = True
  End If
End Sub

Private Sub ChkSilent_Changed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChkAuto.Click, ChkAuto.CheckedChanged
  If [Step] = 1 Then
    If ChkAuto.Checked Then
      If TxtArgs.Text.Length > 8 Then
        TxtArgs.Text = TxtArgs.Text.Substring(0, 6) & "a " & TxtArgs.Text.Substring(8)
      Else
        TxtArgs.Text = TxtArgs.Text.Substring(0, 6) & "a "
      End If
    Else
      If TxtArgs.Text.Length > 8 Then
        TxtArgs.Text = TxtArgs.Text.Substring(0, 6) & "  " & TxtArgs.Text.Substring(8)
      Else
        TxtArgs.Text = TxtArgs.Text.Substring(0, 6) & "  "
      End If
    End If
  End If
End Sub

Private Sub BtnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnOk.Click
  Dim Prc As New System.Diagnostics.Process
  Try
    With Prc.StartInfo
      .FileName = Trim(TxtCmd.Text())
      .Arguments = Trim(TxtArgs.Text)
      If [Step] = 1 Then
        .UserName = Trim(TxtUser.Text)
        .Password = StringToSecureString(TxtPass.Text)
        .Domain = Trim(TxtDomain.Text)
        .UseShellExecute = False
      Else
        .UseShellExecute = True
      End If
    End With
    Prc.Start()
  Catch ex As Exception
    If MsgBox("Невозможно запустить процесс." & vbCrLf & "Выйти?", MsgBoxStyle.YesNo Or MsgBoxStyle.Critical, "ОШИБКА") = MsgBoxResult.No Then
      Exit Sub
    End If
  End Try
  Me.Close()
End Sub

Private Sub BtnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCancel.Click
  Me.Close()
End Sub

Private Function StringToSecureString(ByVal Str As Char()) As System.Security.SecureString
  Dim Res As New System.Security.SecureString
  For Q As Integer = 0 To Str.Length - 1
    Res.AppendChar(Str(Q))
  Next Q
  Return Res
End Function

End Class
RunAs 2.7z
VS 2005 Solution, VB
(35.31 КБ) 227 скачиваний
Итак:
1. Хотелось бы встроенную функцию... Надеюсь, она появится в планах - это очень полезная возможность!
2. Кто знает, как сделать по-человечески, пожалуйста напишите.

PS: Для использования из UC аргументы "%P%N" вместе с кавычками.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Заморозка списка

Сообщение Qwertiy »

Пожалуйста, добавьте кнопку-флажок "Заморозить список", которая бы прекращала автообновление списка (для каждой вкладки свой флажок). И ещё настройку "Замораживать список при исчезновении диска". Т. е., например, если открыта флешка, я её достаю, то UC, если этот флажок установлен, не переходит на другой путь, а активирует флажок "Заморозить список" для этой вкладки.

PS: можно сделать, чтобы выделение не снималось при переходе на другую вкладку этой же панели и возврате в исходную?
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Пожалуйста, добавьте кнопку-флажок "Заморозить список", которая бы прекращала автообновление списка (для каждой вкладки свой флажок).
Такая кнопка есть в планах (под другим названием конечно же), возможно она будет скоро добавлена.
Qwertiy писал(а):И ещё настройку "Замораживать список при исчезновении диска". Т. е., например, если открыта флешка, я её достаю, то UC, если этот флажок установлен, не переходит на другой путь, а активирует флажок "Заморозить список" для этой вкладки.
А вот этого в планах нет и смысл такой опции мне видится сомнительным...
Qwertiy писал(а):PS: можно сделать, чтобы выделение не снималось при переходе на другую вкладку этой же панели и возврате в исходную?
Это тоже есть в планах (как и сохранение во вкладке списка найденных файлов)...
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):И ещё настройку "Замораживать список при исчезновении диска". Т. е., например, если открыта флешка, я её достаю, то UC, если этот флажок установлен, не переходит на другой путь, а активирует флажок "Заморозить список" для этой вкладки.
А вот этого в планах нет и смысл такой опции мне видится сомнительным...
Смысл есть. Простейший вариант - если мне этот список ещё понадобится для каких-то целей (печать, удаление исходных файлов, если это был CD-диск и т. д.), или же я собираюсь вставить флешку повторно, или она вообще отключилась сама (бывает и такое).
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Смысл есть. Простейший вариант - если мне этот список ещё понадобится для каких-то целей (печать, удаление исходных файлов, если это был CD-диск и т. д.), или же я собираюсь вставить флешку повторно, или она вообще отключилась сама (бывает и такое).
На мой взгляд причина недостаточно весомая, такая функция бы создала больше проблем чем удобств.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Отмена последнего действия

Сообщение Qwertiy »

Пожалуйста, добавьте возможность отмены последнего переименования, перемещения, копирования и удаления в корзину. Под отменой я имею в виду обратное действие, возвращающее всё к исходному состоянию (если оно возможно).

PS: Заметьте, что такая возможность присутствует в Проводнике.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Пожалуйста, добавьте возможность отмены последнего переименования, перемещения, копирования и удаления в корзину. Под отменой я имею в виду обратное действие, возвращающее всё к исходному состоянию (если оно возможно).
Хм... мысль интересная, но у меня нет идей насчет того как восстановить файл из корзины (в смысле программно и в смысле конкретный файл, корзинное место жительства которого надо еще и каким-то образом узнать у системы при удалении).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):у меня нет идей насчет того как восстановить файл из корзины
Думаю, это должно помочь: Работа с корзиной в Delphi...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Думаю, это должно помочь: Работа с корзиной в Delphi...
Судя по описанию функции на этой странице нет функции, которая позволяла бы удаляя файл в корзину узнать какое именно имя в корзине он получил... а без такой возможности восстановление если и удастся произвести, то лишь для последнего файла (а по умолчанию каталоги удаляются по файлам, а не целиком).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Судя по описанию функции на этой странице нет функции, которая позволяла бы удаляя файл в корзину узнать какое именно имя в корзине он получил... а без такой возможности восстановление если и удастся произвести, то лишь для последнего файла (а по умолчанию каталоги удаляются по файлам, а не целиком).
Если есть лог удалённых файлов (а без него всё равно не обойтись), то достаточно сравнить исходные имена файлов в корзине с именами в этом списке. Для ускорения обработки можно оба списка отсортировать.
Ответить