Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2008, 11:55   #1
slm
Пользователь
 
Регистрация: 09.05.2008
Сообщений: 40
По умолчанию

День добрый. Написал программку для скрытого ввода пароля (от своих сотрудников). Но работает только с windows-приложениями, а когда доходит до HTML или PhP, то на этом все заканчивается. Пробовал по-разному - никак. Приведу текст dll без моих "умных" переносов на HTML.
Текст:
Код:
library pass;


uses
  Windows,
  Messages,
  SysUtils,
  System;

var
  SysHook: HHook = 0;
  Foc, prev, next: hWnd;
  Buf, BufP: PAnsiChar;
  Name, NameP, NameN: ansistring;

  


    function SysFuncHook(nCode: integer; wParam: word; lParam: Longint):
                      LongInt; stdCall;


    begin
      if nCode < 0
            then
       begin
          Result := CallNextHookEx(SysHook,nCode,wParam,lParam);
       end 
      else
        begin
           if nCode = HCBT_SETFOCUS then
           begin

// Получаю хэндл окна с фокусом и текст под ним

             Foc:=GetFocus;
             new(Buf);
             
             GetWindowText(Foc, Buf, 200);
             Name:=Buf;
             Buf:=nil;
             Dispose(Buf);

// Поиск соседнего окна и текст в нём

             prev:=getnextwindow(foc, gw_hwndnext);
             next:=getnextwindow(foc, gw_hwndprev);
             new(BufP);
             getwindowtext(prev, bufp, 200);
             NameP:=BufP;
             getwindowtext(next, bufp, 200);
             NameN:=BufP;
             bufp:=nil;
             Dispose(BufP);

// Если текст соседнего окна совпадает с Логином
//и текст окна с фокусом совпадает с контрольным паролем, то поменять окно с фокусом на пароль

             if NameP='MyLogin' then begin
                if Name='Pass' then begin

                     SetWindowText(Foc, pansichar('MyPassword'));

                  end;
              end;

// Обработать следующее окно,
//чтобы не привязываться ко взаимному расположению окон пароля и логина

             if NameN='MyLogin' then begin          
               if Name='Pass' then begin

                      SetWindowText(Foc, pansichar('MyPassword'));
           end;
          end;
      end;


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

 end;

procedure RunHook; export; stdCall;
begin
// Работа по хуку на смену фокуса - хуки на клавиатуру и 
// journalrecord отключают антивирусы

    SysHook:=SetWindowsHookEx(WH_CBT, @SysFuncHook, hInstance, 0);
     SysHook:= 0;

  end;
procedure StopHook; export; stdCall;
  begin
   UnhookWindowsHookEx(SysHook);
   SysHook:= 0;
  end;


exports
  RunHook, StopHook;
  begin

  end.
P.S. Из текста удалены некоторые проверки для читабельности. Оставлен только каркас.
Заранее благодарен.

P.P.S. Забыл добавить - надо, чтобы работали и в Windows и в HTML и в PhP, то есть независимо от типов. Реально вообще такое. Спасибо.

Последний раз редактировалось Stilet; 10.06.2008 в 12:01.
slm вне форума Ответить с цитированием
Старый 13.06.2008, 15:00   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Незнаю где такое видели
Код:
Buf, BufP: PAnsiChar;   
...
new(Buf); // ???
GetWindowText(Foc, Buf, 200);   
Name:=Buf;   
Buf:=nil; // ???
Dispose(Buf); // ???
Я вообще не пойму как это работает Может будет лучше
Код:
Buf: array[0..254] of CHAR;
...
FillChar(Buf, SizeOf(Buf), #0);
GetWindowText(Foc, Buf, SizeOf(Buf));   
Name:= String(Name); // обрубываем до первого нулевого байта
с остальным кодом по аналогии замените

и мне чет не сильно понятно " в Windows и в HTML и в PhP". Что тут сравнивается я не пойму Win - операционка, html - язык разметки, php - язык для формирования динамических html. Разъясните что имелось ввиду ?
BOBAH13 вне форума Ответить с цитированием
Старый 13.06.2008, 19:03   #3
slm
Пользователь
 
Регистрация: 09.05.2008
Сообщений: 40
По умолчанию

Кстати спасибо за корректную поправку. Я самоучка, мне никто не объяснял ничего, только по примерам.
А по совместимости я имел ввиду, что прога должна работать, примерно как PuntoSwitcher, которому все равно где набирается текст - что в интернет странице, что в windows. В любом случае Punto меняет текст, если надо.
А вот моя программа работает только в окнах windows, но не в html. Я понимаю, что я работаю с хэндлами, но пока по-другому не умею.
P.S. А там где вы поставили вопросительные знаки объясню: во-первых, у меня только так срабатывает корректно getwindowtext и setwindowtext.
А buf:=nil я ввел, потому что без этого хук срабатывает только один раз, а потом не хочет. Почему до сих пор не понимаю.
slm вне форума Ответить с цитированием
Старый 13.06.2008, 21:32   #4
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Я самоучка, мне никто не объяснял ничего, только по примерам.
Интересно А я кто ? Экстрасенс ? Если у вас работает getwindowtext и освобождается так
Код:
buf := nil; dispose(buf)
тогда у вас какой то софт стоит из не земной цивилизации
BOBAH13 вне форума Ответить с цитированием
Старый 13.06.2008, 21:58   #5
slm
Пользователь
 
Регистрация: 09.05.2008
Сообщений: 40
По умолчанию

Даже не буду спорить. Я делаю, как могу, честно. У меня стоит задача я всеми способами пробую ее решить. Если неправильно, то почему работает у меня . Ладно, это вопрос другого плана.
Просто прошу либо помочь, либо хоть подсказать в какую сторону копать, может хук другой, может команды не те.
А может получится такой вопрос - получить адрес страницы, раскопать ее как текстовый файл, найти нужную строку и запустить ???
Помоги, если можешь. Честно я задолбался читать хелпы. Просто нет практики.
Если нет желания - мне не надо готовый код или уже exe-шник , просто направление мысли, подсказка. С меня пиво
slm вне форума Ответить с цитированием
Старый 15.06.2008, 10:49   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Я не очень уверен но, хук WH_GETMESSAGE или WH_MSGFILTER, и ловить WM_SETTEXT, а потом попробывать через
Код:
int GetClassName(          
    HWND hWnd,
    LPTSTR lpClassName,
    int nMaxCount
);
опредилять имя класса т.е. если 'EDIT' то окно для ввода текста и вперед заменять
BOBAH13 вне форума Ответить с цитированием
Старый 17.06.2008, 16:05   #7
slm
Пользователь
 
Регистрация: 09.05.2008
Сообщений: 40
По умолчанию

та же история - в полях ввода в интернет-страницах хук не срабатывает!!! А если сделать наподобие сниффера? Я копаю, но пока не получается.
slm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с html RodgerFox HTML и CSS 14 23.08.2008 10:32
Помогите перевести атрибуты HTML в CSS Devoto HTML и CSS 1 07.07.2008 23:29
Совместимость типов DeDoK Общие вопросы Delphi 2 06.05.2008 21:28
ПОМОГИТЕ С HTML AGA Помощь студентам 7 05.01.2007 22:43