سلام
چطور میشه از داخل برنامه خود با یک پنجره دیگه مرتبط بشیم و مثلاً یک دکمه را فشار دهیم،یا متنی به داخل Memo ی آن پنجره اضافه کنیم ؟!
ممنون
Printable View
سلام
چطور میشه از داخل برنامه خود با یک پنجره دیگه مرتبط بشیم و مثلاً یک دکمه را فشار دهیم،یا متنی به داخل Memo ی آن پنجره اضافه کنیم ؟!
ممنون
سلامنقل قول:
نوشته شده توسط Admiral
يك مثال :
با اين تابع مي تواني يك عبارت را به يك برنامه ديگر بفرستيد (مثلا Notepad(
(قبل از اجراي برنامه NotePad را باز كنيد)
کد:procedure TForm1.Button1Click(Sender: TObject);
var
wnd: HWND;
i: Integer;
s: string;
begin
wnd := FindWindow('notepad', nil);
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, 'Edit', nil);
s := 'Hello';
for i := 1 to Length(s) do
SendMessage(wnd, WM_CHAR, Word(s[i]), 0);
PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0);
PostMessage(wnd, WM_KEYDOWN, VK_SPACE, 0);
end;
end;
ميتوانيد به زير كنترلها هم دستور ارسال كنيد ولي ابتدا بايد هندل اون كنترل را پيدا كنيد.
مثال 2 : فشار دادن و تغيير عنوان يك كليد برروي يك برنامه ديگر :
ابتدا يك پروژه جديد بسازيد و يك Button روي فرم قرار دهيد و براي OnClick دكمه عبارت زير را بنويسيد :
ShowMessage('Clicked');
حالا برنامه را كامپايل بگيريد و اجرا كنيد.
حالا يك پروژه جديد بسايد و يك دكمه روي فرم قرار دهيد و كد زير را بنويسيد :
حالا روي دكمه فرم دوم كليك كنيد!کد:procedure TForm1.Button1Click(Sender: TObject);
var
wnd: HWND;
i: Integer;
s: string;
begin
wnd := FindWindow(Nil, PChar('Form1'));
if wnd <> 0 then
begin
wnd := FindWindowEx(wnd, 0, 'TButton', nil);
if wnd <> 0 then
begin
Windows.SetForegroundWindow(wnd);
SendMessage(wnd, BM_CLICK, 0, 0);
SendMessage(wnd, WM_SETTEXT, 0, Integer(PChar('New Caption')));
end;
end;
end;
خیلی ممنون
اگه روی فرم چند تا شی از کلاس TButton بود باید نامش رو به عنوان پارامتر آخر تابع FindWindowEx بدیم ؟
نامش رو چطور پیدا کنیم ؟
ممنون