FCT plug-in: Difference between revisions

From NSIS Wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 22: Line 22:
: WINDOW_TITLE is only a part of window title (caption)
: WINDOW_TITLE is only a part of window title (caption)
; UDATA
; UDATA
: if both installer and application have "32770" class based windows and both titles include only a fragment of WINDOW_TITLE, situation becomes confusing. This case developer can preset specific GWL_USERDATA value to app's window, plag-in will check, for example, /udata=0x12fa3400.
: if both installer and application have "32770" class based windows and both titles include only a fragment of WINDOW_TITLE, situation becomes confusing. This case developer can preset specific GWL_USERDATA value to app's window, plug-in will check, for example, /udata=0x12fa3400.


=== "wait" DLL function ===
=== "wait" DLL function ===

Revision as of 08:22, 24 November 2005

Author: Takhir (talk, contrib)


Links

Download:
Fct.zip (8 KB)

Description

Plug-in terminates application in 2 steps - first send WM_CLOSE to it's main window, then (if still alive) terminates application. Has sync/async (background) modes, async is good for slowly exiting applications (maximum delay for one application may be up to 2xTIMEOUT) and multiple applications (multithreading). Plug-in closes or terminates all process with top level windows of such kind using EnumWindows(). Size is 2 kB in zip, so if you need WIN API calls for correct process termination only, this may replace System plug-in with less size and simple script code. Final package size decreases is 4 kB less in compressed file for installer and 8 kB if it replaces System plug-in both in installer and uninstaller.


Syntax

"fct" DLL function

fct::fct [/NOUNLOAD] WINDOW_CLASS WINDOW_TITLE [/ASYNC] [/PART] [/TIMEOUT=xxx] [/UDATA=xxx] [/END]
Searchs for all windows with predefined 'class' and 'title' (or it's part). Use "" if class or title are not defined. In async mode plug-in returns running thread handle, in the sync one - still alive applications count (i.e. how many application not exited after WM_CLOSE and were not terminated using TerminateProcess() ). I.e. 0 is OK. Use 'wait' with handle as parameter to get final result for this thread.
ASYNC
Not waits for process exit. Use 'wait' call if you want to get result
TIMEOUT
timeout for SendMessage() and WaitForSingleObject(). Default is 1000 (ms).
PART
WINDOW_TITLE is only a part of window title (caption)
UDATA
if both installer and application have "32770" class based windows and both titles include only a fragment of WINDOW_TITLE, situation becomes confusing. This case developer can preset specific GWL_USERDATA value to app's window, plug-in will check, for example, /udata=0x12fa3400.

"wait" DLL function

fct::wait handle
Waits for process exit.
handle
Control thread handle returned by 'fct' call in the /ASYNC mode.

Example

Sync execution:

    fct::fct '${WND_CLASS}' '${WND_TITLE}' /timeout=2000 /part '/question=${Msg}'
    Pop $0
    MessageBox MB_OK "Still Alive Count=$0"

Async execution:

    fct::fct /nounload '${WND_CLASS}' '${WND_TITLE}' /async /timeout=2000 /part '/question=${Msg}'
;  You can place some code here. We skipped Pop and Push for hThread - it just sits in the stack. 
    fct::wait
    Pop $0
    MessageBox MB_OK "Still Alive Count=$0"