9 #include "debugtools.h"
12 #include "wine/winuser16.h"
13 #include "wine/winbase16.h"
18 DEFAULT_DEBUG_CHANNEL(win
);
21 /**********************************************************************
22 * WinHelp16 (USER.171)
24 BOOL16 WINAPI
WinHelp16( HWND16 hWnd
, LPCSTR lpHelpFile
, UINT16 wCommand
,
28 /* We might call WinExec() */
29 SYSLEVEL_ReleaseWin16Lock();
31 if (!(ret
= WinHelpA( hWnd
, lpHelpFile
, wCommand
, (DWORD
)PTR_SEG_TO_LIN(dwData
) )))
33 /* try to start the 16-bit winhelp */
34 if (WinExec( "winhelp.exe -x", SW_SHOWNORMAL
) >= 32)
37 ret
= WinHelpA( hWnd
, lpHelpFile
, wCommand
, (DWORD
)PTR_SEG_TO_LIN(dwData
) );
41 SYSLEVEL_RestoreWin16Lock();
46 /**********************************************************************
47 * WinHelpA (USER32.579)
49 BOOL WINAPI
WinHelpA( HWND hWnd
, LPCSTR lpHelpFile
, UINT wCommand
,
52 static WORD WM_WINHELP
= 0;
61 WM_WINHELP
=RegisterWindowMessageA("WM_WINHELP");
66 hDest
= FindWindowA( "MS_WINHELP", NULL
);
68 if(wCommand
== HELP_QUIT
) return TRUE
;
69 if (WinExec ( "winhlp32.exe -x", SW_SHOWNORMAL
) < 32) return FALSE
;
70 if ( ! ( hDest
= FindWindowA ( "MS_WINHELP", NULL
) )) return FALSE
;
77 case HELP_SETCONTENTS
:
79 case HELP_CONTEXTPOPUP
:
89 dsize
= dwData
? strlen( (LPSTR
)dwData
)+1: 0;
92 dsize
= ((LPMULTIKEYHELP
)dwData
)->mkSize
;
95 dsize
= ((LPHELPWININFO
)dwData
)->wStructSize
;
98 WARN("Unknown help command %d\n",wCommand
);
102 nlen
= strlen(lpHelpFile
)+1;
105 size
= sizeof(WINHELP
) + nlen
+ dsize
;
106 hwh
= GlobalAlloc16(0,size
);
107 lpwh
= GlobalLock16(hwh
);
109 lpwh
->command
= wCommand
;
112 strcpy(((char*)lpwh
) + sizeof(WINHELP
),lpHelpFile
);
113 lpwh
->ofsFilename
= sizeof(WINHELP
);
115 lpwh
->ofsFilename
= 0;
117 memcpy(((char*)lpwh
)+sizeof(WINHELP
)+nlen
,(LPSTR
)dwData
,dsize
);
118 lpwh
->ofsData
= sizeof(WINHELP
)+nlen
;
122 return SendMessage16(hDest
,WM_WINHELP
,hWnd
,hwh
);
126 /**********************************************************************
127 * WinHelpW (USER32.580)
129 BOOL WINAPI
WinHelpW( HWND hWnd
, LPCWSTR helpFile
, UINT command
,
132 LPSTR file
= HEAP_strdupWtoA( GetProcessHeap(), 0, helpFile
);
133 BOOL ret
= WinHelpA( hWnd
, file
, command
, dwData
);
134 HeapFree( GetProcessHeap(), 0, file
);