Хэндл окна консольной программы

При написании кода консольной программы иногда бывает, что приходится работать с функциями, в которорых один из параметров это хендл текущего приложения. А может и вообще в собственных функциях понадобится. Понятно что для консольного приложения его просто не получить. Это в оконных программах он получается автоматом. Например:

 int WINAPI WinMain (
 HINSTANCE hInstance,
 HINSTANCE hPrevInstance, 
 PSTR lpCmdLine, 
 int nCmdShow)

Задесь hInstance это хендл оконного приложения. А как же получить хендл консольной программы?

Вот простая функция:

 HANDLE GetConsoleHANDLE  ( ) {
 HANDLE handleConsoleWindow; 
 SetConsoleTitle (NAME_CONSOLE_APPLICATION);
 handleConsoleWindow = FindWindow (NULL, NAME_CONSOLE_APPLICATION);
 if ( handleConsoleWindow==0 )
 printf ("Error Find Window");
 return handleConsoleWindow;
 }

Итак функция имеет тип HANDLE потому, что  возвращает переменную именно такого типа. Функция начинается с того что обьявляется переменная handleConsoleWindow типа HANDLE и именно её впоследствии  после обработки будет возвращать функция. Затем вызываем функцию SetConsoleTitle, которой в качестве параметра передаём заголовок окна консоли. Т.е эта функция устанавливает заголовок NAME_CONSOLE_APPLICATION консольному окну, где запущенна программа. Затем вызывается функция FindWindow, которая ищет окно с заголовком NAME_CONSOLE_APPLICATION, для этого он передаётся в качестве параметра функции. Если функция находит окно, т.е окно вашей программы, она возвращает хендл программы (окна). Если не находит, то возвращает ноль. И в конце возвращаем переменную handleConsoleWindow. Да, кстати незабудьте определить макрос NAME_CONSOLE_APPLICATION.
Например:


 #define NAME_CONSOLE_APPLICATION      "This is my program!"