How to receive messages using a message-only window in a console application?
Your messages may be blocked by User Interface Privilege Isolation. In that case you can use the ChangeWindowMessageFilterEx()
function to allow the WM_COPYDATA message through.
iam not sure that is wrong with your program, but i allways use the opposite approach:I create a win32 app, strip that down and add console window.
The stripped all containing winapp version (also removes all afx-junk files):
// Modify the following defines if you have to target a platform prior to the ones specified below.// Refer to MSDN for the latest info on corresponding values for different platforms.#ifndef WINVER // Allow use of features specific to Windows XP or later.#define WINVER 0x0501 // Change this to the appropriate value to target other versions of Windows.#endif#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.#endif #ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.#define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.#endif#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers// MinWInApp.cpp : Defines the entry point for the application.//#include <windows.h>// C RunTime Header Files#include <stdlib.h>#include <malloc.h>#include <memory.h>#include <tchar.h>#include <strsafe.h>#define MAX_LOADSTRING 100#define SZ_TITLE "MinWinApp"#define SZ_WND_CLASS "MINWINAPP"// Global Variables:HINSTANCE g_hInst; // current instanceHWND g_hWnd;HWND g_hwndNextViewer;TCHAR* szWndClass = TEXT(SZ_WND_CLASS);LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine); // TODO: Place code here. MSG msg; WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = NULL; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWndClass; wcex.hIconSm = NULL; RegisterClassEx(&wcex); g_hInst = hInstance; // Store instance handle in our global variable g_hWnd = CreateWindow(szWndClass, TEXT(SZ_TITLE), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!g_hWnd) { return FALSE; } ShowWindow(g_hWnd, SW_SHOW); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam;}LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){ int wmId, wmEvent; switch (message) { case WM_CREATE: break; case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case 0: default: return DefWindowProc(hWnd, message, wParam, lParam); } break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0;}
here the code to add console window can be found:http://justcheckingonall.wordpress.com/2008/08/29/console-window-win32-app/