Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lien entre une fenêtre et son aide associée

11 réponses
Avatar
ringo973
Bonjour je vous explique mon probl=E8me, je programme sous visual c++ et
lorsque j'ex=E9cute mon programme un utilisateur a acc=E9s =E0 une
interface. Lorsqu'il clique sur un onglet dans le menu une fen=EAtre
s'affiche lorqu'il appuie sur la touche F12 il est redirig=E9 vers un
manuel d'utilisateur (qui =E9tait en .doc que j'ai converti en page
web). Le probl=E8me c'est que je voudrais que l'utilisateur soit
redirig=E9 vers le chapitre concernant la bonne fen=EAtre dans le manuel,
alors j'ai essay=E9 de faire des "ancres nomm=E9es" (ici j'ai pris
Pr=E9coniser) dans le code html de mon manuel mais lorsque je fais cette
ligne de code en C++ :
TCHAR szPath[MAX_PATH];
GetModuleFileName( NULL, szPath, MAX_PATH );
CString temp( szPath );

temp.Format( "C:\\Opti_plage\\Manuel Utilisateur.htm#Pr=E9coniser",
temp.Left( temp.ReverseFind( '\\' ) + 1 ) );
ShellExecute(NULL, "open", temp, NULL, NULL, SW_SHOWNORMAL);

rien ne s'affiche et d=E8s que j'enl=E8ve "#Pr=E9coniser" la page web
s'affiche, quelqu'un peut-il m'aider?Merci beaucoup.

10 réponses

1 2
Avatar
Christian ASTOR
On 13 mai, 11:45, wrote:
Bonjour je vous explique mon problème, je programme sous visual c++ et
lorsque j'exécute mon programme un utilisateur a accés à une
interface. Lorsqu'il clique sur un onglet dans le menu une fenêtre
s'affiche lorqu'il appuie sur la touche F12 il est redirigé vers un
manuel d'utilisateur (qui était en .doc que j'ai converti en page
web). Le problème c'est que je voudrais que l'utilisateur soit
redirigé vers le chapitre concernant la bonne fenêtre dans le manuel,
alors j'ai essayé de faire des "ancres nommées" (ici j'ai pris
Préconiser) dans le code html de mon manuel mais lorsque je fais cette
ligne de code en C++ :
TCHAR szPath[MAX_PATH];
GetModuleFileName( NULL, szPath, MAX_PATH );
CString temp( szPath );

temp.Format( "C:Opti_plageManuel Utilisateur.htm#Préconiser",
temp.Left( temp.ReverseFind( '' ) + 1 ) );
ShellExecute(NULL, "open", temp, NULL, NULL, SW_SHOWNORMAL);

rien ne s'affiche et dès que j'enlève "#Préconiser" la page web
s'affiche, quelqu'un peut-il m'aider?Merci beaucoup.



Ca marche notamment avec IWebBrowser2::Navigate()
On peut aussi faire un .chm et appeler HtmlHelp() (HH_DISPLAY_TOPIC
ou autre)
Avatar
ringo973
Merci mais comme je suis débutante pourriez-vous me donner davantage
d'explications?Merci beaucoup.
Avatar
Christian ASTOR
On 14 mai, 11:03, wrote:
Merci mais comme je suis débutante pourriez-vous me donner davantage
d'explications?Merci beaucoup.



Un test rapide en Win32 Console :

#include <windows.h>
#include <tchar.h>
#include <exdisp.h>

int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
BSTR bstrURL;
IWebBrowser2 *pWebBrowser;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance (CLSID_InternetExplorer, NULL,
CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (LPVOID *)&pWebBrowser);
if (SUCCEEDED(hr))
{
bstrURL = SysAllocString(L"C:testtest.htm#link");
VARIANT var;
var.vt = VT_EMPTY;
pWebBrowser->Navigate(bstrURL, &var, &var, &var, &var);
SysFreeString(bstrURL);
VARIANT_BOOL vb = TRUE;
pWebBrowser->put_Visible(vb);
pWebBrowser->Release();
}

}
return 0;
}
Avatar
ringo973
Merci mais lorsque j'insére votre méthode dans mon code j'ai le
message d'erreur suivant : error C2601: 'main' : local function
definitions are illegal.

