![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
api
Жаннка © (2006-04-24 13:24:00)ку,вопросик по api
var
h: HWND;
gg:pchar;
begin
h := findwindow('TWINDOWSCMD','Text Windows Commander 5.0 - Any One');
getwindowtext(h,gg,50);
edit2.Text:=gg;
почему то выводит полный бред в эдит:S‹Ш‹Ги\x1E7\x2
как быть?
balepa (2006-04-26 10:22:00) [21]
> Жаннка (25.04.06 23:38) [51]
Ну неужели догадаться было трудно ?
WM_SETTEXT это SETTEXT - "Установить текст"
> balepa © (25.04.06 07:56) [50]
Это про "чилд" было.
Жаннка (2006-04-25 23:38:00) [22]я чего то не пойму уже,вот код который выводит текст последнего эдита:
const
MAX_SIZE = 255;
var
hWindow, hParentWindow: THandle;
buf: PChar;
begin
hParentWindow := FindWindow(nil, 'Form2');
if hParentWindow = 0 then
Exit;
hWindow := FindWindowEx(hParentWindow,0, 'tdbedit',nil);
if hWindow = 0 then
Exit;
buf := nil;
try
GetMem(buf, MAX_SIZE);
SendMessage(hWindow, WM_GETTEXT, MAX_SIZE, Integer(buf));
edit1.Text:=buf;
finally
if buf <> nil then
FreeMem(buf);
end;
А это что? WM_SETTEXT не пойму
SendMessage(GetWindow(mHWND,GW_CHILD),WM_SETTEXT,0,LongInt(S));
balepa (2006-04-25 07:56:00) [23]procedure TForm1.Button1Click(Sender: TObject);
var
S:PChar;
mHWND: HWND;
begin
S:='Server'#0;
mHWND:= FindWindow('TForm1','Form1');
if mHWND<>0 then
SendMessage(GetWindow(mHWND,GW_CHILD),WM_SETTEXT,0,LongInt(S));
else
begin
MessageBox(Form1.Handle,'Window not found','Message',16);
end;
end;
Жаннка (2006-04-25 07:45:00) [24]
> вместо нуля подставляй хендл найденного "чилда" поиск будет
> от него к следующему по очереди.
>
не поняла как это будет выглядеть,
hWindow := FindWindowEx(hParentWindow, 0, 'tdbedit','текст'); - это же и есь чилд
balepa (2006-04-25 06:00:00) [25]
> Eraser © (24.04.06 14:46) [10]
Это и имелось ввиду.
sniknik (2006-04-24 20:44:00) [26]> не задавать же текст в
> hWindow := FindWindowEx(hParentWindow, 0, 'tdbedit','текст');
вместо нуля подставляй хендл найденного "чилда" поиск будет от него к следующему по очереди.
Жаннка (2006-04-24 19:34:00) [27]Заголовок Form2
Class TDBEdit
если на форме один эдит то все номан,а если их многа как тогда?не задавать же текст в
hWindow := FindWindowEx(hParentWindow, 0, 'tdbedit','текст');
Eraser (2006-04-24 19:27:00) [28]
> Жаннка (24.04.06 19:22) [43]
какое название класса или заголовок у окна, на котором edit'ы и названия класса edit'ов?
Жаннка (2006-04-24 19:27:00) [29]во,поняла...спасибо за такую помощь!
Жаннка (2006-04-24 19:22:00) [30]работает,но только на калькуляторе....меняю на Tform1 или на другое и все...
Eraser (2006-04-24 19:15:00) [31]
> Жаннка (24.04.06 18:55) [39]
упс.. эт я параметры местами перепутал... :(
короче вот как я сделал
procedure TForm1.Button1Click(Sender: TObject);
const
MAX_SIZE = 255;
var
hWindow, hParentWindow: THandle;
buf: PChar;
begin
hParentWindow := FindWindow(nil, 'Калькулятор');
if hParentWindow = 0 then
Exit;
hWindow := FindWindowEx(hParentWindow, 0, 'Edit', nil);
if hWindow = 0 then
Exit;
buf := nil;
try
GetMem(buf, MAX_SIZE);
SendMessage(hWindow, WM_GETTEXT, MAX_SIZE, Integer(buf));
ShowMessage(buf);
finally
if buf <> nil then
FreeMem(buf);
end;
end;
Жаннка (2006-04-24 19:12:00) [32]
> всмысле "пишется"? с какого перепугу туда должно что то
> писаться? )
> что находится в edit'e и что возвращается в st?
в эдите который находиться в другом приложении
в том эдите и строки типа "Отчет" и проста числа "52.000"
а в st - БеА
Eraser (2006-04-24 19:05:00) [33]
> Жаннка (24.04.06 18:55) [39]
всмысле "пишется"? с какого перепугу туда должно что то писаться? )
что находится в edit'e и что возвращается в st?
PS попробуйSendMessage(hndl, WM_GETTEXT, Integer(PChar(st [1])), 255);
Жаннка (2006-04-24 18:55:00) [34]var
Hndl: THandle;
h,k:hwnd;
st: string;
begin
SetLength(st, 255);
h:=FindWindow('TForm1','Form1');
k:=FindWindow('Tedit',nil);
Hndl:= FindWindowEx(h,k,'TEdit',nil);
SendMessage(hndl, WM_GETTEXT, Integer(PChar(st)), 255);
Label7.Caption:= st;
в эдит пишеться какое то "БеА" ;)
Eraser (2006-04-24 18:49:00) [35]
> Жаннка (24.04.06 18:42) [36]
SendMessage(h, WM_GETTEXT, Integer(PChar(st)), 255);
Жаннка (2006-04-24 18:48:00) [36]точнее так
var
Hndl: THandle;
h,k:hwnd;
st: string;
begin
SetLength(st, 255);
h:=FindWindow('TForm1','Form1'); parent
k:=FindWindow('Tedit',nil); child -- но как определить конкретный едит
Hndl:= FindWindowEx(h,k,'TEdit',nil);
//SendMessage(hndl,st); -ваще не поняла как функция работает
Label7.Caption:= st;
end;
Жаннка (2006-04-24 18:42:00) [37]
> Eraser
var
Hndl: THandle;
h:hwnd;
st: string;
begin
SetLength(st, 255);
h:=FindWindow('TForm1','Form1'); нахожу приложение с которым буду работать
Hndl:= FindWindowEx(h, 0, 'Edit',nil); нахожу эдит(кстати как выбрать конкретный эдит,классы и хенделы знаю)
SendMessage(hndl, // как быть дальше запуталась Msg, wParam: Word; lParam: Longint): Longint;
Label7.Caption:= st; //вывод
Eraser (2006-04-24 18:30:00) [38]
> Жаннка (24.04.06 18:29) [34]
да.
Жаннка (2006-04-24 18:29:00) [39]
> Жанна, ну третий раз повторяю, что не будет работать getwindowtext
> для edit'ов в чужом процессе...
посылать sendmessage'ем в каждый эдит?
Жаннка (2006-04-24 18:27:00) [40]
> причет тип "Edit" не найдется и в дельфевской форме (если
> специально не определить), а уж окно типа "xz" и представить
> себе сложно... (не от х.з. случаем? не "развод" ли?)
>
> p.s. рано за winapi взялся...
не,xz это типо любая форма;)
в так,есть программа,у нее на форме штук 10 эдитов и я выдираю из них данные и вставляю в свои...с дальнейшими подсчетами и преобразованиями...