Главная страница
    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.038 c
1-41237
qwe
2003-10-31 16:43
2003.11.13
Помогите разобраться в понятиях


3-40783
Geugenk
2003-10-26 15:22
2003.11.13
Есть какие-то свойства у Ttable которые отключают отличие значени


3-40966
Sandman25
2003-10-16 17:18
2003.11.13
Paradox: Select id, (select sum( ...


3-40933
stud
2003-10-17 11:39
2003.11.13
события в файрберд


1-41580
malefik
2003-10-27 09:30
2003.11.13
DBGRID и полосы прокрутки





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский