Talk:CreateMutex plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 8: Line 8:


Function .onInit
Function .onInit
  ' Call the Win32 API to create the mutex. Pass a unique string (ie. product name)
   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "AnyUniqueText") i .r1 ?e'
   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "AnyUniqueText") i .r1 ?e'
   Pop $R0
   Pop $R0 ' Get the mutex handle


  ' If the create mutex call returns a NULL handle then we can proceed
  ' otherwise we must bring the already running instance to foreground.
   StrCmp $R0 0 noprevinst
   StrCmp $R0 0 noprevinst
    ' Get the window handle from registry
     ReadRegStr $R0 HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle"
     ReadRegStr $R0 HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle"
     System::Call 'user32::SetForegroundWindow(i $R0) i ?e'
     System::Call 'user32::SetForegroundWindow(i $R0) i ?e'
Line 21: Line 25:


Function .onGUIInit
Function .onGUIInit
  ' Once the installer GUI is up, store the window handle for use later
   WriteRegStr HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle" "$HWNDPARENT"
   WriteRegStr HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle" "$HWNDPARENT"
FunctionEnd
FunctionEnd


Function .onGUIEnd
Function .onGUIEnd
  ' Remove the registry value once installer quits
   DeleteRegValue HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle"
   DeleteRegValue HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle"
  DeleteRegKey /ifempty HKCU "${PLUGIN_INSTREGKEY}"
FunctionEnd
FunctionEnd



Revision as of 16:14, 20 January 2006

No real need for this plugin as the System.dll plugin alread can do this. Check out this code:

; Just a key to store a window handle in
!define PLUGIN_INSTREGKEY "Software\My Company\My Product"
 
Function .onInit
  ' Call the Win32 API to create the mutex. Pass a unique string (ie. product name)
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "AnyUniqueText") i .r1 ?e'
  Pop $R0 ' Get the mutex handle
 
  ' If the create mutex call returns a NULL handle then we can proceed
  ' otherwise we must bring the already running instance to foreground.
  StrCmp $R0 0 noprevinst
    ' Get the window handle from registry
    ReadRegStr $R0 HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle"
    System::Call 'user32::SetForegroundWindow(i $R0) i ?e'
    Abort
 
  noprevinst:
 
FunctionEnd
 
Function .onGUIInit
  ' Once the installer GUI is up, store the window handle for use later
  WriteRegStr HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle" "$HWNDPARENT"
FunctionEnd
 
Function .onGUIEnd
  ' Remove the registry value once installer quits
  DeleteRegValue HKCU "${PLUGIN_INSTREGKEY}" "WindowHandle"
FunctionEnd

This code also brings the running instance of the installer to the foreground if starting another instance.