Почему эта программа иногда дает сбой, а иногда нет?

Следующая программа отключает монитор. Он иногда дает сбой, когда я запускаю его, а иногда нет. Дизассемблирование просто указывает на случайное место, например 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 
     #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 ==
     * /
     

    В настоящее время эта версия работает ... но опять же, как и предыдущая, когда я ее перекомпилирую. Если выяснится, что эта не сработает, я опубликую здесь.

  • Если вы хотите воспроизвести это, вот мое предложение: скомпилируйте программу, дайте ей мариноваться в течение дня или двух. :) Если вы какое-то время пользуетесь компьютером, попробуйте запустить программу несколько раз ... когда я это пробую, я обычно получаю сообщение об ошибке, пока я не перекомпилирую программу заново.


Редактировать 2:

По какой-то причине, когда вы хотите показать людям проблему, она волшебным образом решается. То же самое и здесь. Я буду продолжать попытки воспроизвести ошибку, но на данный момент, похоже, все работает нормально. : \ (У меня есть подозрение, что это могло быть из-за установки Windows 7 SP1, но я действительно сомневаюсь в этом ... если узнаю, я напишу здесь.)

Извините за это все ...


Редактировать 3:

Хорошо ... как оказалось, когда вам нужно воспроизвести ошибку, вы не можете. : |

Однако, по крайней мере, я нашел кое-что еще: кажется, что правильное окно для отправки сообщения - это окно, возвращаемое GetShellWindow () . Надеюсь, это будет полезно для кого-то другого.

6
задан Joshua 17 August 2019 в 17:14
поделиться