Форум: "Основная";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
ВнизСвязь между приложениями Найти похожие ветки
← →
Kurt (2002-01-29 23:13) [0]Приветствую.
Знающие люди, как вам такой вот вопросик.
Есть у меня програма, работающая и не мною написаная. И есть у этой програмы поля для ввода параметров. После ввода она их обрабатывает и выдает информацию. Так вот, система ввода у нее для меня не удобная и я хотелбы ее упростить и ускорить. Может быть можно написать програму в которой вводить информацию, а она пускай пересылает ее той програме? Ну что-то вроде моста, пускай автоматически заполняет нужные поля (обычные поля типа TEdit).
Если кто-нибуть представляет как такое делается, то прошу просветить.
Зарание благадарю.
← →
ТеньЛуны (2002-01-29 23:46) [1]если программа написана на СОМ технологиях, то может и что получиться. А если нет, то мне кажется, долше писать оболочку-над-оболочкой, так сказать, чем написать всё заново.
С уважением
← →
yaJohn (2002-01-30 11:18) [2]Mojno poprobovat". Poishi po forumu nechto vrode "kak emulirovat" najatia klavish dlia chujogo okna". V principe, kajdiy (?) kontrol imeet okno. T.e. mojno iz vneshnego prilojenia emulirovat" emu najatia klavish. No est" eshe vopros, kak HWND dlia kontrola iz chujogo Application uznat".
V obshem - mutornoe zaniatie.
← →
USAtyj (2002-01-30 12:36) [3]Вот код для определения хендлов всех (почти) контролов на нужной форме. В нужный эдит вводится текст.
Нажатие кнопки, если че, тоже через SendMessage.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Printers, ExtCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
handleF:HWND;
handleARR: array [1..100000] of HWND;
handleID: array [1..100000] of integer;
i,n:integer;
implementation
{$R *.DFM}
procedure TForm1.Button2Click(Sender: TObject);
var NRetries:integer;
iError:string;
Buff: array [0..256] of Char;
begin
NRetries:=0;
iError:="";
handleF:=0;
handleF:=FindWindow(nil,PChar("MyProgram")); // MyProgram - заголовок окна, которое надо найти и в котором контролы определить
if handleF <> 0 then begin
Memo1.Lines.Add("Найдено окно");
n:=0;
for i:=0 to 1000000 do begin
if GetDlgItem(handleF,i)<>0 then begin
n:=n+1;
handleARR[n]:=GetDlgItem(handleF,i);
handleID[n]:=i;
Memo1.Lines.Add(IntToStr(i));
end;
end;
Memo1.Lines.Add("Всего:="+IntToStr(n));
end else begin
iError:="Окно не найдено";
end;;
Memo1.Lines.Add(iError);
for i:=1 to n do begin
if handleID[i] = 8976 then begin
SendMessage(handleARR[i],WM_SETTEXT,0, integer(pchar("9w900888"))); // здесь контролу с хендлом 8976 присваивается текст "9w900888"
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;
end.
← →
Набережных С. (2002-01-30 19:31) [4]Получаем спипок дескрипторов и классов дочерних окон можно так:
function EnumChildProc(Wnd:HWND; lPrm:LPARAM):bool;stdcall;
var
s:string;
begin
SetLength(s,MAX_PATH+1);
SetLength(s,GetClassName(wnd,pChar(s),MAX_PATH));
TStringList(lPrm).AddObject(s,pointer(Wnd));
Result:=true;
end;
procedure EnumChilds(Handle:HWND);
var
n:integer;
SL:TStringList;
begin
SL:=TStringList.Create;
EnumChildWindows(Handle,@EnumChildProc,integer(SL));
end;
Получить или установить текст в EDIT - Get(Set)WindowText.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c