Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.20;
Скачать: CL | DM;

Вниз

EnumThreadWindows   Найти похожие ветки 

 
Pasha L ©   (2005-11-02 19:49) [0]

Простите за наглость. Кто-нибудь. Объясните на примере, как пользоваться EnumThreadWindows


 
Fay ©   (2005-11-02 20:17) [1]

BOOL CALLBACK EnumProc(
   HWND hwnd,
   LPARAM lParam)
{
   // Send a WM_CLOSE to destroy the window, because DestroyWindow
   // does not work across threads.

   SendMessage(hwnd, WM_CLOSE, 0, 0);
   return TRUE;
}

BOOL ConsoleCtrlHandler(
   DWORD dwCtrlType)
{
   if (dwCtrlType == CTRL_LOGOFF_EVENT && dwGuiThreadId != 0)
   {
       SetThreadDesktop(GetThreadDesktop(dwGuiThreadId));
       EnumThreadWindows(dwGuiThreadId, EnumProc, 0);
   }
   return FALSE;
}


 
Pasha L ©   (2005-11-02 23:05) [2]

И что это вы мне написали


 
Zeqfreed ©   (2005-11-02 23:57) [3]

Pasha L ©   (02.11.05 23:05) [2]

> И что это вы мне написали

Вам написали пример использования, насколько я понимаю..

function EnumProc(wnd : HWND; lParam : Cardinal) : Boolean;
begin
Form1.Memo1.Lines.Add(IntToStr(wnd));
Result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
EnumThreadWindows(GetWindowThreadProcessId(HWND_DESKTOP), @EnumProc, 0);
end;


Вот мой вариант :)


 
Pasha L ©   (2005-11-03 00:18) [4]

Спасибо большое


 
GuAV ©   (2005-11-03 00:19) [5]

Zeqfreed ©   (02.11.05 23:57) [3]

> Вот мой вариант :)

Он, кстати, с ошибками.


 
Pasha L ©   (2005-11-03 00:42) [6]

в чем они заключаются?


 
GuAV ©   (2005-11-03 10:35) [7]

Во первых,

> BOOL CALLBACK EnumProc(


Т.е. нужно объявить эту функцию с директивой stdcall

Во вторых,

> : Boolean;

Это неверно, т.к. в оригинальном объявлении использован тип BOOL, имеющий размер 4 байта, а у Boolean - 1 байт. Ошибка скорее может проявится при возвращении значения False и то не всегда, но тем не мениее это ошибка.

При точном переводе объявление выглядит так:
function EnumProc(hwnd: HWND; lParam: LPARAM): BOOL; stdcall;

Однако я бы объявлял так:
function EnumProc(wnd: HWND; Param: LPARAM): DWORD; stdcall;
и возвращал бы 1 заместо true, 0 заместо false.
Это связано с тем, что в некоторых callback функциях идёт проверка на равенство сишному TRUE, которое равно 1, а не на любое ненулевое значение.



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

Текущий архив: 2005.11.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.026 c
2-1130413506
Kolan
2005-10-27 15:45
2005.11.20
Как пользоваться сплиттером.


3-1128650157
eJack
2005-10-07 05:55
2005.11.20
TADOQuery - заморочки


4-1126989851
NikNet
2005-09-18 00:44
2005.11.20
Запрет на выключение/перезагрузки, компьютера


9-1120200139
Pasechnick
2005-07-01 10:42
2005.11.20
GLScene и ATI


2-1130428006
Bogdan1024
2005-10-27 19:46
2005.11.20
ООПрограммирование