Alker Опубликовано 5 ноября, 2012 Жалоба Поделиться Опубликовано 5 ноября, 2012 После прерывания процесса программы батником, в трее (в области уведомлений) остается висеть "фантомная" иконка.Можно ли перезапустить только панель задач - системный лоток или требуется кардинальный способ, перезагрузка проводника: taskkill /f /im explorer.exe && explorer.exe чтобы убрать значок программы?Как это можно сделать незаметно. Читал, что можно с эмулировать проведение стрелкой мышки по данной области. Но как это сделать?Вот нарыл код, как из него сделать исполнительный файл? Wnd dd ? uID dd ?EXTRADATA ends.data? IconsCount dd ? hProcess dd ? hTaskbar dd ? hToolbar dd ? pData dd ? ProcessId dd ? button TBBUTTON <> extra EXTRADATA <>.codestart: push 'd' push 'nWya' push 'rT_l' push 'lehS' mov ecx,esp push NULL push ecx call FindWindow pop ecx pop ecx pop ecx pop ecx mov hTaskbar,eax push GW_CHILD push eax call GetWindow push GW_HWNDNEXT push eax call GetWindow push GW_CHILD push eax call GetWindow push GW_HWNDNEXT push eax call GetWindow push GW_CHILD push eax call GetWindow mov hToolbar,eax push 0 push 0 push TB_BUTTONCOUNT push eax call SendMessage test eax,eax jz @e mov IconsCount,eax push offset ProcessId push hToolbar call GetWindowThreadProcessId push ProcessId push FALSE push PROCESS_ALL_ACCESS call OpenProcess mov hProcess,eax push PAGE_READWRITE push MEM_COMMIT push sizeof button push NULL push eax call VirtualAllocEx mov pData,eax@l: dec IconsCount push pData push IconsCount push TB_GETBUTTON push hToolbar call SendMessage push NULL push sizeof button push offset button push pData push hProcess call ReadProcessMemory push NULL push sizeof extra push offset extra push button.dwData push hProcess call ReadProcessMemory mov eax,extra.uID test eax,80000000h jnz @f push extra.Wnd call IsWindow test eax,eax jnz @f push 0 push IconsCount push TB_DELETEBUTTON push hToolbar call SendMessage push 0 push 0 push WM_SETTINGCHANGE push hTaskbar call SendMessage@@: cmp IconsCount,0 ja @l push MEM_RELEASE push 0 push pData push hProcess call VirtualFreeEx push hProcess call CloseHandle@e: push NULL call ExitProcessend startEXTRADATA structhttp://www.wasm.ru/forum/viewtopic.php?pid=454132#p454132 Ссылка на комментарий
D_Master Опубликовано 5 ноября, 2012 Жалоба Поделиться Опубликовано 5 ноября, 2012 Можно с помощью AutoIt.В архиве скомпиленное приложение, которое рефрешит трей + батник.@echo offtaskkill /f /im App.exeecho Refreshing System Traystart /wait _RefreshSystemTray.exe Ссылка на комментарий
Alker Опубликовано 5 ноября, 2012 Автор Жалоба Поделиться Опубликовано 5 ноября, 2012 D_MasterБлагодарю!Все отлично работает!PS: Вырезал из _RefreshSystemTray.exe меню, чтобы уж и значка AutoIt в системном лотке не было видно. Ссылка на комментарий
Alker Опубликовано 7 ноября, 2012 Автор Жалоба Поделиться Опубликовано 7 ноября, 2012 D_MasterВот возник вопрос с добавлением задания в планировщик заданий.1. Добавил задание с помощью командного файла:schtasks /delete /tn "AM" /fschtasks /create /sc DAILY /mo 1 /st 00:00:00 /tn "AM" /tr "\"%~dp0AM.bat"\" /ru system@echo offВсе отлично добавилось и путь к батнику: C:\Program Files (x86)\AM\AM.bat2. Содержимое батника:taskkill /f /im 123.exeecho Refreshing System Traystart /wait _RefreshSystemTray.exe@echo offПолучается, что задание отлично добавляется и запускается как запланировано, но процесс почему-то весит. Как будто бы программу что-то блокирует или не хватает прав. Пробовал отключать KIS2012, но результат тот же.Если папку с файлом расположить не в C:\Program Files (x86), то программа выполняется успешно.Может в коде можно что-то изменить?ОС: W7 x64Спасибо за ответ. Ссылка на комментарий
Alker Опубликовано 30 января, 2013 Автор Жалоба Поделиться Опубликовано 30 января, 2013 1. Для того чтобы выгрузить программу из трея и при этом убрать фантомную иконку, можно так же использовать исполняемый файл nircmd.exe.Напр.:@echo offnircmd.exe closeprocess 123.exenircmd.exe waitprocess 123.exeExit При перезапуске программы старая иконка не остается.2. Что касается вопроса связанного с добавлением задания в планировщик заданий.http://ulanovka.ru/forum/viewtopic.php?p=3316015#3316015Решение:Скомпилировать батник в exe с помощью напр. Bat To Exe Converter.Было так:schtasks /delete /tn "AM" /fschtasks /create /sc DAILY /mo 1 /st 00:00:00 /tn "AM" /tr "\"%~dp0AM[b].bat[/b]"\" /ru systemexit@echo offЧтобы все запускалось, нужно так:schtasks /delete /tn "AM" /fschtasks /create /sc DAILY /mo 1 /st 00:00:00 /tn "AM" /tr "\"%~dp0AM[b].exe[/b]"\" /ru systemexit@echo off Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти