Показать сообщение отдельно
  #1  
Старый 17.03.2010, 23:37
varavan varavan вне форума
Прохожий
 
Регистрация: 16.03.2010
Сообщения: 1
Репутация: 10
По умолчанию Прошу помощи и подсказки.

Привет всем. Читал, искал в общем ответов нигде не нашел а вопросов много. В общем программу лепил из подсказок форума, книг и инета. Смысл программы -запустить кейгенератор, нажать ентер срисовать пароль ну и т.д. Цыклы использовал так как незнаю функций когда программа готова к моим запросам.
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);
Ответить с цитированием