![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Привет всем. Читал, искал в общем ответов нигде не нашел а вопросов много. В общем программу лепил из подсказок форума, книг и инета. Смысл программы -запустить кейгенератор, нажать ентер срисовать пароль ну и т.д. Цыклы использовал так как незнаю функций когда программа готова к моим запросам.
1. Почему очень часто чтоб получить hwnd окна (даже в цыкле выскакивает из самого цыкла с первого раза ничего не получив.(пофиг ей while W1<>1000) 2.При попытке программно нажать кнопку, цыкл уходит в начало программы и шурует бесконечно по кругу или закрывает окно вызванной программы, иногда через раз спасает sleep(1000) но не всегда. Другие способы нажатия реагируют так же. 3. Подскажите может есть функции и процедуры попроще, а то в описании команд ShellApi неопытному еще нужно сообразить что такое hwnd или WM_GETTEXT вот методом тыка и ошибок пробую. 4. У меня установлен Windows 7 могут глюки быть в Delphi из за этого, а то трассировка отказывается работать, контр.точки не срабатывают. Код:
begin W2:=0; b1:=0; if B10=0 then //чтоб цыкл 1000 раз окна не открывал RunFile(Personal.exe); inc(B10); Label1.Caption:=SPut + SFileName; W1:=0; while W1<>1000 do Begin h1:=FindWindow (nil, '[SOCRAT Personal v4.1] KeyGen'); Memo1.Lines.add('Н'); inc(W1); if h1<>0 then W1:=1000 else Begin B1:=1; Memo1.Lines.add('Невозможен перехват генератора пароля'); Exit; end; end; Memo1.Lines.add('Перехват генератора пароля'); W1:=0; while W1<>1000 do Begin h2 := FindWindowEx(h1, 0, 'Button', '...GeNeRaTe...'); Memo1.Lines.add('Н2'); inc(W1); if h2<>0 then W1:=1000 else Begin B1:=2; Memo1.Lines.add('Невозможен перехват кнопки "GeNeRaTe"'); Exit; end; end; Memo1.Lines.add('Перехват кнопки "GeNeRaTe"'); W1:=0; while W1<>1000 do Begin h3 := FindWindowEx(h1, 0, 'Edit', ''); Memo1.Lines.add('Н3'); inc(W1); if h3<>0 then W1:=1000 else Begin B1:=3; Memo1.Lines.add('Невозможен перехват "Edit"'); Exit; end; end; Memo1.Lines.add('Перехват "Edit"'); //////// Фокус, генерация пароля с нажатием SetForegroundWindow(h2); SendMessage(h2, WM_ACTIVATE, 1, 0); SendMessage(h2, WM_ENABLE, 1, 0); SendMessage(h2, WM_SETFOCUS, 1, 0); if WaitForInputIdle(h1, INFINITE)= 0 then else Sleep(100); keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY,0); keybd_event(VK_RETURN,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0); W1:=0; Sleep(100); while W1<>1000 do Begin SetLength(S1, SendMessage(h3, WM_GETTEXTLENGTH, 0, 0)+1); SendMessage(h3, WM_GETTEXT, Length(S1), Integer(PChar(S1))); SetLength(S1, lStrLen(PChar(S1))); if S1='' then inc(W1) else W1:=1000; end; Memo1.Lines.add(S1); |