Следующая программа отключает монитор. Он иногда дает сбой, когда я запускаю его, а иногда нет. Дизассемблирование просто указывает на случайное место, например 0x00011000
, и не имеет никакой реальной информации.
Если я перекомпилирую программу и запускаю ее, перекомпилированная версия будет работать нормально, пока я ее тестирую. Но в следующий раз, когда мне действительно понадобится его использовать, он снова выйдет из строя, и мне нужно будет его перекомпилировать ... что в первую очередь заставит меня пожалеть об этом.
Я понятия не имею, как постоянно воспроизвести ошибку. (То есть кроме запуска, когда он мне очень нужен, и наблюдения за его аварийным завершением.)
#include <Windows.h>
#include <tchar.h>
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
return SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
}
Я использую Windows 7 x64 и компилирую его как 32-битная программа. Думаю, я пробовал то же самое с 64-битной версией и получил тот же результат, хотя я не уверен на 100%.
Если кто-то действительно воспроизводит это, пожалуйста, оставьте комментарий и позвольте мне знаете, мне любопытно, могут ли другие воспроизвести это.
В настоящее время я сам тестирую немного более урезанную версию (которая не зависит от среды выполнения C):
#include
#pragma comment (компоновщик, "/ NoDefaultLib")
#pragma comment (компоновщик, "/ Entry: mainCRTStartup")
#pragma comment (компоновщик, "/ Подсистема: Windows")
int mainCRTStartup ()
{
вернуть SendMessageW (HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
}
/ *
Версия этой программы в формате Base64, если вы хотите ее использовать:
TVqQAAMAAAAEAAAA // 8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAABkN3fRfGzjEXxs4xF8bOMhv7ujEbxs4xF8bKMRPGzjIb + 0IxE8bOMhv7pjETxs4xSaWNoRfGzjAAAAAAAAAAAUEUAAEwBAQBYIgROAAAAAAAAAADgAA8BCwEHCgACAAAAAAAAAAAAAAgQAAAAEAAAACAAAAAAQAAAEAAAAAIAAAQAAAAAAAAABAAAAAAAAAAAIAAAAAIAAAAAAAACAAAEAAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAAoEAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAHQAAAAAEAAAAAIAAAACAAAAAAAAAAAAAAAAAAAgAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYEAAAAAAAAGoCaHDxAABoEgEAAGj // WAA / xUAEEAA99gbwPfYw8zMUBAAAAAAAAAAAAAAaBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgQAAAAAAAAQgJTZW5kTWVzc2FnZVcAAFVTRVIzMi5kbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ==
* /
В настоящее время эта версия работает ... но опять же, как и предыдущая, когда я ее перекомпилирую. Если выяснится, что эта не сработает, я опубликую здесь.
Если вы хотите воспроизвести это, вот мое предложение: скомпилируйте программу, дайте ей мариноваться в течение дня или двух. :) Если вы какое-то время пользуетесь компьютером, попробуйте запустить программу несколько раз ... когда я это пробую, я обычно получаю сообщение об ошибке, пока я не перекомпилирую программу заново.
По какой-то причине, когда вы хотите показать людям проблему, она волшебным образом решается. То же самое и здесь. Я буду продолжать попытки воспроизвести ошибку, но на данный момент, похоже, все работает нормально. : \ (У меня есть подозрение, что это могло быть из-за установки Windows 7 SP1, но я действительно сомневаюсь в этом ... если узнаю, я напишу здесь.)
Извините за это все ...
Хорошо ... как оказалось, когда вам нужно воспроизвести ошибку, вы не можете. : |
Однако, по крайней мере, я нашел кое-что еще: кажется, что правильное окно для отправки сообщения - это окно, возвращаемое GetShellWindow ()
. Надеюсь, это будет полезно для кого-то другого.