AllocConsole
#include<windows.h> #include<commctrl.h> #include <stdlib.h> #pragma comment (lib, "comctl32.lib") /* Из графического приложения запускается консоль, в которую можно выводить например отладочную информацию */ void ShowError(DWORD); LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); void RegisterClass(TCHAR*, HINSTANCE); HANDLE con = NULL; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { AllocConsole(); SECURITY_ATTRIBUTES s; s.bInheritHandle = TRUE; con = CreateFile( L"CONOUT$", GENERIC_READ | GENERIC_WRITE , FILE_SHARE_READ | FILE_SHARE_WRITE, &s, OPEN_EXISTING , NULL, NULL); DWORD d; WriteFile(con,"Push the button\n",16,&d,NULL); TCHAR szAppName[] = L"Hello Win"; HWND hwnd; MSG msg; RegisterClass(szAppName, hInstance); hwnd = CreateWindow( szAppName, L"my window", WS_OVERLAPPEDWINDOW | WS_HSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); InitCommonControls(); ShowWindow( hwnd, iCmdShow ); UpdateWindow( hwnd ); while( GetMessage(&msg, NULL, 0, 0)) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return (int)msg.wParam; } void RegisterClass(TCHAR * name, HINSTANCE hInst) { WNDCLASSEX wc; wc.cbSize = sizeof(wc); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInst; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = ( HBRUSH ) GetStockObject( WHITE_BRUSH ); wc.lpszClassName = name; wc.lpszMenuName = NULL; RegisterClassEx( &wc ); } LRESULT CALLBACK WndProc( HWND hwnd,UINT iMsg,WPARAM wParam,LPARAM lParam ) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch( iMsg ) { case WM_CREATE: { CreateWindow(L"Button",L"Push Me", WS_CHILD| WS_VISIBLE | BS_PUSHBUTTON,20,20,200,200, hwnd, (HMENU)0, GetModuleHandle(NULL), NULL); return 0; } case WM_COMMAND: { DWORD d; WriteFile(con,"Button is pushed\n",17,&d,NULL); return 0; } case WM_PAINT: { hdc = BeginPaint( hwnd, &ps ); GetClientRect( hwnd, &rect ); EndPaint( hwnd, &ps ); return 0; } case WM_DESTROY: PostQuitMessage( 0 ); return 0; case WM_LBUTTONDOWN: return 0; } return DefWindowProc( hwnd, iMsg, wParam, lParam ); } void ShowError(DWORD Err) { LPVOID lpMsgBuf; if (!FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, Err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL )) { return; } MessageBox( NULL, (LPCTSTR)lpMsgBuf, L"Error", MB_OK | MB_ICONINFORMATION ); LocalFree( lpMsgBuf ); }
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах