Как передать дескриптор окна в wndproc? - PullRequest
0 голосов
/ 02 апреля 2012

Я написал этот код в приложении c # для отслеживания сообщений ...

protected override void WndProc(ref Message m) 
{
    // Listen for operating system messages.
    switch (m.Msg)
    {
         case WM_CHAR:
                FileStream fs = new FileStream("d:/Type.txt",FileMode.Append,FileAccess.Write);
                //set up a streamwriter for adding text
                StreamWriter sw = new StreamWriter(fs);                      
                sw.BaseStream.Seek(0, SeekOrigin.End);                       
                int no=(int)m.WParam;   
                sw.Write(Convert.ToChar(no));                        
                sw.Flush();
                sw.Close();

                break;
    }
    base.WndProc(ref m);
}

Я хочу отслеживать сообщения для разных окон, так как я могу передать другой дескриптор окна в wndproc?пожалуйста, помогите мне ...

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Вы должны зарегистрировать глобальный хук клавиатуры вместо передачи другого дескриптора. Эта статья показывает, как это сделать.Основная идея заключается в том, что вы регистрируете свою функцию для опроса всех связанных с клавиатурой системных событий (для каждого сообщения) и отфильтровываете только те, которые вам нужны.

Функциональность достигается с SetWindowsHookEx winapiфункция.

0 голосов
/ 02 апреля 2012

Вы можете отфильтровать все сообщения в приложении, вызвав Application.AddMessageFilter(IMessageFilter filter) в начале вашей программы.

Интерфейс IMessageFilter имеет только один метод:

bool PreFilterMessage(ref Message m);

Этовызывается для каждого сообщения, обрабатываемого приложением.Там вы можете использовать m.HWnd для определения различных окон вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...