/ / InnoSetupスクリプトでWebページプラグインを実装する-web、inno-setup

InnoSetupスクリプトでWebページプラグインを実装する-web、inno-setup

Tlama webpages plugin(Webプラグイン)。私のinnoセットアップでは成功せず、Unicode innoバージョンを使用します 次のマッサージを受けます- ここに画像の説明を入力

ここに私のコードです -

[Setup]
...
[Files]
Source:"WebBrowser.dll"; Flags: dontcopy

[Code]
const
EVENT_BEFORE_NAVIGATE = 1;

var
CustomPage: TWizardPage;

type
TWebBrowserEventProc = procedure(EventCode: Integer; URL: WideString);

procedure CreateWebBrowser(ParentWnd: HWND; Left, Top, Width, Height: Integer;
CallbackProc: TWebBrowserEventProc);
external "CreateWebBrowser@files:webbrowser.dll stdcall";
procedure DestroyWebBrowser;
external "DestroyWebBrowser@files:webbrowser.dll stdcall";
procedure ShowWebBrowser(Visible: Boolean);
external "ShowWebBrowser@files:webbrowser.dll stdcall";
procedure NavigateWebBrowser(URL: WideString);
external "NavigateWebBrowser@files:webbrowser.dll stdcall";

procedure OnWebBrowserEvent(EventCode: Integer; URL: WideString);
begin
if EventCode = EVENT_BEFORE_NAVIGATE then
MsgBox(URL, mbInformation, MB_OK);
end;

procedure InitializeWizard;
begin
CustomPage := CreateCustomPage(wpWelcome, "Web Browser Page",
"This page contains web browser");
CreateWebBrowser(WizardForm.InnerPage.Handle, 0, WizardForm.Bevel1.Top,
WizardForm.InnerPage.ClientWidth, WizardForm.InnerPage.ClientHeight - WizardForm.Bevel1.Top,
@OnWebBrowserEvent);
NavigateWebBrowser("http://www.google.com");
end;

procedure DeinitializeSetup;
begin
DestroyWebBrowser;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
ShowWebBrowser(CurPageID = CustomPage.ID);
end;

これで私を助けてください、ありがとう

回答:

回答№1は0

あなたは別のソリューション(日本のdvpによって作られた)を使用することができます

ブログはこちら: Innosetup webctrl v2.1

ここからダウンロード : inno_webctrl_v2.1.zip


Example.iss

; restools
; http://restools.hanzify.org
; 插件名:webctrl.dll
; 插件功能:网络连接检测,创建网页页面。
; 插件大小:9 KB

; V2 增强操作函数,可以同时创建多达 256 个 Web 窗口。
; V2 例子中演示了建立一个小型浏览器以体现该版本中的函数如何使用。比起 V1 重点在于能同时创建多个 Web 窗口。
; V2.1 删除 InitWebCtrl 和 UninitWebCtrl 函数, 增加 FreeAllWebWnd. 改善某些情况下不能卸载插件的问题.

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}My Application
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: "webctrl.dll"; Flags: dontcopy
Source: "file.htm"; Flags: dontcopy
Source: "wizard.htm"; Flags: dontcopy
Source: "1.gif"; Flags: dontcopy
Source: "2.gif"; Flags: dontcopy
Source: "3.gif"; Flags: dontcopy

