Problem mit Shell Execute
-
Hallo, bei mir spuckt
ShellExecute( NULL, _T("open"), _T("http://www.google.de"), NULL, NULL, SW_HIDE);beim compilieren folgende Fehlermeldung aus (ich verwende MS Visual Studio Express 2008):
error LNK2001: Nicht aufgelöstes externes Symbol ""extern "C" struct HINSTANCE__ * __stdcall ShellExecuteW(struct HWND__ *,wchar_t const *,wchar_t const *,wchar_t const *,wchar_t const *,int)" (?ShellExecuteW@@$$J224YGPAUHINSTANCE__@@PAUHWND__@@PB_W111H@Z)".
für ShellExecute müssten ja folgende Bibliothek reichen:
#include <windows.h> #include <tchar.h>Jemand eine Ahnung, wie ich das Problem beheben kann?
EDIT: Lösung:
#pragma comment(lib, "shell32.lib")
oben hinzufügen.MfG Krauzi.
-
Ich denke da fehlt ein Headefile, ich glaube es ist stdcall.h.
Schau mal die Headerfiles Deines Compilers durch, irgendwo ist das definiert.
-
Hast du shell32.lib gelinkt?
-
genau das habe ich öfters im internet gelesen. Aber irgendwie finde ich die menü optionen nicht, wo man die shell32.lib linken kann.
Wenn mir da jemand helfen könnte, wäre das echt klasse.
-
ok ich habs selber rausgefunden.
es geht mit #pragma comment(lib, "shell32.lib")
Nur jetzt hab ich noch ein problem:
Mein Browser wird nicht unsichtbar geöffnet.Aber SW_HIDE ist doch das richtige Argument bei ShellExecute oder?
Also: Wieso ist das fenster noch sichtbar?
-
wenn du vs 2008 verwendest ist der weg die *.lib zu linken wie folgt...
- unter Project-Eigenschaften (rechter mausklick auf's Project/ Popup Menu Eigenschaften)
- in der Baumstrucktur Konfigurationseigenschaften / Linker / Eingabe
links in der Listenansicht Zusätzliche Abhängigkeiten die *.lib auswählen bzw. eintragen
- Button Übernehmen drücken
- in der Baumstrucktur Konfigurationseigenschaften / Linker / Befehlszeile
kannst du dann wieder Links nachkucken ob die hinzugefügte *.lib auch in der Befehlszeile steht
-
ähm danke, das ist auf jedenfall wesentlich übersichtlicher, wie wenn ich das jetzt in jede header datei reinhauen müsste^^.
Aber nochmal zu dem SW_HIDE, wieso klappt das nicht?
-
Aber nochmal zu dem SW_HIDE, wieso klappt das nicht?
ist jetzt nur eine vermutung, die auf beobachtung basiert.
warscheinlich wird der Fensterstatus vom IExplorer aktualisiert wenn die seite vertig geladen ist. das kannst du beobachten wenn du die msn seite als startseite im iexplorer verankerst und dann mehrer iexplorer fenster öffnest.da die seite etwas braucht bis sie geladen hat(ist zumindest bei mir so trotz dsl) sieht man das bei 5 schnell hintereinander geöffneten fenstern das zuletzt geöffnete fenster solange im vordergrund bleibt, bis das erste fenster die seite geladen hat. dann springt das 1. Fenster in den vordergrund, dann das 2., 3., usw...
-
hm das könnte sein. Aber wie kann ich das fenster dann "nachträglich" unsichtbar machen?
-
warscheinlich nur mit sehr viel aufwand der auch nicht das gewünschte ergebniss bringt. denn wenn eine seite eine aktualisierung (via java-script oder so) drinn hat, wird spätestens dann das fenster wieder hochkommen.
was willst du den machen?
-
ich möchte nen website öffnen. Der webserver registriert dann die IP des nutzers und ich kann dann eine datei downloaden. Das geht aber nur, wenn der browser geöffnet ist. Mithilfe von useragent mitsenden (den browser simulieren) habs ich bereits versucht (in python allerdings, da ist das einfacher als in c++^^), was nicht funktioniert hat.
Ich werde das auch nicht versuchen, in python zu realisieren, denn schließlich hat nicht jeder python auf seinem pc.
-
hmm das sollte aber auch gehen ohne das du die seite im browser lädst.
hab hier vor kurzem erst sowas änliches im forum gesehen (seite versteckt laden). entweder hier oder im MFC forum.du must nur wissen wie der string in der addresszeile auszusehen hat, der an die seite zum download geschickt wird. dann müste es auch gehn ohne das du die seite im browser lädst.
hier gibts nen artikel der zeigt wies geht an die Addresszeile zu kommen die zum server geschickt wird.