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

воскресенье, 24 мая 2009 г.

Woody & Vista - оказывается они могут жить вместе..

С WinXP я распрощался давным-давно (дома по крайней мере), но приходилось ее держать в виде виртуальной машины - под вистой Woody работал глюкаво, а шкафов я себе нарисовал в нем уже ого-го скоко..

А оказалось, что всего-то надо было в свойствах ярлыка поставить галочку на закладке Compability - Disable Desktop Composition: теперь при запуске виста переключается из аеро в простой режим и Woody нормально работает.

Но ХР в виртуалке все равно придется оставить - есть супер-пупер древняя программа, написанная на FoxPro 2.6 для Dos-а, которую я периодически сапортю.. жду - не дождусь, когда ее (программу) решат похоронить с почестями (на которые она не заслуживает впрочем.. наверное потому что не я ее писал ;) )

суббота, 24 января 2009 г.

Windows 7

Чуть не написал "Vista 7" :)

Поставил дома на раздел, где для интереса жила MacOS (жила, а пользы с нее никакой, так что не жалко)

Я никогда и на висту не жаловался, и 8 часов на работе с ней программлю, и дома стоит давным-давно и всех устраивает.. но теперь подумываю, что может перейти на 7-ку (хоть и бетку)?..

Новый компьютер (для HTPC) точно с Windows7 будет.. ощущение, что шустрее висты, не проходит; может и "основной" компьютер дома переведу на 7, заодно попробую (для своих проектов) перейти на Delphi2009


вторник, 23 сентября 2008 г.

Почему игнорируют UAC?..

Задолбало... ладно я на первых порах игнорировал существование UAC (User Account Control), потому что не очень представлял себе, что это... а наши тестеры до сих пор предпочитают у себя его отключать, чтобы потом долго выяснять у юзеров - как же так, у нас все работает...

Но проблема с uac есть у пунто свитчера - он свои исключения пытается добавлять в файл, который лежит в Program Files (и в который прав на запись конечно же нет)

Но ладно пунто, он только-только стал (в 3 версии) серьезным продуктом под опекой рамблера или яндекса, какого то из поисковиков в общем; но у меня не запускалась Mass Effects упорно - но у всех же работает! Пока не сообразил запустить от имени администратора - и случилось чудо

А пишет ведь серьезная контора, не чета нам... а аналитики разные говорят, что у 80% пользователей висты uac как раз включен...

Погода, непрекращающийся дождь вгоняют в сильную хандру и депрессию, да еще и с окончанием работы над шкафом занятся нечем :'-( (ну то есть заняться то есть чем, но лень начинать)

Вчера где-то увидел/заначил ссылку - Easy electronics; прикольно, аж захотелось подоставать старые железки из ящика с хламом (который тем не менее не выбросил, когда порядок наводил)

Но лень

среда, 13 августа 2008 г.

Как добавить обработчик для типа файла (и пример)

К примеру, надо добавить thumbnail provider для flv файла:
  • сначала надо в HKEY_CLASSES_ROOT найти нужное расширение файла (.flv)
  • если нашли - читаем значение по умолчанию для ветки (KMPlayer например после добавления воспроизведения flv файлов на себя обозвал такие файлы как flv_auto_file)? если нет - создаем ветку и придумываем название для такого типа файлов, записывая его в значение по умолчанию для ветки
  • теперь надо открыть (или создать) в HKEY_CLASSES_ROOT ветку, значение которой прочитали (flv_auto_file), и
  1. проверить, есть ли в ней ветка Shell (потому что если ее нет, то даже если все остальное правильно, все равно ничего работать не будет... по крайней мере для эскизов я точно об этом знаю)
  2. в ветке ShellEx добавить ветку с guid-ом нужного обработчика (например для обработчика эскизов - {E357FCCD-A995-4576-B01F-234630154E96}), и записать в значение по умолчанию guid сом-обьекта, который собственно и будет создавать эскизы
  • для красоты можно записать в ветку flv_auto_file ключик Treatment - в висте он будет дорисовывать рамочку вокруг эскиза; например рамка в виде кадра кинопленки - значение 3.
  • вообще говоря не относится к регистрации особо, но - если провайдер эскизов реализует интерфейс IInitializeWithFile, то в HKEY_CLASSES_ROOT\CLSID\provider_guid надо добавить ключик DisableProcessIsolation со значением 1