[code]
function GetSystemMetrics(nIndex: Integer): Integer; external "GetSystemMetrics@user32.dll stdcall";
function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external"GetWindowLongA@user32.dll stdcall";
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external"SetWindowLongA@user32.dll stdcall";
////////////////////////////////////////////////////////////////////////////////////
// 检查网络连接是否正常
// lpszURL: 网址,如果这里设置为空网址,检测将会简单的检查网络状态,返回状态标志
// lpdwState: 状态标志,以下是标志值的解释
// 注意:当不用网址来检测网络连接时,只是检查当前是否符合网络连接的条件,但是并不等于
//       能正常连接 Internet,但是这种检测方式相当迅速,如果使用网址连接测试,如果网
//       络处于正常连接,检查速度也相当快,但是如果非正常,那么将会有一点时间延迟,因
//       为实际的连接测试有一个超时的限制来判断是否能够连接。但是这种检测方式是最直接
//       的,并能确实知道是否能够连接网络,所以你按照实际要求来选择检测方式。
//
//得到的 lpdwState 返回值可能是以下值的一个或几个值之和:
//  INTERNET_STATE_CONNECTED           :$00000001 连接状态;
//  INTERNET_STATE_DISCONNECTED        :$00000002 非连接状态(和 INTERNET_STATE_CONNECTED 对应);
//  INTERNET_STATE_DISCONNECTED_BY_USER:$00000010 用户请求的非连接状态
//  INTERNET_STATE_IDLE                :$00000100 连接状态,并且空闲
//  INTERNET_STATE_BUSY                :$00000200 连接状态,正在响应连接请求
function CheckConnectState(lpsURL: PChar; var lpdwState: dword): boolean; external"checkconnectstate@files:webctrl.dll stdcall";

// 创建 WEB 窗口
function NewWebWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND; external"newwebwnd@files:webctrl.dll stdcall";

// 释放 WEB 窗口
function FreeWebWnd(hWndWeb: HWND): Boolean; external "freewebwnd@files:webctrl.dll stdcall";

// 释放所有 WEB 窗口, 此函数对于卸载插件很重要, 必须在结束安装之前调用才能顺利卸载插件.
function FreeAllWebWnd(): Boolean; external "freeallwebwnd@files:webctrl.dll stdcall";

// 设置 WEB 窗口的父窗口
function WebWndSetParent(hWndWeb: HWND; hWndParent: HWND): Boolean; external"webwndsetparent@files:webctrl.dll stdcall";

// 设置 WEB 窗口的位置大小
function WebWndSetBounds(hWndWeb: HWND; X, Y, nWidth, nHeight: Integer): Boolean; external"webwndsetbounds@files:webctrl.dll stdcall";

// 显示 HTML 网页
function DisplayHTMLPage(hWndWeb: HWND; lpsURL: PChar): Boolean; external"displayhtmlpage@files:webctrl.dll stdcall";  // ;

// 显示 HTML 字符串
function DisplayHTMLStr(hWndWeb: HWND; lpsHtmlText: PChar): Boolean; external"displayhtmlstr@files:webctrl.dll stdcall";

// Web 页面 动作
function WebPageAction(hWndWeb: HWND; action: DWord): Boolean; external"webpageaction@files:webctrl.dll stdcall";

const
SM_CXSCREEN = 0;
SM_CYSCREEN = 1;

WS_EX_CLIENTEDGE = $200;
GWL_EXSTYLE = -20;

WEBPAGE_GOBACK = 0;
WEBPAGE_GOFORWARD = 1;
WEBPAGE_GOHOME = 2;
WEBPAGE_SEARCH = 3;
WEBPAGE_REFRESH = 4;
WEBPAGE_STOP = 5;
var
UrlPage, HtmlPage, HtmlTextPage: TWizardPage;
WebHWND1, WebHWND2, WebHWND3, WebHWND4: HWND;
WebHWND_Browser: HWND;
Form_Browser: TForm;
AddrEdit: TNewEdit;
GoBtn: TNewButton;

function InitializeSetup(): Boolean;
begin
WebHWND1 := 0;
WebHWND2 := 0;
WebHWND3 := 0;
WebHWND4 := 0;
Result := True;
end;

procedure DeinitializeSetup();
begin
WizardForm.Hide;
FreeAllWebWnd;
end;

procedure GoBackBtnOnClick(Sender: TObject);
begin
WebPageAction(WebHWND_Browser, WEBPAGE_GOBACK);
end;

procedure GoForwardBtnOnClick(Sender: TObject);
begin
WebPageAction(WebHWND_Browser, WEBPAGE_GOFORWARD);
end;

