Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.043 c
1-1083763502
denis_group
2004-05-05 17:25
2004.05.23
CheckBox ы в StringGrid .


11-1072025889
AlexCo2
2003-12-21 19:58
2004.05.23
Функция PlaySound


11-1071471133
DSP
2003-12-15 09:52
2004.05.23
перемещение курсора в 1 позицию CheckBox


3-1083127093
Lamo_xxxx
2004-04-28 08:38
2004.05.23
Как перейти к следующе из найденных по какому-либо условию записи


1-1083763083
mih
2004-05-05 17:18
2004.05.23
Работа с датами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский