Newsgroup: it.comp.programmare.win32
Titolo: ShellExecute e percorsi relativi

Sto realizzando un wrapper per lanciare una web app, usando una
ShellExecute(hWnd, "Open", "IEXPLORE.EXE", "start.html", NULL,
SW_SHOWMINNOACTIVE);
per aprire una pagina web in locale, ma non funziona: IE interpreta il
parametro come un indirizzo http anziche' come un file in locale.
E' possibile esprimere in qualche maniera la directory di lavoro
dell'applicazione?
Oppure e' necessario settare (al momento dell'installazione) e recuperare
(durante l'esecuzione) la directory di installazione dal registro di
windows, e costruire il percorso assoluto da passare a ShellExecute?
--
artemis.alpeia
http://spazioinwind.libero.it/artemis

windows, e costruire il percorso assoluto da passare a ShellExecute?
Ma hai letto la definizione?
HINSTANCE ShellExecute(          
	HWND hwnd,
    LPCTSTR lpOperation,
    LPCTSTR lpFile,
    LPCTSTR lpParameters,
    LPCTSTR lpDirectory,
    INT nShowCmd
);
In lpDirectory puoi definire la directory di lavoro e, comunque, penso
sia piu' sicuro definire il percorso completo del file da aprire:
ShellExecute(hWnd, 
	"open", 
	"percorso_completo_di_start.html", 
	NULL,
	NULL,
	SW_SHOWMINNOACTIVE);
-- 
ciao, hal

 Ma hai letto la definizione?
yep, ma il problema e' che io non so dove si trovi il programma al momento
dell'esecuzione ^^. Quindi, le scelte sono due: o trovo un modo per
determinare la posizione dell'eseguibile durante l'esecuzione, oppure al
momento dell'installazione, inserisco nel registro una chiave che contiene
il percorso dell'installazione, e al momento dell'esecuzione la leggo da
programma. Non so quale dei due sia il migliore, ma ora mi documentero' su
MSDN
--
artemis.alpeia
http://spazioinwind.libero.it/artemis

dell'esecuzione ^^. 
E invece si' ;-)
Subito dopo la WinMain prova ad eseguire questo:
	::MessageBox(NULL, 
		::GetCommandLine(),   
		_T("Command line"), 
		0);
-- 
ciao, hal

 0);
ehm, io uso il C e le API, cmq lo provo subito :)
grazie
--
artemis.alpeia
http://spazioinwind.libero.it/artemis

 ehm, io uso il C e le API, cmq lo provo subito :)
ma questo è quello che usi tu... _T è solo una macro, e :: è l'operatore di
risoluzione del campo (o scopo) che indica di usare funzioni esterne
all'ambiente C/C++ (le famose API!!). Oltretutto si può anche omettere se si
usa Visual C++.
--------------------------------
Inviato via 
http://usenet.libero.it

 dell'esecuzione ^^.
Io faccio cosi:
char * ExecPath;
char szTmp[500]
wsprintf(szTmp,"%s",GetCommandLine());
	counter = (strlen(szTmp));
	for(j=counter;j>5;j--)
	{
		if (
			((szTmp[j] =='e')||(szTmp[j] =='E'))&&
			((szTmp[j-1] =='x')||(szTmp[j-1] =='X'))&&
			((szTmp[j-2] =='e')||(szTmp[j-2] =='E'))&&
			(szTmp[j-3] =='.')&&
			((szTmp[j-4] =='e')||(szTmp[j-4] =='E'))&&
			((szTmp[j-5] =='f')||(szTmp[j-5] =='F'))&&
			((szTmp[j-6] =='t')||(szTmp[j-6] =='T'))
			)
		{
			szTmp[j-6] = '\0';
			szTmp[j-5] = '\0';
			break;
		}
	}
 
	ExecPath = calloc(1,strlen(szTmp)+2);
 
	if (szTmp[0]=='\"') wsprintf(Opzioni.ExecPath,"%s",szTmp+1);
	else wsprintf(ExecPath,"%s",szTmp);
	GetShortPathName(ExecPath,szTmp,500); //a getshortpathname bisogna passare
il path senza ""
	wsprintf(ExecPath,"%s%c",szTmp,'\0');


 )
non e' un po' macchinosa questa cosa? ^^;
voglio Java!!! pentendomi di avere appreso prima superficialmente il C, poi
aver approfondito Java e aver fatto un ritorno non proprio felice sul C, mi
sto costruendo una piccola libreria sulle stringhe, sulla scia degli
analoghi metodi di Java:
String substr = "directory_di_lavoro".substring(0, 3); // Java
diventa
char * substr;
substr = Substring("directory_di_lavoro", 0, 3); // C
--
artemis.alpeia
http://spazioinwind.libero.it/artemis

analoghi metodi di Java:
Non ti conviene fare un passettino in piu' e guardare il C++ ?
All'inizio puoi tranquillamente usarlo come il C con qualcosa in piu',
per esempio la classe string. Poi quando ci hai preso la mano ti
assicuro che e' molto vantaggioso, anche se continui a programmare in
Win32 senza MFC.
Stefano "HappyMan"
--
Database Gate - The Powerful SQL Editor
HD Checker - The S.M.A.R.T. Hard Disk Reader
Asus Checker - CPU and Asus MB Checker
http://www.sgr.info

 non e' un po' macchinosa questa cosa? ^^;
Si un po' :/ ma avevo bisogno di accertarmi che fosse il percorso giusto:
la command line sarebbe potuta essere anche cosi:
c:\a\b\c\d.exe c:\f\g\h\ciao.xxx
volevo evitare questo problema insomma..
Ph.
