Свернул консольное приложение в трей, а как вернуть его оттуда?

Тема в разделе "WASM.BEGINNERS", создана пользователем REASY, 4 май 2009.

  1. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Вот так сворачиваю консольное приложение в трей:
    Код (Text):
    1. NOTIFYICONDATA nf={0};
    2. HWND hwind;
    3. ..........
    4. hwind = FindWindow("ConsoleWindowClass", NULL);
    5. nf.hIcon = hIcon;
    6. nf.cbSize = sizeof(nf);
    7. nf.hWnd = hwind;
    8. nf.uID = NULL;
    9. nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    10. nf.uCallbackMessage = WM_MYICONNOTIFY;
    11. strcpy(nf.szTip,"Copier");
    12.            
    13. Shell_NotifyIcon(NIM_ADD,&nf);
    14. ShowWindow(hwind,SW_HIDE);
    а как вернуть(показать) это окно? Ведь нет обработчика сообщений? Ставить хук?
     
  2. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Я имею ввиду показать окно - ShowWindow(hwind,TRUE) по нажатию на иконку в трее
    PS: верните редактирование =)
     
  3. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    Обрабатывай сообщение WM_MYICONNOTIFY в своем окне и вызывай ShowWindow(hwind,TRUE)
     
  4. ntcdm

    ntcdm New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2007
    Сообщения:
    247
    а, сори, ступил, не увидел что программа консольная. ну тогда создай невидимое окно и обрабатывай в нем. ИМХО самый простой вариант
     
  5. karpen

    karpen New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2009
    Сообщения:
    31
    Почему решили, что нет обработчика сообщений? Не из-за того ли, что генератор кода его не создал?
    Если есть хендл приложения, то, соответственно, ему посылаются сообщения (иначе бы вы не спрятали свое приложение). Надо написать свой обработчик этих сообщений и радоваться жизни без регистрации класса GUI приложения.
    Как писать свой обработчик сообщений можно посмотреть на gamedev.ru, там много материала по этой теме.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Я не сильно разбираюсь в этом, но так как окно формирующее консоль принадлежит защищённому csrss, а механизм сообщений локален, то в текущем процессе не удастся их обработать. Для этого придётся использовать захват какихто функций в csrss. Хотя возможно существуют пользовательские сообщения, позволяющие это исполнить. Как например строка:
    Не нужна, один из консольных сервисов возвращает хэндл окна консоли, это ConsolepGetConsoleWindow(0x20246), соответственно апи kernel32!GetConsoleWindow(). Ведь консоль не одна может быть.
    Подробная инфа в сурцах виндоз, соответственно для консольной подсистемы(индекс для подсисистемы при запросе на порт 0x20200), хидер conmsg.h:
    Код (Text):
    1. /*++
    2.  
    3. Copyright (c) 1985 - 1999, Microsoft Corporation
    4.  
    5. Module Name:
    6.  
    7.     conmsg.h
    8.  
    9. Abstract:
    10.  
    11.     This include file defines the message formats used to communicate
    12.     between the client and server portions of the CONSOLE portion of the
    13.     Windows subsystem.
    14.  
    15. Author:
    16.  
    17.     Therese Stowell (thereses) 10-Nov-1990
    18.  
    19. Revision History:
    20.  
    21. --*/
    22.  
    23. #ifndef _CONMSG_H_
    24. #define _CONMSG_H_
    25.  
    26. #define CONSOLE_INPUT_HANDLE 1
    27. #define CONSOLE_OUTPUT_HANDLE 2
    28.  
    29. // max lengths, in bytes!
    30. #define MAX_TITLE_LENGTH ((MAX_PATH+1)*sizeof(WCHAR))
    31. #define MAX_APP_NAME_LENGTH 256
    32.  
    33. #define INITIALIZATION_SUCCEEDED 0
    34. #define INITIALIZATION_FAILED 1
    35. #define NUMBER_OF_INITIALIZATION_EVENTS 2
    36.  
    37. #if defined(FE_SB) // for Kernel32 Single Binary
    38. #include "winconp.h"  // need FONT_SELECT
    39. #endif // FE_SB
    40.  
    41. typedef struct _CONSOLE_INFO {
    42.     IN OUT HANDLE ConsoleHandle;
    43.     OUT HANDLE InputWaitHandle;
    44.     OUT HANDLE StdIn;
    45.     OUT HANDLE StdOut;
    46.     OUT HANDLE StdErr;
    47.     OUT HANDLE InitEvents[NUMBER_OF_INITIALIZATION_EVENTS];
    48.     IN UINT   iIconId;
    49.     IN HICON  hIcon;
    50.     IN HICON  hSmIcon;
    51.     IN DWORD dwHotKey;
    52.     IN DWORD dwStartupFlags;
    53.     IN WORD  wFillAttribute OPTIONAL;
    54.     IN WORD  wPopupFillAttribute OPTIONAL;
    55.     IN WORD  wShowWindow OPTIONAL;
    56.     IN WORD  wReserved OPTIONAL;
    57.     IN COORD dwScreenBufferSize OPTIONAL;
    58.     IN COORD dwWindowSize OPTIONAL;
    59.     IN COORD dwWindowOrigin OPTIONAL;
    60.     IN DWORD nFont OPTIONAL;
    61.     IN DWORD nInputBufferSize OPTIONAL;
    62.     IN COORD dwFontSize OPTIONAL;
    63.     IN UINT  uFontFamily OPTIONAL;
    64.     IN UINT  uFontWeight OPTIONAL;
    65.     IN WCHAR FaceName[LF_FACESIZE];
    66.     IN UINT  uCursorSize OPTIONAL;
    67.     IN BOOL  bFullScreen OPTIONAL;
    68.     IN BOOL  bQuickEdit  OPTIONAL;
    69.     IN BOOL  bInsertMode OPTIONAL;
    70.     IN BOOL  bAutoPosition OPTIONAL;
    71.     IN UINT  uHistoryBufferSize OPTIONAL;
    72.     IN UINT  uNumberOfHistoryBuffers OPTIONAL;
    73.     IN BOOL  bHistoryNoDup OPTIONAL;
    74.     IN COLORREF ColorTable[ 16 ] OPTIONAL;
    75. #if defined(FE_SB) // for Kernel32 Single Binary
    76.     IN UINT  uCodePage;
    77. #endif // FE_SB
    78. } CONSOLE_INFO, *PCONSOLE_INFO;
    79.  
    80.  
    81. //
    82. // This structure is filled in by the client prior to connecting to the CONSRV
    83. // DLL in the Windows subsystem server.  The server DLL will fill in the OUT
    84. // fields if prior to accepting the connection.
    85. //
    86.  
    87. typedef struct _CONSOLE_API_CONNECTINFO {
    88.     IN OUT CONSOLE_INFO ConsoleInfo;
    89.     IN BOOLEAN ConsoleApp;
    90.     IN BOOLEAN WindowVisible;
    91.     IN LPTHREAD_START_ROUTINE CtrlRoutine;
    92.     IN LPTHREAD_START_ROUTINE PropRoutine;
    93. #if defined(FE_SB)
    94. #if defined(FE_IME)
    95.     IN LPTHREAD_START_ROUTINE ConsoleIMERoutine;
    96. #endif // FE_IME
    97. #endif // FE_SB
    98.     IN DWORD TitleLength;
    99.     IN WCHAR Title[MAX_TITLE_LENGTH/2];
    100.     IN DWORD DesktopLength;
    101.     IN LPWSTR Desktop;
    102.     IN DWORD AppNameLength;
    103.     IN WCHAR AppName[MAX_APP_NAME_LENGTH/2];
    104.     IN DWORD CurDirLength;
    105.     IN WCHAR CurDir[MAX_PATH+1];
    106. } CONSOLE_API_CONNECTINFO, *PCONSOLE_API_CONNECTINFO;
    107.  
    108. //
    109. // Message format for messages sent from the client to the server
    110. //
    111.  
    112. typedef enum _CONSOLE_API_NUMBER {
    113.     ConsolepOpenConsole = CONSRV_FIRST_API_NUMBER,
    114.     ConsolepGetConsoleInput,
    115.     ConsolepWriteConsoleInput,
    116.     ConsolepReadConsoleOutput,
    117.     ConsolepWriteConsoleOutput,
    118.     ConsolepReadConsoleOutputString,
    119.     ConsolepWriteConsoleOutputString,
    120.     ConsolepFillConsoleOutput,
    121.     ConsolepGetMode,
    122.     ConsolepGetNumberOfFonts,
    123.     ConsolepGetNumberOfInputEvents,
    124.     ConsolepGetScreenBufferInfo,
    125.     ConsolepGetCursorInfo,
    126.     ConsolepGetMouseInfo,
    127.     ConsolepGetFontInfo,
    128.     ConsolepGetFontSize,
    129.     ConsolepGetCurrentFont,
    130.     ConsolepSetMode,
    131.     ConsolepSetActiveScreenBuffer,
    132.     ConsolepFlushInputBuffer,
    133.     ConsolepGetLargestWindowSize,
    134.     ConsolepSetScreenBufferSize,
    135.     ConsolepSetCursorPosition,
    136.     ConsolepSetCursorInfo,
    137.     ConsolepSetWindowInfo,
    138.     ConsolepScrollScreenBuffer,
    139.     ConsolepSetTextAttribute,
    140.     ConsolepSetFont,
    141.     ConsolepSetIcon,
    142.     ConsolepReadConsole,
    143.     ConsolepWriteConsole,
    144.     ConsolepDupHandle,
    145.     ConsolepGetHandleInformation,
    146.     ConsolepSetHandleInformation,
    147.     ConsolepCloseHandle,
    148.     ConsolepVerifyIoHandle,
    149.     ConsolepAlloc,
    150.     ConsolepFree,
    151.     ConsolepGetTitle,
    152.     ConsolepSetTitle,
    153.     ConsolepCreateScreenBuffer,
    154.     ConsolepInvalidateBitmapRect,
    155.     ConsolepVDMOperation,
    156.     ConsolepSetCursor,
    157.     ConsolepShowCursor,
    158.     ConsolepMenuControl,
    159.     ConsolepSetPalette,
    160.     ConsolepSetDisplayMode,
    161.     ConsolepRegisterVDM,
    162.     ConsolepGetHardwareState,
    163.     ConsolepSetHardwareState,
    164.     ConsolepGetDisplayMode,
    165.     ConsolepAddAlias,
    166.     ConsolepGetAlias,
    167.     ConsolepGetAliasesLength,
    168.     ConsolepGetAliasExesLength,
    169.     ConsolepGetAliases,
    170.     ConsolepGetAliasExes,
    171.     ConsolepExpungeCommandHistory,
    172.     ConsolepSetNumberOfCommands,
    173.     ConsolepGetCommandHistoryLength,
    174.     ConsolepGetCommandHistory,
    175.     ConsolepSetCommandHistoryMode,
    176.     ConsolepGetCP,
    177.     ConsolepSetCP,
    178.     ConsolepSetKeyShortcuts,
    179.     ConsolepSetMenuClose,
    180.     ConsolepNotifyLastClose,
    181.     ConsolepGenerateCtrlEvent,
    182.     ConsolepGetKeyboardLayoutName,
    183.     ConsolepGetConsoleWindow,
    184. #if defined(FE_SB) // for Kernel32 Single Binary
    185.     ConsolepCharType,
    186.     ConsolepSetLocalEUDC,
    187.     ConsolepSetCursorMode,
    188.     ConsolepGetCursorMode,
    189.     ConsolepRegisterOS2,
    190.     ConsolepSetOS2OemFormat,
    191. #if defined(FE_IME)
    192.     ConsolepGetNlsMode,
    193.     ConsolepSetNlsMode,
    194.     ConsolepRegisterConsoleIME,
    195.     ConsolepUnregisterConsoleIME,
    196. #endif // FE_IME
    197. #endif // FE_SB
    198.     ConsolepGetLangId,
    199.     ConsolepMaxApiNumber
    200. } CONSOLE_API_NUMBER, *PCONSOLE_API_NUMBER;
    201.  
    202. typedef struct _CONSOLE_CREATESCREENBUFFER_MSG {
    203.     IN HANDLE ConsoleHandle;
    204.     IN ULONG DesiredAccess;
    205.     IN BOOL InheritHandle;
    206.     IN ULONG ShareMode;
    207.     IN DWORD Flags;
    208.     IN OUT CONSOLE_GRAPHICS_BUFFER_INFO GraphicsBufferInfo;
    209.     OUT HANDLE hMutex;
    210.     OUT PVOID lpBitmap;
    211.     OUT HANDLE Handle;
    212. } CONSOLE_CREATESCREENBUFFER_MSG, *PCONSOLE_CREATESCREENBUFFER_MSG;
    213.  
    214. typedef struct _CONSOLE_OPENCONSOLE_MSG {
    215.     IN HANDLE ConsoleHandle;
    216.     IN ULONG HandleType;
    217.     IN ULONG DesiredAccess;
    218.     IN BOOL InheritHandle;
    219.     IN ULONG ShareMode;
    220.     OUT HANDLE Handle;
    221. } CONSOLE_OPENCONSOLE_MSG, *PCONSOLE_OPENCONSOLE_MSG;
    222.  
    223. #define INPUT_RECORD_BUFFER_SIZE 5
    224.  
    225. typedef struct _CONSOLE_GETCONSOLEINPUT_MSG {
    226.     IN HANDLE ConsoleHandle;
    227.     IN HANDLE InputHandle;
    228.     OUT INPUT_RECORD Record[INPUT_RECORD_BUFFER_SIZE];
    229.     OUT PINPUT_RECORD  BufPtr;
    230.     IN OUT ULONG  NumRecords;   // this value is valid even for error cases
    231.     IN USHORT Flags;
    232.     BOOLEAN Unicode;
    233. } CONSOLE_GETCONSOLEINPUT_MSG, *PCONSOLE_GETCONSOLEINPUT_MSG;
    234.  
    235. typedef struct _CONSOLE_WRITECONSOLEINPUT_MSG {
    236.     IN HANDLE ConsoleHandle;
    237.     IN HANDLE InputHandle;
    238.     IN INPUT_RECORD Record[INPUT_RECORD_BUFFER_SIZE];
    239.     IN PINPUT_RECORD  BufPtr;
    240.     IN OUT ULONG  NumRecords;  // this value is valid even for error cases
    241.     BOOLEAN Unicode;
    242.     BOOLEAN Append;
    243. } CONSOLE_WRITECONSOLEINPUT_MSG, *PCONSOLE_WRITECONSOLEINPUT_MSG;
    244.  
    245. typedef struct _CONSOLE_READCONSOLEOUTPUT_MSG {
    246.     IN HANDLE ConsoleHandle;
    247.     IN HANDLE OutputHandle;
    248.     OUT CHAR_INFO Char;
    249.     OUT PCHAR_INFO BufPtr;
    250.     IN OUT SMALL_RECT CharRegion; // this value is valid even for error cases
    251.     BOOLEAN Unicode;
    252. } CONSOLE_READCONSOLEOUTPUT_MSG, *PCONSOLE_READCONSOLEOUTPUT_MSG;
    253.  
    254. typedef struct _CONSOLE_WRITECONSOLEOUTPUT_MSG {
    255.     IN HANDLE ConsoleHandle;
    256.     IN HANDLE OutputHandle;
    257.     IN CHAR_INFO Char;
    258.     IN PCHAR_INFO BufPtr;
    259.     IN OUT SMALL_RECT CharRegion; // this value is valid even for error cases
    260.     BOOLEAN Unicode;
    261.     BOOLEAN ReadVM;
    262. } CONSOLE_WRITECONSOLEOUTPUT_MSG, *PCONSOLE_WRITECONSOLEOUTPUT_MSG;
    263.  
    264. #define BUFFER_SIZE 80
    265.  
    266. /*
    267.  * WriteOutputString and ReadInputString types
    268.  */
    269. #define CONSOLE_ASCII             0x1
    270. #define CONSOLE_REAL_UNICODE      0x2
    271. #define CONSOLE_ATTRIBUTE         0x3
    272. #define CONSOLE_FALSE_UNICODE     0x4
    273.  
    274. typedef struct _CONSOLE_READCONSOLEOUTPUTSTRING_MSG {
    275.     IN HANDLE ConsoleHandle;
    276.     IN HANDLE OutputHandle;
    277.     IN COORD ReadCoord;
    278.     IN DWORD  StringType;
    279.     OUT WCHAR String[BUFFER_SIZE/2];
    280.     OUT PWCHAR BufPtr;
    281.     IN OUT ULONG NumRecords; // this value is valid even for error cases
    282. } CONSOLE_READCONSOLEOUTPUTSTRING_MSG, *PCONSOLE_READCONSOLEOUTPUTSTRING_MSG;
    283.  
    284. typedef struct _CONSOLE_WRITECONSOLEOUTPUTSTRING_MSG {
    285.     IN HANDLE ConsoleHandle;
    286.     IN HANDLE OutputHandle;
    287.     IN COORD WriteCoord;
    288.     IN DWORD  StringType;
    289.     OUT WCHAR String[BUFFER_SIZE/2];
    290.     IN PWCHAR BufPtr;
    291.     IN OUT ULONG NumRecords; // this value is valid even for error cases
    292. } CONSOLE_WRITECONSOLEOUTPUTSTRING_MSG, *PCONSOLE_WRITECONSOLEOUTPUTSTRING_MSG;
    293.  
    294. typedef struct _CONSOLE_FILLCONSOLEOUTPUT_MSG {
    295.     IN HANDLE ConsoleHandle;
    296.     IN HANDLE OutputHandle;
    297.     IN COORD WriteCoord;
    298.     IN DWORD  ElementType;
    299.     IN WORD Element;
    300.     IN OUT ULONG Length; // this value is valid even for error cases
    301. } CONSOLE_FILLCONSOLEOUTPUT_MSG, *PCONSOLE_FILLCONSOLEOUTPUT_MSG;
    302.  
    303. typedef struct _CONSOLE_MODE_MSG {
    304.     IN HANDLE ConsoleHandle;
    305.     IN HANDLE Handle;
    306.     IN DWORD Mode;
    307. } CONSOLE_MODE_MSG, *PCONSOLE_MODE_MSG;
    308.  
    309. typedef struct _CONSOLE_GETNUMBEROFFONTS_MSG {
    310.     IN HANDLE ConsoleHandle;
    311.     OUT ULONG NumberOfFonts;
    312. } CONSOLE_GETNUMBEROFFONTS_MSG, *PCONSOLE_GETNUMBEROFFONTS_MSG;
    313.  
    314. typedef struct _CONSOLE_GETNUMBEROFINPUTEVENTS_MSG {
    315.     IN HANDLE ConsoleHandle;
    316.     IN HANDLE InputHandle;
    317.     OUT DWORD ReadyEvents;
    318. } CONSOLE_GETNUMBEROFINPUTEVENTS_MSG, *PCONSOLE_GETNUMBEROFINPUTEVENTS_MSG;
    319.  
    320. typedef struct _CONSOLE_GETLARGESTWINDOWSIZE_MSG {
    321.     IN HANDLE ConsoleHandle;
    322.     IN HANDLE OutputHandle;
    323.     OUT COORD  Size;
    324. } CONSOLE_GETLARGESTWINDOWSIZE_MSG, *PCONSOLE_GETLARGESTWINDOWSIZE_MSG;
    325.  
    326. typedef struct _CONSOLE_GETSCREENBUFFERINFO_MSG {
    327.     IN HANDLE ConsoleHandle;
    328.     IN HANDLE OutputHandle;
    329.     OUT COORD Size;
    330.     OUT COORD CursorPosition;
    331.     OUT COORD ScrollPosition;
    332.     OUT WORD  Attributes;
    333.     OUT COORD CurrentWindowSize;
    334.     OUT COORD MaximumWindowSize;
    335. } CONSOLE_GETSCREENBUFFERINFO_MSG, *PCONSOLE_GETSCREENBUFFERINFO_MSG;
    336.  
    337. typedef struct _CONSOLE_GETCURSORINFO_MSG {
    338.     IN HANDLE ConsoleHandle;
    339.     IN HANDLE OutputHandle;
    340.     OUT DWORD CursorSize;
    341.     OUT BOOLEAN Visible;
    342. } CONSOLE_GETCURSORINFO_MSG, *PCONSOLE_GETCURSORINFO_MSG;
    343.  
    344. typedef struct _CONSOLE_GETMOUSEINFO_MSG {
    345.     IN HANDLE ConsoleHandle;
    346.     OUT ULONG NumButtons;
    347. } CONSOLE_GETMOUSEINFO_MSG, *PCONSOLE_GETMOUSEINFO_MSG;
    348.  
    349. typedef struct _CONSOLE_GETFONTINFO_MSG {
    350.     IN HANDLE ConsoleHandle;
    351.     IN HANDLE OutputHandle;
    352.     IN BOOLEAN MaximumWindow;
    353.     OUT PCHAR BufPtr;
    354.     IN OUT ULONG NumFonts;  // this value is valid even for error cases
    355. } CONSOLE_GETFONTINFO_MSG, *PCONSOLE_GETFONTINFO_MSG;
    356.  
    357. typedef struct _CONSOLE_GETFONTSIZE_MSG {
    358.     IN HANDLE ConsoleHandle;
    359.     IN HANDLE OutputHandle;
    360.     IN DWORD  FontIndex;
    361.     OUT COORD FontSize;
    362. } CONSOLE_GETFONTSIZE_MSG, *PCONSOLE_GETFONTSIZE_MSG;
    363.  
    364. typedef struct _CONSOLE_GETCURRENTFONT_MSG {
    365.     IN HANDLE ConsoleHandle;
    366.     IN HANDLE OutputHandle;
    367.     IN BOOLEAN MaximumWindow;
    368.     OUT DWORD FontIndex;
    369.     OUT COORD FontSize;
    370. } CONSOLE_GETCURRENTFONT_MSG, *PCONSOLE_GETCURRENTFONT_MSG;
    371.  
    372. typedef struct _CONSOLE_SETACTIVESCREENBUFFER_MSG {
    373.     IN HANDLE ConsoleHandle;
    374.     IN HANDLE OutputHandle;
    375. } CONSOLE_SETACTIVESCREENBUFFER_MSG, *PCONSOLE_SETACTIVESCREENBUFFER_MSG;
    376.  
    377. typedef struct _CONSOLE_FLUSHINPUTBUFFER_MSG {
    378.     IN HANDLE ConsoleHandle;
    379.     IN HANDLE InputHandle;
    380. } CONSOLE_FLUSHINPUTBUFFER_MSG, *PCONSOLE_FLUSHINPUTBUFFER_MSG;
    381.  
    382. typedef struct _CONSOLE_SETSCREENBUFFERSIZE_MSG {
    383.     IN HANDLE ConsoleHandle;
    384.     IN HANDLE OutputHandle;
    385.     IN COORD  Size;
    386. } CONSOLE_SETSCREENBUFFERSIZE_MSG, *PCONSOLE_SETSCREENBUFFERSIZE_MSG;
    387.  
    388. typedef struct _CONSOLE_SETCURSORPOSITION_MSG {
    389.     IN HANDLE ConsoleHandle;
    390.     IN HANDLE OutputHandle;
    391.     IN COORD  CursorPosition;
    392. } CONSOLE_SETCURSORPOSITION_MSG, *PCONSOLE_SETCURSORPOSITION_MSG;
    393.  
    394. typedef struct _CONSOLE_SETCURSORINFO_MSG {
    395.     IN HANDLE ConsoleHandle;
    396.     IN HANDLE OutputHandle;
    397.     IN DWORD  CursorSize;
    398.     IN BOOLEAN Visible;
    399. } CONSOLE_SETCURSORINFO_MSG, *PCONSOLE_SETCURSORINFO_MSG;
    400.  
    401. typedef struct _CONSOLE_SETWINDOWINFO_MSG {
    402.     IN HANDLE ConsoleHandle;
    403.     IN HANDLE OutputHandle;
    404.     IN BOOL Absolute;
    405.     IN SMALL_RECT Window;
    406. } CONSOLE_SETWINDOWINFO_MSG, *PCONSOLE_SETWINDOWINFO_MSG;
    407.  
    408. typedef struct _CONSOLE_SCROLLSCREENBUFFER_MSG {
    409.     IN HANDLE ConsoleHandle;
    410.     IN HANDLE OutputHandle;
    411.     IN SMALL_RECT ScrollRectangle;
    412.     IN SMALL_RECT ClipRectangle;
    413.     IN BOOL Clip;
    414.     IN COORD  DestinationOrigin;
    415.     IN CHAR_INFO Fill;
    416.     IN BOOLEAN Unicode;
    417. } CONSOLE_SCROLLSCREENBUFFER_MSG, *PCONSOLE_SCROLLSCREENBUFFER_MSG;
    418.  
    419. typedef struct _CONSOLE_SETTEXTATTRIBUTE_MSG {
    420.     IN HANDLE ConsoleHandle;
    421.     IN HANDLE OutputHandle;
    422.     IN WORD   Attributes;
    423. } CONSOLE_SETTEXTATTRIBUTE_MSG, *PCONSOLE_SETTEXTATTRIBUTE_MSG;
    424.  
    425. typedef struct _CONSOLE_SETFONT_MSG {
    426.     IN HANDLE ConsoleHandle;
    427.     IN HANDLE OutputHandle;
    428.     IN DWORD  FontIndex;
    429. } CONSOLE_SETFONT_MSG, *PCONSOLE_SETFONT_MSG;
    430.  
    431. typedef struct _CONSOLE_SETICON_MSG {
    432.     IN HANDLE ConsoleHandle;
    433.     IN HICON hIcon;
    434. } CONSOLE_SETICON_MSG, *PCONSOLE_SETICON_MSG;
    435.  
    436. typedef struct _CONSOLE_READCONSOLE_MSG {
    437.     IN HANDLE ConsoleHandle;
    438.     IN HANDLE InputHandle;
    439.     IN USHORT ExeNameLength;
    440.     IN OUT WCHAR   Buffer[BUFFER_SIZE/2];
    441.     OUT PVOID  BufPtr;
    442.     IN OUT ULONG  NumBytes;    // this value is valid even for error cases
    443.     IN ULONG CaptureBufferSize;
    444.     IN ULONG InitialNumBytes;
    445.     IN ULONG CtrlWakeupMask;
    446.     OUT ULONG ControlKeyState;
    447.     IN BOOLEAN Unicode;
    448. } CONSOLE_READCONSOLE_MSG, *PCONSOLE_READCONSOLE_MSG;
    449.  
    450. typedef struct _CONSOLE_WRITECONSOLE_MSG {
    451.     IN HANDLE ConsoleHandle;
    452.     IN HANDLE OutputHandle;
    453.     IN WCHAR   Buffer[BUFFER_SIZE/2];
    454.     IN PVOID  BufPtr;
    455.     IN OUT ULONG  NumBytes;    // this value is valid even for error cases
    456.     PWCHAR TransBuffer;         // used by server side only
    457.     IN BOOLEAN BufferInMessage;
    458.     IN BOOLEAN Unicode;
    459.     BOOLEAN StackBuffer;        // used by server side only
    460.     DWORD WriteFlags;           // used by server side only
    461. } CONSOLE_WRITECONSOLE_MSG, *PCONSOLE_WRITECONSOLE_MSG;
    462.  
    463. typedef struct _CONSOLE_CLOSEHANDLE_MSG {
    464.     IN HANDLE ConsoleHandle;
    465.     IN HANDLE Handle;
    466. } CONSOLE_CLOSEHANDLE_MSG, *PCONSOLE_CLOSEHANDLE_MSG;
    467.  
    468. typedef struct _CONSOLE_DUPHANDLE_MSG {
    469.     IN HANDLE ConsoleHandle;
    470.     IN HANDLE SourceHandle;
    471.     IN DWORD  DesiredAccess;
    472.     IN BOOLEAN InheritHandle;
    473.     IN DWORD Options;
    474.     OUT HANDLE TargetHandle;
    475. } CONSOLE_DUPHANDLE_MSG, *PCONSOLE_DUPHANDLE_MSG;
    476.  
    477. typedef struct _CONSOLE_GETHANDLEINFORMATION_MSG {
    478.     IN HANDLE ConsoleHandle;
    479.     IN HANDLE Handle;
    480.     OUT DWORD Flags;
    481. } CONSOLE_GETHANDLEINFORMATION_MSG, *PCONSOLE_GETHANDLEINFORMATION_MSG;
    482.  
    483. typedef struct _CONSOLE_SETHANDLEINFORMATION_MSG {
    484.     IN HANDLE ConsoleHandle;
    485.     IN HANDLE Handle;
    486.     IN DWORD Mask;
    487.     IN DWORD Flags;
    488. } CONSOLE_SETHANDLEINFORMATION_MSG, *PCONSOLE_SETHANDLEINFORMATION_MSG;
    489.  
    490. typedef struct _CONSOLE_ADDALIAS_MSG {
    491.     HANDLE ConsoleHandle;
    492.     USHORT SourceLength;
    493.     USHORT TargetLength;
    494.     USHORT ExeLength;
    495.     PVOID Source;
    496.     PVOID Target;
    497.     PVOID Exe;
    498.     BOOLEAN Unicode;
    499.     BOOLEAN UnicodeExe;
    500. } CONSOLE_ADDALIAS_MSG, *PCONSOLE_ADDALIAS_MSG;
    501.  
    502. typedef struct _CONSOLE_GETALIAS_MSG {
    503.     HANDLE ConsoleHandle;
    504.     USHORT SourceLength;
    505.     USHORT TargetLength;
    506.     USHORT ExeLength;
    507.     PVOID Source;
    508.     PVOID Target;
    509.     PVOID Exe;
    510.     BOOLEAN Unicode;
    511.     BOOLEAN UnicodeExe;
    512. } CONSOLE_GETALIAS_MSG, *PCONSOLE_GETALIAS_MSG;
    513.  
    514. typedef struct _CONSOLE_GETALIASESLENGTH_MSG {
    515.     HANDLE ConsoleHandle;
    516.     USHORT ExeLength;
    517.     PVOID Exe;
    518.     DWORD AliasesLength;
    519.     BOOLEAN Unicode;
    520.     BOOLEAN UnicodeExe;
    521. } CONSOLE_GETALIASESLENGTH_MSG, *PCONSOLE_GETALIASESLENGTH_MSG;
    522.  
    523. typedef struct _CONSOLE_GETALIASEXESLENGTH_MSG {
    524.     HANDLE ConsoleHandle;
    525.     DWORD AliasExesLength;
    526.     BOOLEAN Unicode;
    527. } CONSOLE_GETALIASEXESLENGTH_MSG, *PCONSOLE_GETALIASEXESLENGTH_MSG;
    528.  
    529. typedef struct _CONSOLE_GETALIASES_MSG {
    530.     HANDLE ConsoleHandle;
    531.     USHORT ExeLength;
    532.     PVOID Exe;
    533.     BOOLEAN Unicode;
    534.     BOOLEAN UnicodeExe;
    535.     DWORD AliasesBufferLength;
    536.     PVOID AliasesBuffer;
    537. } CONSOLE_GETALIASES_MSG, *PCONSOLE_GETALIASES_MSG;
    538.  
    539. typedef struct _CONSOLE_GETALIASEXES_MSG {
    540.     HANDLE ConsoleHandle;
    541.     DWORD AliasExesBufferLength;
    542.     PVOID AliasExesBuffer;
    543.     BOOLEAN Unicode;
    544. } CONSOLE_GETALIASEXES_MSG, *PCONSOLE_GETALIASEXES_MSG;
    545.  
    546. typedef struct _CONSOLE_EXPUNGECOMMANDHISTORY_MSG {
    547.     HANDLE ConsoleHandle;
    548.     USHORT ExeLength;
    549.     PVOID Exe;
    550.     BOOLEAN Unicode;
    551.     BOOLEAN UnicodeExe;
    552. } CONSOLE_EXPUNGECOMMANDHISTORY_MSG, *PCONSOLE_EXPUNGECOMMANDHISTORY_MSG;
    553.  
    554. typedef struct _CONSOLE_SETNUMBEROFCOMMANDS_MSG {
    555.     HANDLE ConsoleHandle;
    556.     DWORD NumCommands;
    557.     USHORT ExeLength;
    558.     PVOID Exe;
    559.     BOOLEAN Unicode;
    560.     BOOLEAN UnicodeExe;
    561. } CONSOLE_SETNUMBEROFCOMMANDS_MSG, *PCONSOLE_SETNUMBEROFCOMMANDS_MSG;
    562.  
    563. typedef struct _CONSOLE_GETCOMMANDHISTORYLENGTH_MSG {
    564.     HANDLE ConsoleHandle;
    565.     DWORD CommandHistoryLength;
    566.     USHORT ExeLength;
    567.     PVOID Exe;
    568.     BOOLEAN Unicode;
    569.     BOOLEAN UnicodeExe;
    570. } CONSOLE_GETCOMMANDHISTORYLENGTH_MSG, *PCONSOLE_GETCOMMANDHISTORYLENGTH_MSG;
    571.  
    572. typedef struct _CONSOLE_GETCOMMANDHISTORY_MSG {
    573.     HANDLE ConsoleHandle;
    574.     DWORD CommandBufferLength;
    575.     PVOID CommandBuffer;
    576.     USHORT ExeLength;
    577.     PVOID Exe;
    578.     BOOLEAN Unicode;
    579.     BOOLEAN UnicodeExe;
    580. } CONSOLE_GETCOMMANDHISTORY_MSG, *PCONSOLE_GETCOMMANDHISTORY_MSG;
    581.  
    582. typedef struct _CONSOLE_SETCOMMANDHISTORYMODE_MSG {
    583.     HANDLE ConsoleHandle;
    584.     DWORD Flags;
    585. } CONSOLE_SETCOMMANDHISTORYMODE_MSG, *PCONSOLE_SETCOMMANDHISTORYMODE_MSG;
    586.  
    587. typedef struct _CONSOLE_VERIFYIOHANDLE_MSG {
    588.     BOOL Valid;
    589.     HANDLE ConsoleHandle;
    590.     HANDLE Handle;
    591. } CONSOLE_VERIFYIOHANDLE_MSG, *PCONSOLE_VERIFYIOHANDLE_MSG;
    592.  
    593. typedef struct _CONSOLE_ALLOC_MSG {
    594.     IN PCONSOLE_INFO ConsoleInfo;
    595.     IN DWORD TitleLength;
    596.     IN LPWSTR Title;
    597.     IN DWORD DesktopLength;
    598.     IN LPWSTR Desktop;
    599.     IN DWORD AppNameLength;
    600.     IN LPWSTR AppName;
    601.     IN DWORD CurDirLength;
    602.     IN LPWSTR CurDir;
    603.     IN LPTHREAD_START_ROUTINE CtrlRoutine;
    604.     IN LPTHREAD_START_ROUTINE PropRoutine;
    605. } CONSOLE_ALLOC_MSG, *PCONSOLE_ALLOC_MSG;
    606.  
    607. typedef struct _CONSOLE_FREE_MSG {
    608.     IN HANDLE ConsoleHandle;
    609. } CONSOLE_FREE_MSG, *PCONSOLE_FREE_MSG;
    610.  
    611. typedef struct _CONSOLE_GETTITLE_MSG {
    612.     IN HANDLE ConsoleHandle;
    613.     IN OUT DWORD TitleLength;
    614.     OUT PVOID Title;
    615.     BOOLEAN Unicode;
    616. } CONSOLE_GETTITLE_MSG, *PCONSOLE_GETTITLE_MSG;
    617.  
    618. typedef struct _CONSOLE_SETTITLE_MSG {
    619.     IN HANDLE ConsoleHandle;
    620.     IN DWORD TitleLength;
    621.     IN PVOID Title;
    622.     BOOLEAN Unicode;
    623. } CONSOLE_SETTITLE_MSG, *PCONSOLE_SETTITLE_MSG;
    624.  
    625. typedef struct _CONSOLE_INVALIDATERECT_MSG {
    626.     IN HANDLE ConsoleHandle;
    627.     IN HANDLE OutputHandle;
    628.     SMALL_RECT Rect;
    629. } CONSOLE_INVALIDATERECT_MSG, *PCONSOLE_INVALIDATERECT_MSG;
    630.  
    631. typedef struct _CONSOLE_VDM_MSG {
    632.     IN HANDLE ConsoleHandle;
    633.     IN DWORD  iFunction;
    634.     OUT BOOL Bool;
    635.     IN OUT POINT Point;
    636.     OUT RECT Rect;
    637. #if defined(FE_SB) && defined(i386) // for Kernel32 Single Binary
    638.     IN OUT VDM_IOCTL_PARAM VDMIoctlParam;
    639. #endif // FE_SB
    640. } CONSOLE_VDM_MSG, *PCONSOLE_VDM_MSG;
    641.  
    642. typedef struct _CONSOLE_SETCURSOR_MSG {
    643.     IN HANDLE ConsoleHandle;
    644.     IN HANDLE OutputHandle;
    645.     IN HCURSOR CursorHandle;
    646. } CONSOLE_SETCURSOR_MSG, *PCONSOLE_SETCURSOR_MSG;
    647.  
    648. typedef struct _CONSOLE_SHOWCURSOR_MSG {
    649.     IN HANDLE ConsoleHandle;
    650.     IN HANDLE OutputHandle;
    651.     IN BOOL bShow;
    652.     OUT int DisplayCount;
    653. } CONSOLE_SHOWCURSOR_MSG, *PCONSOLE_SHOWCURSOR_MSG;
    654.  
    655. typedef struct _CONSOLE_MENUCONTROL_MSG {
    656.     IN HANDLE ConsoleHandle;
    657.     IN HANDLE OutputHandle;
    658.     IN UINT CommandIdLow;
    659.     IN UINT CommandIdHigh;
    660.     OUT HMENU hMenu;
    661. } CONSOLE_MENUCONTROL_MSG, *PCONSOLE_MENUCONTROL_MSG;
    662.  
    663. typedef struct _CONSOLE_SETPALETTE_MSG {
    664.     IN HANDLE ConsoleHandle;
    665.     IN HANDLE OutputHandle;
    666.     IN HPALETTE hPalette;
    667.     IN UINT dwUsage;
    668. } CONSOLE_SETPALETTE_MSG, *PCONSOLE_SETPALETTE_MSG;
    669.  
    670. typedef struct _CONSOLE_SETDISPLAYMODE_MSG {
    671.     IN HANDLE ConsoleHandle;
    672.     IN HANDLE OutputHandle;
    673.     IN DWORD dwFlags;
    674.     OUT COORD ScreenBufferDimensions;
    675.     IN HANDLE hEvent;
    676. } CONSOLE_SETDISPLAYMODE_MSG, *PCONSOLE_SETDISPLAYMODE_MSG;
    677.  
    678. typedef struct _CONSOLE_REGISTERVDM_MSG {
    679.     IN HANDLE ConsoleHandle;
    680.     IN DWORD RegisterFlags;
    681.     IN HANDLE StartEvent;
    682.     IN HANDLE EndEvent;
    683.     IN LPWSTR StateSectionName;
    684.     IN DWORD StateSectionNameLength;
    685.     OUT ULONG StateLength;
    686.     OUT PVOID StateBuffer;
    687.     IN LPWSTR VDMBufferSectionName;
    688.     IN DWORD VDMBufferSectionNameLength;
    689.     IN COORD VDMBufferSize;
    690.     OUT PVOID VDMBuffer;
    691. } CONSOLE_REGISTERVDM_MSG, *PCONSOLE_REGISTERVDM_MSG;
    692.  
    693. typedef struct _CONSOLE_GETHARDWARESTATE_MSG {
    694.     IN HANDLE ConsoleHandle;
    695.     IN HANDLE OutputHandle;
    696.     OUT COORD Resolution;
    697.     OUT COORD FontSize;
    698. } CONSOLE_GETHARDWARESTATE_MSG, *PCONSOLE_GETHARDWARESTATE_MSG;
    699.  
    700. typedef struct _CONSOLE_SETHARDWARESTATE_MSG {
    701.     IN HANDLE ConsoleHandle;
    702.     IN HANDLE OutputHandle;
    703.     IN COORD Resolution;
    704.     IN COORD FontSize;
    705. } CONSOLE_SETHARDWARESTATE_MSG, *PCONSOLE_SETHARDWARESTATE_MSG;
    706.  
    707. typedef struct _CONSOLE_GETDISPLAYMODE_MSG {
    708.     IN HANDLE ConsoleHandle;
    709.     OUT ULONG ModeFlags;
    710. } CONSOLE_GETDISPLAYMODE_MSG, *PCONSOLE_GETDISPLAYMODE_MSG;
    711.  
    712. typedef struct _CONSOLE_GETCP_MSG {
    713.     IN HANDLE ConsoleHandle;
    714.     UINT wCodePageID;
    715.     BOOL Output;
    716. } CONSOLE_GETCP_MSG, *PCONSOLE_GETCP_MSG;
    717.  
    718. typedef struct _CONSOLE_SETCP_MSG {
    719.     IN HANDLE ConsoleHandle;
    720.     UINT wCodePageID;
    721.     BOOL Output;
    722. #if defined(FE_SB) // for Kernel32 Single Binary
    723.     HANDLE hEvent;
    724. #endif // FE_SB
    725. } CONSOLE_SETCP_MSG, *PCONSOLE_SETCP_MSG;
    726.  
    727. typedef struct _CONSOLE_GETKEYBOARDLAYOUTNAME_MSG {
    728.     IN HANDLE ConsoleHandle;
    729.     union {
    730.         WCHAR awchLayout[9];
    731.         char achLayout[9];
    732.     };
    733.     BOOL bAnsi;
    734. } CONSOLE_GETKEYBOARDLAYOUTNAME_MSG, *PCONSOLE_GETKEYBOARDLAYOUTNAME_MSG;
    735.  
    736. typedef struct _CONSOLE_SETKEYSHORTCUTS_MSG {
    737.     IN HANDLE ConsoleHandle;
    738.     BOOL Set;
    739.     BYTE ReserveKeys;
    740.     DWORD NumAppKeys;
    741.     LPAPPKEY AppKeys;
    742. } CONSOLE_SETKEYSHORTCUTS_MSG, *PCONSOLE_SETKEYSHORTCUTS_MSG;
    743.  
    744. typedef struct _CONSOLE_SETMENUCLOSE_MSG {
    745.     IN HANDLE ConsoleHandle;
    746.     BOOL Enable;
    747. } CONSOLE_SETMENUCLOSE_MSG, *PCONSOLE_SETMENUCLOSE_MSG;
    748.  
    749. typedef struct _CONSOLE_NOTIFYLASTCLOSE_MSG {
    750.     IN HANDLE ConsoleHandle;
    751. } CONSOLE_NOTIFYLASTCLOSE_MSG, *PCONSOLE_NOTIFYLASTCLOSE_MSG;
    752.  
    753. typedef struct _CONSOLE_CTRLEVENT_MSG {
    754.     IN HANDLE ConsoleHandle;
    755.     IN DWORD CtrlEvent;
    756.     IN DWORD ProcessGroupId;
    757. } CONSOLE_CTRLEVENT_MSG, *PCONSOLE_CTRLEVENT_MSG;
    758.  
    759. #if defined(FE_SB) // for Kernel32 Single Binary
    760. typedef struct _CONSOLE_CHAR_TYPE_MSG {
    761.     IN HANDLE ConsoleHandle;
    762.     IN HANDLE Handle;
    763.     IN COORD coordCheck;
    764.     OUT DWORD dwType;
    765. } CONSOLE_CHAR_TYPE_MSG, *PCONSOLE_CHAR_TYPE_MSG;
    766.  
    767. typedef struct _CONSOLE_LOCAL_EUDC_MSG {
    768.     IN HANDLE ConsoleHandle;
    769.     IN HANDLE Handle;
    770.     IN WORD CodePoint;
    771.     IN COORD FontSize;
    772.     IN PCHAR FontFace;
    773. } CONSOLE_LOCAL_EUDC_MSG, *PCONSOLE_LOCAL_EUDC_MSG;
    774.  
    775. typedef struct _CONSOLE_CURSOR_MODE_MSG {
    776.     IN HANDLE ConsoleHandle;
    777.     IN HANDLE Handle;
    778.     IN BOOL Blink;
    779.     IN BOOL DBEnable;
    780. } CONSOLE_CURSOR_MODE_MSG, *PCONSOLE_CURSOR_MODE_MSG;
    781.  
    782. typedef struct _CONSOLE_REGISTEROS2_MSG {
    783.     IN HANDLE ConsoleHandle;
    784.     IN BOOL fOs2Register;
    785. } CONSOLE_REGISTEROS2_MSG, *PCONSOLE_REGISTEROS2_MSG;
    786.  
    787. typedef struct _CONSOLE_SETOS2OEMFORMAT_MSG {
    788.     IN HANDLE ConsoleHandle;
    789.     IN BOOL fOs2OemFormat;
    790. } CONSOLE_SETOS2OEMFORMAT_MSG, *PCONSOLE_SETOS2OEMFORMAT_MSG;
    791.  
    792. #if defined(FE_IME)
    793. typedef struct _CONSOLE_NLS_MODE_MSG {
    794.     IN HANDLE ConsoleHandle;
    795.     IN HANDLE Handle;
    796.     IN OUT BOOL Ready;
    797.     IN DWORD NlsMode;
    798.     IN HANDLE hEvent;
    799. } CONSOLE_NLS_MODE_MSG, *PCONSOLE_NLS_MODE_MSG;
    800.  
    801. typedef struct _CONSOLE_REGISTER_CONSOLEIME_MSG {
    802.     IN HANDLE ConsoleHandle;
    803.     IN HWND hWndConsoleIME;
    804.     IN DWORD dwConsoleIMEThreadId;
    805.     IN DWORD DesktopLength;
    806.     IN LPWSTR Desktop;
    807.     OUT DWORD dwConsoleThreadId;
    808. } CONSOLE_REGISTER_CONSOLEIME_MSG, *PCONSOLE_REGISTER_CONSOLEIME_MSG;
    809.  
    810. typedef struct _CONSOLE_UNREGISTER_CONSOLEIME_MSG {
    811.     IN HANDLE ConsoleHandle;
    812.     IN DWORD dwConsoleIMEThreadId;
    813. } CONSOLE_UNREGISTER_CONSOLEIME_MSG, *PCONSOLE_UNREGISTER_CONSOLEIME_MSG;
    814. #endif // FE_IME
    815.  
    816. #endif // FE_SB
    817.  
    818. typedef struct _CONSOLE_GETCONSOLEWINDOW_MSG {
    819.     IN HANDLE ConsoleHandle;
    820.     HANDLE hwnd;
    821. } CONSOLE_GETCONSOLEWINDOW_MSG, *PCONSOLE_GETCONSOLEWINDOW_MSG;
    822.  
    823. typedef struct _CONSOLE_LANGID_MSG {
    824.     IN HANDLE ConsoleHandle;
    825.     OUT LANGID LangId;
    826. } CONSOLE_LANGID_MSG, *PCONSOLE_LANGID_MSG;
    827.  
    828. typedef struct _CONSOLE_API_MSG {
    829.     PORT_MESSAGE h;
    830.     PCSR_CAPTURE_HEADER CaptureBuffer;
    831.     CSR_API_NUMBER ApiNumber;
    832.     ULONG ReturnValue;
    833.     ULONG Reserved;
    834.     union {
    835.         CONSOLE_OPENCONSOLE_MSG OpenConsole;
    836.         CONSOLE_GETCONSOLEINPUT_MSG GetConsoleInput;
    837.         CONSOLE_WRITECONSOLEINPUT_MSG WriteConsoleInput;
    838.         CONSOLE_READCONSOLEOUTPUT_MSG ReadConsoleOutput;
    839.         CONSOLE_WRITECONSOLEOUTPUT_MSG WriteConsoleOutput;
    840.         CONSOLE_READCONSOLEOUTPUTSTRING_MSG ReadConsoleOutputString;
    841.         CONSOLE_WRITECONSOLEOUTPUTSTRING_MSG WriteConsoleOutputString;
    842.         CONSOLE_FILLCONSOLEOUTPUT_MSG FillConsoleOutput;
    843.         CONSOLE_MODE_MSG GetConsoleMode;
    844.         CONSOLE_GETNUMBEROFFONTS_MSG GetNumberOfConsoleFonts;
    845.         CONSOLE_GETNUMBEROFINPUTEVENTS_MSG GetNumberOfConsoleInputEvents;
    846.         CONSOLE_GETSCREENBUFFERINFO_MSG GetConsoleScreenBufferInfo;
    847.         CONSOLE_GETCURSORINFO_MSG GetConsoleCursorInfo;
    848.         CONSOLE_GETMOUSEINFO_MSG GetConsoleMouseInfo;
    849.         CONSOLE_GETFONTINFO_MSG GetConsoleFontInfo;
    850.         CONSOLE_GETFONTSIZE_MSG GetConsoleFontSize;
    851.         CONSOLE_GETCURRENTFONT_MSG GetCurrentConsoleFont;
    852.         CONSOLE_MODE_MSG SetConsoleMode;
    853.         CONSOLE_SETACTIVESCREENBUFFER_MSG SetConsoleActiveScreenBuffer;
    854.         CONSOLE_FLUSHINPUTBUFFER_MSG FlushConsoleInputBuffer;
    855.         CONSOLE_GETLARGESTWINDOWSIZE_MSG GetLargestConsoleWindowSize;
    856.         CONSOLE_SETSCREENBUFFERSIZE_MSG SetConsoleScreenBufferSize;
    857.         CONSOLE_SETCURSORPOSITION_MSG SetConsoleCursorPosition;
    858.         CONSOLE_SETCURSORINFO_MSG SetConsoleCursorInfo;
    859.         CONSOLE_SETWINDOWINFO_MSG SetConsoleWindowInfo;
    860.         CONSOLE_SCROLLSCREENBUFFER_MSG ScrollConsoleScreenBuffer;
    861.         CONSOLE_SETTEXTATTRIBUTE_MSG SetConsoleTextAttribute;
    862.         CONSOLE_SETFONT_MSG SetConsoleFont;
    863.         CONSOLE_SETICON_MSG SetConsoleIcon;
    864.         CONSOLE_READCONSOLE_MSG ReadConsole;
    865.         CONSOLE_WRITECONSOLE_MSG WriteConsole;
    866.         CONSOLE_DUPHANDLE_MSG DuplicateHandle;
    867.         CONSOLE_GETHANDLEINFORMATION_MSG GetHandleInformation;
    868.         CONSOLE_SETHANDLEINFORMATION_MSG SetHandleInformation;
    869.         CONSOLE_CLOSEHANDLE_MSG CloseHandle;
    870.         CONSOLE_VERIFYIOHANDLE_MSG VerifyConsoleIoHandle;
    871.         CONSOLE_ALLOC_MSG AllocConsole;
    872.         CONSOLE_FREE_MSG FreeConsole;
    873.         CONSOLE_GETTITLE_MSG GetConsoleTitle;
    874.         CONSOLE_SETTITLE_MSG SetConsoleTitle;
    875.         CONSOLE_CREATESCREENBUFFER_MSG CreateConsoleScreenBuffer;
    876.         CONSOLE_INVALIDATERECT_MSG InvalidateConsoleBitmapRect;
    877.         CONSOLE_VDM_MSG VDMConsoleOperation;
    878.         CONSOLE_SETCURSOR_MSG SetConsoleCursor;
    879.         CONSOLE_SHOWCURSOR_MSG ShowConsoleCursor;
    880.         CONSOLE_MENUCONTROL_MSG ConsoleMenuControl;
    881.         CONSOLE_SETPALETTE_MSG SetConsolePalette;
    882.         CONSOLE_SETDISPLAYMODE_MSG SetConsoleDisplayMode;
    883.         CONSOLE_REGISTERVDM_MSG RegisterConsoleVDM;
    884.         CONSOLE_GETHARDWARESTATE_MSG GetConsoleHardwareState;
    885.         CONSOLE_SETHARDWARESTATE_MSG SetConsoleHardwareState;
    886.         CONSOLE_GETDISPLAYMODE_MSG GetConsoleDisplayMode;
    887.         CONSOLE_ADDALIAS_MSG AddConsoleAliasW;
    888.         CONSOLE_GETALIAS_MSG GetConsoleAliasW;
    889.         CONSOLE_GETALIASESLENGTH_MSG GetConsoleAliasesLengthW;
    890.         CONSOLE_GETALIASEXESLENGTH_MSG GetConsoleAliasExesLengthW;
    891.         CONSOLE_GETALIASES_MSG GetConsoleAliasesW;
    892.         CONSOLE_GETALIASEXES_MSG GetConsoleAliasExesW;
    893.         CONSOLE_EXPUNGECOMMANDHISTORY_MSG ExpungeConsoleCommandHistoryW;
    894.         CONSOLE_SETNUMBEROFCOMMANDS_MSG SetConsoleNumberOfCommandsW;
    895.         CONSOLE_GETCOMMANDHISTORYLENGTH_MSG GetConsoleCommandHistoryLengthW;
    896.         CONSOLE_GETCOMMANDHISTORY_MSG GetConsoleCommandHistoryW;
    897.         CONSOLE_SETCOMMANDHISTORYMODE_MSG SetConsoleCommandHistoryMode;
    898.         CONSOLE_GETCP_MSG GetConsoleCP;
    899.         CONSOLE_SETCP_MSG SetConsoleCP;
    900.         CONSOLE_SETKEYSHORTCUTS_MSG SetConsoleKeyShortcuts;
    901.         CONSOLE_SETMENUCLOSE_MSG SetConsoleMenuClose;
    902.         CONSOLE_NOTIFYLASTCLOSE_MSG SetLastConsoleEventActive;
    903.         CONSOLE_CTRLEVENT_MSG GenerateConsoleCtrlEvent;
    904.         CONSOLE_GETKEYBOARDLAYOUTNAME_MSG GetKeyboardLayoutName;
    905.         CONSOLE_GETCONSOLEWINDOW_MSG GetConsoleWindow;
    906. #if defined(FE_SB) // for Kernel32 Single Binary
    907.         CONSOLE_CHAR_TYPE_MSG GetConsoleCharType;
    908.         CONSOLE_LOCAL_EUDC_MSG SetConsoleLocalEUDC;
    909.         CONSOLE_CURSOR_MODE_MSG SetConsoleCursorMode;
    910.         CONSOLE_CURSOR_MODE_MSG GetConsoleCursorMode;
    911.         CONSOLE_REGISTEROS2_MSG RegisterConsoleOS2;
    912.         CONSOLE_SETOS2OEMFORMAT_MSG SetConsoleOS2OemFormat;
    913. #if defined(FE_IME)
    914.         CONSOLE_NLS_MODE_MSG GetConsoleNlsMode;
    915.         CONSOLE_NLS_MODE_MSG SetConsoleNlsMode;
    916.         CONSOLE_REGISTER_CONSOLEIME_MSG RegisterConsoleIME;
    917.         CONSOLE_UNREGISTER_CONSOLEIME_MSG UnregisterConsoleIME;
    918. #endif // FE_IME
    919. #endif // FE_SB
    920.         CONSOLE_LANGID_MSG GetConsoleLangId;
    921.     } u;
    922. } CONSOLE_API_MSG, *PCONSOLE_API_MSG;
    923.  
    924. #endif
    Касательно трея - всё выполняется посредством посылки сообщений окну "Shell_TrayWnd", соответственно это апи Shell_NotifyIcon(), нужно посмотреть на экспорты Shell32.dll(есть в сурцах). Кстати это дыра в безопасности.
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Админу - забыл повыделять, верните наконец мне возможность обновления поста.
     
  8. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    ntcdm
    Да так и сделал:
    Код (Text):
    1. #include <windows.h>
    2. #include <stdio.h>
    3. #include <io.h>
    4. #include <fcntl.h>
    5. #include <string.h>
    6. #include <wincon.h>
    7.  
    8. LONG WINAPI WndProc(HWND, UINT, WPARAM, LPARAM);
    9. typedef HWND (WINAPI* PFN_GetConsoleWindow)(VOID);
    10. PFN_GetConsoleWindow fpGetConsoleWindow;
    11.  
    12. #define WM_MYICONNOTIFY                 WM_USER+1
    13.  
    14. HINSTANCE hInst;
    15. BOOL visible = false;
    16.  
    17. BYTE ANDmaskIcon[] = {
    18.     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0xFF, 0xFF, 0xFF, 0x00, 0xFF,  0xFF, 0xFE, 0x00, 0x7F,
    19.     0xFF, 0xFC, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x07,    
    20.     0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x01,  
    21.     0xFF, 0xF0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x00,
    22.     0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x00, 0xFF, 0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xE0, 0x01,
    23.     0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xE0, 0x03,
    24.     0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0xC0, 0x0F, 0xFF, 0xFF, 0x80, 0x1F,
    25.     0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xFC, 0x3F, 0xFF};
    26.  
    27.     // битовая маска XOR  иконки
    28.  
    29. BYTE XORmaskIcon[] = {
    30.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    31.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00,  
    32.     0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x00, 0x38, 0x00,  
    33.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
    34.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    35.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
    36.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  
    37.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    38.  
    39.  
    40. NOTIFYICONDATA nf={0};
    41. HWND hConsole;
    42. BOOL CreateConsole(void)
    43. {
    44.   FreeConsole();        
    45.   if(AllocConsole())
    46.   {
    47.       int hCrt = _open_osfhandle((long)
    48.           GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT);
    49.       *stdout = *(::_fdopen(hCrt, "w"));
    50.       ::setvbuf(stdout, NULL, _IONBF, 0);
    51.       *stderr = *(::_fdopen(hCrt, "w"));
    52.       ::setvbuf(stderr, NULL, _IONBF, 0);
    53.        
    54.       HINSTANCE hInst = ::LoadLibrary("kernel32.dll");
    55.       fpGetConsoleWindow = (HWND (_stdcall *)(VOID))GetProcAddress(hInst,"GetConsoleWindow");
    56.       hConsole = fpGetConsoleWindow();
    57.       return TRUE;
    58.   }
    59.   return FALSE;
    60. }
    61. int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
    62. {  
    63.     CreateConsole();
    64.  
    65.     HWND hwnd;
    66.     MSG msg;
    67.     WNDCLASS w;
    68.     memset(&w,0,sizeof(WNDCLASS));
    69.     w.style = CS_HREDRAW | CS_VREDRAW;
    70.     w.lpfnWndProc = WndProc;
    71.     w.hInstance = hInstance;
    72.     w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    73.     w.lpszClassName = "Copier";
    74.     RegisterClass(&w);
    75.     hwnd= CreateWindow(w.lpszClassName, "", 0, 0, 0, 1, 1, HWND_DESKTOP, NULL, hInst, NULL);
    76.  
    77.     ShowWindow(hwnd,TRUE);
    78.     UpdateWindow(hwnd);
    79.  
    80.     printf("WinMain with console =)\nConsole HWND #%X",hConsole);
    81.    
    82.     HICON hIcon;
    83.     hIcon = CreateIcon(
    84.     NULL,   // дескриптор экземпляра приложения
    85.     32, // ширина иконки
    86.     32, // высота иконки
    87.     1,  // число плоскостей XOR
    88.     1,  // число битов на пиксель
    89.     ANDmaskIcon,    // битовая маска AND
    90.     XORmaskIcon);   // битовая маска XOR
    91.  
    92.  
    93.     nf.hIcon = hIcon;
    94.     nf.cbSize = sizeof(nf);
    95.     nf.hWnd = hwnd;
    96.     nf.uID = NULL;
    97.     nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    98.     nf.uCallbackMessage = WM_MYICONNOTIFY;
    99.     strcpy(nf.szTip,"Copier");
    100.  
    101.     Shell_NotifyIcon(NIM_ADD,&nf);
    102.     ShowWindow(hwnd,SW_HIDE);
    103.  
    104.     while (GetMessage(&msg, NULL,  0, 0))
    105.     {
    106.         TranslateMessage(&msg);
    107.         DispatchMessage(&msg);
    108.     }
    109.     return TRUE;
    110. }
    111. LONG WINAPI WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    112. {
    113.     switch (message)
    114.     {
    115.     case WM_DESTROY:
    116.         {
    117.             Shell_NotifyIcon(NIM_DELETE,&nf);
    118.             PostQuitMessage(0);
    119.             break;
    120.         }
    121.     case WM_MYICONNOTIFY:
    122.         if (lparam == 514)
    123.         {
    124.             visible = !visible;
    125.             ShowWindow(hConsole,visible);
    126.             SendMessage(hConsole,WM_ACTIVATEAPP,TRUE,NULL);             // хочу сделать активным,
    127.             SendMessage(hConsole,WM_ACTIVATE,WA_ACTIVE,NULL);        // не получается
    128.             SetFocus(hConsole);
    129.         }
    130.         if (lparam == 516)
    131.         {
    132.             int er = MessageBox(hwnd,"Вы действительно хотите выйти?","Attention!!!",MB_OKCANCEL);
    133.             if (er == IDOK)
    134.                 SendMessage(hwnd,WM_DESTROY,NULL,NULL);
    135.         }
    136.    
    137.         break;
    138.     default:
    139.         return DefWindowProc(hwnd,message,wparam,lparam);
    140.     }
    141.     return 1;
    142. }
    Теперь возникает другой вопрос, хочу сделать окно активным(Чтобы синеньким был выделен заголовок =) ), не выходит, что не так:
    SendMessage(hConsole,WM_ACTIVATEAPP,TRUE,NULL);
    SendMessage(hConsole,WM_ACTIVATE,WA_ACTIVE,NULL);
    ?
     
  9. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    Clerk
    спасибо за GetConsoleWindow :)
     
  10. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    karpen
    Прошелся по сайту http://gamedev.ru/, ничего не заметил про обработку сообщений консольного приложения
     
  11. dag

    dag New Member

    Публикаций:
    0
    Регистрация:
    17 авг 2004
    Сообщения:
    446
    http://msdn.microsoft.com/en-us/magazine/cc163417.aspx
    принцип которые советуют магазиновцы,
    но вообщето консольное приложение имеет своё окно
    http://support.microsoft.com/kb/124103
    типа наверное можно и хук поставить или ещё что придумать
    http://forum.vingrad.ru/forum/topic-174141/anchor-entry1270916/0.html
     
  12. karpen

    karpen New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2009
    Сообщения:
    31
    В своем посте я хотел сказать, что обработка сообщений консольного приложения не отличается от полноценного GUI приложения, потому что все дело в хендле приложения. Т.е. вы не должны делать акцент на консольное приложение.
    В догонку пару примеров.
    Обработка сообщений в Far:
    Код (Text):
    1. LONG_PTR WINAPI MsgDlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2)
    2. {
    3.     switch(Msg)
    4.     {
    5.         case DN_INITDIALOG:
    6.             {
    7.                 FarDialogItem di;
    8.                 for(int i=0;Dialog::SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,i,(LONG_PTR)&di);i++)
    9.                 {
    10.                     if(di.Type==DI_EDIT)
    11.                     {
    12.                         COORD pos={0,0};
    13.                         Dialog::SendDlgMessage(hDlg,DM_SETCURSORPOS,i,(LONG_PTR)&pos);
    14.                     }
    15.                 }
    16.             }
    17.             break;
    18.         case DN_CTLCOLORDLGITEM:
    19.             {
    20.                 FarDialogItem di;
    21.                 Dialog::SendDlgMessage(hDlg,DM_GETDLGITEMSHORT,Param1,(LONG_PTR)&di);
    22.                 if(di.Type==DI_EDIT)
    23.                 {
    24.                     int Color=FarColorToReal(IsWarningStyle?COL_WARNDIALOGTEXT:COL_DIALOGTEXT)&0xFF;
    25.                     return ((Param2&0xFF00FF00)|(Color<<16)|Color);
    26.                 }
    27.             }
    28.             break;
    29.         case DN_KEY:
    30.             {
    31.                 if(Param1==FirstButtonIndex && (Param2==KEY_LEFT || Param2 == KEY_NUMPAD4 || Param2==KEY_SHIFTTAB))
    32.                 {
    33.                     Dialog::SendDlgMessage(hDlg,DM_SETFOCUS,LastButtonIndex,0);
    34.                     return TRUE;
    35.                 }
    36.                 else if(Param1==LastButtonIndex && (Param2==KEY_RIGHT || Param2 == KEY_NUMPAD6 || Param2==KEY_TAB))
    37.                 {
    38.                     Dialog::SendDlgMessage(hDlg,DM_SETFOCUS,FirstButtonIndex,0);
    39.                     return TRUE;
    40.                 }
    41.             }
    42.             break;
    43.     }
    44.     return Dialog::DefDlgProc(hDlg,Msg,Param1,Param2);
    45. }
    Пример из FAQ как переключаться в полноэкранный режим, хорош тем, что показанно как работать с kernel32.dll^
    Код (Text):
    1. Q> Как переключить консоль в полный экран и обратно?
    2.  
    3. A> (c)1999 Ashot Oganesyan K, SmartLine, Inc
    4.  
    5.         Когда Вы запускаете свое приложение в консольном окне Вы можете
    6.         нажать ALT+ENTER для переключения консоли в полный экран.Но нет
    7.         документированных функций,чтобы сделать это.Однако Windows9X посылает
    8.         сообщение WM_COMMAND со специальным идентификатором,когда пользователь
    9.         нажимает ALT+ENTER:
    10.  
    11. #define ID_SWITCH_CONSOLEMODE 0xE00F
    12.  
    13.         Для переключения режимов Вы можете использовать ф-ию SendMessage:
    14.  
    15. SendMessage(hWnd,WM_COMMAND,ID_SWITCH_CONSOLEMODE,0);
    16.  
    17.         Однако это не работает в Windows NT/2000.
    18.         Windows NT/2000 содержит две недокументированные функции,которые
    19.         позволяют нам добраться до консольного окна:
    20.  
    21. BOOL SetConsoleDisplayMode (
    22. HANDLE hOut,                      // standard output handle
    23. DWORD dwNewMode,       // specifies the display mode
    24. LPDWORD lpdwOldMode, // address of variable for previous value of display mode
    25. );
    26.  
    27. BOOL GetConsoleDisplayMode (
    28. LPDWORD lpdwMode, // address of variable for current value of display mode
    29. );
    30.  
    31. Эти функции экспортируются Kernel32.dll, но Kernel32.lib их не содержит.
    32. Поэтому мы вынуждены использовать функцию GetProcAddress:
    33.  
    34. typedef BOOL (WINAPI *PROCSETCONSOLEDISPLAYMODE)(HANDLE,DWORD,LPDWORD);
    35. typedef BOOL (WINAPI *PROCGETCONSOLEDISPLAYMODE)(LPDWORD);
    36.  
    37. PROCSETCONSOLEDISPLAYMODE SetConsoleDisplayMode;
    38. PROCGETCONSOLEDISPLAYMODE GetConsoleDisplayMode;
    39.  
    40. HMODULE hKernel32 = GetModuleHandle("kernel32");
    41.  
    42. SetConsoleDisplayMode = (PROCSETCONSOLEDISPLAYMODEELLWND)
    43. GetProcAddress(hKernel32,"SetConsoleDisplayMode");
    44.  
    45. GetConsoleDisplayModeplayMode = (PROCGETCONSOLEDISPLAYMODE)
    46. GetProcAddress(hKernel32,"GetConsoleDisplayMode");
    47.  
    48. HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    49.  
    50. DWORD dwOldMode;
    51. SetConsoleDisplayMode(hOut,1,&dwOldMode);
    У меня консольные приложения регистрируются в системе с помощью GetStdHandle и GetConsoleMode, наверное это справедливо в целом для консольных приложений.
     
  13. REASY

    REASY New Member

    Публикаций:
    0
    Регистрация:
    24 дек 2007
    Сообщения:
    108
    karpen
    >>>Надо написать свой обработчик этих сообщений и радоваться жизни без регистрации класса GUI приложения.
    У вас в примере обработчиком является LONG_PTR WINAPI MsgDlgProc(HANDLE hDlg,int Msg,int Param1,LONG_PTR Param2), но вы же где то должны указать, что за фу-я будет обрабатывать его.
    WNDCLASS w;
    ....
    w.lpfnWndProc = WndProc;
    .....
    Я правильно понял, что здесь w.lpfnWndProc = MsgDlgProc ??
    И без вызова RegisterClass(&w) мы же не сможем указать системе о новом классе ?

    А сворачивать сначала я хотел именно консольное приложение такого вида:
    Код (Text):
    1. #include <stdio.h>
    2.  
    3. int main(int arg, char **argv[])
    4. {
    5.       printf("Hello");
    6.       return 0;
    7. }
     
  14. karpen

    karpen New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2009
    Сообщения:
    31
    Думаю, что не совсем так.
    Можно использовать функции GetMessage и PeekMessage для получения сообщений предназначенного твоему окну.
    На примере GetMessage
    Код (Text):
    1.     BOOL GetMessage(
    2.         LPMSG lpMsg,
    3.         HWND hWnd,
    4.         UINT wMsgFilterMin,
    5.         UINT wMsgFilterMax
    6.     );
    Выходной величиной является lpMsg, она и содержит сообщение.
    Код (Text):
    1.     typedef struct {
    2.         HWND  hwnd;
    3.         UINT  message;
    4.         WPARAM  wParam;
    5.         LPARAM  lParam;
    6.         DWORD  time;
    7.         POINT  pt;
    8.     } MSG, *PMSG;
    .
    Т.е. этот выходной параметр передаем в MsgDlgProc, без регистрации класса.
    Проверить предположение смогу позже.
     
  15. karpen

    karpen New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2009
    Сообщения:
    31
    Проверял следующим кодом:
    Код (Text):
    1. #include <iostream>
    2. #include <windows.h>
    3.  
    4. using namespace std;
    5.  
    6. void MsgDlgProc(HWND hDlg,UINT Msg, WPARAM Param1,LPARAM Param2)
    7. {
    8.     cout << "In MsgDlgProc procedure\n";
    9.     switch (Msg)
    10.     {
    11.         case WM_KEYDOWN:
    12.             switch(Param1)
    13.             {
    14.                 case VK_ESCAPE:
    15.                     cout << "Esc\n";
    16.                     SendMessage(hDlg, WM_CLOSE, 0, 0);
    17.                     break;
    18.             }
    19.             break;
    20.         case WM_DESTROY:
    21.             PostQuitMessage(0);
    22.             break;
    23.         default:
    24.             (void)DefWindowProc(hDlg, Msg, Param1, Param2);
    25.     }
    26. }
    27.  
    28. int main (int arg, char **argv[])
    29. {
    30.     HWND MyHWND;
    31.     MSG Msg;
    32.    
    33.     MyHWND = GetConsoleWindow();
    34.     cout << "In main\n";
    35.    
    36.     while (GetMessage(&Msg, NULL, 0, 0))
    37.     {
    38.         cout << "In GetMessage procedure\n";
    39.         TranslateMessage(&Msg);
    40.         DispatchMessage(&Msg);
    41.         MsgDlgProc(Msg.hwnd, Msg.message, Msg.wParam, Msg.lParam);
    42.     }
    43.     return 0;      
    44. }
    В нормальном прогоне заставить работать не удалось (вернее оно работает, но из GetMessage не выходим, т.к. не может найти сообщения нашему приложению). В пошаговом прогоне какие-то сообщения ловит, но я не знаю, что это за сообщения такие.

    PS если В GetMessage вместо NULL поставить MyHWND, то вообще труба, и в дебаге сообщения не найдем.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Создать своё текстовое окно и никаких проблем не будет, зачем вообще эта консоль нужна.