Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/40: Рейтинг темы: голосов - 40, средняя оценка - 4.85
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034

Ввод текста в чужое окно

03.03.2014, 19:44. Показов 8703. Ответов 13
Метки нет (Все метки)

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

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
begin
  //скрыть окно по имени окна
  ShowWindow(FindWindow(nil, 'Ввод пароля по умолчанию'), SW_HIDE);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  //скрыть окно
  ShowWindow(FindWindow(nil, 'Извлечение из 11.rar'), SW_HIDE);
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  //переименовать окно
  SetWindowText(FindWindow(nil, 'Ввод пароля по умолчанию'), 'CyberForum.ru!... ');
end;
Миниатюры
Ввод текста в чужое окно  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2014, 19:44
Ответы с готовыми решениями:

Отправка текста в чужое окно через PostMessage
Ребза привет) ситуация такая отправляю текст в чужое окно через PostMessage окна каждый раз разные.. сразу объясню почему...

Чужое окно
Возможно ли, зная название чужого окна, скопировать из него всю текстовую информацию, которую только можно скопировать?

Как сдвинуть чужое окно?
Как можно сдвинуть или просто изменить чуть размеры формы стророннего приложения? Из делфи разумеется. Например код закроет...

13
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
03.03.2014, 20:19  [ТС]
Вобщем я научился вводить пароль в винраровское окно через делфи.

Delphi
1
2
3
4
5
6
7
8
9
var
  s: pchar;
  h: HWND;
begin
  s := 'Пароль'; //в окно будет введено это слово
  h := FindWindow(nil, 'Ввод пароля по умолчанию'); //отлов окна по заголовку
  h := FindWindowEx(h, 0, 'Edit', nil); //окно в винрар имеет класс Edit
  SendMessage(h, WM_SETTEXT, 0, integer(s)); //посылаем в него текст из переменной
end;
А как же отловить окно "Ввод пароля по умолчанию" по классу, какой у него класс?
0
Заблокирован
04.03.2014, 23:05
В WinRAR 5.0 класс: #32770
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33192 / 21478 / 8231
Регистрация: 22.10.2011
Сообщений: 36,846
Записей в блоге: 11
05.03.2014, 01:24
Цитата Сообщение от Сиськохват Посмотреть сообщение
#32770
Этих №32770 - как собак, по нему что-либо искать - себе дороже, вполне себе что-то другое можно найти...
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
05.03.2014, 17:49
Цитата Сообщение от Сиськохват Посмотреть сообщение
В WinRAR 5.0 класс: #32770
Где видели ?
Открываем PE Explorer'ом, переходим в dialogs и смотрим GETPASSWORD2 и видем что поля имеют следующие классы (WinRar 5.0)
1. COMBOBOX - основной, который используется для ввода пароля, а также при "запоковке с ключом"
2. EDITTEXT - дублирующий или дополнительный
Реализация кода, правильная...
Миниатюры
Ввод текста в чужое окно  
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
05.03.2014, 18:14  [ТС]
У меня как-то так показывает, да и странно класс окна назван цифрами #32770, ну это может быть и не странно, но просто два окна имеют один и тот же класс от этого и трудность обратится к одному из них.

У меня скрин показывает так:
Миниатюры
Ввод текста в чужое окно  
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
05.03.2014, 18:52
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
У меня как-то так показывает, да и странно класс окна назван цифрами #32770, ну это может быть и не странно, но просто два окна имеют один и тот же класс от этого и трудность обратится к одному из них.
Не знаю как у вас, так отображается WinRAR или же вы отлавливаете процесс перед распаковкой определённого архива ?
PE Explorer и Restorator 2007 winrar.exe показывает как описывал выше...
0
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
05.03.2014, 18:56  [ТС]
wendstor,
Да процесс перед распаковкой я отлавливал.
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
05.03.2014, 19:04
NIKOLAYY, отлов процесса не нужен... Там идут ID форм
Делайте как писал выше с использованием PE Explorer или Restorator 2007
0
Заблокирован
05.03.2014, 23:54
Цитата Сообщение от wendstor Посмотреть сообщение
Открываем PE Explorer'ом, переходим в dialogs и смотрим GETPASSWORD2 и видем что поля имеют следующие классы (WinRar 5.0)
1. COMBOBOX - основной, который используется для ввода пароля, а также при "запоковке с ключом"
2. EDITTEXT - дублирующий или дополнительный
Вы не так поняли вопрос, точнее Вы совсем ничего не поняли. Речь идёт не о классах полей, а о классе формы Ввода пароля. В данном случае PE Explorer и прочее вовсе не нужны. Класс: #32770 - системный диалог, поэтому:
Цитата Сообщение от UI Посмотреть сообщение
Этих №32770 - как собак, по нему что-либо искать - себе дороже, вполне себе что-то другое можно найти...
Ну, а поскольку других вариантов предложено не было, лучше искать по заголовку, как собственно изначально и было реализовано в коде. И повременить с поездкой в Крым.
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
06.03.2014, 01:18
Цитата Сообщение от Сиськохват Посмотреть сообщение
Вы не так поняли вопрос, точнее Вы совсем ничего не поняли. Речь идёт не о классах полей, а о классе формы Ввода пароля. В данном случае PE Explorer и прочее вовсе не нужны. Класс: #32770 - системный диалог
не пойму что вы тут хотели докозать...

p.s. А зачем мне процесс отслеживать, если я спокойно могу узнать не только класс окна, но и что отловить, применив например PE Explorer.
Класс диалога в res или exe файле (WndClass1):
Delphi
1
2
3
4
FORMMAIN DIALOG 1, 1, 214, 108
STYLE DS_SETFONT | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_OVERLAPPEDWINDOW | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
CLASS "WndClass1" // вот он родимый ))
FONT 12, "MS Shell Dlg"
и следовательно
Delphi
1
h := FindWindow('WndClass1', nil);
Так что, программы такие как PE Explorer и д.р. нужны, что бы не возникало таких вопросов.
0
Заблокирован
06.03.2014, 01:46
Цитата Сообщение от wendstor Посмотреть сообщение
и следовательно
FindWindow('WndClass1', nil); вернёт 0 и не решит вопрос ТС.
0
 Аватар для wendstor
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 516
06.03.2014, 02:18
Цитата Сообщение от Сиськохват Посмотреть сообщение
FindWindow('WndClass1', nil); вернёт 0 и не решит вопрос ТС.
Если не в курсе, так выше постом был пример где искать классы. Если имя класса диалога прописано в exe, то всё там работает...
А что его решать, если уже есть ответ, пост №5
0
5 / 22 / 1
Регистрация: 24.11.2015
Сообщений: 134
27.02.2020, 12:16
Типа так:
1. Определяем Handle чужого окна, кликнув в нём правой кнопкой мыши.
2. Вводим текст в свою строку ввода, по событию изменения строки переносим текст в чужое окно. Типа так.
3. Если забыли п.1, то подсказка.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Timer1: TTimer;
    Edit1: TEdit;
    Button1: TButton;
    Edit2: TEdit;
    Label3: TLabel;
    Button2: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
    procedure ShowHwndAndClassName(CrPos: TPoint);
  public
    { Public declarations }
  hWnd: THandle;
  aName: array [0..255] of Char;
  Klick_R:boolean;
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Timer1Timer(Sender: TObject);
var
  rPos: TPoint;
begin
  if Boolean(GetCursorPos(rPos)) and (GetKeyState(VK_RBUTTON) < 0) then
  begin
    ShowHwndAndClassName(rPos);
    Edit2.text:=IntToStr(hWnd);
    if hWnd<>0 then
    Klick_R:=true;
  end;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Form1.FormStyle := fsStayOnTop;
  Timer1.Interval := 50;
  Klick_R:=false;
end;
 
