Возникла необходимость заюзать winapi-шную функцию в приложении Windows Forms на C++
Я потратил около шести часов, чтобы найти решение, потому что просто так написать
1 |
SendMessage(Handle, WM_CLOSE, 0, 0); |
не достаточно. А интуицией догадаться может только экстрасенс.
Короче. В файл stdafx.h после тудушечки добавляем инклюд:
1 2 |
// TODO: Установите здесь ссылки на дополнительные заголовки... #include "windows.h" |
В свойствах проекта идем в Свойства конфигурации — Компоновщик — Ввод, щелкаем по свойству Дополнительные зависимости (у правильных пацанов это называется Linker — Input — Additional dependencies) и выбираем из раскрывающегося списка <наследовать от родителя или от свойств проекта по умолчанию>. Возможно, придется выбрать пункт <Изменить...> и поставить там галку:
И только теперь мы можем вызывать тот же SendMessage()
, но с обязательными предшествующими двойными двоеточиями и преобразованием численного значения указателя к структуре HWND. Вот так:
1 |
::SendMessage((HWND)this->Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2); |
Ура! И главное совершенно очевидно, особенно с настройкой проекта.