Mit Get/SetWindowLong best. Fenster einfrieren?



  • Hallo Leute,

    ich habe eine anwendung welches in einer PictureBox (c# winForms) eine best. Fesnter hostet. ich habe einige Winapi Window Funktionen invoked, und kann auch schon bspw. den Rechner bzw. dessen GUI von Windos in meine Anwendung hosten.

    Nun kann ich diese aber noch mit der Maus in der PictureBox , welcher ja jeder der neue Parent des Rechner is, diesen da drin verschieben etc.

    Wie kann ich diese freezen? Damit jedes fenster das ich hoste nicht minimirbar, maximierbar, verschiebar, sklaier bar etc. ist?

    grüße :schland:



  • WM_SYSCOMMAND abfangen und nicht weiterleiten an die original Fensterprozedur...



  • Ok gutes Stickwort, aber ich kann die WinProc eine "nicht eingnes"fenster ja nich überschreiben und darin message abfangen! Wenn bspw. den Windows Rechner in meiner PictureBox hoste.. kann ich ja die WM_SYSCOMMAND des Rechner nicht abfangen oder???



  • Schau dir doch mal SetWindowsHookEx mit WH_CALLWNDPROC an.



  • Ok danke für die Denkhilfe. Nun bin hab ich es folgendermaßen gemacht

    Pseudo (gewrapped .NET WinApi Funktionen)

    //Fenster Handle
    IntPtr hwnd= FindWindow("SciCalc",Rechner");
    
    //Von Hwnd zu Processs ID
    uint processID=0;
    uint res = GetWindowThreadProcessId(hwnd, out processID);
    
    //Von ProcessID to Module Handle
    IntPtr hMod = OpenProcess(ProcessAccess.AllAccess, true, (int)processID);
    
    //WinProc Hooken	
    SetWindowsHookEx(HookType.WH_CALLWNDPROC,HookProc,hMod,res);
    
    //Callback
    public int HookProc(int code, IntPtr wParam, IntPtr lParam)
    {
    
    }
    

    Is dieser Ansatz richtig? Beim Debugen treten kein fehler auf, und auch keine 0-Handle etc... trozdem srpignt er mit nich in die callback wenn ich am Rechner was machen!?!?

    Oder gibtse es ne elegantere lösung?



  • Hi,

    MSDN sag:
    "An application can subclass a system class, but should not subclass a window class created by another process."

    Das heißt für mich das Du auch ein Window aus einem anderen Process subclassen könntest.

    Ich habe dies aber noch nicht probiert,...

    Grüße


  • Mod

    @FensterKlauer: Hooks die prozessübergreifend funktionieren sollen müssen in DLLs liegen. Steht doch klar und deutlich in der Doku von SetWindowsHookEx.
    http://msdn.microsoft.com/en-us/library/ms644990(VS.85).aspx

    @zeusosc: Nein! Das geht nicht. Die Adresse für die Fensterprozedur ist in dem anderen Prozess ungültig... Hier gehen nur Hooks!
    http://www.codeproject.com/KB/DLL/subhook.aspx



  • Ok,...

    🙂


Log in to reply