1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

DLL ISFlash 0.0.2

Плагин для отображения swf файлов в инсталляторах Inno Setup.

  1. Старожил Проверенный

    Регистрация:
    15 июн 2011
    Сообщения:
    8
    Симпатии:
    5
    Пользователь VoLT разместил новый ресурс:

    ISFlash - Плагин для отображение swf файлов в инсталляторах Inno Setup.

    Узнать больше об этом ресурсе...
     
  2. Старожил

    Регистрация:
    21 июл 2013
    Сообщения:
    14
    Симпатии:
    0
    no working
     
  3. Ветеран Модератор

    Регистрация:
    26 июн 2011
    Сообщения:
    896
    Симпатии:
    613
    У меня на юникоде пашет.
     
    Kratosx нравится это.
  4. Пользователь

    Регистрация:
    29 дек 2014
    Сообщения:
    8
    Симпатии:
    0
    У некоторых пользователей выдает ошибку.
    У двоих человек с одинаковой ОС, у одного проигрывает у другого выдает ошибку.
    Что должно быть установлено в ОС для корректного проигрывания этого плагина?
    ошибка флеша.jpg
     
  5. Новичок

    Регистрация:
    13 ноя 2015
    Сообщения:
    11
    Симпатии:
    22
    Пол:
    Мужской
    По адресу 10001136 лежит команда mov ecx, [eax] (помещение в ecx содержимого по адресу, хранящемуся в eax), чуть ранее выполняется mov eax, dword_1000F044 (значение переменной занести в eax), в dword_1000F044 должен лежать адрес указателя на интерфейс IShockwaveFlash. Но т.к. результат вызова CoCreateInstance в библиотеке не проверяется и в dword_1000F044 ничего не попадает, то при выполнении команды по адресу 10001136 в eax 0 будет лежать, читать с такого адреса ну никак нельзя.
    Также в библиотеке не нужны ни GetWindow, ни субклассирование контейнера для флэша, чтобы нельзя было контекстное меню на флэше вызвать, достаточно контейнер disabled сделать.
    Правильно зарегистрированный ocx FlashPlayer'а.

    Да, сабж без сторонних библиотек:
    Код (Inno):
    [Setup]
    AppName=test
    AppVerName=test
    DefaultDirName={tmp}
    DirExistsWarning=no
    Uninstallable=no
    CreateUninstallRegKey=no

    [Files]
    Source: 1.swf; Flags: dontcopy

    [Code]
    #define A = (Defined UNICODE) ? "W" : "A"
    const
      WS_CHILD = $40000000;
      WS_VISIBLE = $10000000;
      WS_CLIPSIBLINGS = $04000000;
      WS_DISABLED = $08000000;
      HWND_BOTTOM = 1;
      IShockwaveFlash_Prop_Width = 8;
      IShockwaveFlash_Prop_Height = 9;

    function CreateWindowEx(dwExStyle: DWORD; lpClassName, lpWindowName: string; dwStyle: DWORD; x, y, nWidth, nHeight: Integer; hWndParent: HWND; hMenu: HMENU; hInstance, lpParam: Longint): HWND; external 'CreateWindowEx{#A}@user32.dll stdcall';
    function DestroyWindow(hWnd: HWND): BOOL; external 'DestroyWindow@user32.dll stdcall';
    function AtlAxAttachControl(pControl: IDispatch; hWnd: HWND; out ppUnkContainer: Longint): HRESULT; external 'AtlAxAttachControl@atl.dll stdcall';
    function SetWindowPos(hWnd, hWndInsertAfter: HWND; X, Y, cx, cy: Integer; uFlags: UINT): BOOL; external 'SetWindowPos@user32.dll stdcall';
    function GetSysColor(nIndex: Integer): DWORD; external 'GetSysColor@user32.dll stdcall';

    var
      hWndFlash: HWND;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    function CreateFlashWindow(hWndParent: HWND; x, y, cx, cy: Integer; crBackground: TColor; szFileName: string): HWND;
    (*
    * hWndParent  : A handle to the parent or owner window of the window being created.
    * x           : The initial horizontal position of the window.
    * y           : The initial vertical position of the window.
    * cx          : The width, in device units, of the window. Set to -1 to get width from flash movie
    * cy          : The height, in device units, of the window. Set to -1 to get height from flash movie
    * crBackground: The flash movie background color
    * szFileName  : Path to flash movie file
    *)

    var
      objFlash: Variant;
      hr: HRESULT;
      lppv: Longint;
    begin
      if not FileExists(szFileName) then Exit;
      try
        objFlash := CreateOleObject('ShockwaveFlash.ShockwaveFlash');
      except
        RaiseLastException;
      end;
      Result := CreateWindowEx(0, 'Message', '', WS_VISIBLE or WS_CHILD or WS_CLIPSIBLINGS or WS_DISABLED, 0, 0, 0, 0, hWndParent, 0, HInstance, 0);
      if Result = 0 then Exit;
      hr := AtlAxAttachControl(IDispatch(objFlash), Result, lppv);
      if hr <> 0 then Exit;
      objFlash.Movie := szFileName;
      while (objFlash.PercentLoaded <> 100) do
        Application.ProcessMessages;
      if crBackground < 0 then
        objFlash.BackgroundColor := GetSysColor(crBackground and $000000FF)
      else
        objFlash.BackgroundColor := crBackground;
      if cx = -1 then
        cx := Round(objFlash.TGetPropertyAsNumber('/', IShockwaveFlash_Prop_Width));
      if cy = -1 then
        cy := Round(objFlash.TGetPropertyAsNumber('/', IShockwaveFlash_Prop_Height));
      SetWindowPos(Result, HWND_BOTTOM, x, y, cx, cy, 0);
    end;

    /////////////////////////////////////////
    procedure DestroyFlashWindow(hWnd: HWND);
    begin
      if hWnd <> 0 then
        DestroyWindow(hWnd);
    end;

    //////////////////////////
    procedure InitializeWizard;
    begin
      WizardForm.OuterNotebook.Hide;
      ExtractTemporaryFile('1.swf');
      hWndFlash := CreateFlashWindow(WizardForm.Handle, 0, 0, -1, -1, WizardForm.Color, ExpandConstant('{tmp}\1.swf'));
    end;

    ////////////////////////////
    procedure DeinitializeSetup;
    begin
      DestroyFlashWindow(hWndFlash);
    end;
     
    Winst@n, Mailchik, Хамик и 3 другим нравится это.
  6. Пользователь

    Регистрация:
    29 дек 2014
    Сообщения:
    8
    Симпатии:
    0
    Скомпилировал ваш пример, провели тесты. У 2х человек не работает.
    Как быть?
    [​IMG]
    [​IMG]
     
  7. Новичок

    Регистрация:
    13 ноя 2015
    Сообщения:
    11
    Симпатии:
    22
    Пол:
    Мужской
    Аким, я же сказал, нужен правильно зарегистрированный ocx FlashPlayer'а. Данный ProgID (ShockwaveFlash.ShockwaveFlash) относится к ActiveX-компоненту Flash Player (скачать можно здесь: http://www.adobe.com/ru/products/flashplayer/distribution3.html), а не Shockwave Player, это разные вещи. Да, и Adobe Flash Player 20 PPAPI это тоже не то, это чисто гугловская поделка cо своим PPAPI.
     
    SBalykov нравится это.

Поделиться этой страницей