View Full Version : ارسال پارامتر جدید
Hamid_PaK
شنبه 21 آبان 1384, 22:56 عصر
یک برنامه داریم که اجراست ، حالا می خواهیم یک یا چند پارامتر به اون ارسال کنیم ...
لطفا سریع و ساده ترین راه رو پیش نهاد کنید ...
( خودم با کلیپ برد کار کردم جالب نبود !!! )
vcldeveloper
یک شنبه 22 آبان 1384, 02:38 صبح
چه نوع پارامتری؟!
اگه منظورتون پارامتر در خط فرمان هست: با استفاده از ParamCount و ParamStr.
اگر منظورتون ارسال اطلاعات از یک برنامه در حال اجرا به یک برنامه در حال اجرای دیگه هست: یکی از راههای اون ارسال پیغام WM_COPYDATA هست (می تونید در Windows SDK درباره نحوه استفاده از اون جستجو کنید).
در ضمن این سوال قبلا پرسیده شده بود، اگه جستجو می کردید، زودتر به جواب می رسیدید.
Hamid_PaK
یک شنبه 22 آبان 1384, 06:00 صبح
درسته آقای کشاورز اطلاعات ارسالی یک سری رشته است ...
(شرایط : برنامه اجراست و الان کپشن فرم خالیست حالا می خواهیم با استفاده از یک راه ساده به همین برنامه یک رشته ارسال کنیم و بدون اینکه بسته بشه کپشن به رشته جدید تغییر کنه )
جستجو کردم ولی چون نمی دونستم چی باید سرچ کنم که جوابم رو بگیرم هیچی پیدا نکردم !!!
hr110
یک شنبه 22 آبان 1384, 06:57 صبح
این کار توسط پارامتر قابل انجام نیست چرا که شما پارامتر برنامه را در هنگام اجرا ارسال کرده اید و قابل تغییر نیست ولی شما میتوانید از DragDrop و ... استفاده کنید.
Naficy
یک شنبه 22 آبان 1384, 19:23 عصر
در راهنمای MSDN در بخش IPC یک بحث جامع در این رابطه شده است:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ipc/base/interprocess_communications.asp
اما برای چنین موارد ساده ای، معمولا بهترین راه همان WM_COPYDATA است.
Hamid_PaK
یک شنبه 22 آبان 1384, 22:10 عصر
بسیار جالب بود اما من یک نکته رو فراموش کردم که بگم و اون این هست که این رشته از طریق خود فایل برنامه باید ارسال بشه ... بطور کل یک نمونه از این در برنامه Photoshop دیده می شود که برنامه یک بار اجرا شده و در ادامه باز شدن هر فالی در برنامه صورت می گیرد ...
لطفا یکم دیگه کمک کنید دارم به یه جاهایی می رسم ...
( لطفا یک مقال هم برای WM_COPYDATA که رشته ای را ارسال می کند ضمیمه کنید ، با تشکر )
vcldeveloper
دوشنبه 23 آبان 1384, 03:40 صبح
لطفا یک مقال هم برای WM_COPYDATA که رشته ای را ارسال می کند ضمیمه کنید
مثال:
برنامه "ارسال کننده" متن داخل Edit1 را توسط پیغام WM_COPYDATA به برنامه دریافت کننده (MyApp) ارسال می کند:
procedure TForm1.Button1Click(Sender: TObject);
var
PDataRec : ^COPYDATASTRUCT;
Text : string;
h : HWND;
begin
Text := Edit1.Text;
h := FindWindow('TMyApp','MyApp');
if h <= 0 then
Exit;
New(PDataRec);
try
with PDataRec^ do
begin
dwData := 0;
lpData := PAnsiChar(Text);
cbData := SizeOf(AnsiChar) * Length(Text);
end;
SendMessage(h,WM_COPYDATA,Handle,Integer(PDataRec) );
finally
Dispose(PDataRec);
end;
end;
برنامه "دریافت کننده" پیغام را دریافت می کند و توسط Label1 نمایش میدهد.
type
TMyApp = class(TForm)
Label1: TLabel;
private
{ Private declarations }
procedure WMCOPYDATA (var Msg : TMessage);message WM_COPYDATA;
public
{ Public declarations }
end;
var
MyApp: TMyApp;
implementation
{$R *.dfm}
procedure TMyApp.WMCOPYDATA(var Msg: TMessage);
var
Text : string;
TextLength : integer;
PText : PAnsiChar;
PDataRec : ^COPYDATASTRUCT;
begin
PDataRec := Pointer(Msg.LParam);
PText := PAnsiChar(PDataRec^.lpData);
TextLength := PDataRec^.cbData div SizeOf(Char);
SetString(Text,PText,TextLength);
Label1.Caption := Text;
end;
Hamid_PaK
دوشنبه 23 آبان 1384, 06:38 صبح
با تشکر از آقای کشاورز ...
دیگه کسی پیشنهاد و یا مثالی نداره ؟
درباره عملکرد Photoshop کسی نظری نداره ؟
Naficy
دوشنبه 23 آبان 1384, 18:41 عصر
( لطفا یک مقال هم برای WM_COPYDATA که رشته ای را ارسال می کند ضمیمه کنید ، با تشکر )
در همان لینکی که دادم در این مورد هم توضیح داده شده.
درباره عملکرد Photoshop کسی نظری نداره ؟
من درست متوجه نشدم کدوم کار Photoshop رو می گین.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.