Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Занести пароль в окно другого приложения [D5, D6, Win95/98, WinME, Win2k, WinXP]


ruslan_as ©   (2003-09-08 12:42:00) 

Для нажатия на кнопку "ОK" чужого приложения использую код, приведенный ниже. А вот как занести значение пароля в это окошко не знаю.
Помогите кто может...

function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var
szFull: array[0..MAX_PATH] of Char; //Buffer for window caption
begin
Result := Wnd <> 0;
if Result then
begin
GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer
if (Pos(SL[0], StrPas(szFull)) > 0) // Test for text
and (SL.IndexOfObject(TObject(Wnd)) < 0) // Test for duplicate handles
then SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list
EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows
end;
end;

function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean;
var
SL: TStringList;
H: hWnd;
begin
SL := TStringList.Create;
try
SL.AddObject(ButtonCaption, nil); // First item in list is text to find
EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL));
H := 0;
case SL.Count of
1: ShowMessage("Window text not found.");
2: H := hWnd(SL.Objects[1]);
else
ShowMessage("Ambiguous text detected.");
end;
finally
SL.Free;
end;
Result := H <> 0;
if Result then PostMessage(H, BM_CLICK, 0, 0);
end;

(Задача моего приложения в следующем. Пользователям я не хочу раздавать пароли (все равно разболтают), а программа сама будет открывать файлы с паролем и вводить пароли без ведома пользователя.
)


ruslan_as   (2003-09-09 16:17:00) [1]

Нашел спасибо! Может кому пригодиться:

wnd1:=findwindow(nil, "Password");
wnd:=FindWindowEx(wnd1,0,"Edit",nil);
SendMessage(wnd, WM_SETTEXT ,0,lparam(PChar("пароль")));
ClickButton(wnd1,"OK");


ruslan_as   (2003-09-09 16:16:00) [2]

Рылся в помощи и описания FindWindowEx не нашел. Как мне найти мой Edit в моем примере?


jonni   (2003-09-08 17:55:00) [3]

tebe nuzhno poluchit" Handle polya v kotoroe nado zanesti text

navernoe Edit kakoy-nit" u tebya
poeotmu tebe nuzhno FindWindowEx naiti tot samoy edit v kotoriy nado vstavit" text i uzhe emu i poslat" soobschenie


ruslan_as   (2003-09-08 16:06:00) [4]

wnd не равен nil. Но я взял программку, которая вытаскивает имя компонента с чужой формы и обнаружил, что имена вытаскиваются всех компонентов, кроме этого окна для заполения пароля...
Как же мне теперь достучатсья до него?


mishgan   (2003-09-08 15:36:00) [5]

Вероятно, хендл окна не найден или найдено не то окно. Чему равен wnd в момент вызова SendMessage?
Вообще-то здесь врядли FindWindow поможет.


mishgan   (2003-09-08 15:24:00) [6]

mrcat
Вот именно, если окно в текущем процессе.
В сабже говорилось про посторонний процесс.


ruslan_as   (2003-09-08 15:24:00) [7]

Посылаю так:
procedure TForm1.Button1Click(Sender: TObject);
var wnd:HWND;
begin
wnd:=findwindow(nil, "Password");
SendMessage(wnd, WM_SETTEXT ,0,lparam(PChar("пароль")));
ClickButton(wnd,"OK")
end;

Не работает. Пароль в окно не попадает. Где я ошибаюсь?


mrcat   (2003-09-08 15:06:00) [8]

mishgan (08.09.03 14:32)

дык, Remarks
If the target window is owned by the current process, SetWindowText causes a WM_SETTEXT message to be sent to the specified window or control.


mishgan   (2003-09-08 14:32:00) [9]

Неа, см. сообщения WM_GETTEXT, WM_SETTEXT


Song   (2003-09-08 13:11:00) [10]

Ну, если получить значение из едит контрола - GetWindowText(), то соответственно занести - SetWindowText()


Наверх

Титульная страница Поиск, карта сайта Написать письмо