PDA

View Full Version : سوال: روش اصولی رد و بدل کردن رشته بین دو برنامه در حال اجرا



mbshareat
دوشنبه 23 اردیبهشت 1398, 23:53 عصر
سلام
چطور می تونم یه رشته رو از یه برنامه به دیگری پاس بدم؟
Sendmessage رو کشف کرده بودم اما چطور متن رو دریافت کنم؟
قدیم یه ادیت مخفی میساختم وقتی متنش تغییر می کرد بررسیش می کردم.
راه آسونتر و شناخته شده تری وجود داره؟
علاوه بر اینکه نمی دونم چرا findWindow گاهی شکست میخوره و پنجره رو پیدا نمی کنه در حالی که پنجره موجوده!
ظاهرا فرق می کنه وقتی یه برنامه اجرا بشه دومی قبلش در حال اجرا باشه یا بعد اجرا بشه و بعد findWindow استفاده بشه.
(باورم نمیشه حرفه ای ها اصلا از این جور چیزها استفاده واقعی بکنند.فقط منم که هنوز آدم نشدم!)

mbshareat
سه شنبه 24 اردیبهشت 1398, 00:06 صبح
این صفحه (https://stackoverflow.com/questions/6115296/delphi-how-to-send-command-to-other-application) رو دیدم اما نمی فهمم
WM_MY_MESSAGE = WM_USER + 1; یعنی چی؟
علاوه بر اینکه من میخوام کارکتر هم بفرستم(در واقع اسم فایل و شماره بایت)

یوسف زالی
پنج شنبه 26 اردیبهشت 1398, 13:32 عصر
سلام
این کدیه که من استفاده می کنم:



procedure SendStringToApplication(AppHandle, MyHandle: THandle; s: AnsiString);
var
CopyDataStruct: TCopyDataStruct;
begin
if AppHandle = 0 then
Exit;


CopyDataStruct.dwData := 0; //use it to identify the message contents
CopyDataStruct.cbData := 1 + Length(s);
CopyDataStruct.lpData := PAnsiChar(s);


SendMessage(AppHandle, WM_COPYDATA, Integer(MyHandle), Integer(@CopyDataStruct));
end;



procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA;
.
.
procedure TRootForm.WMCopyData(var Msg: TWMCopyData);
var
s: string;
begin
if Msg.From = Application.Handle then // not root
Exit;


s := PAnsiChar(Msg.CopyDataStruct.lpData);
lblLog.Caption := s;
end;

mbshareat
جمعه 27 اردیبهشت 1398, 15:40 عصر
نمی دونم برای چی دکمه تشکر رو برداشتند.ممنونم.
این اواخر جستجوی تالار خراب شده؟چون چند بار شده دنبال چیزی گشتم پیدا نکردم.مثلا همین الآن گرید رو جستجو دادم هیچی پیدا نکرد

mbshareat
جمعه 27 اردیبهشت 1398, 15:54 عصر
می بخشید این دو قسمت کد رو برای چی گذاشتید؟


if AppHandle = 0 then
Exit;



if Msg.From = Application.Handle then // not root

Exit;

یوسف زالی
جمعه 27 اردیبهشت 1398, 17:16 عصر
اولی برای اینه که هندل ولید باشه، زیاد مهم نیست و می تونید برش دارید
دومی هم برای اینه که فرم به خودش استرینگ نفرسته، تو پروژه من مهم بود، ممکنه برای شما نباشه

mbshareat
شنبه 28 اردیبهشت 1398, 00:46 صبح
ممنون از توضیحتون