PDA

View Full Version : پر کردن کنترل در برنامه دیگر



majid2230
سه شنبه 12 مرداد 1389, 00:11 صبح
سلام
نمی دونم با ANSYS ( یه برنامه مهندسی برای رشته مکانیک )کار کردید یا نه ،نرم افزار خیلی خوبیه ولی نه user interface ش ، مثلا undo نداره و در صورت اشتباه باید با کلی بدبختی اصلاحش کرد ، یه راهی پیدا کردم ولی به مشکل خوردم ، فرض کنید ما می خوایم یه کنترل رو در برنامه دیگری پر کنیم ( مثلا یه ادیت باکس یا کومبو ) چه جوری باید هندل اون شی رو به دست بیاریم تا بتونیم از طریق برنامه خودمون پرش کنیم ، و اینکه چه جوری اون رو پر کنیم البته می دونم در مورد دومی پست هایی تو سایت هست ولی اگه هر دو کار با هم باشه ممنون میشم .
tnx

Felony
سه شنبه 12 مرداد 1389, 05:49 صبح
به وسیله توابع FindWindow و FindWindowEX میتونید هندل یک فرم و سپس کنرتل مورد نظرتون رو به دست بیارید و توسط تابع PostMessage یا SendMessage هم متن مورد نظرتون رو درش درج کنید .

devil00x
یک شنبه 31 مرداد 1389, 17:49 عصر
<code>
Function SetOtherWindowMemoText(const sCaption : String; const sText : String) : WideString;
var
hWindow : THandle;
hChild : THandle;

aTemp : array[0..5000] of Char;
sClassName : String;
begin
Result := '';

hWindow := FindWindow(Nil,PChar(sCaption));

if hWindow = 0 then begin
ShowMessage('Could NOT find the other program');
exit;
end;

hChild := GetWindow(hWindow, GW_CHILD);
while hChild <> 0 do Begin
if GetClassName(hChild, aTemp, SizeOf(aTemp)) > 0 then begin
sClassName := StrPAS(aTemp);

if sClassName = 'Edit' then begin
StrPCopy(aTemp,sText);
SendMessage(hChild,WM_SETTEXT,SizeOf(aTemp),Intege r(@aTemp));
end;
end;
hChild := GetWindow(hChild, GW_HWNDNEXT);
end;
end;


Example:

//Set notepad memo text.
SetOtherWindowMemoText('Untitled - Notepad',Edit1.Text);
</code>