Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизЗанести пароль в окно другого приложения Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c