Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.05.2016, 16:15
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию EmumWindows В потоке?

Снова я и снова вопрос. Есть поток, который ищет окна класса Х и если их находит, то пишет Rect, hwnd, и кол-во этих окон:
Код:
 function EnumWindowsProc(h: HWND; lParam: LPARAM): Boolean; stdcall;
var
  CN: array [0..1023] of Char;
  I: Integer;
  WndRect :TRect;
begin

  Result := True;
  i:=1;

  GetClassName(h, @CN, 1024);
if CN='х' then
begin
MyRec.table[i].HWND:=h;
GetWindowRect(h, WndRect)     ;
MyRaec.table[i].HRect:= WndRect;
myrec.max:=i;
 inc (i);
end else 


Структура Myrec
Код:
      type

  Myrec= record
  HWND: HWND;
  HRect: TRect;
  end;
  type
  PMyrec= record
  table : array [1..12] of Myrec;
  max: Integer;
  end;
Поток
Код:
  type
   TWaitTable = class(TThread)
  private
  x:Integer;
  y:Integer;
  tab: MyRec;
  pab:Pmyrec;
  className:string;
  fibish:Boolean;
    { Private declarations }
  protected
    procedure Execute; override;
    procedure finished;
    procedure ishud;
  end;
Вызов:
Код:
procedure TWaitTable.Execute;
  var
  i: Integer;
  begin
  while not Terminated do
  begin
    Myrec.max:=0;
      EnumWindows (@EnumWindowsProc,0);
      if Myrec.max>0 then
      begin
      pab:=myrec;
        for i := 1 to pab.max do
          begin
          tab:=pab.table[i];
      ;     Synchronize(ishud);


          end;
      end;
  end;
  end;
procedure TWaitTable.ishud;
  var
  tobLeft: TPoint;
  aName: array [0..255] of Char;
  shud,shud2: string;
  hw: HWND;
  begin
   tobLeft.x:=Tab.HRect.left;
   tobLeft.Y:=tab.HRect.Top;
   tobLeft:=tobLeft+ ROP;
В итоге HRect не равен ректу окна. в чем напутал?

Последний раз редактировалось nixon232, 08.05.2016 в 16:25.
Ответить с цитированием
  #2  
Старый 10.05.2016, 14:15
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Что форум совсем глючит, пропадают сообщения.
Решил вот так, не знаю как это на что-то влияет, но не суть
Код:
----
for i := 1 to pab.max do
          begin

          tab:=pab.table[i];
          y:=tab.HRect.Top;
          x:=tab.HRect.Left;
---
возникла новая странность: мне нужно чтобы процедура выполнялась если не нажат любой из модификатор. По кнопке оно работает, а в потоке всегда возвращает True;
Код:
 function CanClick: Boolean;
  var State:TKeyboardState;
  begin
  Result:=False;
    GetKeyboardState(State);
  Result := not(((State[vk_Control] and 128) <> 0) or
      ((State[VK_SHIFT] and 128) <> 0) or
      ((State[VK_MENU] and 128) <> 0))
  end;
fibish:=false;
fibish:=CanClick;
         if fibish then
         begin
           HudKB(p,tab.HWND);
           sleepex(2000, true);
         end;
Я не понимаю, почему всегда True? и что делать? запускать CanClick в отдельно потоке?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter