18 #define HELP_CONTEXT 0x0001
19 #define HELP_QUIT 0x0002
20 #define HELP_INDEX 0x0003
21 #define HELP_CONTENTS 0x0003
22 #define HELP_HELPONHELP 0x0004
23 #define HELP_SETINDEX 0x0005
24 #define HELP_SETCONTENTS 0x0005
25 #define HELP_CONTEXTPOPUP 0x0008
26 #define HELP_FORCEFILE 0x0009
27 #define HELP_KEY 0x0101
28 #define HELP_COMMAND 0x0102
29 #define HELP_PARTIALKEY 0x0105
30 #define HELP_MULTIKEY 0x0201
31 #define HELP_SETWINPOS 0x0203
34 /***********************************************************************
37 * Clean-up everything and exit the Wine process.
38 * This is the back-end of ExitWindows(), called when all windows
39 * have agreed to be terminated.
41 void EXEC_ExitWindows( int retCode )
43 /* Do the clean-up stuff */
52 /***********************************************************************
53 * ExitWindows (USER.7)
55 BOOL ExitWindows( DWORD dwReturnCode, WORD wReserved )
61 api_assert("ExitWindows", wReserved == 0);
62 api_assert("ExitWindows", HIWORD(dwReturnCode) == 0);
64 /* We have to build a list of all windows first, as in EnumWindows */
66 if (!(list = WIN_BuildWinArray( WIN_GetDesktop() ))) return FALSE;
68 /* Send a WM_QUERYENDSESSION message to every window */
70 for (ppWnd = list, i = 0; *ppWnd; ppWnd++, i++)
72 /* Make sure that the window still exists */
73 if (!IsWindow( (*ppWnd)->hwndSelf )) continue;
74 if (!SendMessage16( (*ppWnd)->hwndSelf, WM_QUERYENDSESSION, 0, 0 ))
79 /* Now notify all windows that got a WM_QUERYENDSESSION of the result */
81 for (ppWnd = list; i > 0; i--, ppWnd++)
83 if (!IsWindow( (*ppWnd)->hwndSelf )) continue;
84 SendMessage16( (*ppWnd)->hwndSelf, WM_ENDSESSION, result, 0 );
86 HeapFree( SystemHeap, 0, list );
88 if (result) EXEC_ExitWindows( LOWORD(dwReturnCode) );
93 /**********************************************************************
96 BOOL WinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData)
98 static WORD WM_WINHELP=0;
104 if (wCommand != HELP_QUIT) /* FIXME */
105 if(WinExec("winhelp.exe -x",SW_SHOWNORMAL)<=32)
107 /* FIXME: Should be directed yield, to let winhelp open the window */
110 WM_WINHELP=RegisterWindowMessage32A("WM_WINHELP");
114 hDest = FindWindow32A( "MS_WINHELP", NULL );
121 case HELP_SETCONTENTS:
122 case HELP_CONTEXTPOPUP:
124 case HELP_HELPONHELP:
129 case HELP_PARTIALKEY:
131 data = PTR_SEG_TO_LIN(dwData);
132 dsize = strlen(data)+1;
135 data = PTR_SEG_TO_LIN(dwData);
136 dsize = ((LPMULTIKEYHELP)data) -> mkSize;
139 data = PTR_SEG_TO_LIN(dwData);
140 dsize = ((LPHELPWININFO)data) -> wStructSize;
143 fprintf(stderr,"Unknown help command %d\n",wCommand);
147 nlen = strlen(lpHelpFile)+1;
150 size = sizeof(WINHELP) + nlen + dsize;
151 hwh = GlobalAlloc16(0,size);
152 lpwh = GlobalLock16(hwh);
154 lpwh->command = wCommand;
156 lpwh->ofsFilename = sizeof(WINHELP);
157 strcpy(((char*)lpwh) + sizeof(WINHELP),lpHelpFile);
160 memcpy(((char*)lpwh)+sizeof(WINHELP)+nlen,data,dsize);
161 lpwh->ofsData = sizeof(WINHELP)+nlen;
165 return SendMessage16(hDest,WM_WINHELP,hWnd,hwh);