C++ Windows Form "LinkLabel"

fox40phil

Vice Admiral
Registriert
Okt. 2008
Beiträge
6.583
Hallo Community,

heute bitte ich euch mal wieder um eine kleine Hilfe^^.
Seit März bin habe ich bei meiner neuen Ausbildungsstelle ein eigenes Projekt. Dies habe ich in C++ unter Visual Studio 2008 mit WindowsForms programmiert.

Das Programm an sich ist soweit fertig, ich habe jetzt noch ein "Info" Fenster hinzugefügt über das man informatiert werden soll um welche Version es sich handelt und dort soll es einen Link zur Firmen Website geben. Genau da ist das Problem, dass kein Internetexplorer (IE oder FF) starten und den Link ausführen. Zudem stürzt das Programm ab >.< d.h. dieser "Hand-Mauszeiger" bleibt erhalten und man kann nichts mehr drücken!

Code:
private: System::Void linkLabel_SMA_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e) 
		 {
			
		//	linkLabel_SMA->Links->Add(0,10,"www.blabla.de");

			System::Diagnostics::Process::Start("http:\\www.blabla.de");
			
		 }
};

habe leider noch nicht so viel Erfahrung mit Windows Programmierung =S. Hatte ich auch schon im Netz nach einer Lösung gesucht, kam dann sehr oft auf diese "Process::Start-" bzw. "Links->Add() "-Funktion


ich hoffe ihr könnt mir vielleicht helfen :rolleyes:

Grüße,
Phil
 
Zuletzt bearbeitet:
Hi,

leider kann ich dir im Moment nicht sagen woran es genau liegt.
Die URL die du aufrufst ist nicht korrekt. Hier muss man auf das "\" achten. Dein Aufruf entspricht diesem "http:\www.blabla.de".

Du solltest mal dies versuchen:
Code:
System::Diagnostics::Process::Start( "IExplore.exe", "http:\\\\www.blabla.de" );
 
eine url wird aber durch http:// beschrieben. der einzelne backslash funktioniert bei mir allerdings trotzdem.

@ te:
setzt doch mal nen breakpoint und debugge das ganze, dann weißt du auch wann und wo genau der speicherfehler(?) auftritt und das programm das zeitliche segnet.
 
wuhu :) es geht! danke schön!

es geht! Und du hast recht, ich hab das mit dem "http" aus nem anderen Forum kopiert -.-"...und in wirklichkeit heißt es "http://".

kann man auch angeben dass er den Standard Browser nimmt? (FF oder andere)

Okay es lag wohl daran, dass er nicht wusste welches Programm er nutzen sollte zum öffnen, bzw. gar keins angegeben war. :freaky: (hatte angenommen der nimmt automatisch den Standard Browser
 
es wird automatisch der standardbrowser verwendet. wenn ist nur etwas bei deinen einstellungen falsch (es passiert das gleiche, wie wenn du in programm x auf nen link klickst). du kannst aber explizit nen browser verwenden, wenn du diesen davor setzt, was der portabilität aber nicht zu gute kommt.
Code:
System::Diagnostics::Process::Start("iexplore \"http://www.blabla.de\"" );
System::Diagnostics::Process::Start("xyz\firefox.exe \"http://www.blabla.de\"");
 
nein, damit mein ich die systemeinstellung. wenn du regedit öffnest und dir den inhalt des schlüssels HKEY_CLASSES_ROOT\http\shell\open\command ansiehst, weißt du womit systemweit http-links geöffnet werden. du müsstest halt nur den standardbrowser auf firefox setzen und schon klappt das mit dem automatischen öffnen vom firefox.
 
Bin beim suchen bei einer bekannten Suchmaschine auf folgendes gestoßen.

Du könntest mal folgendes probieren:

Quelle: http://www.dstruebig.de
Code:
private: System::String ^getDefaultBrowser(System::Void)
{
	System::String ^browser = "";
	Microsoft::Win32::RegistryKey ^key = nullptr;
	try
	{
		key = Microsoft::Win32::Registry::ClassesRoot->OpenSubKey("HTTP\\shell\\open\\command", false);

		browser = key->GetValue("")->ToString()->ToLower()->Replace("\"", "");
		if(!browser->EndsWith("exe"))
		{
			browser = browser->Substring(0, browser->LastIndexOf(".exe")+4);
		}
	}
	finally
	{
		if (key != nullptr) key->Close();
	}
	return(browser);
}
Code:
private: System::Void linkLabel_SMA_LinkClicked(System::Object^  sender, System::Windows::Forms::LinkLabelLinkClickedEventArgs^  e)
{
	System::Diagnostics::Process ^p = gcnew System::Diagnostics::Process();
	p->StartInfo->FileName = getDefaultBrowser();
	p->StartInfo->Arguments = "http://www.blabla.de/";
	p->Start();
}
 
Zuletzt bearbeitet:
DANKE 0madcat0!

an genau so etwas hab ich eben auch gedacht, dass man einfach den Regedit Pfad angibt^^.

UND was mir gerade aufgefallen ist!!! -.-"...

das Programm ist gar nicht abgestürzt! Sondern es hat nur etwas (~1min) gedauert bis er den Firefox (Standard Browser) geöffnet hat -.-".... also hatte nur "System::Diagnostics::Process::Start ("www.bla.de") angegeben.
aber ich mein man kann ja nicht erwarten dass der Anwender die gedult hat ca. 1min zu warten bis der Link sich öffnet...geschweige denn er weiß überhaupt, dass das Programm noch läuft und nicht abgeschmiert ist, weil in dem Moment wo er den Firefox startet kann man nichts mehr betätigen...

aber mit der Möglichkeit die 0madcat0 gepostet hat geht es sofort und man muss nicht warten =)...

hätte das nicht geklappt hätte ich es noch mal mit der Funktion "ShellExecute" probiert. (hab ich eben beim suchen noch so gefunden)


also jetzt läufts! sehr schön!

Danke noch mal an alle!


Grüße Phil
 
Zurück
Oben