Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Не выполняется условие


Автор: Ragnarek 10.12.2010, 08:39
Код

library hook_1;
uses
  Windows,
  Messages,
  Sysutils,
  Forms;
var
  SysHook : HHook = 0;
  Wnd : Hwnd = 0;
  app: HWND;

  d5:HWND;
  t:string;


function childwindows(handl:HWND):bool; stdcall;
var
chilhandle:HWND;
begin
chilhandle:=FindWindowEx(handl,0,nil,'1248');  //ищем поле с именем 1248
if chilhandle<>0 then
begin
  d5:=chilhandle;      //присваиваем глобальной переменной хэндл поля
  result:=false;
  end;
  if chilhandle=0 then exit;
 end;


function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
var
     f:TextFile;
     cursor:tpoint;
     hand:hwnd;
     reload:HWND;
    addd:HWND;
    start:bool;
    exitt:hwnd;
     begin
  if code = HC_ACTION then
    begin
      if TMsg(Pointer(lParam)^).message = WM_LBUTTONDOWN then    //нажимается левая кнопка
        begin
          app:=GetForegroundWindow();       //хэндл активного окна
          reload:=FindWindowEx(app,0,nil,'Обновить') ;  //хэндл кнопки Обновить
          addd:=FindWindowEx(app,0,nil,'Добавить');   //хэндл кнопки
          exitt:=FindWindowEx(app,0,nil,'Выход');   //хэндл кнопки
          getcursorpos(cursor);                    //получаем положение курсора
          hand:=WindowFromPoint(cursor);          //хэндл объекта под курсором
          if (reload<>0) and (reload=hand)and(start=false)  then //если нажата кнопка
          begin
          EnumChildWindows(app, @childwindows,0); //функция
          start:=true;
          end;
          if (addd=hand) then   //если нажата кнопка добавить
          begin
          SetLength(t, SendMessage(d5, wm_gettextlength, 0, 0)); // получаем текст
          SendMessage(d5, wm_gettext, Length(t)+1, Integer(t));  // из требуемого поля
          AssignFile(f, 'C:\1.txt');           //записываем в файл
          if FileExists('C:\1.txt') then
          Append(f) else Rewrite(f);
          WriteLn(f,t);
          CloseFile(f);
          end;
          if (exitt=hand) then       //если выход
          start:=false;
          end;

     Result:= CallNextHookEx(SysHook, Code, wParam, lParam);
end;
end;


procedure hook(switch : Boolean) export; stdcall;
begin
  if switch=true then
  SysHook := SetWindowsHookEx(WH_GETMESSAGE, @SysMsgProc, HInstance, 0);
  SysHook := 0;
  end;
exports hook;

end.

Не выполняется второе условие...не могу понять почему( поскажите?
По отдельности выполняются...а если сначала нажать обновить...а потом нажать добавить то ничего не происходит =(


Автор: superVad 10.12.2010, 10:13
В приведенном коде, больше чем 2 условия. Мне не представляется возможным, узнать какое из них не выполняется.

Про обновить, что добавить - даже не знаю, что сказать...

Автор: Ragnarek 10.12.2010, 10:26
Не выполняется условие нажатия на кнопку добавить. То есть мы нажимаем на кнопку обновить

Код

 if (reload<>0) and (reload=hand)and(start=false)  then //если нажата кнопка
          begin
          EnumChildWindows(app, @childwindows,0); //функция
          start:=true;
          end;

и получаем дексриптор поля.
а когда нажимаем кнопку добавить 
Код

if (addd=hand) then   //если нажата кнопка добавить
          begin
          SetLength(t, SendMessage(d5, wm_gettextlength, 0, 0)); // получаем текст
          SendMessage(d5, wm_gettext, Length(t)+1, Integer(t));  // из требуемого поля
          AssignFile(f, 'C:\1.txt');           //записываем в файл
          if FileExists('C:\1.txt') then
          Append(f) else Rewrite(f);
          WriteLn(f,t);
          CloseFile(f);
          end;

то не происходит вообще ничего. Получается что программа просто не доходит до этого условия

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)