Hooks und Explorer
-
hi,
ich hab da mal ne frage an unsre Windows fachleute
also, ich würde gerne dem explorer Mausgesten, ala opera beibrigen. Das heisst maus-drücken + maus-nach-links-bewegen + maus-loslassen = Zurück (Back-Button). Analog dazu vorwärts, neues Fenster( nach unten ziehen ) usw...
die sache mit der gestenerkennung bekomm ich schon hin, nur hab ich leider keine Ahnung vom Explorer.
Wie soll ich da ansetzen? Ein Hook muss her, aber welcher?? Wie bekomme ich es hin, das immer, wenn in einem explorer fenster was mit der maus passiert, mein code ausgeführt wird????
und dann nochwas ...
angenommen ich bekomme die mausevents und kann drauf reagieren. Wie bekomme ich zugriff auf die Zurück-funktion des Explorers? Buttonklick simulieren? Windows nachricht?würd mich echt freuen, wenn sich jemand dazu äussern könnte
hab nämlich langeweile und hab bock was zu proggen
auch links zum thema nehm ich immer gern.
grüsse
-
Hmm ... also Windows Hooks sollten schon das richtige Mittel sein. Ich würde spontan einen Hook auf Fenstermessages vorschlagen. Da wird deine DLL definitiv in den Prozess von explorer.exe geladen.
Du müsstest dann sicherlich testen ob der aktuelle Prozess gleich explorer.exe ist und dann halt auf die Nachrichten reagieren. Ich weiß nicht welche Mausnachrichten es so gibt, aber klicken und loslassen ist definitiv dabei. Weiter kann ich dir dabei aber nicht helfen
Da gibt es doch schon fertige Programme, die sowas machen, oder nicht?
-
Original erstellt von soUrcerer:
hab nämlich langeweile und hab bock was zu proggen
-
Original erstellt von flenders:
[quote]Original erstellt von soUrcerer:
[qb]hab nämlich langeweile und hab bock was zu proggen[/QB][/QUOTE]
-
Ich wollte damit nur sagen, dass es für soUrcerer wohl egal ist, ob es sowas schon gibt, da er/sie gerade Langeweile hat und einfach Lust etwas zu programmieren.
-
Original erstellt von malfunction:
...Ich würde spontan einen Hook auf Fenstermessages vorschlagen...ja, hab ich auch schon überlegt ... aber der hook wäre dann systemweit ... es laufen unendlich viel messages durch das ganze system ... da auf jede reagieren zu müssen stell ich mir nicht gerade schnell vor ... systembremse ?!?
ich hab mal mit der suche gearbeitet und habe zu der explorer ansteuerung einen beitrag von -King- gefunden, der mit COM arbeitet:
IWebBrowser2* pBrowser = NULL; IUnknown* pUnk = NULL; VARIANT varEmpty; BSTR bstrURL; CoInitialize(NULL); if(SUCCEEDED(GetActiveObject(CLSID_InternetExplorer, NULL, &pUnk))) { if(SUCCEEDED(pUnk->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser))) { bstrURL = SysAllocString(L"http://www.c-plusplus.net/"); VariantInit(&varEmpty); pBrowser->Navigate(bstrURL, &varEmpty, &varEmpty, &varEmpty, &varEmpty); VariantClear(&varEmpty); SysFreeString(bstrURL); pBrowser->Release(); } pUnk->Release(); } else { //fehler } CoUninitialize();
da bekommt man ein Interface vom Explorer ... das wäre schon perfekt. Allerdings bekomme ich immer nur die erste geöffnete Explorer instanz und nicht das gerade aktive explorer fenster
jemand ne idee ??
grüsse
-
Original erstellt von flenders:
Ich wollte damit nur sagen, dass es für soUrcerer wohl egal ist, ob es sowas schon gibt, da er/sie gerade Langeweile hat und einfach Lust etwas zu programmieren.genau
PS: er
[ Dieser Beitrag wurde am 29.03.2003 um 18:27 Uhr von soUrcerer editiert. ]
-
Naja, ich weiß nicht wieviel Resourcen so ein Hook frisst. Du könntest in der DllMain feststellen, in welchem Prozess sich die DLL befindet. Speicher das Resultat in einer bool Variable. Dann könntest du einfach die Message nicht verarbeiten wenn dieser bool false ist (sprich: einfach CallNextWindowsHookEx aufrufen (oder wie das hieß)).
Mit COM kenne ich mich absolut nicht aus. Wenn es geht wäre das dann wahrscheinlich die bessere Lösung.
-
ich hatte auch schon an einen systemweiten mousehook gedacht ... dann wäre man auch nicht auf den explorer beschränkt sondern könnte noch gestenfunktionalität für andere programme implementieren.
dann müsste ich nur rausfinden, welches fenster sich gerade unter dem mauszeiger befindet, und diesem fenster/dieser anwendung meine befehle mitteilen.
ja ... und da wären wir wieder bei dem problem ... wie steuere ich ein spezielles Explorer fenster ?!?
*grübel, such*
-