Следующая программа выключает монитор. Он иногда падает, когда я его запускаю, а иногда нет. Разборка просто указывает на случайное место, такое как 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%.
Редактировать 1:
Если кто-то действительно воспроизводит это, пожалуйста, оставьте комментарий и дайте мне знать, мне любопытно, могут ли другие воспроизвести это.
В настоящее время я сам тестирую более урезанную версию (которая не зависит от времени выполнения C):
#include <Windows.h>
#pragma comment(linker, "/NoDefaultLib")
#pragma comment(linker, "/Entry:mainCRTStartup")
#pragma comment(linker, "/Subsystem:Windows")
int mainCRTStartup()
{
return SendMessageW(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
}
/*
Base64 version of this program, in case you want to use it:
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAABkN3fRfGzjEXxs4xF8bOMhv7ujEbxs4xF8bKMRPGzjIb+0IxE8bOMhv7pjETxs4xSaWNoRfGzjAAAAAAAAAAAUEUAAEwBAQBYIgROAAAAAAAAAADgAA8BCwEHCgACAAAAAAAAAAAAAAgQAAAAEAAAACAAAAAAQAAAEAAAAAIAAAQAAAAAAAAABAAAAAAAAAAAIAAAAAIAAAAAAAACAAAEAAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAAAoEAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAudGV4dAAAAHQAAAAAEAAAAAIAAAACAAAAAAAAAAAAAAAAAAAgAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYEAAAAAAAAGoCaHDxAABoEgEAAGj//wAA/xUAEEAA99gbwPfYw8zMUBAAAAAAAAAAAAAAaBAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgQAAAAAAAAQgJTZW5kTWVzc2FnZVcAAFVTRVIzMi5kbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
*/
В настоящее время эта версия работает ... но опять же, как и предыдущая, когда я перекомпилирую ее. Если выяснится, что этот не даст сбой, я выложу его здесь.
Если вы хотите воспроизвести это, вот мое предложение: скомпилируйте программу, дайте ей мариноваться в течение дня или двух. :) Когда вы какое-то время пользовались компьютером, попробуйте запустить программу пару раз ... когда я пытаюсь это сделать, я обычно получаю сообщение об ошибке, пока я не перекомпилирую программу заново.
Редактировать 2:
Почему-то, когда вы хотите показать людям проблему, она волшебным образом решается. То же самое и здесь. Я буду продолжать пытаться воспроизвести ошибку, но на данный момент она работает нормально. : \ (У меня есть подозрение, что это может быть из-за установки Windows 7 SP1, но я действительно сомневаюсь в этом ... если я узнаю, я опубликую здесь.)
Извините за это всех ...
Редактировать 3:
Хорошо ... как это происходит, когда вам нужно воспроизвести ошибку, вы не можете. : |
Однако, по крайней мере, я нашел кое-что еще: кажется, что правильное окно для отправки сообщения - это окно, возвращаемое GetShellWindow()
. Надеюсь, это будет полезно для кого-то еще.