procedure StopBtnOnClick(Sender: TObject);
begin
WebPageAction(WebHWND_Browser, WEBPAGE_STOP);
end;

procedure RefreshBtnOnClick(Sender: TObject);
begin
WebPageAction(WebHWND_Browser, WEBPAGE_REFRESH);
end;

procedure HomeBtnOnClick(Sender: TObject);
begin
WebPageAction(WebHWND_Browser, WEBPAGE_GOHOME);
end;

procedure GoBtnOnClick(Sender: TObject);
begin
DisplayHTMLPage(WebHWND_Browser, AddrEdit.Text);
end;

procedure BrowserFormResize(Sender: TObject);
var
W: Integer;
begin
WebWndSetBounds(WebHWND_Browser, 0, ScaleY(35), Form_Browser.ClientWidth,
Form_Browser.ClientHeight - ScaleY(35));
W := Form_Browser.Width - ScaleX(285);
if W <= 0 then W := 1;
AddrEdit.Width := W;
GoBtn.SetBounds(AddrEdit.Left + AddrEdit.Width + ScaleX(2), ScaleY(5), ScaleX(30),
WizardForm.CancelButton.Height);
end;

procedure EditKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
DisplayHTMLPage(WebHWND_Browser, AddrEdit.Text);
end;

procedure WizardBtnOnClick(Sender: TObject);
var
ScreenWidth, ScreenHeight: Integer;
Btn: TNewButton;
begin
Form_Browser := TForm.Create(WizardForm);
try
Form_Browser.Caption := "ThinBrowser";
Form_Browser.BorderIcons := [biSystemMenu, biMaximize];
ScreenWidth := GetSystemMetrics(SM_CXSCREEN);
ScreenHeight := GetSystemMetrics(SM_CYSCREEN);
Form_Browser.SetBounds((ScreenWidth - ScaleX(600)) div 2, (ScreenHeight - ScaleY(400)) div2,
ScaleX(600), ScaleY(400));
WebHWND_Browser := NewWebWnd(Form_Browser.Handle, 0, 0, Form_Browser.ClientWidth,
Form_Browser.ClientHeight);
SetWindowLong(Form_Browser.Handle, GWL_EXSTYLE, GetWindowLong(
WebHWND_Browser, GWL_EXSTYLE) or WS_EX_CLIENTEDGE);

Btn := TNewButton.Create(Form_Browser);
Btn.SetBounds(ScaleX(5), ScaleY(5), ScaleX(40), WizardForm.CancelButton.Height);
Btn.Caption := "&Back";
Btn.OnClick := @GoBackBtnOnClick;
Btn.Parent := Form_Browser;

Btn := TNewButton.Create(Form_Browser);
Btn.SetBounds(ScaleX(47), ScaleY(5), ScaleX(55), WizardForm.CancelButton.Height);
Btn.Caption := "&Forward";
Btn.OnClick := @GoForwardBtnOnClick;
Btn.Parent := Form_Browser;

Btn := TNewButton.Create(Form_Browser);
Btn.SetBounds(ScaleX(104), ScaleY(5), ScaleX(40), WizardForm.CancelButton.Height);
Btn.Caption := "&Stop";
Btn.OnClick := @StopBtnOnClick;
Btn.Parent := Form_Browser;

Btn := TNewButton.Create(Form_Browser);
Btn.SetBounds(ScaleX(146), ScaleY(5), ScaleX(50), WizardForm.CancelButton.Height);
Btn.Caption := "&Refresh";
Btn.OnClick := @RefreshBtnOnClick;
Btn.Parent := Form_Browser;

Btn := TNewButton.Create(Form_Browser);
Btn.SetBounds(ScaleX(198), ScaleY(5), ScaleX(40), WizardForm.CancelButton.Height);
Btn.Caption := "&Home";
Btn.OnClick := @HomeBtnOnClick;
Btn.Parent := Form_Browser;

