Форум: "Система";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
ВнизНужно найти и показать окно. Запуск через планировщик при старте. Найти похожие ветки
← →
LexaTyukha (2004-04-07 12:03) [0]Добрый день!
Исходная ситуация: Есть приложение состоящее из главной формы и двух потоков.
У Application"а -
Application.Initialize;
ExtendedStyle:=GetWindowLong(application.Handle,GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE,ExtendedStyle or WS_EX_TOOLWINDOW);
Application.Title := "XChange";
Application.CreateForm(TfmMain, fmMain);
Application.Run;
(это сделано что б спрятать приложение из TaskBar"a)
При старте приложения сразу же вызываетсяShowWindow(fmMain.Handle,SW_HIDE);
Второе приложение должно находить первое приложение и уметь показывать, прятать и закрывать его (своеобразный менеджер приложений) что выполняется следующими командами:
ShowWindow(SelWindow,SW_HIDE);
ShowWindow(SelWindow,SW_RESTORE);
PostMessage(SelWindow,WM_CLOSE,0,0);
SelWindow:HWND устанавливается после такой процедуры:
EnumWindows(@ParentTree, 0);
ParentTree строит список окон с их хэндалми.
Все это работает и функция
hndl:=FindWindow("TfmMain","XChangeMainWindow");
возвращает хэндл с которым можно работать.
Проблема начинается когда первое приложение запускается планировщиком Windows по расписанию "При включении компьютера", т.е. до того как юзер залогинится. Потоки работают, но после того как юзер залогинится
EnumWindows(@ParentTree, 0);
как и
hndl:=FindWindow("TfmMain","XChangeMainWindow");
не находят окно первого приложения. В процессах видно первое приложение как XChange.exe.
Вопрос: почему так происходит? Потоки запускаются в OnCreate формы, т.е. после создания ее (OldCreationOrder=false). Значит окно создается. Почему же его нельзя найти? XChange.exe запущен от имени локального юзера, под которым и логинется пользователь.
Ну и собственно, какой выход из этой ситуевины видите Вы?
Огромное спасибо за Ваши ответы и предложения!
← →
LexaTyukha (2004-04-09 11:48) [1]Еще я заметил что первая программа стартует под svchost.exe ...
← →
Игорь Шевченко © (2004-04-09 13:39) [2]
> Еще я заметил что первая программа стартует под svchost.exe
> ...
И ее окно вполне может быть на другом Desktop"е
← →
LexaTyukha (2004-04-09 14:44) [3]И никак оттуда ее перевести в текущий нельзя?
А что, при старте системы(до логина) создается некий Desktop?
← →
Игорь Шевченко © (2004-04-09 21:21) [4]LexaTyukha (09.04.04 14:44)
А окно программы, запускаемой из-под планировщика, показывается, если его не прятать ? Насколька я понимаю, это же твоя программа?
← →
LexaTyukha (2004-04-14 13:41) [5]Программа моя. Если не прятать тоже не показывается...
← →
Игорь Шевченко © (2004-04-14 14:27) [6]LexaTyukha (14.04.04 13:41)
В планировщике волшебное слово Interactive попробуй сказать.
← →
LexaTyukha (2004-04-15 10:07) [7]Что-то я посмотрел опции планировщика и не нашел сего волшебного слова. Есть похожая опция в управлении службами. Но это ж совсем другое... Может я не там смотрю? Объясните пожалуйста! (WinXP, Win2K).
← →
Игорь Шевченко © (2004-04-15 14:11) [8]at time /Interactive command
/Interactive - allows job to interact with desktop of the user who is logged on at the time the job runs.
← →
LexaTyukha (2004-04-16 10:20) [9]Ясно. Спасибо! Но это немного не то... Дело в том что мне нужно запустить программу при включении компа. Т.е. к примеру ночью комп перегрузился (посадка напряжения), юзер естественно залогинится только утром, а программа должна работать все время. В назначенных заданиях такой параметр указать можно, а в команде АТ - нельзя... А если создать задачу коммандой АТ, а потом отредактировать в папке назначенных заданий она(задача) пропадает из списка задач команды АТ...
← →
Игорь Шевченко © (2004-04-16 21:02) [10]
> Дело в том что мне нужно запустить программу при включении
> компа.
Может, ее просто в автозагрузку поставить ?
← →
LexaTyukha (2004-04-19 10:57) [11]
> Может, ее просто в автозагрузку поставить ?
До логина пользователя запускаться должна...
Я пробовал еще запускать ее как сервис с помощью srvany. Такой подход отвечает требованиям, но... При остановке сервиса система просто срубает задачу, не дожидаясь остановки потоков. А они в это время могут выполнять некую работу...
← →
BiN © (2004-04-19 11:04) [12]>> LexaTyukha
Программа моя...
Я пробовал еще запускать ее как сервис с помощью srvany
Ответ прост: пиши свой сервис.
← →
LexaTyukha (2004-04-19 12:02) [13]
> Ответ прост: пиши свой сервис
Похоже да...
А по поводу "создается на другом дэсктопе". Можно ли как-то ее(программу) вытянуть в текущий?
← →
BiN © (2004-04-19 12:27) [14].. Можно ли как-то ее(программу) вытянуть в текущий (десктоп)?
Да, ты можешь указать режим взаимодействия сервиса с рабочим столом.
Если будешь писать только на API, то читай про ChangeServiceConfig. Иначе при использовании TService смотри свойство Interactive.
Но imho лучше избегай использование интефейсных элементов в сервисах.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c