Home All Groups Group Topic Archive Search About

Subclassing question.

Author
27 Apr 2007 6:06 PM
Andrew
Hello,

I followed the MS instructions to subclass Windows using C#.net
(http://support.microsoft.com/kb/815775) as the follows. I then opened
several Excel files, and selected anyone of them as foreground window. I  was
expecting to see windows message, saying WM_ACTIVATE, or something like that,
however, to my surprise, I saw NO windows message when I randomly selected
those Excel windows, (although I could see other window messages, e.g.,
WM_GETTEXT).

What was wrong here? I need to be able to tell which Excel window is the
active one programmatically. Was this a right approach for this purpose? Any
papers?

Thanks a lot.

--------------------
Add a new Class module that is named SubclassHWND.cs to the Visual C# .NET
or Visual C# 2005 application. To do this, click Add Class on the Project
menu. 
2. In the Name text box, type SubclassHWND.cs, and then click Open.
3. Replace the SubclassHWND class code with the following code:public class
SubclassHWND : NativeWindow
  {
   protected override void WndProc(ref Message m)
    {
      // Perform whatever custom processing you must have for this message
      System.Diagnostics.Debug.WriteLine(m.ToString());
     // forward message to base WndProc
     base.WndProc(ref m);
    }
}

4. To demonstrate its use, add the following code to the Load event of
Form1:SubclassHWND s = new SubclassHWND();
s.AssignHandle(this.Handle);
//Now s should be listening to the messages of the form.

Author
27 Apr 2007 7:59 PM
Mattias Sjögren
>What was wrong here

Subclassing this way only works for windows in your own process, not
in other applications.


>I need to be able to tell which Excel window is the
>active one programmatically. Was this a right approach for this purpose?

If you just want to know which window is active at a certain point in
time, use GetForegroundWindow.


Mattias

--
Mattias Sjögren [C# MVP]  mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.
Author
27 Apr 2007 8:40 PM
Andrew
Hi, Mattias, thanks for the reply.

> Subclassing this way only works for windows in your own process, not
> in other applications.

Is there a way to track the window message in other processes? Thanks.

> If you just want to know which window is active at a certain point in
> time, use GetForegroundWindow.

Our app needs to know right away when the active window is change, so we can
not use this function at a certain point in time or controled by a timer.

Show quote
"Mattias Sjögren" wrote:

>
> >What was wrong here
>
> Subclassing this way only works for windows in your own process, not
> in other applications.
>
>
> >I need to be able to tell which Excel window is the
> >active one programmatically. Was this a right approach for this purpose?
>
> If you just want to know which window is active at a certain point in
> time, use GetForegroundWindow.
>
>
> Mattias
>
> --
> Mattias Sjögren [C# MVP]  mattias @ mvps.org
> http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
> Please reply only to the newsgroup.
>

AddThis Social Bookmark Button