Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2792 lines
130 KiB

/******************************************************************************
Copyright (c) 1999 Microsoft Corporation
Module Name:
HelpCenterExternal.cpp
Abstract:
This file contains the implementation of the class exposed as the "pchealth" object.
Revision History:
Ghim-Sim Chua (gschua) 07/23/99
created
Davide Massarenti (dmassare) 07/25/99
modified
******************************************************************************/
#include "stdafx.h"
/////////////////////////////////////////////////////////////////////////////
static const WCHAR s_szPanelName_NAVBAR [] = L"NavBar" ;
static const WCHAR s_szPanelName_MININAVBAR[] = L"MiniNavBar";
static const WCHAR s_szPanelName_CONTEXT [] = L"Context" ;
static const WCHAR s_szPanelName_CONTENTS [] = L"Contents" ;
static const WCHAR s_szPanelName_HHWINDOW [] = L"HHWindow" ;
static const WCHAR c_szURL_Err_BadUrl [] = L"hcp://system/errors/badurl.htm";
static const LPCWSTR c_szEntryUrls [] =
{
L"hcp://help/tshoot/Err_Hardw_Error3.htm",
L"hcp://help/tshoot/Err_Hardw_Error10.htm",
L"hcp://help/tshoot/hwcon.htm",
L"hcp://help/tshoot/Err_Hardw_Error16.htm",
L"hcp://help/tshoot/Err_Hardw_Error19.htm",
L"hcp://help/tshoot/Err_Hardw_Error24.htm",
L"hcp://help/tshoot/Err_Hardw_Error29.htm",
L"hcp://help/tshoot/Err_Hardw_Error31.htm",
L"hcp://help/tshoot/Err_Hardw_Error19.htm",
L"hcp://help/tshoot/Err_Hardw_Error33.htm",
L"hcp://help/tshoot/Err_Hardw_Error34.htm",
L"hcp://help/tshoot/Err_Hardw_Error35.htm",
L"hcp://help/tshoot/Err_Hardw_Error36.htm",
L"hcp://help/tshoot/Err_Hardw_Error31.htm",
L"hcp://help/tshoot/Err_Hardw_Error38.htm",
L"hcp://help/tshoot/Err_Hardw_Error31.htm",
L"hcp://help/tshoot/Err_Hardw_Error31.htm",
L"hcp://help/tshoot/Err_Hardw_Error41.htm",
L"hcp://help/tshoot/Err_Hardw_Error42.htm",
L"hcp://help/tshoot/Err_Hardw_Error19.htm",
L"hcp://help/tshoot/Err_Hardw_Error42.htm",
L"hcp://help/tshoot/Err_Hardw_Error47.htm",
L"hcp://help/tshoot/tsUSB.htm",
L"hcp://help/tshoot/tsdrive.htm",
L"hcp://help/tshoot/tsdisp.htm",
L"hcp://help/tshoot/hdw_keyboard.htm",
L"hcp://help/tshoot/tssound.htm",
L"hcp://help/tshoot/tsmodem.htm",
L"hcp://help/tshoot/hdw_mouse.htm",
L"hcp://help/tshoot/tsInputDev.htm",
L"hcp://help/tshoot/hdw_tape.htm",
L"hcp://services/subsite?node=TopLevelBucket_3/Customizing_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_3/Customizing_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web",
L"hcp://services/subsite?node=TopLevelBucket_1/Windows_basics",
L"hcp://services/subsite?node=TopLevelBucket_1/Windows_basics",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%25HELP_LOCATION%25%5Carticle.chm%3A%3A/ap_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%25HELP_LOCATION%25%5Carticle.chm%3A%3A/ahn_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%25HELP_LOCATION%25%5Carticle.chm%3A%3A/asa_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%2525HELP_LOCATION%2525%5Carticle.chm%3A%3A/asa_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%2525HELP_LOCATION%2525%5Carticle.chm%3A%3A/ahn_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%2525HELP_LOCATION%2525%5Carticle.chm%3A%3A/ap_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS%3A%2525HELP_LOCATION%2525%5Carticle.chm%3A%3A/avj_intro.htm",
L"hcp://help/tshoot/hdw_keyboard.htm",
L"hcp://help/tshoot/tsdrive.htm",
L"hcp://help/tshoot/hdw_mouse.htm",
L"hcp://help/tshoot/tsInputDev.htm",
L"hcp://help/tshoot/hdw_tape.htm",
L"hcp://help/tshoot/tsUSB.htm",
L"hcp://help/tshoot/tssound.htm",
L"hcp://help/tshoot/tsgame.htm",
L"hcp://help/tshoot/tsInputDev.htm",
L"hcp://help/tshoot/tsgame.htm",
L"hcp://services/subsite?node=HP_home/HP_library",
L"hcp://services/subsite?node=Dell/Dell2",
L"hcp://services/subsite?node=Dell/Dell1",
L"hcp://help/tshoot/ts_dvd.htm",
L"hcp://help/tshoot/tsdisp.htm",
L"hcp://help/tshoot/tsdrive.htm",
L"hcp://help/tshoot/tsnetwrk.htm",
L"hcp://help/tshoot/tshardw.htm",
L"hcp://help/tshoot/tshomenet.htm",
L"hcp://help/tshoot/tsinputdev.htm",
L"hcp://help/tshoot/tsics.htm",
L"hcp://help/tshoot/tsie.htm",
L"hcp://help/tshoot/tsmodem.htm",
L"hcp://help/tshoot/tsgame.htm",
L"hcp://help/tshoot/tsmessaging.htm",
L"hcp://help/tshoot/tsprint.htm",
L"hcp://help/tshoot/tssound.htm",
L"hcp://help/tshoot/tsstartup.htm",
L"hcp://help/tshoot/tsusb.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_requirements.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_checklistP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_checklistW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_howto_connectP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_howto_connectW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\netcfg.chm%3A%3A/share_conn_overvw.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_determine_internet_connection.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_nohost_computerP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_nohost_computerW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_change_ics_host.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\netcfg.chm%3A%3A/hnw_understanding_bridge.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_comp_name_description.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\filefold.chm%3A%3A/sharing_files_overviewP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\filefold.chm%3A%3A/sharing_files_overviewW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\filefold.chm%3A%3A/windows_shared_documents.htm",
L"hcp://help/tshoot/tsInputDev.htm",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cdatetime.chm%3A%3A/windows_date_IT_overview.htm&select=Date_Time_Language_and_Regional_Settings",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/using_webfolders_for_file_transfer.htm&select=TopLevelBucket_2/Networking_and_the_Web/E-mail_and_the_Web/Security_online",
L"hcp://services/subsite?node=Unmapped/Control_Panel&select=Unmapped/Control_Panel/Appearance_and_Themes/Fonts",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/sharing_files_overviewP.htm&select=Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/sharing_files_overviewW.htm&select=Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/sharing_files_overviewP.htm&select=Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/sharing_files_overviewW.htm&select=Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://help/tshoot/hdw_generic.htm",
L"hcp://services/subsite?node=Unmapped/Recycle_Bin",
L"hcp://services/subsite?node=Unmapped/Briefcase",
L"hcp://services/subsite?node=TopLevelBucket_4/Hardware&topic=MS-ITS%3A%25HELP_LOCATION%25%5Ccdmedia.chm%3A%3A/cdmedia_fail2_moreinfo_buffer_underrun.htm&select=TopLevelBucket_4/Hardware/CDs_and_other_storage_devices",
L"hcp://services/subsite?node=TopLevelBucket_4/Hardware&topic=MS-ITS%3A%25HELP_LOCATION%25%5Ccdmedia.chm%3A%3A/cdmedia_fail3_moreinfo_disk_full.htm&select=TopLevelBucket_4/Hardware/CDs_and_other_storage_devices",
L"hcp://system/netdiag/dglogs.htm",
L"hcp://services/subsite?node=Unmapped/Search",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/using_shared_documents_folder.htm&select=TopLevelBucket_2/Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://services/layout/xml?definition=MS-ITS%3A%25HELP_LOCATION%25%5Cntdef.chm%3A%3A/Printers_and_Faxes.xml",
L"hcp://help/tshoot/tsprint.htm",
L"hcp://services/subsite?node=TopLevelBucket_1/Music__video__games_and_photos&topic=MS-ITS%3A%25HELP_LOCATION%25%5CDisplay.chm%3A%3A/display_switch_to_256_colors.htm&select=TopLevelBucket_1/Music__video__games_and_photos/Games",
L"hcp://services/subsite?node=TopLevelBucket_4/Fixing_a_problem&select=TopLevelBucket_4/Fixing_a_problem/Using_System_Restore_to_undo_changes",
L"hcp://system/netdiag/dglogs.htm",
L"hcp://system/sysinfo/msinfo.htm",
L"hcp://help/tshoot/tsdrive.htm",
L"hcp://help/tshoot/tsdisp.htm",
L"hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/zawbug/start.htm",
L"hcp://system/updatectr/updatecenter.htm",
L"hcp://system/compatctr/compatmode.htm",
L"hcp://help/tshoot00/DVDVideoStream.htm",
L"hcp://help/tshoot00/DVDAudio2.htm",
L"hcp://help/tshoot00/DVDRegion.htm",
L"hcp://help/tshoot00/DVDCopyProtection.htm",
L"hcp://help/tshoot00/DVDDecoder.htm",
L"hcp://help/tshoot00/DVDOverlay.htm",
L"hcp://help/tshoot00/DVDCopyProtection.htm",
L"hcp://help/tshoot/DVDVideoStream.htm",
L"hcp://help/tshoot/DVDAudio2.htm",
L"hcp://help/tshoot/DVDRegion.htm",
L"hcp://help/tshoot/DVDCopyProtection.htm",
L"hcp://help/tshoot/DVDDecoder.htm",
L"hcp://help/tshoot/DVDOverlay.htm",
L"hcp://help/tshoot/DVDCopyProtection.htm",
L"hcp://help/tshoot/tssound.htm",
L"hcp://services/subsite?node=Unmapped/Network_connections&select=Unmapped/Network_connections/Getting_started",
L"hcp://system/netdiag/dglogs.htm",
L"hcp://system/panels/Topics.htm?path=TopLevelBucket_4/Fixing_a_problem/Home_Networking_and_network_problems",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\infrared.chm%3A%3A/WLAN_client_configure.htm",
L"hcp://system/netdiag/dglogs.htm",
L"hcp://help/tshoot/tsmodem.htm",
L"hcp://help/tshoot/tsprint.htm",
L"hcp://services/layout/xml?definition=MS-ITS%3A%25HELP_LOCATION%25%5Cntdef.chm%3A%3A/Scanners_and_Cameras.xml",
L"hcp://services/subsite?node=TopLevelBucket_1/Music__video__games_and_photos&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/manage_your_pictures.htm&select=TopLevelBucket_1/Music__video__games_and_photos/photos_and_other_digital_images",
L"hcp://help/tshoot/tsInputDev.htm",
L"hcp://help/tshoot/tsInputDev.htm",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cdatetime.chm%3A%3A/windows_date_IT_overview.htm&select=Date_Time_Language_and_Regional_Settings",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/using_webfolders_for_file_transfer.htm&select=TopLevelBucket_2/Networking_and_the_Web/E-mail_and_the_Web/Security_online",
L"hcp://services/subsite?node=Unmapped/Control_Panel&select=Unmapped/Control_Panel/Appearance_and_Themes/Fonts",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/sharing_files_overviewP.htm&select=Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/sharing_files_overviewW.htm&select=Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://help/tshoot/hdw_generic.htm",
L"hcp://services/subsite?node=Unmapped/Recycle_Bin",
L"hcp://services/subsite?node=Unmapped/Briefcase",
L"hcp://services/subsite?node=TopLevelBucket_4/Hardware&topic=MS-ITS%3A%25HELP_LOCATION%25%5Ccdmedia.chm%3A%3A/cdmedia_fail2_moreinfo_buffer_underrun.htm&select=TopLevelBucket_4/Hardware/CDs_and_other_storage_devices",
L"hcp://services/subsite?node=TopLevelBucket_4/Hardware&topic=MS-ITS%3A%25HELP_LOCATION%25%5Ccdmedia.chm%3A%3A/cdmedia_fail3_moreinfo_disk_full.htm&select=TopLevelBucket_4/Hardware/CDs_and_other_storage_devices",
L"hcp://system/netdiag/dglogs.htm",
L"hcp://services/subsite?node=Unmapped/Search",
L"hcp://services/subsite?node=TopLevelBucket_2/Networking_and_the_Web&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cfilefold.chm%3A%3A/using_shared_documents_folder.htm&select=TopLevelBucket_2/Networking_and_the_Web/Sharing_files__printers__and_other_resources",
L"hcp://services/layout/xml?definition=MS-ITS%3A%25HELP_LOCATION%25%5Cntdef.chm%3A%3A/Printers_and_Faxes.xml",
L"hcp://help/tshoot/tsprint.htm",
L"hcp://help/tshoot/tsdisp.htm",
L"hcp://services/subsite?node=TopLevelBucket_1/Music__video__games_and_photos&topic=MS-ITS%3A%25HELP_LOCATION%25%5CDisplay.chm%3A%3A/display_switch_to_256_colors.htm&select=TopLevelBucket_1/Music__video__games_and_photos/Games",
L"hcp://services/layout/contentonly?topic=ms-its%3Aarticle.chm%3A%3A/ahn_intro.htm",
L"hcp://services/layout/contentonly?topic=MS-ITS%3Anetcfg.chm%3A%3A/Howto_conn_directparallel.htm",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Accessibility",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Security_and_User_Accounts",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Appearance_and_Themes",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Add_or_Remove_Programs",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Printers_and_Other_Hardware",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Network_Connections",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Performance_and_Maintenance",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Date__Time__Language_and_Regional_Settings",
L"hcp://services/subsite?node=Unmapped/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Sounds__Speech_and_Audio_Devices",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Accessibility",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Security_and_User_Accounts",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Appearance_and_Themes",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Add_or_Remove_Programs",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Printers_and_Other_Hardware",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Network_Connections",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Performance_and_Maintenance",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Date__Time__Language_and_Regional_Settings",
L"hcp://services/subsite?node=Unmapped/L/Control_Panel&topic=MS-ITS%3A%25HELP_LOCATION%25%5Chs.chm%3A%3A/hs_control_panel.htm&select=Unmapped/Control_Panel/Sounds__Speech_and_Audio_Devices",
L"hcp://help/tshoot/tsdisp.htm",
L"hcp://help/tshoot/ts_dvd.htm",
L"hcp://help/tshoot/tsie.htm",
L"hcp://help/tshoot/tsmodem.htm",
L"hcp://help/tshoot/tshomenet.htm",
L"hcp://help/tshoot/tsnetwrk.htm",
L"hcp://help/tshoot/tsstartup.htm",
L"hcp://help/tshoot/tssound.htm",
L"hcp://help/tshoot/tssound.htm",
L"hcp://help/tshoot/tsgame.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_requirements.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_checklistP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_checklistW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_howto_connectP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_howto_connectW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_nohost_computerP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_nohost_computerW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_determine_internet_connection.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\network.chm%3A%3A/hnw_change_ics_host.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\netcfg.chm%3A%3A/share_conn_overvw.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\netcfg.chm%3A%3A/hnw_understanding_bridge.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\filefold.chm%3A%3A/sharing_files_overviewP.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\filefold.chm%3A%3A/sharing_files_overviewW.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3A%25help_location%25\\filefold.chm%3A%3A/windows_shared_documents.htm",
L"hcp://system/HomePage.htm",
L"hcp://system/sysinfo/sysinfomain.htm",
L"hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/Common/rcscreen1.htm",
L"hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/Unsolicited/UnSolicitedRCUI.htm",
L"hcp://system/netdiag/dglogs.htm",
L"hcp://system/sysinfo/sysInfoLaunch.htm",
L"hcp://system/sysinfo/sysConfigLaunch.htm",
L"hcp://system/compatctr/compatmode.htm",
L"hcp://help/tshoot/tssetup.htm",
L"hcp://services/centers/support?topic=hcp://system/sysinfo/sysinfomain.htm",
L"hcp://help/tshoot/hdw_infrared.htm",
L"hcp://services/layout/contentonly?topic=MS-ITS%3Anetcfg.chm%3A%3A/Howto_conn_directparallel.htm",
L"hcp://services/layout/contentonly?topic=ms-its%3Aarticle.chm%3A%3A/ahn_intro.htm",
L"hcp://system/blurbs/windows_newsgroups.htm",
L"hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Connection.htm",
L"hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/Remote%20Assistance/Escalation/Common/rcscreen1.htm",
L"hcp://services/subsite?node=Security/Public_Key_Infrastructure/Certificate_Services&topic=MS-ITS:csconcepts.chm::/sag_CS_procs_setup.htm",
L"hcp://system/updatectr/updatecenter.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:filefold.chm::/manage_your_pictures.htm",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_calibratethepen.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationtoportraitorlandscape.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletbuttons.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletPCforleftorrighthandeduse.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_enableordisableapenbutton.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Windows_basics&topic=MS-ITS%3A%25HELP_LOCATION%25%5Cntchowto.chm.chm%3A%3A/app_tutorial.htm",
L"hcp://services/subsite?node=TopLevelBucket_2/Working_Remotely/Remote_Desktop&topic=MS-ITS:rdesktop.chm::/rdesktop_overview.htm",
L"hcp://services/subsite?node=Administration_and_Scripting_Tools/Remote_Administration_Tools/Remote_Administration_Using_Terminal_Services&topic=MS-ITS:rdesktop.chm::/rdesktops_chm_topnode.htm",
L"hcp://services/subsite?node=Software_Deployment/Terminal_Services&topic=MS-ITS:termsrv.chm::/ts_chm_top.htm",
L"hcp://services/layout/contentonly?topic=ms-its:article.chm::/ahn_intro.htm",
L"hcp://services/layout/contentonly?topic=MS-ITS:netcfg.chm::/Howto_conn_directparallel.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%HELP_LOCATION%\\article.chm::/ap_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%HELP_LOCATION%\\article.chm::/ahn_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%HELP_LOCATION%\\article.chm::/asa_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%25HELP_LOCATION%25\\article.chm::/asa_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%25HELP_LOCATION%25\\article.chm::/ahn_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%25HELP_LOCATION%25\\article.chm::/ap_intro.htm",
L"hcp://services/layout/fullwindow?topic=MS-ITS:%25HELP_LOCATION%25\\article.chm::/avj_intro.htm",
L"hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Common/rcscreen1.htm",
L"hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/Remote Assistance/Escalation/Unsolicited/UnSolicitedRCUI.htm",
L"hcp://services/subsite?node=TopLevelBucket_1/Windows_basics&topic=MS-ITS:%HELP_LOCATION%\\ntchowto.chm.chm::/app_tutorial.htm",
L"hcp://CN=Microsoft%20Corporation,L=Redmond,S=Washington,C=US/bugrep.htm",
L"hcp://CN=Microsoft Corporation,L=Redmond,S=Washington,C=US/bugrep.htm",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_TIPoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_notebookoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_stickynotesoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inkballoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_overview.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_options_installs.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/AccessOptions_ct.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:pwrmn.chm::/pwrmn_managing_power.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_adjustscreenbrightness.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_intheoffice.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_athome.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_TIPoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_notebookoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_stickynotesoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inkballoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_overview.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_options_installs.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/AccessOptions_ct.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:pwrmn.chm::/pwrmn_managing_power.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_adjustscreenbrightness.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_intheoffice.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_athome.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://system/panels/Topics.htm?path=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen/Tablet_Pen_Overview",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_TIPoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_notebookoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_stickynotesoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inkballoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_overview.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_options_installs.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/AccessOptions_ct.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:pwrmn.chm::/pwrmn_managing_power.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_adjustscreenbrightness.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_intheoffice.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_athome.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizepenactions.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletbuttons.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_TIPoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizepenactions.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizepenactions.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizepenactions.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_TIPoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationtoportraitorlandscape.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationsequencesettings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_adjustscreenbrightness.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_calibratethepen.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletPCforleftorrighthandeduse.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_movemenustotheleftorright.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-its:tabsys.chm::/hsc_tabletpcoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_your_tablet_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizepenactions.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_enableordisableapenbutton.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_enableordisablepeneraser.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletbuttons.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationtoportraitorlandscape.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationsequencesettings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_TIPoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_notebookoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_stickynotesoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inkballoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_overview.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/accessibility_options_installs.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-ITS:access.chm::/AccessOptions_ct.htm&select=TopLevelBucket_3/Accessibility/Understanding_Windows_XP_accessibility_features",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:pwrmn.chm::/pwrmn_managing_power.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_adjustscreenbrightness.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Conserving_power_on_your_computer",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/hsc_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_intheoffice.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_athome.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_3/Accessibility&topic=MS-its:osk.chm::/OSK_overview.htm&select=TopLevelBucket_3/ Accessibility/Features_for_people_who_have_a_mobility_impairment",
L"hcp://services/subsite?node=TopLevelBucket_3/Customizing_your_computer&topic=ms-its:input.chm::/input_toolbar_overview.htm&select=TopLevelBucket_3/Customizing_your_computer/Date__time__region__and_language/Region_and_language",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_inmeetings.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_calibratethepen.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationtoportraitorlandscape.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletPCforleftorrighthandeduse.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletbuttons.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_enableordisableapenbutton.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_penoverview.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Tablet_PC_Pen",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Increasing_Your_Productivitiy_with_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/About_Tablet_PC_Accessories",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_calibratethepen.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_changeyourscreenorientationtoportraitorlandscape.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletPCforleftorrighthandeduse.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_customizetabletbuttons.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&topic=MS-ITS:tabsys.chm::/HSC_enableordisableapenbutton.htm&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
L"hcp://services/subsite?node=TopLevelBucket_1/Getting_Started_with_Tablet_PC&select=TopLevelBucket_1/Getting_Started_with_Tablet_PC/Customizing_your_Tablet_PC",
};
static const LPCWSTR c_szEntryUrlsPartial [] =
{
L"hcp://system/DVDUpgrd/dvdupgrd.htm?website=",
L"hcp://services/layout/xml?definition=hcp://system/dfs/viewmode.xml&topic=hcp://system/dfs/uplddrvinfo.htm%3F",
L"hcp://services/layout/contentonly?topic=hcp://system/dfs/uplddrvinfo.htm%3f",
};
static const LPCWSTR c_szEntryUrlsEnv [] =
{
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_complete.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_confirm_select.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_confirm_undo.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_created.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_createRP.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_for_Wizard_Only.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_renamedFolder.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_select.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_undo_complete.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_unsuccessful.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_unsuccessful2.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_unsuccessful3.htm",
L"hcp://services/layout/contentonly?topic=ms-its:%windir%\\help\\SR_ui.chm::/app_system_restore_welcome.htm",
};
static HscPanel local_LookupPanelName( /*[in]*/ BSTR bstrName )
{
if(bstrName)
{
if(!wcscmp( bstrName, s_szPanelName_NAVBAR )) return HSCPANEL_NAVBAR ;
if(!wcscmp( bstrName, s_szPanelName_MININAVBAR)) return HSCPANEL_MININAVBAR;
if(!wcscmp( bstrName, s_szPanelName_CONTEXT )) return HSCPANEL_CONTEXT ;
if(!wcscmp( bstrName, s_szPanelName_CONTENTS )) return HSCPANEL_CONTENTS ;
if(!wcscmp( bstrName, s_szPanelName_HHWINDOW )) return HSCPANEL_HHWINDOW ;
}
return HSCPANEL_INVALID;
}
static LPCWSTR local_ReverseLookupPanelName( /*[in]*/ HscPanel id )
{
switch(id)
{
case HSCPANEL_NAVBAR : return s_szPanelName_NAVBAR ;
case HSCPANEL_MININAVBAR: return s_szPanelName_MININAVBAR;
case HSCPANEL_CONTEXT : return s_szPanelName_CONTEXT ;
case HSCPANEL_CONTENTS : return s_szPanelName_CONTENTS ;
case HSCPANEL_HHWINDOW : return s_szPanelName_HHWINDOW ;
}
return NULL;
}
static HRESULT local_ReloadPanel( /*[in]*/ IMarsPanel* pPanel )
{
__HCP_FUNC_ENTRY( "local_ReloadPanel" );
HRESULT hr;
if(pPanel)
{
CComPtr<IDispatch> disp;
CComQIPtr<IWebBrowser2> wb2;
CComQIPtr<IHTMLDocument2> doc2;
__MPC_EXIT_IF_METHOD_FAILS(hr, pPanel->get_content( &disp ));
wb2 = disp;
if(wb2)
{
disp.Release();
__MPC_EXIT_IF_METHOD_FAILS(hr, wb2->get_Document( &disp ));
}
doc2 = disp;
if(doc2)
{
CComPtr<IHTMLLocation> spLoc;
__MPC_EXIT_IF_METHOD_FAILS(hr, doc2->get_location( &spLoc ));
if(spLoc)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, spLoc->reload( VARIANT_TRUE ));
__MPC_SET_ERROR_AND_EXIT(hr, S_OK);
}
}
}
hr = E_NOINTERFACE;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT local_ReloadStyle( /*[in]*/ IHTMLWindow2* win )
{
__HCP_FUNC_ENTRY( "local_ReloadStyle" );
HRESULT hr;
CComPtr<IHTMLDocument2> doc;
CComPtr<IHTMLStyleSheetsCollection> styles;
VARIANT vIdx;
long lNumStyles;
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(doc , win , document );
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(styles , doc , styleSheets);
MPC_SCRIPTHELPER_GET__DIRECT (lNumStyles, styles, length );
vIdx.vt = VT_I4;
for(vIdx.lVal=0; vIdx.lVal<lNumStyles; vIdx.lVal++)
{
CComQIPtr<IHTMLStyleSheet> css;
CComVariant v;
__MPC_EXIT_IF_METHOD_FAILS(hr, styles->item( &vIdx, &v ));
if(v.vt == VT_DISPATCH && (css = v.pdispVal))
{
CComBSTR bstrHREF;
MPC_SCRIPTHELPER_GET__DIRECT(bstrHREF, css, href);
if(!MPC::StrICmp( bstrHREF, L"hcp://system/css/shared.css" ))
{
MPC_SCRIPTHELPER_PUT__DIRECT(css, href, bstrHREF);
break;
}
}
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
static HRESULT local_ApplySettings( /*[in]*/ IDispatch* disp )
{
__HCP_FUNC_ENTRY( "local_ApplySettings" );
HRESULT hr;
CComPtr<IHTMLDocument2> doc;
CComPtr<IHTMLWindow2> win;
CComPtr<IHTMLWindow2> winTop;
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::HTML::IDispatch_To_IHTMLDocument2( doc, disp ));
MPC_SCRIPTHELPER_GET__DIRECT(win , doc, parentWindow);
MPC_SCRIPTHELPER_GET__DIRECT(winTop, win, top );
__MPC_EXIT_IF_METHOD_FAILS(hr, local_ReloadStyle( winTop ));
{
CComPtr<IHTMLFramesCollection2> frames;
VARIANT vIdx;
long lNumFrames;
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(frames , winTop, frames);
MPC_SCRIPTHELPER_GET__DIRECT (lNumFrames, frames, length);
vIdx.vt = VT_I4;
for(vIdx.lVal=0; vIdx.lVal<lNumFrames; vIdx.lVal++)
{
CComQIPtr<IHTMLWindow2> frame;
CComVariant v;
__MPC_EXIT_IF_METHOD_FAILS(hr, frames->item( &vIdx, &v ));
if(v.vt == VT_DISPATCH && (frame = v.pdispVal))
{
__MPC_EXIT_IF_METHOD_FAILS(hr, local_ReloadStyle( frame ));
}
}
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
static HRESULT local_GetProperty( /*[in ]*/ CComDispatchDriver& driver ,
/*[in ]*/ LPCWSTR szName ,
/*[out]*/ CComVariant& v )
{
v.Clear();
return driver.GetPropertyByName( CComBSTR( szName ), &v );
}
static HRESULT local_GetProperty( /*[in ]*/ CComDispatchDriver& driver ,
/*[in ]*/ LPCWSTR szName ,
/*[out]*/ MPC::wstring& res )
{
HRESULT hr;
CComVariant v;
res.erase();
if(SUCCEEDED(hr = local_GetProperty( driver, szName, v )))
{
if(SUCCEEDED(hr = v.ChangeType( VT_BSTR )))
{
res = SAFEBSTR(v.bstrVal);
}
}
return hr;
}
static HRESULT local_GetProperty( /*[in ]*/ CComDispatchDriver& driver ,
/*[in ]*/ LPCWSTR szName ,
/*[out]*/ long& res )
{
HRESULT hr;
CComVariant v;
res = 0;
if(SUCCEEDED(hr = local_GetProperty( driver, szName, v )))
{
if(SUCCEEDED(hr = v.ChangeType( VT_I4 )))
{
res = v.lVal;
}
}
return hr;
}
static bool local_IsValidTopicURL(BSTR bstrUrl)
{
__HCP_FUNC_ENTRY( "local_IsValidTopicURL" );
CComPtr<IPCHTaxonomyDatabase> db;
CComPtr<IPCHCollection> coll;
CComVariant v;
long lCount;
bool fValid = false;
HRESULT hr;
// Grant trust
CPCHHelpCenterExternal::TLS* tlsOld = CPCHHelpCenterExternal::s_GLOBAL->GetTLS();
CPCHHelpCenterExternal::TLS tlsNew; CPCHHelpCenterExternal::s_GLOBAL->SetTLS( &tlsNew );
tlsNew.m_fSystem = true;
tlsNew.m_fTrusted = true;
// Lookup database
__MPC_EXIT_IF_METHOD_FAILS(hr, CPCHHelpCenterExternal::s_GLOBAL->get_Database(&db));
__MPC_EXIT_IF_METHOD_FAILS(hr, db->LocateContext(bstrUrl, v, &coll));
__MPC_EXIT_IF_METHOD_FAILS(hr, coll->get_Count(&lCount));
if (lCount >= 1) fValid = true;
__HCP_FUNC_CLEANUP;
// Restore trust
CPCHHelpCenterExternal::s_GLOBAL->SetTLS( tlsOld );
__HCP_FUNC_EXIT(fValid);
}
static bool local_IsValidEntryURL(BSTR bstrUrl)
{
HyperLinks::ParsedUrl pu;
CComBSTR bstrTopic;
bool fValid = true;
if (!bstrUrl) return false;
pu.Initialize(bstrUrl);
switch (pu.m_fmt)
{
case HyperLinks::FMT_CENTER_HOMEPAGE : // hcp://services/centers/homepage
break;
case HyperLinks::FMT_CENTER_SUPPORT : // hcp://services/centers/support
case HyperLinks::FMT_CENTER_OPTIONS : // hcp://services/centers/options
case HyperLinks::FMT_CENTER_UPDATE : // hcp://services/centers/update
case HyperLinks::FMT_CENTER_COMPAT : // hcp://services/centers/compat
case HyperLinks::FMT_CENTER_TOOLS : // hcp://services/centers/tools
case HyperLinks::FMT_CENTER_ERRMSG : // hcp://services/centers/errmsg
case HyperLinks::FMT_SEARCH : // hcp://services/search?query=<text to look up>
case HyperLinks::FMT_INDEX : // hcp://services/index?application=<optional island of help ID>
case HyperLinks::FMT_SUBSITE : // hcp://services/subsite?node=<subsite location>&topic=<url of the topic to display>&select=<subnode to highlight>
case HyperLinks::FMT_LAYOUT_FULLWINDOW : // hcp://services/layout/fullwindow?topic=<url of the topic to display>
case HyperLinks::FMT_LAYOUT_CONTENTONLY : // hcp://services/layout/contentonly?topic=<url of the topic to display>
case HyperLinks::FMT_LAYOUT_KIOSK : // hcp://services/layout/kiosk?topic=<url of the topic to display>
if (pu.GetQueryField(L"topic", bstrTopic))
fValid = local_IsValidTopicURL(bstrTopic);
break;
case HyperLinks::FMT_REDIRECT : // hcp://services/redirect?online=<url>&offline=<backup url>
if (pu.GetQueryField(L"online", bstrTopic))
fValid = local_IsValidTopicURL(bstrTopic);
if (fValid && pu.GetQueryField(L"offline", bstrTopic))
fValid = local_IsValidTopicURL(bstrTopic);
break;
default:
fValid = false;
break;
}
if (!fValid)
{
// Check explicit entry URLs
for (int i=0; i<sizeof(c_szEntryUrls)/sizeof(c_szEntryUrls[0]); i++)
{
if (_wcsicmp(bstrUrl, c_szEntryUrls[i]) == 0)
{
fValid = true; break;
}
}
}
if (!fValid)
{
// Check explicit entry URLs (partial)
for (int i=0; i<sizeof(c_szEntryUrlsPartial)/sizeof(c_szEntryUrlsPartial[0]); i++)
{
if (wcslen(bstrUrl) >= wcslen(c_szEntryUrlsPartial[i]) &&
_wcsnicmp(bstrUrl, c_szEntryUrlsPartial[i], wcslen(c_szEntryUrlsPartial[i])) == 0)
{
fValid = true; break;
}
}
}
if (!fValid)
{
// Check explicit entry URLs (env expanded)
for (int i=0; i<sizeof(c_szEntryUrlsEnv)/sizeof(c_szEntryUrlsEnv[0]); i++)
{
MPC::wstring strExpanded( c_szEntryUrlsEnv[i] ); MPC::SubstituteEnvVariables( strExpanded );
if (_wcsicmp(bstrUrl, strExpanded.c_str()) == 0)
{
fValid = true; break;
}
}
}
return fValid;
}
////////////////////////////////////////////////////////////////////////////////
CPCHHelpCenterExternal::DelayedExecution::DelayedExecution()
{
mode = DELAYMODE_INVALID; // DelayedExecutionMode mode;
//
iVal = HSCCONTEXT_INVALID; // HscContext iVal;
// CComBSTR bstrInfo;
// CComBSTR bstrURL;
fAlsoContent = false; // bool fAlsoContent;
}
CPCHHelpCenterExternal::CPCHHelpCenterExternal() : m_constHELPCTR( &LIBID_HelpCenterTypeLib ),
m_constHELPSVC( &LIBID_HelpServiceTypeLib )
{
m_fFromStartHelp = false; // bool m_fFromStartHelp;
m_fLayout = false; // bool m_fLayout;
m_fWindowVisible = true; // bool m_fWindowVisible;
m_fControlled = false; // bool m_fControlled;
m_fPersistSettings = false; // bool m_fPersistSettings;
m_fHidden = false; // bool m_fHidden;
//
// CComBSTR m_bstrExtraArgument
m_HelpHostCfg = NULL; // HelpHost::XMLConfig* m_HelpHostCfg;
// CComBSTR m_bstrStartURL;
// CComBSTR m_bstrCurrentPlace;
m_pMTP = NULL; // MARSTHREADPARAM* m_pMTP;
//
// MPC::CComConstantHolder m_constHELPCTR;
// MPC::CComConstantHolder m_constHELPSVC;
//
//////////////////////////////////////////////////////////////////////////////////////////////////////
//
// CPCHSecurityHandle m_SecurityHandle;
m_tlsID = -1; // DWORD m_tlsID;
m_fPassivated = false; // bool m_fPassivated;
m_fShuttingDown = false; // bool m_fShuttingDown;
//
// CComPtr<HelpHost::Main> m_HelpHost;
//
// CComPtr<CPCHHelpSession> m_hs;
// CComPtr<CPCHSecurityManager> m_SECMGR;
// CComPtr<CPCHElementBehaviorFactory> m_BEHAV;
// CComPtr<CPCHHelper_IDocHostUIHandler> m_DOCUI;
//
m_Service = NULL; // CPCHProxy_IPCHService* m_Service;
m_Utility = NULL; // CPCHProxy_IPCHUtility* m_Utility;
m_UserSettings = NULL; // CPCHProxy_IPCHUserSettings2* m_UserSettings;
//
m_panel_ThreadID = -1; // DWORD m_panel_ThreadID;
//
// CComPtr<IMarsPanel> m_panel_NAVBAR;
// CComPtr<IMarsPanel> m_panel_MININAVBAR;
//
// CComPtr<IMarsPanel> m_panel_CONTEXT;
// MPC::CComPtrThreadNeutral<IWebBrowser2> m_panel_CONTEXT_WebBrowser;
// CPCHWebBrowserEvents m_panel_CONTEXT_Events;
//
// CComPtr<IMarsPanel> m_panel_CONTENTS;
// MPC::CComPtrThreadNeutral<IWebBrowser2> m_panel_CONTENTS_WebBrowser;
// CPCHWebBrowserEvents m_panel_CONTENTS_Events;
//
// CComPtr<IMarsPanel> m_panel_HHWINDOW;
// CComPtr<IPCHHelpViewerWrapper> m_panel_HHWINDOW_Wrapper;
// MPC::CComPtrThreadNeutral<IWebBrowser2> m_panel_HHWINDOW_WebBrowser;
// CPCHWebBrowserEvents m_panel_HHWINDOW_Events;
//
// CComPtr<IMarsWindowOM> m_shell;
// CComPtr<ITimer> m_timer;
// CPCHTimerHandle m_DisplayTimer;
//
m_dwInBeforeNavigate = 0; // DWORD m_dwInBeforeNavigate;
// DelayedExecList m_DelayedActions;
// CPCHTimerHandle m_ActionsTimer;
//
m_hwnd = NULL; // HWND m_hwnd;
// CPCHEvents m_Events;
//
// MsgProcList m_lstMessageCrackers;
}
CPCHHelpCenterExternal::~CPCHHelpCenterExternal()
{
if(m_tlsID != -1)
{
::TlsFree( m_tlsID );
m_tlsID = -1;
}
(void)Passivate();
MPC::_MPC_Module.UnregisterCallback( this );
}
////////////////////
CPCHHelpCenterExternal* CPCHHelpCenterExternal::s_GLOBAL( NULL );
HRESULT CPCHHelpCenterExternal::InitializeSystem()
{
if(s_GLOBAL) return S_OK;
return MPC::CreateInstance( &CPCHHelpCenterExternal::s_GLOBAL );
}
void CPCHHelpCenterExternal::FinalizeSystem()
{
if(s_GLOBAL)
{
s_GLOBAL->Release(); s_GLOBAL = NULL;
}
}
////////////////////
bool CPCHHelpCenterExternal::IsServiceRunning()
{
bool fResult = false;
SC_HANDLE hSCM;
//
// First, let's try to query the service status.
//
if((hSCM = ::OpenSCManager( NULL, NULL, GENERIC_READ )))
{
SC_HANDLE hService;
if((hService = ::OpenServiceW( hSCM, HC_HELPSVC_NAME, SERVICE_QUERY_STATUS )))
{
SERVICE_STATUS ss;
if(::QueryServiceStatus( hService, &ss ))
{
if(ss.dwCurrentState == SERVICE_RUNNING)
{
fResult = true;
}
}
::CloseServiceHandle( hService );
}
::CloseServiceHandle( hSCM );
}
//
// Bug 535303 SVR: Security: Help And Support Service Resets to Automatic after Set to Disabled
// Modified 4/24 gschua
//
// Then, let's make sure it's not DISABLED.
//
/*
if((hSCM = ::OpenSCManager( NULL, NULL, GENERIC_READ )))
{
SC_HANDLE hService;
if((hService = ::OpenServiceW( hSCM, HC_HELPSVC_NAME, SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG )))
{
BYTE rgBuf[2048];
DWORD dwLen;
LPQUERY_SERVICE_CONFIGW cfg = (LPQUERY_SERVICE_CONFIG)rgBuf;
if(::QueryServiceConfigW( hService, cfg, sizeof(rgBuf), &dwLen ) && cfg->dwStartType == SERVICE_DISABLED)
{
if(::ChangeServiceConfigW( hService , // handle to service
cfg->dwServiceType , // type of service
SERVICE_AUTO_START , // when to start service
cfg->dwErrorControl , // severity of start failure
NULL , // service binary file name
NULL , // load ordering group name
NULL , // tag identifier
NULL , // array of dependency names
NULL , // account name
NULL , // account password
cfg->lpDisplayName )) // display name
{
}
}
::CloseServiceHandle( hService );
}
::CloseServiceHandle( hSCM );
}
*/
//
// In case it's not running, let's try to start it.
//
if(fResult == false)
{
if((hSCM = ::OpenSCManager( NULL, NULL, GENERIC_READ )))
{
SC_HANDLE hService;
if((hService = ::OpenServiceW( hSCM, HC_HELPSVC_NAME, SERVICE_START )))
{
if(::StartService( hService, 0, NULL ))
{
fResult = true;
}
::CloseServiceHandle( hService );
}
::CloseServiceHandle( hSCM );
}
}
//
// Last resort, try to connect to HelpSvc.
//
if(fResult == false)
{
CComPtr<IPCHService> svc;
if(m_Service && SUCCEEDED(m_Service->EnsureDirectConnection( svc, false )))
{
fResult = true;
}
}
return fResult;
}
HRESULT CPCHHelpCenterExternal::Initialize()
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::Initialize" );
HRESULT hr;
CLSID clsid = CLSID_PCHHelpCenter;
//
// Register for shutdown.
//
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::_MPC_Module.RegisterCallback( this, (void (CPCHHelpCenterExternal::*)())Passivate ));
m_SecurityHandle.Initialize( this, (IPCHHelpCenterExternal*)this );
//
// Thread Local Storage.
//
m_tlsID = ::TlsAlloc();
if(m_tlsID == -1)
{
__MPC_SET_WIN32_ERROR_AND_EXIT(hr, ERROR_NO_SYSTEM_RESOURCES);
}
SetTLS( NULL );
//
// Create Browser Events handlers.
//
m_panel_CONTEXT_Events .Initialize( this, HSCPANEL_CONTEXT );
m_panel_CONTENTS_Events.Initialize( this, HSCPANEL_CONTENTS );
m_panel_HHWINDOW_Events.Initialize( this, HSCPANEL_HHWINDOW );
m_Events .Initialize( this );
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_hs )); m_hs ->Initialize( this );
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_SECMGR )); m_SECMGR->Initialize( this );
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_BEHAV )); m_BEHAV ->Initialize( this );
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_DOCUI )); m_DOCUI ->Initialize( this );
//
// Create the HelpHost objects.
//
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_HelpHost )); __MPC_EXIT_IF_METHOD_FAILS(hr, m_HelpHost->Initialize( this ));
//
// Create all the proxies.
//
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &m_Service ));
__MPC_EXIT_IF_METHOD_FAILS(hr, m_Service->ConnectToParent ( this ));
__MPC_EXIT_IF_METHOD_FAILS(hr, m_Service->GetUtility ( &m_Utility ));
__MPC_EXIT_IF_METHOD_FAILS(hr, m_Utility->GetUserSettings2( &m_UserSettings ));
if(m_UserSettings)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, m_UserSettings->Initialize());
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
void CPCHHelpCenterExternal::Passivate()
{
MPC::ReleaseAll( m_lstMessageCrackers );
if(m_fPassivated == false)
{
if(DoesPersistSettings())
{
if(m_hs) (void)m_hs->Persist();
}
else
{
//
// Signal the option object to ignore SKU info during save.
//
if(CPCHOptions::s_GLOBAL) CPCHOptions::s_GLOBAL->DontPersistSKU();
}
if(m_UserSettings) (void)m_UserSettings->SaveUserSettings();
if(CPCHOptions::s_GLOBAL) CPCHOptions::s_GLOBAL->Save();
}
////////////////////////////////////////////////////////////////////////////////
m_fPassivated = true;
delete m_HelpHostCfg; m_HelpHostCfg = NULL;
if(m_HelpHost) m_HelpHost->Passivate();
if(m_Service ) m_Service ->Passivate();
m_panel_CONTEXT_Events .Passivate();
m_panel_CONTENTS_Events.Passivate();
m_panel_HHWINDOW_Events.Passivate();
m_Events .Passivate();
m_DisplayTimer.Stop();
m_ActionsTimer.Stop();
////////////////////////////////////////////////////////////////////////////////
// bool m_fFromStartHelp;
// bool m_fLayout;
// bool m_fWindowVisible;
// bool m_fControlled;
// bool m_fPersistSettings;
// bool m_fHidden;
//
// CComBSTR m_bstrExtraArgument
// HelpHost::XMLConfig* m_HelpHostCfg;
// CComBSTR m_bstrStartURL;
// CComBSTR m_bstrCurrentPlace;
// MARSTHREADPARAM* m_pMTP;
//
// MPC::CComConstantHolder m_constHELPCTR;
// MPC::CComConstantHolder m_constHELPSVC;
//
// ////////////////////////////////////////
//
// CPCHSecurityHandle m_SecurityHandle;
// DWORD m_tlsID;
// bool m_fPassivated;
//
m_HelpHost .Release(); // CComPtr<HelpHost::Main> m_HelpHost;
//
m_hs .Release(); // CComPtr<CPCHHelpSession> m_hs;
// CComPtr<CPCHSecurityManager> m_SECMGR;
// CComPtr<CPCHElementBehaviorFactory> m_BEHAV;
// CComPtr<CPCHHelper_IDocHostUIHandler> m_DOCUI;
//
MPC::Release2<IPCHService >( m_Service ); // CPCHProxy_IPCHService* m_Service;
MPC::Release2<IPCHUtility >( m_Utility ); // CPCHProxy_IPCHUtility* m_Utility;
MPC::Release2<IPCHUserSettings2>( m_UserSettings ); // CPCHProxy_IPCHUserSettings2* m_UserSettings;
//
m_panel_ThreadID = -1; // DWORD m_panel_ThreadID;
//
m_panel_NAVBAR .Release(); // CComPtr<IMarsPanel> m_panel_NAVBAR;
m_panel_MININAVBAR .Release(); // CComPtr<IMarsPanel> m_panel_MININAVBAR;
//
m_panel_CONTEXT .Release(); // CComPtr<IMarsPanel> m_panel_CONTEXT;
m_panel_CONTEXT_WebBrowser .Release(); // MPC::CComPtrThreadNeutral<IWebBrowser2> m_panel_CONTEXT_WebBrowser;
// CPCHWebBrowserEvents m_panel_CONTEXT_Events;
//
m_panel_CONTENTS .Release(); // CComPtr<IMarsPanel> m_panel_CONTENTS;
m_panel_CONTENTS_WebBrowser .Release(); // MPC::CComPtrThreadNeutral<IWebBrowser2> m_panel_CONTENTS_WebBrowser;
// CPCHWebBrowserEvents m_panel_CONTENTS_Events;
//
m_panel_HHWINDOW .Release(); // CComPtr<IMarsPanel> m_panel_HHWINDOW;
m_panel_HHWINDOW_Wrapper .Release(); // CComPtr<IPCHHelpViewerWrapper> m_panel_HHWINDOW_Wrapper;
m_panel_HHWINDOW_WebBrowser .Release(); // MPC::CComPtrThreadNeutral<IWebBrowser2> m_panel_HHWINDOW_WebBrowser;
// CPCHWebBrowserEvents m_panel_HHWINDOW_Events;
//
m_shell .Release(); // CComPtr<IMarsWindowOM> m_shell;
m_timer .Release(); // CComPtr<ITimer> m_timer;
// CPCHTimerHandle m_DisplayTimer;
//
// DWORD m_dwInBeforeNavigate;
// DelayedExecList m_DelayedActions;
// CPCHTimerHandle m_ActionsTimer;
//
m_hwnd = NULL; // HWND m_hwnd;
// CPCHEvents m_Events;
m_SecurityHandle.Passivate();
}
////////////////////////////////////////////////////////////////////////////////
HRESULT CPCHHelpCenterExternal::ProcessLayoutXML( /*[in]*/ LPCWSTR szURL )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::ProcessLayoutXML" );
HRESULT hr;
delete m_HelpHostCfg; __MPC_EXIT_IF_ALLOC_FAILS(hr, m_HelpHostCfg, new HelpHost::XMLConfig);
if(FAILED(MPC::Config::LoadFile( m_HelpHostCfg, szURL )))
{
delete m_HelpHostCfg; m_HelpHostCfg = NULL;
m_fLayout = false;
}
else
{
m_fLayout = true;
m_fPersistSettings = false;
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT CPCHHelpCenterExternal::ProcessArgument( /*[in]*/ int& pos, /*[in]*/ LPCWSTR szArg, /*[in]*/ const int argc, /*[in]*/ LPCWSTR* const argv )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::ProcessArgument" );
static bool fFromHCP = false;
HRESULT hr;
// From HCP, no parameters other than Url are allowed
if (fFromHCP && _wcsicmp( szArg, L"Url" ) != 0)
__MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
if(_wcsicmp( szArg, L"Url" ) == 0)
{
HyperLinks::ParsedUrl pu;
bool fValid = true;
if(pos >= argc - 1) __MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
m_bstrStartURL = argv[++pos];
if (fFromHCP) fValid = local_IsValidEntryURL(m_bstrStartURL);
if (fValid)
{
if(SUCCEEDED(pu.Initialize( m_bstrStartURL )) && pu.m_state == HyperLinks::STATE_NOTPROCESSED)
{
if(pu.m_fmt == HyperLinks::FMT_LAYOUT_XML)
{
CComBSTR bstrMode;
(void)pu.GetQueryField( L"topic" , m_bstrStartURL );
(void)pu.GetQueryField( L"definition", bstrMode );
(void)ProcessLayoutXML( bstrMode );
}
}
else
{
m_bstrStartURL.Empty();
}
}
else
{
CComBSTR bstrURL = m_bstrStartURL;
m_bstrStartURL = c_szURL_Err_BadUrl;
m_bstrStartURL.Append(L"?");
if (bstrURL) m_bstrStartURL.Append(bstrURL);
}
}
else if(_wcsicmp( szArg, L"ExtraArgument" ) == 0)
{
if(pos >= argc - 1) __MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
m_bstrExtraArgument = argv[++pos];
}
else if(_wcsicmp( szArg, L"Hidden" ) == 0)
{
m_fHidden = true;
m_fWindowVisible = false;
m_fPersistSettings = false;
}
else if(_wcsicmp( szArg, L"FromStartHelp" ) == 0)
{
m_fFromStartHelp = true;
m_fPersistSettings = true;
}
else if(_wcsicmp( szArg, L"Controlled" ) == 0)
{
if(pos >= argc - 1) __MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
{
CLSID clsid;
__MPC_EXIT_IF_METHOD_FAILS(hr, ::CLSIDFromString( CComBSTR( argv[++pos] ), &clsid ));
__MPC_EXIT_IF_METHOD_FAILS(hr, m_HelpHost->Register( clsid ));
}
m_fWindowVisible = false;
m_fControlled = true;
m_fPersistSettings = false;
}
else if(_wcsicmp( szArg, L"Mode" ) == 0)
{
if(pos >= argc - 1) __MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
(void)ProcessLayoutXML( argv[++pos] );
}
else if(_wcsicmp( szArg, L"FromHCP" ) == 0)
{
fFromHCP = true;
}
if(m_UserSettings)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, m_UserSettings->Initialize());
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
bool CPCHHelpCenterExternal::DoWeNeedUI()
{
if(IsFromStartHelp ()) return true;
if(IsControlled ()) return true;
if(HasLayoutDefinition()) return true;
//
// In case we are called through the HCP: shell association, try to forward to an existing instance.
//
{
CComPtr<IPCHHelpHost> hhEXISTING;
CLSID clsid = CLSID_PCHHelpCenter;
if(SUCCEEDED(m_HelpHost->Locate( clsid, hhEXISTING )))
{
CComVariant v;
if(SUCCEEDED(hhEXISTING->DisplayTopicFromURL( m_bstrStartURL, v )))
{
return false;
}
}
(void)m_HelpHost->Register( clsid );
}
return true;
}
HRESULT CPCHHelpCenterExternal::RunUI( /*[in]*/ const MPC::wstring& szTitle, /*[in]*/ PFNMARSTHREADPROC pMarsThreadProc )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::RunUI" );
HRESULT hr;
CComPtr<CPCHMarsHost> pchmh;
{
static LPCWSTR rgCriticalFiles[] =
{
L"blurbs/about_support.htm" ,
L"blurbs/Favorites.htm" ,
L"blurbs/ftshelp.htm" ,
L"blurbs/History.htm" ,
L"blurbs/Index.htm" ,
L"blurbs/isupport.htm" ,
L"blurbs/keywordhelp.htm" ,
L"blurbs/options.htm" ,
L"blurbs/searchblurb.htm" ,
L"blurbs/searchtips.htm" ,
L"blurbs/tools.htm" ,
L"blurbs/windows_newsgroups.htm" ,
L"css/Behaviors.css" ,
L"css/Layout.css" ,
L"dialogs/DlgLib.js" ,
L"dialogs/Print.dlg" ,
L"errors/badurl.htm" ,
L"errors/connection.htm" ,
L"errors/indexfirstlevel.htm" ,
L"errors/notfound.htm" ,
L"errors/offline.htm" ,
L"errors/redirect.htm" ,
L"errors/unreachable.htm" ,
L"Headlines.htm" ,
L"HelpCtr.mmf" ,
L"HomePage__DESKTOP.htm" ,
L"HomePage__SERVER.htm" ,
L"panels/AdvSearch.htm" ,
L"panels/blank.htm" ,
L"panels/Context.htm" ,
L"panels/firstpage.htm" ,
L"panels/HHWrapper.htm" ,
L"panels/MiniNavBar.htm" ,
L"panels/MiniNavBar.xml" ,
L"panels/NavBar.htm" ,
L"panels/NavBar.xml" ,
L"panels/Options.htm" ,
L"panels/RemoteHelp.htm" ,
L"panels/ShareHelp.htm" ,
L"panels/subpanels/Channels.htm" ,
L"panels/subpanels/Favorites.htm",
L"panels/subpanels/History.htm" ,
L"panels/subpanels/Index.htm" ,
L"panels/subpanels/Options.htm" ,
L"panels/subpanels/Search.htm" ,
L"panels/subpanels/Subsite.htm" ,
L"panels/Topics.htm" ,
L"scripts/Common.js" ,
L"scripts/HomePage__DESKTOP.js" ,
L"scripts/HomePage__SERVER.js" ,
L"scripts/HomePage__SHARED.js" ,
L"scripts/wrapperparam.js" ,
};
HyperLinks::ParsedUrl pu;
bool fOk = true;
bool fFirstWinInetUse = true;
MPC::wstring strTmp;
for(int i=0; i<ARRAYSIZE(rgCriticalFiles); i++)
{
strTmp = L"hcp://system/";
strTmp += rgCriticalFiles[i];
if(SUCCEEDED(pu.Initialize( strTmp.c_str() )) && pu.CheckState( fFirstWinInetUse ) != HyperLinks::STATE_ALIVE)
{
fOk = false; break;
}
}
if(fOk == false)
{
CComPtr<IPCHService> svc;
if(m_Service == NULL) __MPC_SET_ERROR_AND_EXIT(hr, E_FAIL);
__MPC_EXIT_IF_METHOD_FAILS(hr, m_Service->EnsureDirectConnection( svc, false ));
__MPC_EXIT_IF_METHOD_FAILS(hr, svc->ForceSystemRestore());
}
}
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CreateInstance( &pchmh ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pchmh->Init( this, szTitle, m_pMTP ));
__MPC_EXIT_IF_METHOD_FAILS(hr, pMarsThreadProc( pchmh, m_pMTP ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
Passivate();
__HCP_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
CPCHHelpCenterExternal::TLS* CPCHHelpCenterExternal::GetTLS()
{
if(m_tlsID != -1)
{
return (TLS*)::TlsGetValue( m_tlsID );
}
return NULL;
}
void CPCHHelpCenterExternal::SetTLS( TLS* tls )
{
if(m_tlsID != -1)
{
::TlsSetValue( m_tlsID, (LPVOID)tls );
}
}
HRESULT CPCHHelpCenterExternal::IsTrusted()
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::IsTrusted" );
HRESULT hr = E_ACCESSDENIED;
TLS* tls = GetTLS();
if(tls)
{
if(tls->m_fTrusted ||
tls->m_fSystem )
{
hr = S_OK;
}
}
__HCP_FUNC_EXIT(hr);
}
HRESULT CPCHHelpCenterExternal::IsSystem()
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::IsSystem" );
HRESULT hr = E_ACCESSDENIED;
TLS* tls = GetTLS();
if(tls)
{
if(tls->m_fSystem)
{
hr = S_OK;
}
}
__HCP_FUNC_EXIT(hr);
}
////////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CPCHHelpCenterExternal::RegisterForMessages( /*[in]*/ IOleInPlaceObjectWindowless* ptr, /*[in]*/ bool fRemove )
{
MsgProcIter it;
if(!ptr) return E_POINTER;
for(it = m_lstMessageCrackers.begin(); it != m_lstMessageCrackers.end(); it++)
{
if(*it == ptr)
{
ptr->Release();
m_lstMessageCrackers.erase( it );
break;
}
}
if(fRemove == false)
{
ptr->AddRef();
m_lstMessageCrackers.push_back( ptr );
}
return S_OK;
}
STDMETHODIMP CPCHHelpCenterExternal::ProcessMessage( /*[in]*/ MSG* msg )
{
if(msg->message == WM_SYSCHAR ||
msg->message == WM_SYSCOMMAND ||
msg->message == WM_SETTINGCHANGE ) // (weizhao) Relay WM_SETTINGCHANGE messages
// to registered windows (i.e. HTMLToolBar
// activeX controls) for appropriate handling.
{
MsgProcIter it;
for(it = m_lstMessageCrackers.begin(); it != m_lstMessageCrackers.end(); it++)
{
LRESULT lres;
if((*it)->OnWindowMessage( msg->message, msg->wParam, msg->lParam, &lres ) == S_OK)
{
return S_OK;
}
}
}
return E_NOTIMPL;
}
/////////////////////////////////////////////////////////////////////////////
HRESULT CPCHHelpCenterExternal::SetTLSAndInvoke( /*[in] */ IDispatch* obj ,
/*[in] */ DISPID id ,
/*[in] */ LCID lcid ,
/*[in] */ WORD wFlags ,
/*[in] */ DISPPARAMS* pdp ,
/*[out]*/ VARIANT* pvarRes ,
/*[out]*/ EXCEPINFO* pei ,
/*[in] */ IServiceProvider* pspCaller )
{
HRESULT hr;
TLS* tlsOld = GetTLS();
TLS tlsNew; SetTLS( &tlsNew );
//
// Let's see if the caller support the IHTMLDocument2 interface...
//
if(pspCaller && m_fPassivated == false)
{
(void)pspCaller->QueryService( SID_SContainerDispatch, IID_IHTMLDocument2, (void**)&tlsNew.m_Doc );
(void)pspCaller->QueryService( IID_IWebBrowserApp , IID_IWebBrowser2 , (void**)&tlsNew.m_WB );
if(tlsNew.m_Doc)
{
CComBSTR bstrURL;
//
// Yes! So get the URL and set the TRUSTED flag.
//
if(SUCCEEDED(tlsNew.m_Doc->get_URL( &bstrURL )))
{
tlsNew.m_fTrusted = m_SECMGR->IsUrlTrusted( SAFEBSTR( bstrURL ), &tlsNew.m_fSystem );
}
}
}
hr = obj->Invoke( id, IID_NULL, lcid, wFlags, pdp, pvarRes, pei, NULL );
SetTLS( tlsOld );
return hr;
}
/////////////////////////////////////////////////////////////////////////////
STDMETHODIMP CPCHHelpCenterExternal::GetIDsOfNames( REFIID riid ,
LPOLESTR* rgszNames ,
UINT cNames ,
LCID lcid ,
DISPID* rgdispid )
{
HRESULT hr = self::GetIDsOfNames( riid ,
rgszNames ,
cNames ,
lcid ,
rgdispid );
if(FAILED(hr))
{
hr = m_constHELPCTR.GetIDsOfNames( rgszNames, cNames, lcid, rgdispid );
if(FAILED(hr))
{
hr = m_constHELPSVC.GetIDsOfNames( rgszNames, cNames, lcid, rgdispid );
}
}
return hr;
}
STDMETHODIMP CPCHHelpCenterExternal::Invoke( DISPID dispidMember ,
REFIID riid ,
LCID lcid ,
WORD wFlags ,
DISPPARAMS* pdispparams ,
VARIANT* pvarResult ,
EXCEPINFO* pexcepinfo ,
UINT* puArgErr )
{
HRESULT hr = self::Invoke( dispidMember ,
riid ,
lcid ,
wFlags ,
pdispparams ,
pvarResult ,
pexcepinfo ,
puArgErr );
if(FAILED(hr) && wFlags == DISPATCH_PROPERTYGET)
{
hr = m_constHELPCTR.GetValue( dispidMember, lcid, pvarResult );
if(FAILED(hr))
{
hr = m_constHELPSVC.GetValue( dispidMember, lcid, pvarResult );
}
}
return hr;
}
/////////////////////////////////////////////////////////////////////////////
HWND CPCHHelpCenterExternal::Window() const
{
return m_hwnd;
}
ITimer* CPCHHelpCenterExternal::Timer() const
{
return m_timer;
}
IMarsWindowOM* CPCHHelpCenterExternal::Shell() const
{
return m_shell;
}
IMarsPanel* CPCHHelpCenterExternal::Panel( /*[in]*/ HscPanel id ) const
{
switch(id)
{
case HSCPANEL_NAVBAR : return m_panel_NAVBAR ;
case HSCPANEL_MININAVBAR: return m_panel_MININAVBAR;
case HSCPANEL_CONTEXT : return m_panel_CONTEXT ;
case HSCPANEL_CONTENTS : return m_panel_CONTENTS ;
case HSCPANEL_HHWINDOW : return m_panel_HHWINDOW ;
}
return NULL;
}
LPCWSTR CPCHHelpCenterExternal::PanelName( /*[in]*/ HscPanel id ) const
{
return local_ReverseLookupPanelName( id );
}
//////////////////////////////
IWebBrowser2* CPCHHelpCenterExternal::Context()
{
IWebBrowser2* pRes = NULL;
(void)m_panel_CONTEXT_WebBrowser.Access( &pRes );
return pRes;
}
IWebBrowser2* CPCHHelpCenterExternal::Contents()
{
IWebBrowser2* pRes = NULL;
(void)m_panel_CONTENTS_WebBrowser.Access( &pRes );
return pRes;
}
IWebBrowser2* CPCHHelpCenterExternal::HHWindow()
{
IWebBrowser2* pRes = NULL;
(void)m_panel_HHWINDOW_WebBrowser.Access( &pRes );
return pRes;
}
bool CPCHHelpCenterExternal::IsHHWindowVisible()
{
CComPtr<IMarsPanel> panel;
VARIANT_BOOL fContentsVisible;
GetPanelDirect( HSCPANEL_HHWINDOW, panel );
if(panel && SUCCEEDED(panel->get_visible( &fContentsVisible )) && fContentsVisible == VARIANT_TRUE) return true;
return false;
}
////////////////////////////////////////////////////////////////////////////////
HRESULT CPCHHelpCenterExternal::NavigateHH( /*[in]*/ LPCWSTR szURL )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::NavigateHH" );
HRESULT hr;
MPC::wstring strUrlModified;
CPCHWrapProtocolInfo::NormalizeUrl( szURL, strUrlModified, /*fReverse*/false );
//
// Delayed execution if inside OnBeforeNavigate.
//
if(m_dwInBeforeNavigate)
{
DelayedExecution& de = DelayedExecutionAlloc();
de.mode = DELAYMODE_NAVIGATEHH;
de.bstrURL = strUrlModified.c_str();
__MPC_SET_ERROR_AND_EXIT(hr, DelayedExecutionStart());
}
if(!m_panel_HHWINDOW_Wrapper)
{
__MPC_SET_ERROR_AND_EXIT(hr, E_FAIL);
}
__MPC_EXIT_IF_METHOD_FAILS(hr, m_panel_HHWINDOW_Wrapper->Navigate( CComBSTR( strUrlModified.c_str() ) ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT CPCHHelpCenterExternal::SetPanelUrl( /*[in]*/ HscPanel id, /*[in]*/ LPCWSTR szURL )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::SetPanelUrl" );
HRESULT hr;
//
// Delayed execution if inside OnBeforeNavigate.
//
if(m_dwInBeforeNavigate)
{
DelayedExecution& de = DelayedExecutionAlloc();
de.mode = DELAYMODE_NAVIGATEWEB;
de.bstrURL = szURL;
__MPC_SET_ERROR_AND_EXIT(hr, DelayedExecutionStart());
}
if(m_shell && szURL)
{
IMarsPanel* panel = Panel( id );
if(panel)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, panel->navigate( CComVariant( szURL ), CComVariant() ));
}
else
{
CComPtr<IMarsPanel> panel2; GetPanelDirect( id, panel2 );
if(panel2)
{
(void)panel2->put_startUrl( CComBSTR( szURL ) );
}
}
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT CPCHHelpCenterExternal::GetPanel( /*[in]*/ HscPanel id, /*[out]*/ IMarsPanel* *pVal, /*[in]*/ bool fEnsurePresence )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::GetPanel" );
HRESULT hr;
IMarsPanel* *pPanel;
HelpHost::CompId idComp;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_POINTER_AND_SET(pVal,NULL);
__MPC_PARAMCHECK_END();
//
// Only return the interface pointer if called from the same thread...
//
if(m_panel_ThreadID != ::GetCurrentThreadId())
{
__MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
}
switch(id)
{
case HSCPANEL_NAVBAR : pPanel = &m_panel_NAVBAR ; idComp = HelpHost::COMPID_NAVBAR ; break;
case HSCPANEL_MININAVBAR: pPanel = &m_panel_MININAVBAR; idComp = HelpHost::COMPID_MININAVBAR; break;
case HSCPANEL_CONTEXT : pPanel = &m_panel_CONTEXT ; idComp = HelpHost::COMPID_CONTEXT ; break;
case HSCPANEL_CONTENTS : pPanel = &m_panel_CONTENTS ; idComp = HelpHost::COMPID_MAX ; break; // Not gated!!
case HSCPANEL_HHWINDOW : pPanel = &m_panel_HHWINDOW ; idComp = HelpHost::COMPID_HHWINDOW ; break;
default: __MPC_SET_ERROR_AND_EXIT(hr, E_INVALIDARG);
}
if(*pPanel == NULL && fEnsurePresence)
{
CComPtr<IMarsPanel> tmp; GetPanelDirect( id, tmp );
if(tmp)
{
USES_CONVERSION;
CComPtr<IDispatch> disp;
//
// Requesting the content actually triggers the creation of the control.
//
(void)tmp->get_content( &disp );
DEBUG_AppendPerf( DEBUG_PERF_MARS, "Wait Panel: %s start", W2A( local_ReverseLookupPanelName( id ) ) );
if(idComp != HelpHost::COMPID_MAX)
{
if(m_HelpHost->WaitUntilLoaded( idComp ) == false)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, E_INVALIDARG);
}
}
DEBUG_AppendPerf( DEBUG_PERF_MARS, "Wait Panel: %s done", W2A( local_ReverseLookupPanelName( id ) ) );
}
if(*pPanel == NULL)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, E_INVALIDARG);
}
}
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::CopyTo( *pPanel, pVal ));
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT CPCHHelpCenterExternal::GetPanelWindowObject( /*[in] */ HscPanel id ,
/*[out]*/ IHTMLWindow2* *pVal ,
/*[in] */ LPCWSTR szFrame )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::GetPanelWindowObject" );
HRESULT hr;
CComPtr<IMarsPanel> panel;
CComPtr<IDispatch> disp;
CComPtr<IHTMLWindow2> window;
__MPC_PARAMCHECK_BEGIN(hr)
__MPC_PARAMCHECK_POINTER_AND_SET(pVal,NULL);
__MPC_PARAMCHECK_END();
__MPC_EXIT_IF_METHOD_FAILS(hr, GetPanel( id, &panel, true ));
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(disp, panel, content);
//
// If the panel is a web browser, we have to go through it to get to the document.
//
{
CComQIPtr<IWebBrowser2> wb( disp );
if(wb)
{
disp.Release();
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(disp, wb, Document);
}
}
//
// From the document, get to the window.
//
{
CComQIPtr<IHTMLDocument2> doc( disp );
if(doc == NULL)
{
__MPC_SET_ERROR_AND_EXIT(hr, E_FAIL);
}
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(window, doc, parentWindow);
}
if(szFrame)
{
CComPtr<IHTMLFramesCollection2> frames;
CComVariant vName( szFrame );
CComVariant vRes;
MPC_SCRIPTHELPER_GET__DIRECT__NOTNULL(frames, window, frames);
__MPC_EXIT_IF_METHOD_FAILS(hr, frames->item( &vName, &vRes ));
if(vRes.vt != VT_DISPATCH || vRes.pdispVal == NULL)
{
__MPC_SET_ERROR_AND_EXIT(hr, E_FAIL);
}
window.Release();
__MPC_EXIT_IF_METHOD_FAILS(hr, vRes.pdispVal->QueryInterface( IID_IHTMLWindow2, (void**)&window ));
}
*pVal = window.Detach();
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
void CPCHHelpCenterExternal::GetPanelDirect( /*[in ]*/ HscPanel id ,
/*[out]*/ CComPtr<IMarsPanel>& pVal )
{
pVal.Release();
if(m_shell)
{
LPCWSTR szPanelName = local_ReverseLookupPanelName( id );
if(szPanelName)
{
CComPtr<IMarsPanelCollection> coll;
if(SUCCEEDED(m_shell->get_panels( &coll )) && coll)
{
(void)coll->get_item( CComVariant( szPanelName ), &pVal );
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
static void local_GetNumber( /*[in]*/ BSTR bstrData ,
/*[in]*/ LONG lMax ,
/*[out]*/ LONG& lValue ,
/*[out]*/ bool& fCenter )
{
if(bstrData)
{
if(!_wcsicmp( bstrData, L"CENTER" ))
{
lValue = 0;
fCenter = true;
}
else
{
lValue = _wtoi( bstrData );
if(wcschr( bstrData, '%' ))
{
if(lValue < 0) lValue = 0;
if(lValue > 100) lValue = 100;
lValue = lMax * lValue / 100;
}
fCenter = false;
}
}
if(lValue < 0) lValue = 0;
if(lValue > lMax) lValue = lMax;
}
HRESULT CPCHHelpCenterExternal::OnHostNotify( /*[in]*/ MARSHOSTEVENT event ,
/*[in]*/ IUnknown *punk ,
/*[in]*/ LPARAM lParam )
{
__HCP_FUNC_ENTRY( "CPCHHelpCenterExternal::OnHostNotify" );
HRESULT hr;
if(m_panel_ThreadID == -1)
{
m_panel_ThreadID = ::GetCurrentThreadId();
}
if(event == MARSHOST_ON_WIN_INIT)
{
CComQIPtr<IProfferService> ps = punk;
DEBUG_AppendPerf( DEBUG_PERF_MARS, "OnHostNotify - MARSHOST_ON_WIN_INIT" );
m_hwnd = (HWND)lParam;
m_shell.Release(); __MPC_EXIT_IF_METHOD_FAILS(hr, punk->QueryInterface( __uuidof(IMarsWindowOM), (void**)&m_shell ));
if(ps)
{
CComQIPtr<IServiceProvider> sp;
//
// Handle security-related things.
//
if((sp = m_SECMGR))
{
DWORD dwCookie;
__MPC_EXIT_IF_METHOD_FAILS(hr, ps->ProfferService( SID_SInternetSecurityManager, sp, &dwCookie ));
}
//
// Handle behavior-related things.
//
if((sp = m_BEHAV))
{
DWORD dwCookie;
__MPC_EXIT_IF_METHOD_FAILS(hr, ps->ProfferService( SID_SElementBehaviorFactory, sp, &dwCookie ));
}
//
// Handle DocUI requires.
//
if((sp = m_DOCUI))
{
DWORD dwCookie;
__MPC_EXIT_IF_METHOD_FAILS(hr, ps->ProfferService( IID_IDocHostUIHandler, sp, &dwCookie ));
}
}
}
if(event == MARSHOST_ON_WIN_READY)
{
CComVariant v;
DEBUG_AppendPerf( DEBUG_PERF_MARS, "OnHostNotify - MARSHOST_ON_WIN_READY" );
////////////////////////////////////////
//
// Force loading of the NavBar.
//
{
CComPtr<IMarsPanel> panel;
__MPC_EXIT_IF_METHOD_FAILS(hr, GetPanel( HSCPANEL_NAVBAR, &panel, true ));
}
//
// Force loading of the Context.
//
{
CComPtr<IMarsPanel> panel;
__MPC_EXIT_IF_METHOD_FAILS(hr, GetPanel( HSCPANEL_CONTEXT, &panel, true ));
}
//
// Force loading of the Contents.
//
{
CComPtr<IMarsPanel> panel;
__MPC_EXIT_IF_METHOD_FAILS(hr, GetPanel( HSCPANEL_CONTENTS, &panel, true ));
if(m_HelpHost->WaitUntilLoaded( HelpHost::COMPID_FIRSTPAGE ) == false)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, E_INVALIDARG);
}
}
////////////////////////////////////////
//
// If the registry cache says the system is ready, we can skip the startup phase!!
//
if(OfflineCache::Root::s_GLOBAL->IsReady() == false)
{
CComPtr<IPCHService> svc;
if(!m_Service) __MPC_SET_ERROR_AND_EXIT(hr, E_FAIL);
__MPC_EXIT_IF_METHOD_FAILS(hr, m_Service->EnsureDirectConnection( svc, false ));
}
////////////////////////////////////////
{
HscContext iVal = HSCCONTEXT_STARTUP;
CComBSTR bstrInfo;
CComBSTR bstrUrl;
bool fAlsoContent = true;
if(m_HelpHostCfg)
{
for(HelpHost::XMLConfig::ApplyToIter it = m_HelpHostCfg->m_lstSessions.begin(); it != m_HelpHostCfg->m_lstSessions.end(); it++)
{
HelpHost::XMLConfig::ApplyTo& at = *it;
Taxonomy::HelpSet ths;
if(at.MatchSystem( this, ths ))
{
if(!(ths == m_UserSettings->THS()))
{
CPCHHelpCenterExternal::TLS* tlsOld = GetTLS();
CPCHHelpCenterExternal::TLS tlsNew; SetTLS( &tlsNew );
tlsNew.m_fSystem = true;
tlsNew.m_fTrusted = true;
hr = m_UserSettings->Select( CComBSTR( ths.GetSKU() ), ths.GetLanguage() );
SetTLS( tlsOld );
if(FAILED(hr)) __MPC_FUNC_LEAVE;
}
iVal = HSCCONTEXT_FULLWINDOW;
__MPC_EXIT_IF_METHOD_FAILS(hr, m_UserSettings->put_Scope( at.m_bstrApplication ));
if(STRINGISPRESENT(m_bstrStartURL))
{
bstrUrl.Attach( m_bstrStartURL.Detach() );
}
else
{
bstrUrl = at.m_bstrTopicToDisplay;
}
if(at.m_WindowSettings)
{
if(at.m_WindowSettings->m_fPresence_Left ||
at.m_WindowSettings->m_fPresence_Top ||
at.m_WindowSettings->m_fPresence_Width ||
at.m_WindowSettings->m_fPresence_Height )
{
RECT rcWin;
RECT rcMax;
__MPC_EXIT_IF_CALL_RETURNS_FALSE(hr, ::GetWindowRect ( m_hwnd , &rcWin ));
__MPC_EXIT_IF_CALL_RETURNS_FALSE(hr, ::SystemParametersInfo( SPI_GETWORKAREA, 0, &rcMax, 0 ));
{
LONG lLeft = rcWin.left;
LONG lTop = rcWin.top;
LONG lWidth = rcWin.right - rcWin.left;
LONG lHeight = rcWin.bottom - rcWin.top;
LONG lWidthMax = rcMax.right - rcMax.left;
LONG lHeightMax = rcMax.bottom - rcMax.top;
bool fCenter;
if(at.m_WindowSettings->m_fPresence_Width)
{
local_GetNumber( at.m_WindowSettings->m_bstrWidth, lWidthMax, lWidth, fCenter ); if(lWidth <= 0) lWidth = 100;
}
if(at.m_WindowSettings->m_fPresence_Height)
{
local_GetNumber( at.m_WindowSettings->m_bstrHeight, lHeightMax, lHeight, fCenter ); if(lHeight <= 0) lHeight = 50;
}
if(at.m_WindowSettings->m_fPresence_Left)
{
local_GetNumber( at.m_WindowSettings->m_bstrLeft, lWidthMax, lLeft, fCenter );
if(fCenter)
{
lLeft = rcMax.left + (lWidthMax - lWidth) / 2;
}
else
{
lLeft += rcMax.left;
}
}
if(at.m_WindowSettings->m_fPresence_Top)
{
local_GetNumber( at.m_WindowSettings->m_bstrTop, lHeightMax, lTop, fCenter );
if(fCenter)
{
lTop = rcMax.top + (lHeightMax - lHeight) / 2;
}
else
{
lTop += rcMax.top;
}
}
__MPC_EXIT_IF_CALL_RETURNS_FALSE(hr, ::SetWindowPos( m_hwnd, NULL, lLeft, lTop, lWidth, lHeight, SWP_NOACTIVATE | SWP_NOZORDER ));
}
}
if(at.m_WindowSettings->m_fPresence_Title && STRINGISPRESENT(at.m_WindowSettings->m_bstrTitle))
{
__MPC_EXIT_IF_CALL_RETURNS_FALSE(hr, ::SetWindowTextW( m_hwnd, at.m_WindowSettings->m_bstrTitle ));
}
if(at.m_WindowSettings->m_fPresence_Maximized)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, m_shell->put_maximized( at.m_WindowSettings->m_fMaximized ? VARIANT_TRUE : VARIANT_FALSE ));
}
if(at.m_WindowSettings->m_bstrLayout)
{
if(!MPC::StrICmp( at.m_WindowSettings->m_bstrLayout, L"Normal" )) iVal = HSCCONTEXT_FULLWINDOW;
if(!MPC::StrICmp( at.m_WindowSettings->m_bstrLayout, L"ContentOnly" )) iVal = HSCCONTEXT_CONTENTONLY;
if(!MPC::StrICmp( at.m_WindowSettings->m_bstrLayout, L"Kiosk" )) iVal = HSCCONTEXT_KIOSKMODE;
}
if(at.m_WindowSettings->m_fPresence_NoResize)
{
DWORD dwStyle = ::GetWindowLong( m_hwnd, GWL_STYLE );
DWORD dwNewStyle;
if(at.m_WindowSettings->m_fNoResize)
{
dwNewStyle = dwStyle & ~(WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SIZEBOX);
}
else
{
dwNewStyle = dwStyle | (WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_SIZEBOX);
}
if(dwStyle != dwNewStyle)
{
::SetWindowLong( m_hwnd, GWL_STYLE, dwNewStyle );
}
}
}
if(at.m_Context)
{
switch( CPCHHelpSessionItem::LookupContext( at.m_Context->m_bstrID ) )
{
case HSCCONTEXT_SUBSITE :
if(at.m_Context->m_bstrTaxonomyPath)
{
iVal = HSCCONTEXT_SUBSITE;
bstrInfo = at.m_Context->m_bstrTaxonomyPath;
if(at.m_Context->m_bstrNodeToHighlight)
{
bstrInfo += L" ";
bstrInfo += at.m_Context->m_bstrNodeToHighlight;
}
}
break;
case HSCCONTEXT_SEARCH :
if(at.m_Context->m_bstrQuery)
{
iVal = HSCCONTEXT_SEARCH;
bstrInfo = at.m_Context->m_bstrQuery;
}
break;
case HSCCONTEXT_INDEX :
iVal = HSCCONTEXT_INDEX;
break;
case HSCCONTEXT_CHANNELS :
iVal = HSCCONTEXT_CHANNELS;
break;
case HSCCONTEXT_FAVORITES:
iVal = HSCCONTEXT_FAVORITES;
break;
case HSCCONTEXT_HISTORY :
iVal = HSCCONTEXT_HISTORY;
break;
case HSCCONTEXT_OPTIONS :
iVal = HSCCONTEXT_OPTIONS;
break;
}
}
break;
}
}
}
m_pMTP->dwFlags &= ~MTF_DONT_SHOW_WINDOW;
{
bool fProceed;
if(iVal == HSCCONTEXT_STARTUP && m_bstrStartURL.Length())
{
VARIANT_BOOL Cancel;
fProceed = ProcessNavigation( HSCPANEL_CONTENTS ,
m_bstrStartURL ,
NULL ,
false ,
Cancel );
}
else
{
fProceed = true;
}
if(fProceed)
{
__MPC_EXIT_IF_METHOD_FAILS(hr, ChangeContext( iVal, bstrInfo, bstrUrl, fAlsoContent ));
}
}
if(CPCHOptions::s_GLOBAL) (void)CPCHOptions::s_GLOBAL->Apply();
__MPC_SET_ERROR_AND_EXIT(hr, S_FALSE); // This will tell Mars we have taken care of startup.
}
}
if(event == MARSHOST_ON_WIN_PASSIVATE)
{
DEBUG_AppendPerf( DEBUG_PERF_MARS, "OnHostNotify - MARSHOST_ON_WIN_PASSIVATE" );
m_hwnd = NULL;
m_shell.Release();
}
//
// Handle panel-related things.
//
if(event == MARSHOST_ON_PANEL_CONTROL_CREATE ||
event == MARSHOST_ON_PANEL_PASSIVATE )
{
bool fShutdown = (event == MARSHOST_ON_PANEL_PASSIVATE);
CComQIPtr<IMarsPanel> panel = punk;
if(panel)
{
CComBSTR name;
__MPC_EXIT_IF_METHOD_FAILS(hr, panel->get_name( &name ));
if(name)
{
HscPanel id = local_LookupPanelName( name );
MPC::CComPtrThreadNeutral<IWebBrowser2>* browser = NULL;
CPCHWebBrowserEvents* events = NULL;
IMarsPanel* pPanel;
CComPtr<IDispatch> disp;
#ifdef DEBUG
{
USES_CONVERSION;
DEBUG_AppendPerf( DEBUG_PERF_MARS, "OnHostNotify - %s : %s", fShutdown ? "MARSHOST_ON_PANEL_PASSIVATE" : "MARSHOST_ON_PANEL_CONTROL_CREATE", W2A( SAFEWSTR( name ) ) );
}
#endif
if(fShutdown)
{
pPanel = NULL;
}
else
{
pPanel = panel; (void)pPanel->get_content( &disp );
if(CPCHOptions::s_GLOBAL) (void)CPCHOptions::s_GLOBAL->ApplySettings( this, disp );
}
switch(id)
{
case HSCPANEL_NAVBAR : m_panel_NAVBAR = pPanel; break;
case HSCPANEL_MININAVBAR: m_panel_MININAVBAR = pPanel; break;
case HSCPANEL_CONTEXT : m_panel_CONTEXT = pPanel; browser = &m_panel_CONTEXT_WebBrowser ; events = &m_panel_CONTEXT_Events ; break;
case HSCPANEL_CONTENTS : m_panel_CONTENTS = pPanel; browser = &m_panel_CONTENTS_WebBrowser; events = &m_panel_CONTENTS_Events; break;
case HSCPANEL_HHWINDOW : m_panel_HHWINDOW = pPanel; browser = &m_panel_HHWINDOW_WebBrowser; events = &m_panel_HHWINDOW_Events; break;
default : __MPC_EXIT_IF_METHOD_FAILS(hr, E_INVALIDARG);
}
if(!m_timer && disp)
{
CComPtr<IHTMLDocument2> pDoc;
if(SUCCEEDED(MPC::HTML::IDispatch_To_IHTMLDocument2( pDoc, disp )))
{
CComPtr<IServiceProvider> sp;
CComPtr<ITimerService> ts;
if(SUCCEEDED(pDoc->QueryInterface( IID_IServiceProvider, (LPVOID*)&sp )))
{
if(SUCCEEDED(sp->QueryService( SID_STimerService, IID_ITimerService, (void **)&ts )))
{
ts->CreateTimer( NULL, &m_timer );
m_DisplayTimer.Initialize( m_timer );
m_ActionsTimer.Initialize( m_timer );
}
}
}
}
if(browser && events)
{
CComQIPtr<IWebBrowser2> wb2 = disp;
if(wb2)
{
MPC_SCRIPTHELPER_PUT__DIRECT(wb2, RegisterAsDropTarget, VARIANT_FALSE); // wb2.RegisterAsDropTarget = false;
events->Attach( wb2 );
}
else
{
events->Detach();
}
*browser = wb2;
}
}
}
}
if(event == MARSHOST_ON_PANEL_INIT)
{
DEBUG_AppendPerf( DEBUG_PERF_MARS, "OnHostNotify - MARSHOST_ON_PANEL_INIT" );
}
if(event == MARSHOST_ON_PLACE_TRANSITION_DONE)
{
CComQIPtr<IMarsPlace> place = punk;
if(place)
{
m_bstrCurrentPlace.Empty();
MPC_SCRIPTHELPER_GET__DIRECT(m_bstrCurrentPlace, place, name);
(void)m_Events.FireEvent_Transition( m_bstrCurrentPlace );
}
}
if(event == MARSHOST_ON_SCRIPT_ERROR)
{
CComQIPtr<IHTMLDocument2> doc = punk;
if(doc)
{
CComPtr<IHTMLWindow2> win;
if(SUCCEEDED(doc->get_parentWindow( &win )) && win)
{
CComPtr<IHTMLEventObj> ev;
if(SUCCEEDED(win->get_event( &ev )) && ev)
{
CComDispatchDriver driver( ev );
MPC::wstring strMessage;
MPC::wstring strUrl;
long lLine;
long lCharacter;
long lCode;
local_GetProperty( driver, L"errorMessage" , strMessage );
local_GetProperty( driver, L"errorUrl" , strUrl );
local_GetProperty( driver, L"errorLine" , lLine );
local_GetProperty( driver, L"errorCharacter", lCharacter );
local_GetProperty( driver, L"errorCode" , lCode );
g_ApplicationLog.LogRecord( L"############################################################\n\n"
L"Script error:\n\n"
L"Message : %s" , strMessage.c_str() );
g_ApplicationLog.LogRecord( L"Url : %s" , strUrl .c_str() );
g_ApplicationLog.LogRecord( L"Line : %d" , lLine );
g_ApplicationLog.LogRecord( L"Character: %d" , lCharacter );
g_ApplicationLog.LogRecord( L"Code : %d\n\n", lCode );
if(g_Debug_BLOCKERRORS)
{
__MPC_SET_ERROR_AND_EXIT(hr, S_OK);
}
}
}
}
__MPC_SET_ERROR_AND_EXIT(hr, E_FAIL);
}
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr);
}
HRESULT CPCHHelpCenterExternal::PreTranslateMessage( /*[in]*/ MSG* msg )
{
switch(msg->message)
{
////////////////////////////////////////////////////////////////////////////////
case WM_CLOSE:
{
CComPtr<IWebBrowser2> wb2;
VARIANT_BOOL Cancel;
if(SUCCEEDED(m_Events.FireEvent_Shutdown( &Cancel )))
{
if(Cancel == VARIANT_TRUE)
{
return S_OK;
}
}
m_fShuttingDown = true;
m_DisplayTimer.Stop();
m_ActionsTimer.Stop();
wb2.Attach( Context () ); if(wb2) (void)wb2->ExecWB( OLECMDID_STOP, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
wb2.Attach( Contents() ); if(wb2) (void)wb2->ExecWB( OLECMDID_STOP, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
wb2.Attach( HHWindow() ); if(wb2) (void)wb2->ExecWB( OLECMDID_STOP, OLECMDEXECOPT_DONTPROMPTUSER, NULL, NULL);
if(m_hs) (void)m_hs->ForceHistoryPopulate();
}
break;
////////////////////////////////////////////////////////////////////////////////
case WM_MOUSEWHEEL:
//
// Handle Mouse Wheel navigation...
//
if(msg->wParam & MK_SHIFT)
{
if(m_hs->IsTravelling() == false)
{
if(GET_WHEEL_DELTA_WPARAM(msg->wParam) < 0)
{
(void)HelpSession()->Back( 1 );
}
else
{
(void)HelpSession()->Forward( 1 );
}
}
return S_OK;
}
//
// Disable Mouse Wheel zoom...
//
if(msg->wParam & MK_CONTROL)
{
return S_OK;
}
break;
////////////////////////////////////////////////////////////////////////////////
//
// Sense changes in the colors or resolution and reload style sheets.
//
case WM_THEMECHANGED:
case WM_DISPLAYCHANGE:
case WM_PALETTECHANGED:
case WM_SYSCOLORCHANGE:
if(CHCPProtocolEnvironment::s_GLOBAL->UpdateState())
{
for(int i = HSCPANEL_NAVBAR; i<= HSCPANEL_HHWINDOW; i++)
{
IMarsPanel* pPanel = Panel( (HscPanel)i );
if(pPanel)
{
CComPtr<IDispatch> disp;
if(i == HSCPANEL_HHWINDOW)
{
CComPtr<IWebBrowser2> wb2; wb2.Attach( HHWindow() );
disp = wb2;
}
else
{
(void)pPanel->get_content( &disp );
}
(void)local_ApplySettings( disp );
}
}
(void)m_Events.FireEvent_CssChanged();
}
break;
////////////////////////////////////////////////////////////////////////////////
//
// (weizhao) Sense changes in the system settings (e.g. accessibility settings
// such as high-contrast mode).
//
case WM_SETTINGCHANGE:
ProcessMessage( msg );
break;
// default:
// DebugLog( "MSG: %d %04x %08x\n", msg->message, msg->wParam, msg->lParam );
}
return m_DOCUI ? m_DOCUI->TranslateAccelerator( msg, NULL, 0 ) : E_NOTIMPL;
}
////////////////////////////////////////
HRESULT CPCHHelpCenterExternal::SetHelpViewer( /*[in]*/ IPCHHelpViewerWrapper* pWrapper )
{
m_panel_HHWINDOW_Wrapper = pWrapper;
if(pWrapper)
{
CComPtr<IUnknown> unk; (void)pWrapper->get_WebBrowser( &unk );
CComQIPtr<IWebBrowser2> wb = unk;
if(wb)
{
m_panel_HHWINDOW_WebBrowser = wb;
m_panel_HHWINDOW_Events.Attach( wb );
}
}
else
{
m_panel_HHWINDOW_WebBrowser.Release();
m_panel_HHWINDOW_Events.Detach();
}
return S_OK;
}
////////////////////////////////////////////////////////////////////////////////
HRESULT CPCHHelpCenterExternal::CreateScriptWrapper( /*[in]*/ REFCLSID rclsid, /*[in]*/ BSTR bstrCode, /*[in]*/ BSTR bstrURL, /*[out]*/ IUnknown* *ppObj )
{
return m_Service ? m_Service->CreateScriptWrapper( rclsid, bstrCode, bstrURL, ppObj ) : E_ACCESSDENIED;
}
////////////////////////////////////////////////////////////////////////////////
HRESULT CPCHHelpCenterExternal::CallFunctionOnPanel( /*[in] */ HscPanel id ,
/*[in] */ LPCWSTR szFrame ,
/*[in] */ BSTR bstrName ,
/*[in] */ VARIANT* pvarParams ,
/*[in] */ int nParams ,
/*[out]*/ VARIANT* pvarRet )
{
HRESULT hr;
CComPtr<IHTMLWindow2> win;
if(SUCCEEDED(hr = GetPanelWindowObject( id, &win, szFrame )))
{
CComDispatchDriver driver( win );
hr = driver.InvokeN( bstrName, pvarParams, nParams, pvarRet );
}
return hr;
}
HRESULT CPCHHelpCenterExternal::ReadVariableFromPanel( /*[in] */ HscPanel id ,
/*[in] */ LPCWSTR szFrame ,
/*[in] */ BSTR bstrVariable ,
/*[out]*/ CComVariant& varRet )
{
HRESULT hr;
CComPtr<IHTMLWindow2> win;
varRet.Clear();
if(SUCCEEDED(hr = GetPanelWindowObject( id, &win, szFrame )))
{
CComDispatchDriver driver( win );
hr = driver.GetPropertyByName( bstrVariable, &varRet );
}
return hr;
}