Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

Скрытое приложение   Найти похожие ветки 

 
Master_Of_Puppets   (2006-10-01 23:18) [0]

Мне надо написать приложение, не имеющее окна (тоесть, состоящее только из процесса). Проблема в том, что надо через определенный промежутки времени (допустим раз в секунду)передавать управление некоторому коду внутри моей проги. Как показал личный опыт, процесс вообще не перехватывает сообщения системы (WM_TIMER, WM_CREATE и т.д.). Если кто знает, как можно организовать правильную работу этой программы или есть ссылки, напишите мне пожалуйста на е-маил: aquafrog@rambler.ru.
P.S. Поиск в И-нете не принес никакого результата, хотя может я просто криво искал. :(


 
Джо ©   (2006-10-01 23:30) [1]

Функция SetTimer позволяет задать callback-function для выполнения, а не только "подписаться" на рассылку сообщений для функции окна. Это раз. И второе — вполне нормальной практикой является создание невидимого окна.


 
Ketmar ©   (2006-10-01 23:32) [2]

>[1] Джо(c) 1-Oct-2006, 23:30
>Функция SetTimer позволяет задать
>callback-function для выполнения
но пока не будешь делать GetMessage() -- callback"и вызываться не будут. точнее, не GetMessage(), а DispatchMessage(), afair. о чём, кстати, написано в справке, кажись.

более того: вообще не рекомендуется делать приложения без окон. хотя бы потому что они не смогут отреагировать на завершение сеанса или вообще работы. и будут появляться нудные окошки с просьбой прибить процесс.


 
guav ©   (2006-10-01 23:37) [3]

Таймер может даже не иметь ни окна ни callback-function . Для его работы необходим только цикл выборки сообщений. Это про обычный а не мультимедийный таймер. Мультимедийному даже этого цикла не нужно, он в своём потоке работает.


 
Master_Of_Puppets   (2006-10-02 00:05) [4]

Спасибо, вроде чуточку яснее стало... Но вот незадача - я Делфи не очень хорошо знаю (пять лет ДОСовского Паскаля слабо помагают) - какие параметры функции SetTimer?


 
Джо ©   (2006-10-02 00:12) [5]

> какие параметры функции SetTimer?

Удерживая Ctrl щелкаешь на SetTimer в твоем исходном коде и — вуаля! — переносишься на его описание в модуле Windows.pas.


 
Master_Of_Puppets   (2006-10-02 00:22) [6]

Мм... Я MSDN тогда полистаю...хотя в английском ни бум-бум... :( Корочее, надо только задать функцию - обработчик события ТАЙМЕР (которое я создаю)... Сейчас покодю...попробую


 
Ketmar ©   (2006-10-02 00:58) [7]

>[6] Master_Of_Puppets 2-Oct-2006, 00:22
>ни бум-бум... :( Корочее, надо только задать
>функцию - обработчик события ТАЙМЕР (которое я
[2] и [3] курил внимательно?


 
Германн ©   (2006-10-02 02:43) [8]


> Master_Of_Puppets   (02.10.06 00:05) [4]
>
> Спасибо, вроде чуточку яснее стало... Но вот незадача -
> я Делфи не очень хорошо знаю (пять лет ДОСовского Паскаля
> слабо помагают) - какие параметры функции SetTimer?
>

Имхо, эти пять лет ты:
 1. пил пиво
 2. гулял с девками
 3. курил травку
 4. спал "беспробудно"

и где-то рядом был ДОСовский Паскаль. А ты его и не замечал! :-)


 
Германн ©   (2006-10-02 03:03) [9]

2 Master_Of_Puppets   (01.10.06 23:18)
Поясни твою задачу на более простом "вербальном" уровне!
Забудь на секунду об "окнах" и "процессах".


 
@!!ex ©   (2006-10-02 06:53) [10]

The SetTimer function creates a timer with the specified time-out value.

UINT SetTimer(

   HWND hWnd, // handle of window for timer messages
   UINT nIDEvent, // timer identifier
   UINT uElapse, // time-out value
   TIMERPROC lpTimerFunc  // address of timer procedure
  );


Parameters

hWnd

Identifies the window to be associated with the timer. This window must be owned by the calling thread. If this parameter is NULL, no window is associated with the timer and the nIDEvent parameter is ignored.

nIDEvent

Specifies a nonzero timer identifier. If the hWnd parameter is NULL, this parameter is ignored.

uElapse

Specifies the time-out value, in milliseconds.

lpTimerFunc

Points to the function to be notified when the time-out value elapses. For more information about the function, see TimerProc.
If lpTimerFunc is NULL, the system posts a WM_TIMER message to the application queue. The hwnd member of the message"s MSG structure contains the value of the hWnd parameter.


 
@!!ex ©   (2006-10-02 06:53) [11]

Вопрос: как можно быть в английском "ни бум бум" если типа программированием занимаешся? Разве что на лого "порграммировать"...


 
Ketmar ©   (2006-10-02 14:14) [12]

>[11] @!!ex(c) 2-Oct-2006, 06:53
>что на лого "порграммировать"...
кстати не надо, не надо. полный LOGO -- весьма весёлый язык. и на нём можно далеко не только возить "черепашку". %-)


 
Master_Of_Puppets   (2006-10-02 18:59) [13]

Я решил переписать с Делфи на С++ (там остальной код в основном на Си). У меня получилось вот что:

UINT_PTR itimer;
MSG msg;

TIMERPROC MyTimer()
{
MessageBox(NULL, "Interruct", "My Timer", MB_OK);
return 0;
}

int WINAPI WinMain(HINSTANCE histance, HINSTANCE hpreinstance, LPSTR lpcmdline, int ncmdshow)
{
itimer = SetTimer(NULL, NULL, 5000, MyTimer());
while(GetMessage(&msg, NULL, 0, 0))
{
 DispatchMessage(&msg);
}
}

Но оно выводит МессагБокс тока раз (а должно по ходу раз в 5 сек). Я чувствую, что ошибка где-то в цикле...Подскажите, пожалуйста, в чем дело... :(



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.059 c
2-1159459935
UnrealDima
2006-09-28 20:12
2006.10.22
Экспорт данных из Excel в Word


15-1159179702
wl
2006-09-25 14:21
2006.10.22
глюки форума?


3-1155732451
BBCHa
2006-08-16 16:47
2006.10.22
Экспорт в Excel


15-1159686860
Kerk
2006-10-01 11:14
2006.10.22
Олигархи


15-1159780325
DelphiLexx
2006-10-02 13:12
2006.10.22
Помогите с названием программы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский