Portable UC? [Y/N]

Модератор: motyara

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

Сообщение Qwertiy » Вт авг 17, 2010 9:49 pm

Qwertiy писал(а):
Qwertiy писал(а):Дело в том, что без прав администратора это сделать нельзя.
Немного ошибся... Нельзя стандартным перетаскиванием файла шрифта в Шрифты. А вот зарегистрировать шрифт в системе без копирования в Fonts возможно.
Опять немного ошибся... Возможна только временная регистрация, которая действует до момента её отмены или перезагрузки компьютера.

Мне кажется, стоит всё-таки добавить регистрацию шрифтов на время работы UC. Это не занимает много времени (во всех смыслах), однако польза достаточно ощутима. Например, мне нравится шрифт Consolas и семейство DejaVu.

Необходимый код почти не будет отличаться от кода для модального запуска uncom.exe с регистрацией шрифтов до его запуска и её отменой после завершения:

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

Module All

Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long

Private Sub AddFonts()
  Try
    Dim FontPath As String = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "Fonts")
    For Each FontFile As String In Directory.GetFiles(FontPath)
      AddFontResource(FontFile)
    Next FontFile
  Catch
  End Try
End Sub

Private Sub RemoveFonts()
  Try
    Dim FontPath As String = My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "Fonts")
    For Each FontFile As String In Directory.GetFiles(FontPath)
      RemoveFontResource(FontFile)
    Next FontFile
  Catch
  End Try
End Sub

Public Sub Main()
  AddFonts()
  Try
    System.Diagnostics.Process.Start(My.Computer.FileSystem.CombinePath(My.Application.Info.DirectoryPath, "uncom.exe")).WaitForExit()
  Catch ex As Exception
    MsgBox(ex.Message, MsgBoxStyle.Critical, "Не удалось запустить Unreal Commander")
  End Try
  RemoveFonts()
End Sub

End Module
Отсутствие счётчика процессов и какой-нибудь другой проверки неслучайно - система сама считает количество вызовов функций для одних и тех же файлов.
Uncom with Fonts.7z
VS2005 Solution, VB.NET
(31.54 КБ) 127 скачиваний
PS: Надеюсь, Вы не против использования в этой программе значка UC. Просто она предназначена только для запуска UC, поэтому, т. к. некоторые программы (меню для флешек) извлекают значок из exe-файла, логично, чтобы он не отличался от значка UC.

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3132
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Вс сен 05, 2010 5:06 am

Qwertiy писал(а):Мне кажется, стоит всё-таки добавить регистрацию шрифтов на время работы UC. Это не занимает много времени (во всех смыслах), однако польза достаточно ощутима. Например, мне нравится шрифт Consolas и семейство DejaVu.
Возможно позже это будет добавлено.

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

Сообщение Qwertiy » Вс сен 19, 2010 4:17 pm

Qwertiy писал(а):

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

Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long
На самом деле, эти функции возвращают Integer...
Long в коде остался от VB6, в котором Integer был 16-битным.

PS: Это будет добавлено в 0.97?

Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3132
Зарегистрирован: Пт окт 12, 2007 9:00 pm
Контактная информация:

Сообщение Max Diesel » Вс сен 19, 2010 4:41 pm

Qwertiy писал(а):
Qwertiy писал(а):

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

Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function RemoveFontResource Lib "gdi32" Alias "RemoveFontResourceA" (ByVal lpFileName As String) As Long
На самом деле, эти функции возвращают Integer...
Long в коде остался от VB6, в котором Integer был 16-битным.

PS: Это будет добавлено в 0.97?
Загрузка и выгрузка временных шрифтов уже добавлена, в следующей версии предположительно она будет доступна для использования (временные шрифты надо будет складывать в подкаталог "Fonts" каталога программы).

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

Сообщение Qwertiy » Вс сен 19, 2010 4:49 pm

Max Diesel писал(а):Загрузка и выгрузка временных шрифтов уже добавлена, в следующей версии предположительно она будет доступна для использования (временные шрифты надо будет складывать в подкаталог "Fonts" каталога программы).
Спасибо.

Ответить