Написать прогу, закрывающую сообщения об ошибках
Да, можно. Это довольно просто делается на WinAPI.
Есть ли пример программы с исходником, которая делает что-нибудь с виндовыми окнами?
На чём это пишется?
У меня на компе днем и ночью крутится прога (Progress Quest). Это супер прога, но она регулярно выбрасывает безобидные сообщения об ошибке, и если их не трогать, за сутки набирается полэкрана табличек.а что за ошибки такие pq выдает?
А как?
Есть ли пример программы с исходником, которая делает что-нибудь с виндовыми окнами?
На чём это пишется?
HWND hWnd = FindWindow(NULL, "Window title");
SendMessage(hWnd, WM_CLOSE, 0, 0);
Если дашь screenshot такой ошибки, я попробую написать.
Правда, может оказаться, что с первого раза не сработает, тогда меня будет ломать допиливать эту программу.
а что за ошибки такие pq выдает?
Вот такие:
Но только после 80-го уровня, кажется.
Но только после 80-го уровня, кажется.Это чо такое?
И эта - у тебя XP или Vista?
Если дашь screenshot такой ошибки, я попробую написать.
Скриншот дал
тогда меня будет ломать допиливать эту программ
Хых, я с удовольствием допишу сам, если будет понятно, на чём писать, и какие можно использовать команды.
ты кстати напомнил. у меня в древней-мохнатой тестовой ситеме для ЛКШ был такой демон чтоб ошибки виндового довосового эмулятора прибивать. и у Макса в мегасистеме что на сборах использовалась тоже что-то такое было =)
Практически без перерывов (даже на сон) я играю в неё уже несколько лет, и меня всё больше прёт.
не хватает dll-ек от VS2005 скорее всего. Надо установить vcredist_x86.exe. Ищи в сетке.
А можно ли то же самое написать на vbs (как плюс - не будет требоваться компиляция...) ?
скорее всего можно. и на JScript тоже
autoit попробуй
+1 к autoit, скрипт для него строчки 3 наверное займет
While (1)
WinWaitActive ("Progress Quest", "Access violation at address")
ControlClick ("Progress Quest", "Access violation at address", "Button1")
WEnd
Если надо могу переписать прогу 'а как макрос в Excel или Word.
Только не AutoIT, а AutoHotkey =)
не хватает dll-ек от VS2005 скорее всего. Надо установить vcredist_x86.exe. Ищи в сетке.похоже я на 64 бита скомпилил.
Завтра вернусь домой и выложу нормальную версию.
Это покатит?
#include <Windows.h>
#include <tchar.h>
#pragma comment(linker, "/ENTRY:main")
#pragma comment(linker, "/merge:.rdata=.text")
void main(void)
{
while(1)
{
HWND hWnd = FindWindow(NULL, _T("Progress Quest";
if(hWnd) PostMessage(hWnd, WM_CLOSE, 0, 0);
Sleep(1000);
}
}
ps: и никаких, блин, библиотек. Жаль, забыл, как уменьшать размер выравнивания сегмента, а то бы размер был меньше 2К.
Не пытаться закрывать окошко раз в секунду, а при запуске написанной проги - закрывать все окошки.
По моему задачу надо решать с другого концаПредлагаешь запускать из батника циклически?
Думаю "регулярно выбрасывает окошки" - это, скорее всего, гораздо реже чем раз в секунду. Хотя да, там следовало сделать ещё один цикл, но думаю, обойдётся и без этого. Имхо, если ошибки идут слишком часто, значит что-то не то.
Ну, в общем, ладно. Вот другая версия:
12c12
< Sleep(1000);
---
> else break;
или там с фокусом ввода совсем жестко обходятся?
можно увлечься и будут лишние (вероятно - нежелательные) нажатия
В быстрый запуск повесить ярлык на эту прогу - пусть автор ее сам запускает, когда много окошек надо закрыть.
второй вариант так и делает
HWND hWnd = FindWindow(NULL, "Window title");Блин, а в никсоконсольных достаточно 2>/dev/null...
SendMessage(hWnd, WM_CLOSE, 0, 0);
Блин, а в никсоконсольных достаточно 2>/dev/null...Этого достаточно в любых консольных, не только в никсоконсольных
Блин, а в никсоконсольных достаточно 2>/dev/null...это если программа удовлетворяет правилам хорошего тона, а если не удовлетворяет - то пытаться выловить сообщения об ошибках из потока вывода
оконная прога по правилам хорошего тона тоже должна ошибки сливать в отдельное окно(например в нижний combo а не открывать messageBox-ы на каждую ошибку.
Ч0-то я не уверен, что винда такое поймет, если на нее *sh не ставить.
> nil
Хотя да, короче.
> nil2>nul
ЗЫ
пошлый какой-то редирект получился =)
а 3<xxx он поймёт?что за третий поток?
Единственный минус - он закрывает основную программу тоже.
Нет ли способа это изменить?
Да зачем ждать?
Это покатит?#include <Windows.h>
#include <tchar.h>
#pragma comment(linker, "/ENTRY:main")
#pragma comment(linker, "/merge:.rdata=.text")
void main(void)
{
while(1)
{
HWND hWnd = FindWindow(NULL, _T("Progress Quest";
if(hWnd) PostMessage(hWnd, WM_CLOSE, 0, 0);
Sleep(1000);
}
}
ps: и никаких, блин, библиотек. Жаль, забыл, как уменьшать размер выравнивания сегмента, а то бы размер был меньше 2К.
Единственный минус - он закрывает основную программу тоже.я ждал этого
Нет ли способа это изменить?
вообще такие окна закрываются не ентером а эскейпом
тоесть утром достаточно зажать кнопку эскейп, а это гораздо безопаснее чем зажать ентер
ну и автоит (автохоткей или как там) тебе уже предложили
это афигенное решение
а главное многоразовое, научишься пользоваться ентой клевой тулзой будешь пользоваться ею и опосля
Прога клёвая, спасибо за совет )
Такое не работает
Хотя я попробую разобраться.
4 что-то вроде:
--------------------------------------------------------------------------------
While (1)
WinWaitActive ("Progress Quest", "Access violation at address")
ControlClick ("Progress Quest", "Access violation at address", "Button1")
WEnd
просто автоматическое закрытие окошек - это прикольно
#include <Windows.h>Если всё-равно будет закрывать, будем ограничивать более жёстко.
#include <tchar.h>
#pragma comment(linker, "/ENTRY:main")
#pragma comment(linker, "/merge:.rdata=.text")
void main(void)
{
// wchar_t t[256];
// GlobalGetAtomName(32770, t, 256);
while(1)
{
HWND hWnd = FindWindow(NULL, _T("Progress Quest";
if(hWnd)
{
if (GetWindowLong(hWnd, GWL_STYLE)&WS_POPUP)
PostMessage(hWnd, WM_CLOSE, 0, 0);
}
else break;
}
}
While (1)
WinWait ("Progress Quest", "Access violation at address")
ControlClick ("Progress Quest", "Access violation at address", "Button1")
WEnd
Супер тема - компилится в exe-шник, висит в трее (! ресурсов практически не жрёт, закрывает сообщения сразу, как только они появляются.
Прога на С тоже очень порадовала, т.к. с ней можно делать всё, что угодно, и места и ресурсов она ещё меньше жрёт.
Собственно, всем бААльшое спасибо )
Оставить комментарий
glare
Уважаемые отцы!У меня на компе днем и ночью крутится прога (Progress Quest). Это супер прога, но она регулярно выбрасывает безобидные сообщения об ошибке, и если их не трогать, за сутки набирается полэкрана табличек.
Не то, чтобы это меня сильно беспокоило, но всё-таки, можно ли написать какой-нибудь виндовый скрипт, или просто независимую программу, которая которая будет такие сообщения сразу закрывать?