Новичок
Профиль
Группа: Участник
Сообщений: 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
|