"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como listar todas as janelas associadas a um determinado ID do processo no .net?

Como listar todas as janelas associadas a um determinado ID do processo no .net?

Publicado em 2025-01-29
Navegar:966

How to List All Windows Associated with a Given Process ID in .NET?

como enumerar as janelas associadas a um processo em .net

Problem Description

A tarefa é identificar e listar todas as janelas criadas por um específico Processo usando a estrutura .NET. Ao fornecer o ID do processo (PID), esta tarefa busca uma maneira eficaz de enumerar todas as janelas correspondentes. ser empregado. O snippet de código a seguir demonstra como implementar esta solução:

delega bool enumthreadDelegate (intptr hwnd, intptr lparam); [Dllimport ("user32.dll")] estático extern bool enumthreadwindows (int dwthreadId, enumthreadDelegate lpfn, Intptr lparam); IENUMERABILIDADE ESTÁTICA enumerateprocesswindowhandles (int processId) { var manipular = nova lista (); foreach (thread de processhread em process.getprocessbyId (processId) .Threads) Enumthreadwindows (thread.id, (hwnd, lparam) = & gt; {handles.add (hwnd); retornar true; }, Intptr.Zero); alças de retorno; }

exemplo de uso

delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

[DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,
    IntPtr lParam);

static IEnumerable EnumerateProcessWindowHandles(int processId)
{
    var handles = new List();

    foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
        EnumThreadWindows(thread.Id, 
            (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);

    return handles;
}

const private uint wm_getText = 0x000d; [Dllimport ("user32.dll", charset = charset.auto)] estático extern intptr sendMessage (intptr hwnd, uint msg, int wparam, Stringbuilder lparam); [Stathread] estático void main (string [] args) { foreach (alça var em enumerateprocesswindowhandles ( Process.getprocessesbyname ("explorer"). Primeiro (). Id))) { Mensagem StringBuilder = new StringBuilder (1000); SendMessage (alça, wm_getText, message.capacity, mensagem); Console.WriteLine (mensagem); } }

Utilizando esta solução, você pode efetivamente enumerar todas as janelas que pertencem a um processo específico, fornecendo informações valiosas sobre a interface do usuário do aplicativo.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3