Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Занести пароль в окно другого приложения   Найти похожие ветки 

 
ruslan_as ©   (2003-09-08 12:42) [0]

Для нажатия на кнопку "О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;

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


 
Song ©   (2003-09-08 13:11) [1]

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


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

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


 
mrcat ©   (2003-09-08 15:06) [3]

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 15:24) [4]

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


 
ruslan_as ©   (2003-09-08 15:24) [5]

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

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


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

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


 
ruslan_as ©   (2003-09-08 16:06) [7]

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


 
jonni ©   (2003-09-08 17:55) [8]

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-09 16:16) [9]

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


 
ruslan_as ©   (2003-09-09 16:17) [10]

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
1-41348
Mouse
2003-10-30 16:56
2003.11.13
Помогите сделать


14-41949
qwerty2
2003-10-20 13:48
2003.11.13
Штрих-коды


6-41850
Andr
2003-09-11 16:52
2003.11.13
Проблемы в компоненте Indy IdFTP с докачкой файлов


4-42218
SDW_syscoder
2003-09-03 11:05
2003.11.13
Работа с устройством через COM порт


1-41647
ARTEMKA
2003-10-25 16:52
2003.11.13
Как сохранить регион