Простенький проект, который будет рисовать эскизы в проводнике для flv файлов (ахтунг, для висты! в хр используется другой интерфейс для показа эскизов):
library vista_thumb;

uses
  ComServ,
  thumbProvider_impl in 'thumbProvider_impl.pas';

exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;

{$R *.RES}

begin
end.

unit thumbProvider_impl;

interface

uses
  windows, graphics, sysutils, 
  ActiveX, ComObj, registry, propsys;

const
  CLSID_ThumbProvider: TGUID = '{C8F39152-17CA-42F9-9FC0-4499C6D74C92}';

type
  TThumbProvider2 = class (TComObject, IInitializeWithFile, IThumbnailProvider)
  public
    function IInitializeWithFile.Initialize = Initialize1;
    function Initialize1 (pszFilePath: LPCWSTR; grfMode: DWORD): HRESULT; stdcall;
    function GetThumbnail(cx: Cardinal; out phbmp: HBITMAP; out pdwAlpha: Cardinal): HRESULT; stdcall;
  end;

implementation

uses
  ComServ, ShlObj;

type
  TThumbProviderFactory = class (TComObjectFactory)
    procedure UpdateRegistry (Register: Boolean); override;
  end;

{ TThumbProviderFactory }

procedure TThumbProviderFactory.UpdateRegistry(Register: Boolean);
const
  shell_path = 'Shell';
  shellex_thumbnail = 'ShellEx\{E357FCCD-A995-4576-B01F-234630154E96}';
var
  reg: TRegistry;
  base_path: string;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    if Register then
    begin
      inherited UpdateRegistry (Register);
      reg.OpenKey ('.flv', true);
      try
        if reg.ValueExists ( '' ) then
          base_path := reg.ReadString ( '' )
        else
          base_path := 'flv_auto_file';
      finally
        reg.CloseKey;
      end;

      reg.OpenKey ( base_path, true );
      try
        if not reg.KeyExists ( shell_path ) then
          reg.CreateKey ( shell_path );
      finally
        reg.CloseKey;
      end;

      reg.OpenKey ( base_path, false );
      try
        reg.WriteInteger ('Treatment', 3);
      finally
        reg.CloseKey;
      end;

      if reg.OpenKey (base_path + '\' + shellex_thumbnail, true) then
      try
        reg.WriteString ('', GUIDToString (CLSID_FlashFilesThumbProvider));
      finally
        reg.CloseKey;
      end;

      if reg.OpenKey ( 'CLSID\' + GUIDToString (CLSID_FlashFilesThumbProvider), false ) then
      try
        reg.WriteInteger ('DisableProcessIsolation', 1);
      finally
        reg.CloseKey;
      end;

    end else begin
      reg.DeleteKey (base_path + '\' + shellex_thumbnail);
      inherited UpdateRegistry (Register);
    end;

    SHChangeNotify ( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil );
  finally
    reg.Free;
  end;
end;

{ TThumbProvider2 }

function TThumbProvider2.GetThumbnail(cx: Cardinal; out phbmp: HBITMAP; out pdwAlpha: Cardinal): HRESULT;
var
  bmp: TBitmap;
begin
  Result := E_FAIL;

  bmp := TBitmap.Create;
  try
    bmp.Width := cx; bmp.Height := cx div 2;
    bmp.PixelFormat := pf32bit;

    with bmp.Canvas do
    begin
      Brush.Color := clFuchsia;
      FillRect (ClipRect);
      TextOut (5, 5, format ('%d', [cx]));
      TextOut (5, 25, 'fuck U!');
    end;

    phbmp := bmp.Handle;
    bmp.ReleaseHandle;
    pdwAlpha := WTSAT_RGB;

    Result := S_OK;
  finally                                          
    bmp.free;
  end;
end;

function TThumbProvider2.Initialize1 (pszFilePath: LPCWSTR; grfMode: DWORD): HRESULT;
begin
  Result := S_OK;
end;

initialization
  TThumbProviderFactory.Create (ComServer, TThumbProvider2,
      CLSID_ThumbProvider, 'Thumbnail provider for Flash files',
      '', ciMultiInstance, tmApartment);


end.