Open link in new browser window: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
Line 7: Line 7:
Use the new version with the included macro to execute without affecting any variables or the stack :)
Use the new version with the included macro to execute without affecting any variables or the stack :)


== The Function ==
<highlight-nsis># Uses $0
Function openLinkNewWindow
Function openLinkNewWindow
   Push $3  
   Push $3
  Exch
   Push $2
   Push $2
  Exch
   Push $1
   Push $1
  Exch
   Push $0
   Push $0
  Exch
 
   ReadRegStr $0 HKCR "http\shell\open\command" ""
   ReadRegStr $0 HKCR "http\shell\open\command" ""
# Get browser path
# Get browser path
Line 37: Line 40:
   Pop $0
   Pop $0
   Exec '$1 $0'
   Exec '$1 $0'
  Pop $0
   Pop $1
   Pop $1
   Pop $2
   Pop $2
   Pop $3
   Pop $3
FunctionEnd
FunctionEnd
</highlight-nsis>


Thanks to Ryan Farley (http://ryanfarley.com/blog/archive/2004/05/16/649.aspx ) for an idea.
!macro _OpenURL URL
Push "${URL}"
Call openLinkNewWindow
!macroend


[[Category:Internet Functions]]
!define OpenURL '!insertmacro "_OpenURL"'

Revision as of 07:17, 13 May 2009

Author: techtonik (talk, contrib)


Description

Link opened via ExecShell "open" "http://nsis.sf.net/" may happen to be loaded in existing browser window thus erasing previous content. Here is NSIS function to open link in new window.

Update by qwertymodo Use the new version with the included macro to execute without affecting any variables or the stack :)

Function openLinkNewWindow

 Push $3
 Exch
 Push $2
 Exch
 Push $1
 Exch
 Push $0
 Exch
 
 ReadRegStr $0 HKCR "http\shell\open\command" ""
  1. Get browser path
   DetailPrint $0
 StrCpy $2 '"'
 StrCpy $1 $0 1
 StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char
   StrCpy $2 ' '
 StrCpy $3 1
 loop:
   StrCpy $1 $0 1 $3
   DetailPrint $1
   StrCmp $1 $2 found
   StrCmp $1 "" found
   IntOp $3 $3 + 1
   Goto loop
 found:
   StrCpy $1 $0 $3
   StrCmp $2 " " +2
     StrCpy $1 '$1"'
 Pop $0
 Exec '$1 $0'
 Pop $0
 Pop $1
 Pop $2
 Pop $3

FunctionEnd

!macro _OpenURL URL Push "${URL}" Call openLinkNewWindow !macroend

!define OpenURL '!insertmacro "_OpenURL"'