AddrEdit := TNewEdit.Create(Form_Browser);
AddrEdit.Left := ScaleX(240);
AddrEdit.Top := ScaleY(6);
AddrEdit.Parent := Form_Browser;
AddrEdit.Text := "about:blank";
AddrEdit.OnKeyPress := @EditKeyPress;

GoBtn := TNewButton.Create(Form_Browser);
GoBtn.Caption := "&Go";
GoBtn.OnClick := @GoBtnOnClick;
GoBtn.Parent := Form_Browser;

BrowserFormResize(Form_Browser);
Form_Browser.OnResize := @BrowserFormResize;
Form_Browser.ActiveControl := AddrEdit;
Form_Browser.ShowModal();
FreeWebWnd(WebHWND_Browser);
finally
Form_Browser.Free();
end;
end;

procedure InitializeWizard();
var
State: DWord;
s: string;
BrowserBtn: TNewButton;
begin
State := 0;
s := "";
// 如果需要进行网址连接测试,取消下面代码的注释
//  s := "http://www.google.cn";

if CheckConnectState(s, State) then
MsgBox("网络已经连接。", mbInformation, MB_OK)
else
MsgBox("网络未连接。", mbCriticalError, MB_OK);
MsgBox(inttostr(State), mbInformation, MB_OK);

ExtractTemporaryFile("wizard.htm");
ExtractTemporaryFile("file.htm");
ExtractTemporaryFile("1.gif");
ExtractTemporaryFile("2.gif");
ExtractTemporaryFile("3.gif");

WebHWND1 := NewWebWnd(WizardForm.WelcomePage.Handle, 0, 0, WizardForm.WizardBitmapImage.Width, WizardForm.WelcomePage.Height);
DisplayHTMLPage(WebHWND1, ExpandConstant("{tmp}wizard.htm"));

UrlPage := CreateCustomPage(wpWelcome, "测试 Web 页面", "网址: http://www.google.cn");

HtmlPage := CreateCustomPage(UrlPage.ID, "测试 HTML文件 页面", "文件: file.htm");

HtmlTextPage := CreateCustomPage(HtmlPage.ID, "测试 HTML文本 页面", "临时自定义 HTML 字符串");

BrowserBtn := TNewButton.Create(WizardForm);
BrowserBtn.Left := WizardForm.ClientWidth - WizardForm.CancelButton.Left - WizardForm.CancelButton.Width;
BrowserBtn.Top := WizardForm.CancelButton.Top;
BrowserBtn.Width := WizardForm.CancelButton.Width;
BrowserBtn.Height := WizardForm.CancelButton.Height;
BrowserBtn.Caption := "&Browser...";
BrowserBtn.OnClick := @WizardBtnOnClick;
BrowserBtn.Parent := WizardForm;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then
WebWndSetParent(WebHWND1, WizardForm.WelcomePage.Handle)
else
if CurPageID = wpFinished then
WebWndSetParent(WebHWND1, WizardForm.FinishedPage.Handle)
else
if (CurPageID = UrlPage.ID) and (WebHWND2 = 0) then
begin
WebHWND2 := NewWebWnd(UrlPage.Surface.Handle, 0, 0, UrlPage.Surface.Width, UrlPage.Surface.Height);
DisplayHTMLPage(WebHWND2, "http://www.google.cn")
end else
if (CurPageID = HtmlPage.ID) and (WebHWND3 = 0) then
begin
WebHWND3 := NewWebWnd(HtmlPage.Surface.Handle, 0, 0, HtmlPage.Surface.Width, HtmlPage.Surface.Height);
DisplayHTMLPage(WebHWND3, ExpandConstant("{tmp}file.htm"));
end
else
if (CurPageID = HtmlTextPage.ID) and (WebHWND4 = 0) then
begin
WebHWND4 := NewWebWnd(HtmlTextPage.Surface.Handle, 0, 0, HtmlTextPage.Surface.Width, HtmlTextPage.Surface.Height);
DisplayHTMLStr(WebHWND4, "<b>I""m a <u>HTML text</u></b>");
end;
end;