WM_ACTIVATE->lParam ist immer 0



  • also, ich filtere mittels eines hooks die WM_ACTIVATE raus:

    LRESULT CALLBACK windowProc(int nCode,WPARAM wParam,LPARAM lParam){
    	if(nCode==HC_ACTION){
    		CWPRETSTRUCT* message=(CWPRETSTRUCT*)lParam;
    		if(message->message==WM_ACTIVATE)
    			PostMessage(window,WM_USER+1,message->wParam,message->lParam);
    	}
    	return CallNextHookEx (hook, nCode, wParam, lParam); 
    }
    

    die nachricht landet dann hier im callback meines fensters:

    case WM_USER+1:
    {
        if(LOWORD(wParam)==WA_CLICKACTIVE)
            std::cout<<lParam<<" ";
        return 0;
    }
    break;
    

    ausgabe: 0 immer. in die doku geschaut, und da gesehen, dass der lParam auch 0 sein kann,aber es stand nicht da, wann er 0 ist, und wann nicht. Muss man das irgendwo einstellen? wenn ja, wie? Oder muss man sich dann den HWND des fensters mithilfe anderer funktionen holen(GetForegroundWindow)? Nicht, dass es ein beinbruch wär, aber stören tuts schon irgendwie, und ich frag nur so der interesse halber 🙂

    Was mich aber auch wundert ist, wieso ich bei jedem fenster das ich in den fordergrund hole eine nachricht erhalte, ausser bei Ordnerfenstern, die geben aus irgendeinem kurriosem grund 2 nachrichten zurück.



  • Steht denn direkt in windowProc noch was in message->lParam?



  • ja, stimmt. am anfang sind die werte noch in ordnung, hinterher werden sie aber auch schon in der dll alle 0.

    ich weis aber auch nicht, ob meine ausgabe via messagebox das ganze nicht verzerrt hat, console ging ja verständlicherweise nicht, und in eine datei konnt ich irgendwie auch nicht über ostream schreiben.



  • Du könntest auch mit dem Debugger nachschauen. Ich könnte mir aber vorstellen, dass es daran liegt, dass du, wenn du die Nachricht mit PostMessage an deine exe weiterleitest evtl. in einen anderen Adressraum kommst und somit der Ponter ungültig wird (die DLL befindet sich ja auch in den Adressräumen von Fremdprozessen - deswegen ja überhaupt in einer DLL 🙄 )

    Ich hoffe mal, dass das jezt nicht völliger Mist war 😉



  • wenn ich einen long wert der ein HWND repräsentiert kopiere(dh den inhalt des CWPRETSTRUCT objekts kopiere), so wird der Wert beim kopieren sicher nicht 0 🙄

    btw: die aktionen einer dll die sich in zich prozessen befindet mithilfe eines debuggers zu verfolgen stell ich mir irgendwie ziemlich krass vor 😃


Anmelden zum Antworten