Stránka 1 z 1

[C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 6. 6. 2010 11:41
od OgyDoggy
potřeboval bych poradit, jak otevřít .html soubor v defaultním prohlížeči systému. zatím jsem nepřišel jak na to :(

Re: [C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 6. 6. 2010 11:50
od MiliNess
Pokud se ti jedná o Windows, tak třeba pomocí ShellExecute
http://support.microsoft.com/kb/224816/cs

Re: [C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 6. 6. 2010 18:22
od OgyDoggy
děkuju, koukl jsem se na to a asi dělám něco špatně. můžu to takhle volat z jednoduché konzolové aplikace? nebo to musí být okenní?

Kód: Vybrat vše
#include <iostream>
#include <string>
#include <windows.h>
#include <shellapi.h>

int main()
{
   ShellExecute(NULL, "open", "http://www.neco.nic/", NULL, NULL, SW_SHOWNORMAL);

   system("pause");
   return 0;
}


takhle to píše chybu error C2664: 'ShellExecuteW' : cannot convert parameter 2 from 'const char [5]' to 'LPCWSTR' pročpak?

kdybych napsal volání

ShellExecute(NULL, "open", "index.html", NULL, NULL, SW_SHOWNORMAL);

tak by se mi otevřel soubor index.html umístěný spolu s tím dejme tomu program.exe ve stejné složce?

Re: [C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 6. 6. 2010 19:52
od MiliNess
Páč máš založený Unicode project. ShellExecute je makro, které při kompilaci expanduje buď na ANSI funkci ShellExecuteA (v případě kódování Multibyte), která jako druhý parametr přijímá ANSI řetězec nebo na ShellExecuteW (v případě kódování Unicode) která přijímá unicode řetězec.

Takže buď ve vlastnostech projektu přenastavíš Unicode charset na Multibyte charset nebo funkci předáš unicode řetězec.
ShellExecute(NULL, L"open", "index.html", NULL, NULL, SW_SHOWNORMAL);

Pokud nespecifikuješ plnou cestu k tomu html souboru a jako lpDirectory nepředáš cestu ke složce, kde se má soubor hledat, použije se aktuální složka, obvykle to bývá ta, ze které je program spuštěn. V některých případech to tak ale nemusí být. Proto dávám přednost předání plné cesty k souboru.

Re: [C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 6. 6. 2010 20:02
od OgyDoggy
děkuju

Re: [C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 6. 6. 2010 20:20
od MiliNess
Plnou cestu ke složce s exe souborem získáš pomocí GetModuleFileName a jméno souboru odstraníš třeba pomocí PathRemoveFileSpec

Re: [C++] otevření .html souboru v prohlížeči

Odeslat příspěvekNapsal: 12. 5. 2012 21:33
od AmarLite
Zdravím,

mám stejný problém, akorát v C++ MFC. Potřeboval bych otevřít soubor po kliknutí na tlačítko. Mám to už vnořený dialog, vypadá to nějak takhle:
Kód: Vybrat vše
// Sekce01b.cpp : implementation file
//

#include "stdafx.h"
#include "MyProgram.h"
#include "Sekce01b.h"
#include "afxdialogex.h"


// Sekce01b dialog

IMPLEMENT_DYNAMIC(Sekce01b, CDialog)

Sekce01b::Sekce01b(CWnd* pParent /*=NULL*/)
   : CDialog(Sekce01b::IDD, pParent)
{

   EnableAutomation();

}

Sekce01b::~Sekce01b()
{
}

void Sekce01b::OnFinalRelease()
{
   // When the last reference for an automation object is released
   // OnFinalRelease is called.  The base class will automatically
   // deletes the object.  Add additional cleanup required for your
   // object before calling the base class.

   CDialog::OnFinalRelease();
}

void Sekce01b::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
}


BEGIN_MESSAGE_MAP(Sekce01b, CDialog)
   ON_BN_CLICKED(IDC_MFCBUTTON1, &Sekce01b::OnBnClickedMfcbutton1)
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(Sekce01b, CDialog)
END_DISPATCH_MAP()

// Note: we add support for IID_ISekce01b to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the
//  dispinterface in the .IDL file.

// {CC0DC276-F26A-4171-ABB4-541CE5661EBA}
static const IID IID_ISekce01b =
{ 0xCC0DC276, 0xF26A, 0x4171, { 0xAB, 0xB4, 0x54, 0x1C, 0xE5, 0x66, 0x1E, 0xBA } };

BEGIN_INTERFACE_MAP(Sekce01b, CDialog)
   INTERFACE_PART(Sekce01b, IID_ISekce01b, Dispatch)
END_INTERFACE_MAP()


// Sekce01b message handlers


void Sekce01b::OnBnClickedMfcbutton1()
{
   // TODO: Add your control notification handler code here
}


Poradili byste mi, co bych měl zadat jako akci po stisku tlačítka, abych mohl nějaký soubor otevřít (jednalo by se o pdf, otevřené např. v Adobe Readeru)?

Děkuji