ارسال Ctrl+C به برنامه دیگر
سلام بر دوستان عزیز
من در برنامه نیاز دارم تصویری از فایل PDF بگیرم و ذخیره کنم.بعضی برنامه ها هستند که وقتی یک ناحیه رو انتخاب می کنیم خودکار تصویر رو به کلیپ برد می فرستند. اما الان در کامپیوتر ادوب آکروبات پرو دارم که چیزی در کلیپ برد نمیذاره. مجبوره یا کلیک روی منو رو شبیه سازی کنم یا Ctrl+C. کد SendMessage , keybd_event v رو امتحان کردم ولی بیفایده بود. من یک HotKey برای شیفت و W تعریف کردم که وقتی در برنامه اجراگر PDF (مثل فاکسیت ریدر) هستیم به برنامه خودم منتقل بشه و تصویر کلیپ برد رو با نام خاص ذخیره کند. اما وقتی به برنامه برمیگرده یه پیغام میاد که کلیپ برد فرمت تصویر نداره.لطفا راهنمایی کنید. یادمه قبلا هم شبیه سازی کلید دردساز و خیلی مواقع بیفایده بوده.من این کدها رو امتحان کردم:
keybd_event(VK_LCONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);}
H:=GetForeGroundWindow();
PostMessage(H, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(H, WM_KEYDOWN, Ord('C'),0);
PostMessage(H, WM_KEYUP, Ord('C'), 0);
PostMessage(H, WM_KEYUP, VK_CONTROL,0);
Application.ProcessMessages;
با این توضیح که برنامه پنجره جاری رو بررسی می کنه و GetForeGroundWindow برنامه ادوب آکروبات رو درست تشخیص میده.:بامزه:
نقل قول: ارسال Ctrl+C به برنامه دیگر
نقل قول:
نوشته شده توسط
mbshareat
سلام بر دوستان عزیز
من در برنامه نیاز دارم تصویری از فایل PDF بگیرم و ذخیره کنم.بعضی برنامه ها هستند که وقتی یک ناحیه رو انتخاب می کنیم خودکار تصویر رو به کلیپ برد می فرستند. اما الان در کامپیوتر ادوب آکروبات پرو دارم که چیزی در کلیپ برد نمیذاره. مجبوره یا کلیک روی منو رو شبیه سازی کنم یا Ctrl+C. کد SendMessage , keybd_event v رو امتحان کردم ولی بیفایده بود. من یک HotKey برای شیفت و W تعریف کردم که وقتی در برنامه اجراگر PDF (مثل فاکسیت ریدر) هستیم به برنامه خودم منتقل بشه و تصویر کلیپ برد رو با نام خاص ذخیره کند. اما وقتی به برنامه برمیگرده یه پیغام میاد که کلیپ برد فرمت تصویر نداره.لطفا راهنمایی کنید. یادمه قبلا هم شبیه سازی کلید دردساز و خیلی مواقع بیفایده بوده.من این کدها رو امتحان کردم:
keybd_event(VK_LCONTROL, 0, 0, 0);
keybd_event(Ord('C'), 0, 0, 0);
keybd_event(Ord('C'), 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, 0);}
H:=GetForeGroundWindow();
PostMessage(H, WM_KEYDOWN, VK_CONTROL, 0);
PostMessage(H, WM_KEYDOWN, Ord('C'),0);
PostMessage(H, WM_KEYUP, Ord('C'), 0);
PostMessage(H, WM_KEYUP, VK_CONTROL,0);
Application.ProcessMessages;
با این توضیح که برنامه پنجره جاری رو بررسی می کنه و GetForeGroundWindow برنامه ادوب آکروبات رو درست تشخیص میده.:بامزه:
از این کد کمک بگیر
procedure TForm1.Button1Click(Sender: TObject);
const
FullWindow = True;
var
Win: HWND;
DC: HDC;
Bmp: TBitmap;
WinRect: TRect;
Width: Integer;
Height: Integer;
begin
Form1.Hide;
try
Application.ProcessMessages;
Win := GetForegroundWindow;
if FullWindow then
begin
GetWindowRect(Win, WinRect);
DC := GetDC(Win);
end else
begin
Winapi.Windows.GetClientRect(Win, WinRect);
DC := GetDC(Win);
end;
try
Width := WinRect.Right - WinRect.Left;
Height := WinRect.Bottom - WinRect.Top;
Bmp := TBitmap.Create;
try
Bmp.Height := Height;
Bmp.Width := Width;
BitBlt(Bmp.Canvas.Handle, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
Bmp.SaveToFile('C:\Screenshot.bmp');
finally
Bmp.Free;
end;
finally
ReleaseDC(Win, DC);
end;
finally
Form1.Show;
end;
end;
نقل قول: ارسال Ctrl+C به برنامه دیگر
سلام
ممنونم.کد خوبیه ولی من در برنامه اجراگر PDF با ماوس محدوده تعیین کرده ام.خوشبختانه هنوز برنامه دیگری هست که نیاز به Ctrl+C نداره