ShellExecuteEx

ChrissiR

Grünschnabel
Hi!

Ich hab das Problem, das ich eine XML Datei mit dem Standardbrowser öffnen muss.
Dies hab ich jetzt so verwirklicht:

SHELLEXECUTEINFO se;
ZeroMemory (&se, sizeof(se));
se.cbSize = sizeof(se);
se.lpVerb = "open";
// zu öffnende Datei
se.lpFile = xml.c_str();
se.fMask = SEE_MASK_CLASSNAME;
// Programm das mit diesem Dateityp (Standardbrowser) wird geöffnet
se.lpClass = "http";

die XML Datei wird jetzt aber, wenn der Standardbrowser geöffnet ist in diesem geöffnet. Ich möchte aber, das ein neues Fenster aufgemacht wird. Hat jemand eine Idee, wie ich das verwirklichen könnte?
 
moin


Mit folgendem Code, wird bei mir zumindest, immer ein neues Fenster geöffnet.
Code:
ShellExecute(NULL, "open", "test.xml", NULL, NULL, SW_SHOW);


mfg
umbrasaxum
 
yo hab diesen Code auch schon probiert, aber dann wird die XML immer mit dem Programm geöffnet mit dem es verknüpft ist. Ich will es aber mit dem Standardbrowser des jeweiligen Rechners öffnen...
 
moin


Ich glaube es geht ihm vorallem darum das sein Programm ohne wieteres auf frtemden Rechnern ausgeführt werden kann. Da bringt ihm das nicht viel es bei sich so einzustellen.


mfg
umbrasaxum
 
Hallo,

du kannst mit folgendem Code den Standartbrowser heraus finden und das XML-File dann mit der richtigen exe öffnen:

Code:
 char *standartbrowser = new char [MAX_PATH];
 FindExecutableA("irgendeinedatei.html",NULL,standartbrowser);
 
mal abgesehen davon das "Er" eine "Sie" ist, danke für die Hinweise ;)

also ShellExecute() öffnet bei mir auch immer nur das gleiche Fenster. Bei Firefox kann man das umstellen, wenn ich das bei IE mache dann aktualisiert er mir das Fenster nicht mehr.

mit ShellExecute() kann ich aber kein bestimmtes Programm definieren mit dem die Datei geöffnet werden soll oder?

außerdem wird bei mir mit *.html nämlich immer der IE geöffnet und dieser ist nicht Standardbrowser... :confused:
 
moin


außerdem wird bei mir mit *.html nämlich immer der IE geöffnet und dieser ist nicht Standardbrowser...
Ja, das kann sein.

mit ShellExecute() kann ich aber kein bestimmtes Programm definieren mit dem die Datei geöffnet werden soll oder?
Doch geht, in dem zu als zu öffnende Datei den Browser angibst, und die Datei um die es geht, als Parameter.
Code:
ShellExecute(NULL, "open", "C:\\Programme\\Internet Explorer\\iexplore.exe", "test.xml", NULL, SW_SHOW);


mfg
umbrasaxum
 
hm, soweit so gut, aber gibt es dann jetzt einen Dateityp der immer mit dem Standardbrowser verknüpft ist

okay, der Dateityp *.htm dürft dafür passen :)

jetzt ist es dann aber soweit, das der IE es tadellos öffnet, immer schön in einem neuen Fenster - einfach perfekt... aber Firefox und Netscape machen nix :(

char *standardbrowser = new char [MAX_PATH];
FindExecutableA("C:\\rc_test.htm",NULL,standardbrowser);
ShellExecute(NULL, "open", standardbrowser, xml.c_str(), NULL, SW_SHOW);

What's wrong?
 
Zuletzt bearbeitet:
Hi.

Also ich denke das wird dir alles nix bringen. Ob der Browser nun ein neues Fenster (bzw. Tab) öffnet oder nicht hängt immer vom Browser ab (wie der eingestellt ist bzw. was für Optionen man dem Kommando mitgibt).

Außerdem würde ich es nicht gut finden, wenn ich meinen Browser entsprechend eingestellt habe, das dann doch ein neues Fenster aufgemacht wird. Das wäre eher verwirrend. Eigentlich sollte man doch immer die Einstellungen des Nutzers respektieren und wirklich gute Gründe haben wenn man/frau sich darüber hinwegsetzt.

Wenn du das trotz allem machen willst, könntest du höchstens versuchen mit Javascript etwas zu erreichen indem du ein Skript in den Browser lädst das dann testet ob es ein neues Fenster ist oder nicht und dann gegebenenfalls entweder ein neues Fenster mit deiner Datei lädt und in der Browser-History zurückgeht bzw. die Datei gleich in das Fenster lädt.

Wäre natürlich irgendwie äußerst unschön und funktioniert auch nur wenn Javascript eingeschaltet ist und der Popup Blocker das neue Fenster erlaubt...
 
Zurück