Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставить свои данные в поле чужой программы, см выше :) 
V
    Опции темы
X-Vlad
  Дата 5.5.2006, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: нет
Всего: 5



Привет всем.

У меня вот таой вот вопрос или даже просьба.

Мне нужно вставить в чужую программу в поле readonly свои данные, как это можна зделать?
Если можна пример. 
Помогите плз.

Зарание благодарен.
 


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Snowy
Дата 5.5.2006, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



Под 
Цитата(X-Vlad @  5.5.2006,  10:47 Найти цитируемый пост)
поле readonly
подзразумевается поле Edit или место в памяти?
 
PM MAIL   Вверх
Rouse_
Дата 5.5.2006, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



WM_SETTEXT 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
X-Vlad
Дата 5.5.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: нет
Всего: 5



Цитата

подзразумевается поле Edit или место в памяти?


поле Edit.

Если можна дайту пример. Ибо никогда с таким не стыкался smile 


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 5.5.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Только что написал для memo
Код

procedure TForm2.btn1Click(Sender: TObject);
var
  h1, h2: hwnd;
begin
  h1 := FindWindow('TForm1', nil);
  h2 := FindWindowEx(h1, 0, 'TMemo', 0);
  SendMessage(h2, WM_ENABLE, 1, 0);
  EnableWindow(h2, true);

  Memo1.SelectAll;
  Memo1.CopyToClipboard;
  SendMessage(h2, WM_PASTE, 0, 0);

  SendMessage(h2, WM_ENABLE, 0, 0);
  EnableWindow(h2, false);
end;


Добавлено @ 11:26 
'TForm1' - искомое окно
'TMemo' - поле редактирования 
Окно вначале переводим в активный режим, затем текст из своего мемо помещаем в буфер обмена
Вставляем в нужное мемо
И делаем его опять неактивным.

Добавлено @ 11:29 
Я надеюсь как найти имя класса окна чужого приложения 
и его Child а знаете... 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
X-Vlad
Дата 5.5.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: нет
Всего: 5



Цитата

Я надеюсь как найти имя класса окна чужого приложения 
и его Child а знаете...  


незнаю smile никогда таким незанимался ((((( 


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 5.5.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



В поставку Delphi входит програма WinSight.exe
у меня она здесь
"D:\Program Files\Borland\Delphi7\Bin\WS32.EXE"

или можно воспользоваться от visual c++ , Spy++.exe - она еще удобней.

Меню Search->FindWindow далее хватаем "прицел" мышкой и кидаем на нужый контрол. Програма в окошке покажет то что надо
 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rouse_
Дата 5.5.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Ну уж хэндл то можно и без этого определить smile
Код

var
  Pt: TPoint;
begin
  GetCursorPos(Pt);
  Caption := IntToStr(WindowFromPoint(Pt));
 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 5.5.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Поле Class - это класс окна 
Поле Caption, заголовок - можно написать вместо nil(0) в
FindWindow
FindWindowEx

Операцию надо проделать как для контрола так и для главного окна.
Первый FinWindow - ищет главное окно, второй его "дитё" 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rouse_
Дата 5.5.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



А, ну и класс окна по хэндлу smile
GetClassName 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Snowy
Дата 5.5.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 30
Всего: 484



А можно просто взять InqSoft Window Scaner и сделать с этимой программой все, что душа пожелает без всякого кода. 
PM MAIL   Вверх
Rouse_
Дата 5.5.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls;

type
  TMainForm = class(TForm)
    TreeView1: TTreeView;
    procedure FormCreate(Sender: TObject);
    procedure Sys_Windows_Tree(Node: TTreeNode; AHandle: HWND);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.DFM}

////////////////////////////////////////////////////////////////////////////////
//
//  Стартовая функция, запускаем рекуссию используя хэндл рабочего стола
//

procedure TMainForm.FormCreate(Sender: TObject);
var
  StartHandle : THandle;
begin 
  StartHandle := GetDeskTopWindow;
  Sys_Windows_Tree(nil, StartHandle);
end;

////////////////////////////////////////////////////////////////////////////////
//
//  Рекурсивная функция, строит дерево всех открытых окон, кнопок, едитов и т.д.
//  В качестве входных данных получает узел дерева и Хэндл окна
//

procedure TMainForm.Sys_Windows_Tree(Node: TTreeNode; AHandle: HWND);
const
  MAX = 128;
var
  szClassName, szCaption: array[0..MAX - 1] of Char;
  Result    : String;
  szFileName : array[0..255] of Char;
  PID, TID: Cardinal;
  szLayoutName: array[0..MAX - 1] of Char;
begin
  //Запускаем цикл пока не закончатся окна
  while AHandle <> 0 do
  begin
    //Получаем имя класса окна
    GetClassName(AHandle, szClassName, MAX);
    //Получаем текст (Его Caption) окна
    GetWindowText(AHandle, szCaption, MAX);
    // Получаем имя модуля
    if GetwindowModuleFilename(AHandle, szFileName, SizeOf(szFileName)) = 0 then
      FillChar(szFileName, 256, #0);
    // ID потока и процесса
    TID := GetWindowThreadProcessId(AHandle, PID);
    // языковую раскладку процесса
    AttachThreadInput(GetCurrentThreadId, TID, True);
    VerLanguageName(GetKeyboardLayout(TID) and $FFFF, szLayoutName, MAX);
    AttachThreadInput(GetCurrentThreadId, TID, False);

    Result := Format('%s [%s] Caption = %s, Handle = %d, PID = %d, Layout = %s',
      [String(szClassName), String(szFileName), String(szCaption),
      AHandle, PID, String(szLayoutName)]);

    //В следующей процедуре, в скобках, добавляем результат
    //в дерево, получаем хэндл дочернего окна и с результатами
    //выполнения этих двух функций выполняем процедуру Sys_Windows_Tree
    Sys_Windows_Tree(TreeView1.Items.AddChild(Node, Result),
      GetWindow(AHandle, GW_CHILD));
    //Получаем хэндл следующего (не дочернего) окна
    AHandle := GetNextWindow(AHandle, GW_HWNDNEXT);
    //Handle := 0;
  end;
end; 


end.
 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 5.5.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 16
Всего: 459



Rouse_, Зачем что-то писать когда за тебя уже написали лучше! Spy++ делает тоже самое. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rouse_
Дата 5.5.2006, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 469
Регистрация: 23.4.2005

Репутация: 18
Всего: 29



alexeis1, зачем тогда вообще что-то писать? 


--------------------
 Vae Victis
(Горе побежденным (лат.))
Демо с открытым кодом: http://rouse.drkb.ru 
PM MAIL WWW ICQ   Вверх
X-Vlad
Дата 5.5.2006, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: нет
Всего: 5



Цитата

procedure TForm2.btn1Click(Sender: TObject);
var
  h1, h2: hwnd;
begin
  h1 := FindWindow('TForm1', nil);
  h2 := FindWindowEx(h1, 0, 'TMemo', 0);
  SendMessage(h2, WM_ENABLE, 1, 0);
  EnableWindow(h2, true);

  Memo1.SelectAll;
  Memo1.CopyToClipboard;
  SendMessage(h2, WM_PASTE, 0, 0);

  SendMessage(h2, WM_ENABLE, 0, 0);
  EnableWindow(h2, false);
end;


в форме программы куда я хочу пихнуть данные три едита.. когда выполняю этот код - бросает в последний эдит. Как мне выбрать эдит?
Хендл эдита я знаю - "1051С" как терь это использовать? 


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.