void CDlg_Preconiser::OnAide()
{
// TODO: Add your control notification handler code here
/*
TCHAR szPath[MAX_PATH];
GetModuleFileName( NULL, szPath, MAX_PATH );
CString temp( szPath );

temp.Format( "C:Opti_plageManuel Utilisateur.htm", temp.Left
( temp.ReverseFind( '' ) + 1 ) );
ShellExecute(NULL, "open", temp, NULL, NULL, SW_SHOWNORMAL);*/
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
BSTR bstrURL;
IWebBrowser2 *pWebBrowser;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance (CLSID_InternetExplorer, NULL,
CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (LPVOID *)&pWebBrowser);
if (SUCCEEDED(hr))
{
bstrURL = SysAllocString(L"C:Opti_plage
Manuel Utilisateur.htm");
VARIANT var;
var.vt = VT_EMPTY;
pWebBrowser->Navigate(bstrURL, &var, &var,
&var, &var);
SysFreeString(bstrURL);
VARIANT_BOOL vb = TRUE;
pWebBrowser->put_Visible(vb);
pWebBrowser->Release();
}


}

return 0;

}

}
Avatar
Christian ASTOR
On 14 mai, 11:55, wrote:
Merci mais lorsque j'insére votre méthode dans mon code j'ai le
message d'erreur suivant : error C2601: 'main' : local function
definitions are illegal.

void CDlg_Preconiser::OnAide()
....
int _tmain(int argc, _TCHAR* argv[])



Il ne faut pas copier le main() !!
Avatar
ringo973
Cela doit donner ça ? Merci.

void CDlg_Preconiser::OnAide()
{
// TODO: Add your control notification handler code here

HRESULT hr;
BSTR bstrURL;
IWebBrowser2 *pWebBrowser;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance (CLSID_InternetExplorer, NULL,
CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (LPVOID *)&pWebBrowser);
if (SUCCEEDED(hr))
{
bstrURL = SysAllocString(L"C:test
test.htm#link");
VARIANT var;
var.vt = VT_EMPTY;
pWebBrowser->Navigate(bstrURL, &var, &var,
&var, &var);
SysFreeString(bstrURL);
VARIANT_BOOL vb = TRUE;
pWebBrowser->put_Visible(vb);
pWebBrowser->Release();
}


}
return 0;
Avatar
Christian ASTOR
On 14 mai, 14:56, wrote:
Cela doit donner ça ? Merci.



Oui, à toi d'adapter avec ton fichier HTML
(et #include <exdisp.h> au début pour pouvoir compiler l'IWebBrowser2 )
Avatar
ringo973
Super ça fonctionne c'est génial merci merci beaucoup.
Avatar
ringo973
On 15 mai, 09:23, wrote:
Super ça fonctionne c'est génial merci merci beaucoup. Mais j'ai enco re une petite question j'ai fais ce code pour en fait récupérer le chem in précis de mon manuel dans une variable temp et lorsque je l'appelle co mme ceci bstrURL = SysAllocString(L"temp"); internet explorer se charge m ais essai d'ouvrir http://temp et évidemment ne le trouve pas, comment pu is-je faire afficher mon temp sachant que je veux toujours garder mes ancre s et que ShellExecute ne les prend pas en compte? Merci.



void CDlg_Preconiser::OnAide()
{

TCHAR szPath[MAX_PATH];
GetModuleFileName( NULL, szPath, MAX_PATH );
CString temp( szPath );

temp.Format( "%sManuel Utilisateur.htm", temp.Left( temp.ReverseFind
( '' ) + 1 ) );
ShellExecute(NULL, "open", temp, NULL, NULL, SW_SHOWNORMAL);




HRESULT hr;
BSTR bstrURL;
IWebBrowser2 *pWebBrowser;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance (CLSID_InternetExplorer, NULL,
CLSCTX_LOCAL_SERVER, IID_IWebBrowser2, (LPVOID *)&pWebBrowser);
if (SUCCEEDED(hr))
{
bstrURL = SysAllocString(L"temp");
VARIANT var;
var.vt = VT_EMPTY;
pWebBrowser->Navigate(bstrURL, &var, &var, &var, &var);
SysFreeString(bstrURL);
VARIANT_BOOL vb = TRUE;
pWebBrowser->put_Visible(vb);
pWebBrowser->Release();
}
}

return ;

}
Avatar
Christian ASTOR
On 2 juin, 09:13, wrote:
On 15 mai, 09:23, wrote:

> Super ça fonctionne c'est génial merci merci beaucoup. Mais j'ai en core une petite question j'ai fais ce code pour en fait récupérer le ch emin précis de mon manuel dans une variable temp et lorsque je l'appelle comme ceci bstrURL = SysAllocString(L"temp"); internet explorer se charge mais essai d'ouvrirhttp://tempet évidemment ne le trouve pas, comment pu is-je faire afficher mon temp sachant que je veux toujours garder mes ancre s et que ShellExecute ne les prend pas en compte? Merci.



Si tu utilises un CString, il faut utiliser ::AllocSysString() =>
BSTR bstrURL = temp.AllocSysString();
1 2