Текущий архив: 2005.11.13;
Скачать: CL | DM;
Вниз
Как зациклить приложение без окна Найти похожие ветки
← →
Хинт © (2005-10-26 20:23) [0]В проекте только один файл DPR (отсутствуют формы). Делаю SetWindowsHookEx на WH_KEYBOARD_LL, а потом необходимо зациклить приложение (проверять одно единственное условие и если true - exit).
Делал просто:while true do
begin
if ... then exit;
sleep(100);
end;
И таким образом ввод с клавиатуры стал довольно сильно тормозить (задержка около 300мс). В чем дело? Как можно избежать подобного?
← →
Боян Георгиев (2005-10-26 20:28) [1]Попробуй с Application.ProcessMessages
← →
Хинт © (2005-10-26 20:56) [2]Где ты тут видишь Application?
← →
Anatoly Podgoretsky © (2005-10-26 20:57) [3]sleep(10);
← →
Хинт © (2005-10-26 21:03) [4]И sleep(10) тоже делал - не помогает. И вообще без слипов - тоже самое.
← →
Джо © (2005-10-26 21:51) [5]Ну, тогда может рациональнее сделать вручную костяк windows-приложения с невидимым окном и обрабатывать все сообщения явно? В таком роде:
program Project1;
uses
Windows, Messages;
function WndProc(Wnd : HWND; message : UINT; wParam : Integer; lParam: Integer) : Integer; stdcall;
var
Handle: HDC;
ps: PAINTSTRUCT;
begin
case message of
WM_PAINT:
begin
Handle := BeginPaint(Wnd, ps);
EndPaint(Wnd, ps);
result := 0;
end;
WM_DESTROY:
begin
PostQuitMessage(0);
result := 0;
end;
else
result := DefWindowProc(Wnd, message, wParam, lParam);
end;
end;
var
hWnd : THandle;
Msg : TMsg;
wndClass : TWndClass;
begin
wndClass.style := CS_HREDRAW or CS_VREDRAW;
wndClass.lpfnWndProc := @WndProc;
wndClass.cbClsExtra := 0;
wndClass.cbWndExtra := 0;
wndClass.hInstance := hInstance;
wndClass.hIcon := LoadIcon(0, IDI_APPLICATION);
wndClass.hCursor := LoadCursor(0, IDC_ARROW);
wndClass.hbrBackground := HBRUSH(GetStockObject(WHITE_BRUSH));
wndClass.lpszMenuName := nil;
wndClass.lpszClassName := "Invisible_Window";
RegisterClass(wndClass);
hWnd := CreateWindow(
"Invisible_Window",
"Invisible Window",
WS_OVERLAPPEDWINDOW,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0,
0,
hInstance,
nil);
//ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end.
Или я не так понял задачу?
← →
Хинт © (2005-10-26 22:17) [6]2Джо
Спасибо большое. Так все работает как надо.
Страницы: 1 вся ветка
Текущий архив: 2005.11.13;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.045 c