Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Работа с SendMessage


Автор: SkyHawk 5.4.2010, 12:29
Народ! Помогите пожалуйста!
Начал изучать Visual C++. Раньше писал на Билдере. Так вот. Необходимо создать программку, которая помимо всего прочего будет гасить экран при определенных условиях. Покопавшись в инете, нашел такую функцию API:

Код

  SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, LPARAM(2));


Именно она гасит экран. Далее делаю так: создаю пустую форму с кнопкой, в обработчике нажатия на кнопку добавляю эту функцию. 
В результате выдает кучу ошибок "необъявленные идентификатор".  Если эту же функцию запускать на билдере - все отрабатывает на ура. В чем дело, что можно сделать, и как исправить данную проблему? 
С нетерпением жду ваших советов.

Автор: ИванМ 5.4.2010, 15:13
Нужно подключить соответствующие заголовки, в котором описаны нужные идентификаторы. 

Автор: SkyHawk 5.4.2010, 20:50
Цитата(ИванМ @  5.4.2010,  15:13 Найти цитируемый пост)
Нужно подключить соответствующие заголовки, в котором описаны нужные идентификаторы.  


Подключил "winuser.h". Не помогло.
Код

c:\documents and settings\user\мои документы\visual studio 2008\projects\qqq5\qqq5\Form1.h(86) : error C2065: HWND_BROADCAST: необъявленный идентификатор
c:\documents and settings\user\мои документы\visual studio 2008\projects\qqq5\qqq5\Form1.h(86) : error C2065: WM_SYSCOMMAND: необъявленный идентификатор
c:\documents and settings\user\мои документы\visual studio 2008\projects\qqq5\qqq5\Form1.h(86) : error C2065: SC_MONITORPOWER: необъявленный идентификатор

Автор: ИванМ 5.4.2010, 20:58
Какая у тебя версия Visual C++? 
А, VS2008. 
Ты случаем не на Managed C++ пишешь? (под .NET). Странный заголовок твоего модуля.

Автор: SkyHawk 6.4.2010, 05:15
Да нет... На обычном С++...

Автор: Earnest 6.4.2010, 07:38
1) Проверь, пути стандартные у тебя прописаны? К папке SDK? Это в настройках среды.
2) Как проект создавал? Возможно, как-то криво. В winUser есть несколько отключающих гардов, напр. NOUSER. Нужно убедиться, что их никто не установил. Лучше всего создать проект соответствующим визардом. Кроме того, если ты пишешь на MFC, то нужно подключать не winUser а afxwin.h

Автор: SkyHawk 6.4.2010, 18:07
Пробовал подключить следующие модули:
Код

#include "C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinUser.h"
#include "C:\Program Files\Borland\CBuilder6\Include\Mfc\afxwin.h "  


Выдает одно и то же:

Код

------ Построение начато: проект: qqq5, Конфигурация: Debug Win32 ------
Компиляция...
qqq5.cpp
c:\documents and settings\user\мои документы\visual studio 2008\projects\qqq5\qqq5\Form1.h(86) : error C2065: HWND_BROADCAST: необъявленный идентификатор
c:\documents and settings\user\мои документы\visual studio 2008\projects\qqq5\qqq5\Form1.h(86) : error C2065: WM_SYSCOMMAND: необъявленный идентификатор
c:\documents and settings\user\мои документы\visual studio 2008\projects\qqq5\qqq5\Form1.h(86) : error C2065: SC_MONITORPOWER: необъявленный идентификатор
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(46) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "HDWP"
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(46) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(46) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(47) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "MENUTEMPLATEA"
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(47) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(47) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(54) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "LPMENUTEMPLATEA"
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(54) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(54) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(62) : error C2065: CALLBACK: необъявленный идентификатор
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(62) : error C2065: WNDPROC: необъявленный идентификатор
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(62) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\WinUser.h(62) : fatal error C1903: не удается восстановить после предыдущих ошибок; остановка компиляции
Журнал построения был сохранен в "file://c:\Documents and Settings\User\Мои документы\Visual Studio 2008\Projects\qqq5\qqq5\Debug\BuildLog.htm"
qqq5 - ошибок 16, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Проект создавал визардом. Тип - Windows Form. Никто никакие настройки не менял. Я один за этим компом работаю, кроме меня только супруга, но она никак не могла такие настройки изменить. smile Система установлена недавно, чистая, не кривая. Как установил MSVC++ по умолчанию, так сразу и начал создавать проект.

Автор: GoldFinch 6.4.2010, 20:36
жесть...


SkyHawk
создать проект -> консольное приложение -> [o] пустой проект -> добавить файл -> main.cpp
Код

#include <windows.h>

int main()
{
     SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, LPARAM(2));
}


Добавлено через 50 секунд
визарды - зло.
особенно если не понимаешь что они создают.

Автор: SkyHawk 7.4.2010, 05:12
Блин... Так значит я в визарде выбирал совсем не то, что нужно... Ну, извиняйте, ибо не знаком с MVC++, а документации нет... Щас кое-чего в электронном виде накачал... Спасибо за подсказку, буду копать дальше сам. smile

Автор: Violetgem 23.8.2022, 07:42
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)