ورود

View Full Version : سوال: نحوه اجرای دستورات MsPaint از طریق خط فرمان



mehdi_mousavi
شنبه 28 آبان 1401, 13:50 عصر
سلام بدوستان
آیا در MsPaint میتونیم Save و Save As و بقیه ی دستورات رو از طریق خط فرمان اجرا کنیم؟
اجرای دستورات پینت از طریق خط فرمان رو جستجو کردم ولی چیزی پیدا نکردم
من این کار رو از طریق دلفی میخوام انجام بدم مثلا: Winexe(d:\MsPaint.exe c:\1.jpg d:\2.jpg /Save as)
لطفا راهنمایی کنید. متشکرم

یوسف زالی
شنبه 28 آبان 1401, 19:50 عصر
سلام. چه نیازی اصلا به MsPaint هست؟ مستقیم کپی کنید بره دیگه.
در ضمن اون دستور WinExec رو دیگه استفاده نکنید، ممکنه دیگه ساپورت نشه

mbshareat
شنبه 28 آبان 1401, 22:25 عصر
برای باز کردن با MsPaint میتونید این رو به کار ببرید


Uses
ShellApi;
...
ShellExecute(Handle, 'open', PChar('mspaint'), PChar('c:\A.bmp'), nil,
SW_SHOW);

اما برای ذخیره CopyFile('c:\A.bmp','c:\B.bmp',False); کافیه
کار با هندل برنامه ها هم ممکنه براتون جالب باشه که زیاد وارد نیستم.یه مثال کار با نوت پد این هست(بعد از باز کردن نوت پد این کد رو اجرا کنید:
var
notepad, edit: HWND;
begin
notepad := FindWindow('notepad', nil);
edit := FindWindowEx(notepad, FindWindow('Edit', nil), nil, nil);

SendMessage(edit, WM_CHAR, dword('H'), 0);
SendMessage(edit, WM_CHAR, dword('e'), 0);
SendMessage(edit, WM_CHAR, dword('y'), 0);
end;

mbshareat
شنبه 28 آبان 1401, 23:19 عصر
function FindWindowByTitle(WindowTitle: string): THandle;
Function WindowClassName(H:THandle):String;
Var
aName:array [0..255] of char;
begin
GetClassName(H,aName, 256);
Result:=aName;
end;
var
NextHandle: THandle;
NextTitle: array[0..260] of char;
begin
NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST);
while NextHandle > 0 do
begin
GetWindowText(NextHandle, NextTitle, 255);
if (Pos(WindowTitle, StrPas(NextTitle)) <> 0)
And (WindowClassName(NextHandle)<>'CabinetWClass') then
begin
Result := NextHandle;
Exit;
end
else
NextHandle := GetWindow(NextHandle, GW_HWNDNEXT);
end;
Result := 0;
end;
procedure ClickXY(X,Y:Word;LeftButton:Boolean=True);
var
Pnt : TPoint;
begin
Application.ProcessMessages;
Pnt.x := Round(X * (65535 / Screen.Width)) ;
Pnt.y := Round(Y * (65535 / Screen.Height)) ;
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Pnt.x, Pnt.y, 0, 0) ;
If LeftButton=True then
Begin
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LeftDOWN, Pnt.x, Pnt.y, 0, 0) ;
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LeftUP, Pnt.x, Pnt.y, 0, 0) ;
End
Else
Begin
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RightDOWN, Pnt.x, Pnt.y, 0, 0) ;
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RightUP, Pnt.x, Pnt.y, 0, 0) ;
End;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
WindowRect, WindowClientRect: TRect;
Origin: TPoint;
Ofs: TPoint;
Handle:THandle;
begin
Handle:= FindWindowByTitle('Paint');
If Handle=0 then
Begin
ShowMessage('MsPaint is not Running!')
Exit;
End;
ForceForegroundWindow(Handle);
GetWindowRect(Handle,WindowRect);
ClickXY(WindowRect.Left+10,WindowRect.Top+50,True) ;
end;

وقتی MsPaint باز بود میتونید اجرا کنید.
کد باز کردن برنامه هم نوشتم خوب کار نکرد:بامزه:

mehdi_mousavi
یک شنبه 29 آبان 1401, 11:21 صبح
ضمن تشکر از راهنمایی مدیر محترم و بقیه دوستان
ببینید من یک فایل عکس دارم از نوع bmp که این فایل باید:
1- باز بشه
2- ادیت بشه
3- در یک فایل با نام جدید save as بشه
این کار باید حدود 200 یا 300 بار انجام بشه (یعنی فایل عکس اصلی 300 بار ویرایش شده و ذخیره میشه یعنی 300 فایل bmp جدید در کنار فایل اصلی ساخته میشه)
این کار برای یک فایل bmp انجام میشه تعداد فایلهای bmp حدود 500 تا هست یعنی اگه بخوام دستی این کار رو در برنامه paint انجام بدم 150000 بار باید save as کنم :ناراحت:
منظور من اینه که برای راحتی کار در محیط دلفی با کد نویسی این کار رو انجام بدم
متشکرم

یوسف زالی
یک شنبه 29 آبان 1401, 11:52 صبح
سلام. فایل رو با دلفی با شی TBitMap باز کنید، ادیت کنید، سیو کنید. به همین راحتی. پینت و شل هم نیازی ندارید.

mehdi_mousavi
دوشنبه 30 آبان 1401, 13:18 عصر
ممنون از لطف شما واقعا امیدوارم به همین راحتی که گفتید باشه
برای open کردن فایل عکس و save as کردنش میشه از:
bitmap.LoadFromFile
bitmap.SaveToFile
استفاده کرد ولی برای ویرایش عکس مثل محیط MsPaint باید چکار کنم؟
امکانش هست یه مثال بزنید لطفا
متشکرم

یوسف زالی
دوشنبه 30 آبان 1401, 14:40 عصر
ویرایش از قبل مشخصه؟ چه کاری روش می خواهید انجام بدید؟ واترمارک؟

mehdi_mousavi
دوشنبه 30 آبان 1401, 17:15 عصر
ویرایش از قبل مشخصه؟ چه کاری روش می خواهید انجام بدید؟ واترمارک؟

ممنون از شما که وقت میگذارید امیدوارم این برنامه اونطور که میخوام به نتیجه برسه

منظورم از ویرایش فایل دقیقاْ همون کارهایی هست که در برنامه ی MsPaint بر روی یک فایل عکس(BMP) میشه انجام داد مثل: Cut, Paste, Copy, Select, Select All, Zoom in, Zoom Out

توضیح اینکه ویرایش روی فایل BMP اصلی باید کاملا دستی انجام بشه چون تمام فایلهای BMP اصلی (حدود۵۰۰ فایل) با هم فرق دارن و ویرایش اونهارو نمیشه با کد نویسی انجام داد

فقط Open و Save As کردن فایل اصلی بوسیله ی کد نویسی انجام میشه.

مثلا یه فرم داریم که دوتا Button داره یکی Open و یکی Save As با زدن کلید Open فایل عکس مورد نظر (یعنی فایل اصلی) باز میشه

و من بصورت دستی ویرایش های لازم مثل (...-cut-paste-select) رو انجام میدم

و بعد با زدن کلید Save As فایل اصلی ویرایش شده با اسم جدید (که این اسم بوسیله برنامه ایجاد شده) ذخیره میشه.

یوسف زالی
سه شنبه 01 آذر 1401, 03:57 صبح
اگر اوتاماتیک نمی شه کرد به نظر تنها راه همین بود که دوستمون براتون توضیح داد.