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!"