PDA

View Full Version : سوال: گرفتن متنهای انتخاب شوده‌



akar_program
دوشنبه 07 آذر 1390, 21:04 عصر
سلام دوستان من میخواهم هر نویشته‌ی كه‌ انتخاب كردم باد میرم برنامه‌ مون اجرا میكنم اون نویشته‌ داخل برنامه‌مون نیشون بدم منسلن من یك برنامه‌ دارم كه‌ داخل برنامه‌ یك memo دارد من میا تو یك جا در سیستم یا یك سایت نویشته‌ی با حالت انتخاب در میارم باد میرم برنامه‌ مون اجرا میكنم میخواهم اون نویشته‌ی انتخاب شوده‌ داخلی memoی برنامه‌ نویشون بدم خیلی ممنون م هامكاری بكنن

عقاب سیاه
دوشنبه 07 آذر 1390, 21:35 عصر
بدون فشار دادن هیچ کلیدی؟ همین طوری خودکار پس از انتخاب شدن؟
بعد نرم افزار شما پس از انتخاب متن فعال میشه؟

akar_program
دوشنبه 07 آذر 1390, 22:01 عصر
بلی باد از انتخاب من برنامه‌مون اجرا میكنم

عقاب سیاه
دوشنبه 07 آذر 1390, 22:05 عصر
خوب این جوری که نمیشه!
فکر کنم! - من در اون حد نیستم که بخوام جوابتون را بدم و فقط این جواب در حد همین یه کم که می دونم- فکر کنم باید قبلش یه سرویس ایجاد کنید که سلکت شدن متن ها را کنترل کنه(hook) و اگه سلکتی انجام شد اون متن را کپی کنه توی کلیپ آرت.
بعد از باز شدن برنامه هم خودکار متن پیست شه در ممو!

akar_program
دوشنبه 07 آذر 1390, 22:19 عصر
فکر کنم باید قبلش یه سرویس ایجاد کنید که سلکت شدن متن ها را کنترل کنه(hook) و اگه سلکتی انجام شد اون متن را کپی کنه توی کلیپ آرت.

خوب میشه‌ بگید چطور سلیكت hock كنم
و اگر دوستانی دیگه‌ پیشنهادی دارن بگن ممنون یا ان كه‌ نمونه‌ بفرستن

عقاب سیاه
دوشنبه 07 آذر 1390, 22:29 عصر
ببینید از نظر من دو راه وجود داره (به ذهنم می رسه)
اول این که نرم افزار از قبل باز باشه و شما بعد از انتخاب متن با فشردن یه کلید یا کپی کردن اون متن با استفاده از توابع کلیپ آرت یا hotkey اون متن را دریافت کنید
یا روش دوم که hook که فکر کنم یکم توی سایت بگردید به نتیجه برسید. من شخصا بلد نیستم ولی اگه چیزی جستم حتما براتون همین جا میزارمش

akar_program
سه شنبه 08 آذر 1390, 18:36 عصر
سلام كسی میتواند یك میسال بزند

loo30fer
سه شنبه 08 آذر 1390, 20:02 عصر
یک کد نمونه براتون گذاشتم عملکرد کد بدین شکل هست که هر متنی رو که توی Notepad انتخاب کنید به Memo اضافه میشه:
function CurrentSelectedText: string;
var
hFocus: hWnd;
aStart, aEnd: integer;
Buff: array[0..65535] of char;
begin
AttachThreadInput(GetCurrentThreadId, GetWindowThreadProcessId(GetForegroundWindow), true);
hFocus:= GetFocus;
SendMessage(hFocus, WM_GETTEXT, 65535, integer(@buff));
SendMessage(hFocus, EM_GETSEL, Integer(@aStart), Integer(@aEnd));
if GetForegroundWindow=FindWindow('Notepad',nil) then
result:= Copy(StrPas(Buff), 1+aStart, aEnd-aStart);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if CurrentSelectedText<>'' then
Memo1.Lines.Add(CurrentSelectedText);
end;

akar_program
سه شنبه 08 آذر 1390, 21:42 عصر
میتوانید نمونه‌ی كامل با دلفی بفرستید ممنونمیشم

loo30fer
سه شنبه 08 آذر 1390, 21:56 عصر
بفرمایید نمونه براتون ضمیمه کردم.

akar_program
سه شنبه 08 آذر 1390, 22:54 عصر
پس میشه‌ كاری كرد برای هر جا بشه‌ یانی اگر توی ئینترنیت بود هم بگیرد

javad p
چهارشنبه 09 آذر 1390, 14:18 عصر
خب شما تو همون کد loo30fer شرط اینکه پنجره رویی notepad باشه رو حذف کنی حله دیگه
if GetForegroundWindow=FindWindow('Notepad',nil) then
این شرط رو حذف کن

Mahmood_M
جمعه 11 آذر 1390, 20:09 عصر
خب شما تو همون کد loo30fer شرط اینکه پنجره رویی notepad باشه رو حذف کنی حله دیگه
if GetForegroundWindow=FindWindow('Notepad',nil) then
این شرط رو حذف کن
صفحات اینترنتی قضیشون متفاوته و به این سادگیها نیست ، برای گرفتن متن درون پنجره ی Internet Explorer میشه از این تابع استفاده کرد :

function GetSelectedIEtext : String;
var
I : Integer;
SW : IShellWindows;
IE : HWND;
begin
IE := FindWindow('IEFrame', nil);
SW := CoShellWindows.Create;
for I := SW.Count - 1 downto 0 do
begin
if (Sw.Item(I) as IWebbrowser2).hwnd = IE then
begin
Result := variant(Sw.Item(I)).Document.Selection.createRange .Text;
break;
end;
end;
end;

برای سایر Browser ها مطمئن نیستم که اگر نام کلاس Browser شون رو در تابع قرار بدیم ، تابع بالا برای اونها هم جواب میده یا نه !

akar_program
شنبه 12 آذر 1390, 18:11 عصر
صفحات اینترنتی قضیشون متفاوته و به این سادگیها نیست ، برای گرفتن متن درون پنجره ی Internet Explorer میشه از این تابع استفاده کرد :

function GetSelectedIEtext : String;
var
I : Integer;
SW : IShellWindows;
IE : HWND;
begin
IE := FindWindow('IEFrame', nil);
SW := CoShellWindows.Create;
for I := SW.Count - 1 downto 0 do
begin
if (Sw.Item(I) as IWebbrowser2).hwnd = IE then
begin
Result := variant(Sw.Item(I)).Document.Selection.createRange .Text;
break;
end;
end;
end;

برای سایر Browser ها مطمئن نیستد که اگر نام کلاس Browser شون رو در تابع قرار بدیم ، تابع بالا برای اونها هم جواب میده یا نه !
سلام میشه‌ این با یك میسال تو خود دلی بزنید ممنونم

akar_program
دوشنبه 14 آذر 1390, 18:38 عصر
سلام میشه‌ بگید چطور این كد ایستفاده‌ كنم م م