Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> автоматизация ввода логина и пароля 
:(
    Опции темы
den2005r
Дата 25.11.2011, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 4.1.2010

Репутация: нет
Всего: нет



Привет всем) перелопатил кучу сайтов, но ответа не могу найти на свой вопрос, надеюсь на вашу помощь) пишу програмку автоматизации ввода логина и пароля. Она вводит лишь в логин, а пароль не заполняет, и вместо нажатия кнопки OK, она ставит галочку для сохранения имени пользователя. Юзал spy++ но так и не смог нати второе поле для ввода и кнопку ок. в этом диалоге чекбокс тоже является button (если верить spy++) Вот код
Код

program Project2;

uses
  Windows,
  SysUtils,
  messages,
  lzexpand,
  inifiles,
  Classes;
type
  PFindWindowStruct = ^TFindWindowStruct;
  TFindWindowStruct = record
    Caption: string;
    ClassName: string;
    WindowHandle: THandle;
  end;

var
  ini:tinifile;
  FileName: string = '';
  list,tmp:tstringlist;
   txt:string;
   time:integer;
Procedure Logadd(Line: string);
Var
 F: TextFile;
 Text: String;
begin
 if FileName = '' then
   FileName := ExtractFilePath(ParamStr(0))+'set.log';
   AssignFile(F, FileName);
 if fileexists(FileName) then
   append(f)
 else
 begin
   Rewrite(F);
   WriteLn(F,'Версия программы 1.0 ');
 end;
  WriteLn(F,DateTimeToStr(Now) + ': ' + Line);
  CloseFile(F);
 end;

procedure TrimWorkingSet;
var
MainHandle: THandle;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
  begin
  MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID);
  SetProcessWorkingSetSize(MainHandle, DWORD(-1), DWORD(-1));
  CloseHandle(MainHandle);
  end;
end;
function EnumWindowsProc(hWindow: hWnd; lParam: LongInt): Bool; stdcall;
var
  lpBuffer: PChar;
  WindowCaptionFound: bool;
  ClassNameFound: bool;
begin
  GetMem(lpBuffer, 255);
  Result := True;
  WindowCaptionFound := False;
  ClassNameFound := False;
  try
    if GetWindowText(hWindow, lpBuffer, 255) > 0 then
      if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0 then WindowCaptionFound := true;
    if PFindWindowStruct(lParam).ClassName = '' then
      ClassNameFound := True
    else if GetClassName(hWindow, lpBuffer, 255) > 0 then
      if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer)) > 0 then ClassNameFound := True;
    if (WindowCaptionFound and ClassNameFound) then
      begin
        PFindWindowStruct(lParam).WindowHandle := hWindow;
        Result := False;
      end;
  finally
    FreeMem(lpBuffer, sizeof(lpBuffer^));
  end;
end;

function FindAWindow(Caption: string; ClassName: string): THandle;
var WindowInfo: TFindWindowStruct;
begin
  WindowInfo.Caption := Caption;
  WindowInfo.ClassName := ClassName;
  WindowInfo.WindowHandle := 0;
  EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
  FindAWindow := WindowInfo.WindowHandle;
end;




procedure start;
var
    thewindowhandle,h,h1,h2,h3 : thandle;
    wnd,UnPro,passtext,okbutton: thandle;
    i:integer;
    sort:boolean;
begin
TrimWorkingSet;
ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'set.ini');
txt:=(ini.Readstring('Настройки','Пароль',''));
ini.free;
thewindowhandle := findawindow('Авторизация', '');
if thewindowhandle<>0 then
begin 
         showwindow(thewindowhandle, sw_restore);
         bringwindowtotop(thewindowhandle);
        passtext:=FindWindowEx(thewindowhandle, 0, 'Edit', nil);
        SendMessage(passtext, WM_SETTEXT, 0, lParam(LPCTSTR(txt)));
         OKbutton :=FindWindowEx(thewindowhandle, 0, 'Button', nil);
        logadd('Кнопка окна найдена');
        SendMessage(OKbutton, BM_CLICK, 0, 0);
        end;
sleep(1000);
start;
end;

begin
  logadd('Программа запущена ');
    if not FileExists(ExtractFilePath(ParamStr(0))+'set.ini') then
      begin
      ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'set.ini');
      ini.WriteString('Настройки','Пароль','');
      ini.Free;
      end;
start;
end.

надеюсь на вашу помощь. Заранее благодарен

Это сообщение отредактировал(а) den2005r - 25.11.2011, 17:44
PM MAIL   Вверх
AlekXL
Дата 1.3.2012, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 2.5.2008

Репутация: нет
Всего: 0



чекбокс в виндоус - это та же кнопка со спец стилем. Для нажатия на кнопку или чекбокс нужно сгенерировать , кажется (уже не помню тчно) BN_CLICKED.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0597 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.