std_output_handle sirve que para hout getstdhandle con windows winapi console windows-nt

windows - sirve - handle con getstdhandle std_output_handle);



¿Tengo mi consola o la heredé de mi padre? (1)

Algunas ideas que pueden ayudar o no: esta no es realmente una respuesta, pero es demasiado tiempo para encajar en los comentarios. *

Puede usar GetConsoleWindow () para determinar el HWND de su consola. Entonces podría ver si alguien más está compartiendo eso. Intente llamar GetWindowThreadProcessId en él: en algunas versiones de Windows, si recuerdo correctamente, parece que esto devuelve el PID del proceso CSRSS, lo cual no es útil. Pero parece que en Win7, devuelve el PID del proceso que inicialmente posee esa ventana.

Por ejemplo, inicié una ventana de CMD y escribí más; así que tenemos cmd.exe y more.exe compartiendo la misma ventana. Spy ++ informa que el HWND pertenece a cmd.exe.

Pero use "start more" para crear una nueva consola con más contenido, y spy ++ informa que la nueva ventana pertenece a more.exe.

Este puede ser un nuevo comportamiento en Win7 (o al menos puede no ser consistente en versiones anteriores), sin embargo; las ventanas de consola en realidad son propiedad de un proceso auxiliar, conhost.exe en Win7 y csrss en versiones anteriores. Es posible que GetWindowThreadProcessId devuelva el PID de esos procesos auxiliares en versiones anteriores. Y quién sabe qué devolverá en una versión futura de Windows: las ventanas de la consola son "especiales".

-

Un enfoque diferente que no se basa en GetWindowThreadProcessID es:

  • determina la identificación del proceso de tus padres (¡revisa el flujo de apilamiento para respuestas pasadas a esta pregunta!)
  • AttachConsole (pid), GetConsoleWindow () y FreeConsole () para "mirar" en qué consola HWND está usando el proceso primario (si lo hay).
  • El problema con esto es que un proceso se puede adjuntar a una consola a la vez, por lo que tendrías que hacer este "vistazo" en un proceso de ayuda por separado (!). De lo contrario, tendrías que soltar tu propia cuenta. consola primero

En pocas palabras, podría ser posible aproximar esto, pero no está claro que realmente querría hacerlo "en la vida real"; la "pausa si no hay parámetros" es probablemente la mejor manera de hacerlo.

[* Esta respuesta se proporciona solo con fines de entretenimiento, nula donde esté prohibida, etc.]

¿Cómo puede la aplicación de modo de caracteres NT determinar si su consola se ha heredado del proceso principal, en oposición a la consola recién asignada dentro de CreateProcess?

guau, ¡etiquetas tan impopulares! agregando ventanas para atraer a los programadores apropiados

@anonymous downvoter: puedo hacer una expansión limitada de esta pregunta basada solo en algunos comentarios. Indique lo que no está claro (sin embargo, se requiere familiaridad con kernel y subsistemas de Windows). Recuerde, muchos de nosotros aquí somos programadores, por lo que nuestro humor es muy específico, no juzgue el juego de palabras demasiado duro.