Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
14-42100
Bis
2003-10-23 08:13
2003.11.13
В это сабже шесть слов


14-41929
mm0
2003-10-20 18:02
2003.11.13
Помогите с кнопкой /Продолжение/Первое непомогло


1-41690
ghost_by
2003-11-03 16:57
2003.11.13
Справка в формате chm.


9-40777
Vasiliy
2003-05-10 21:13
2003.11.13
Как избавиться от мерцания окна при перерисовке


1-41416
Vadim S
2003-10-29 16:15
2003.11.13
Invalid pointer operation





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский