I'm trying to use an Inno setup plugin called webcrtl (a web browser with more features than nsweb). I'm trying to call this dll with the system plugin.
The plugin:
http://restools.hanzify.org/article.asp?id=90
This is what I'm trying, without success:
Page custom Pre
Var hCtl_dialog
Var browser
Function Pre
InitPluginsDir
File "${BASEDIR}/Plugins/inno_webctrl_v2.1/webctrl.dll"
nsDialogs::Create 1018
Pop $hCtl_dialog
System::Call "webctrl::NewWebWnd(i $HWNDPARENT, i 100, i 100, i 200, i 200) i .s"
Pop $browser
System::Call "webctrl::DisplayHTMLPage(i '$browser', t 'http://www.google.com/') i .s"
Pop $R0
nsDialogs::Show $hCtl_neoinstaller_genericcustom
FunctionEnd
I'm getting an empty page...
DLL library function names are case sensitive, and you have used aliases instead of the function names from that InnoSetup script. Modify your script, so that will use function names with proper case sensitivity and you'll get your script to work. The name of a function to be imported, is the word before the @
char from the external
keyword import tail. For instance, in the following function import sample, the name of the imported function is newwebwnd
, not NewWebWnd
:
function NewWebWnd(hWndParent: HWND; X, Y, nWidth, nHeight: Integer): HWND;
external 'newwebwnd@files:webctrl.dll stdcall';
So in your case, modify the function names the following way and you should be fine:
...
System::Call "webctrl::newwebwnd(i $hCtl_dialog, i 0, i 0, i 150, i 150) i.s"
Pop $browser
System::Call "webctrl::displayhtmlpage(i $browser, t 'http://www.google.com/') b.s"
Pop $R0
...
The whole script for the WebCtrl
control stretched inside the install page might then look like this:
!include "nsDialogs.nsh"
OutFile "Setup.exe"
RequestExecutionLevel user
InstallDir $DESKTOP\WebBrowserSetup
Page directory
Page custom InitializeWebBrowserPage
var hDialog
var hBrowser
Function InitializeWebBrowserPage
InitPluginsDir
SetOutPath $PLUGINSDIR
File "webctrl.dll"
nsDialogs::Create 1018
Pop $hDialog
; get the page client width and height
System::Call "*(i, i, i, i) i.r0"
System::Call "user32::GetClientRect(i $hDialog, i r0)"
System::Call "*$0(i, i, i.r1, i.r2)"
System::Free $0
; create a web browser window stretched to the whole page client rectangle
; and navigate somehwere; note that you should add some error handling yet
System::Call "webctrl::newwebwnd(i $hDialog, i 0, i 0, i $1, i $2) i.s"
Pop $hBrowser
System::Call "webctrl::displayhtmlpage(i $hBrowser, t 'http://www.google.com') b.s"
Pop $R0
nsDialogs::Show
FunctionEnd
Section ""
SectionEnd