procedure TForm1.ShowHwndAndClassName(CrPos: TPoint);
begin
  hWnd := WindowFromPoint(CrPos);
  Label1.Caption := 'Handle :  ' + IntToStr(hWnd);
 
  if Boolean(GetClassName(hWnd, aName, 256)) then
    Label2.Caption := 'ClassName :  ' + string(aName)
  else
    Label2.Caption := 'ClassName :  not found';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
sendmessage(StrToInt(Edit2.text),wm_settext,0,lparam(pchar(Edit1.text)));
end;
 
procedure TForm1.Edit1Change(Sender: TObject);
begin
if Klick_R then
  sendmessage(StrToInt(Edit2.text),wm_settext,0,lparam(pchar(Edit1.text)))
else
begin
   Edit1.Text:='';
   MessageBox(0, 'Êëèêíèòå ïðàâîé êíîïêîé ìûøè â îêíî ÂÂÎÄÀ', 'Error', MB_OK);
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if Key = vk_escape then Close;
end;
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
      if Key = vk_escape then Close;
end;
 
end.
И это форма:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
object Form1: TForm1
  Left = 1
  Top = 196
  BorderIcons = []
  BorderStyle = bsNone
  Caption = 'Form1'
  ClientHeight = 30
  ClientWidth = 327
  Color = clAqua
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  OnKeyDown = FormKeyDown
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 295
    Top = 85
    Width = 32
    Height = 13
    Caption = 'Label1'
    Visible = False
  end
  object Label2: TLabel
    Left = 455
    Top = 85
    Width = 32
    Height = 13
    Caption = 'Label2'
    Visible = False
  end
  object Label3: TLabel
    Left = 50
    Top = 80
    Width = 58
    Height = 20
    Caption = 'Handle'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -16
    Font.Name = 'MS Sans Serif'
    Font.Style = [fsBold]
    ParentFont = False
    Visible = False
  end
  object Edit1: TEdit
    Left = 5
    Top = 5
    Width = 316
    Height = 21
    TabOrder = 0
    OnChange = Edit1Change
    OnKeyDown = Edit1KeyDown
  end
  object Button1: TButton
    Left = 545
    Top = 75
    Width = 75
    Height = 25
    Caption = 'ÂÂÎÄ'
    TabOrder = 1
    Visible = False
    OnClick = Button1Click
  end
  object Edit2: TEdit
    Left = 125
    Top = 80
    Width = 121
    Height = 21
    TabOrder = 2
    Visible = False
  end
  object Button2: TButton
    Left = 330
    Top = 5
    Width = 75
    Height = 25
    Caption = 'ESC'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'MS Sans Serif'
    Font.Style = [fsBold]
    ParentFont = False
    TabOrder = 3
    OnClick = Button2Click
  end
  object Timer1: TTimer
    OnTimer = Timer1Timer
    Left = 605
  end
end
Применение в видео
Вложения
Тип файла: rar 12.rar (4.09 Мб, 53 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2020, 12:16
Помогаю со студенческими работами здесь

Скрыть чужое окно
Привет всем. Можно ли как то скрыть окно стороннего приложения? Добавлено через 2 минуты причина - постоянно работает одно...

Как узнать что чужое приложение(окно) перешло в полноэкранный режим?
Надо чтобы моя программа не выводила окно, если окно чужого приложения заняло весь экран. Приложение любое, даже игра.

Ввод текста в чужое окно
Подскажите как реализовать вот например нахожу калькулятор HWND H = FindWindow(&quot;SciCalc&quot;, &quot;Калькулятор&quot;); if (H ==...

Вставка текста в чужое окно
У меня есть чужая программа в которой имеется пустое поле для ввода в котором есть описание &quot;Введите текст&quot;. Мне нужно написать в...

Отправление текста в чужое окно, PostMessage
Здравствуйте. Помогите отправить текст в чужое окно. static extern bool PostMessage(IntPtr hWnd, int msg, char wParam, int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1 У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\ А в самом низу файла-профиля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru