PDA

View Full Version : سوال: ارتباط با مرورگر و دریافت اطلاعات از آن



behnamgholipoor
چهارشنبه 14 آبان 1393, 16:39 عصر
سلام خدمت همه دوستان و اساتید
میخوام رو برنامه ای کار کنم که با مرورگر ها در ارتباط هست برای مثال میخوام وقتی برنامه اجرا شد به System try بره و وقتی کاربر با مرورگری (مثلا کروم) کار کرد یه منویی تو مرورگر فعال بشه که با کلیک روی منو برنامه فعال بشه و اطلاعاتی مثل عنوان صفحه و url سایت در textbox های برنامه اضافه بشن.
آیا امکان نوشتن همچین برنامه ای هست ؟
دوستان اگه راهنمایی کنین ممنون میشم.

pedram.11
چهارشنبه 14 آبان 1393, 19:58 عصر
سلام لطفا بفرمائید هدفتون از برنامه چیه؟ ارتباط با مرورگر یا پیدا کردن آدرس سایتایی که یه سیستم کامپیوتری بهش متصل میشه؟ برای اولی که یکمی دردسر داره. برای دومی هم یکمی دردسر داره :لبخند: اما با اسنایف کردن پکت ها و ذخیره آدرس هایی که با استفاده از پروتکل http و متد get از سیستم درخواست میشه امکان پذیره

behnamgholipoor
چهارشنبه 14 آبان 1393, 21:06 عصر
برای مثال وقتی که با مرورگر کروم یا حالا هر مرورگری کار میکنم یه context menu ظاهر بشه و گزینه ای مثل درج لینک داشته باشه وقتی روی درج لینک کلیک شد اطلاعاتی مثل urlوtitle اون page به textbox های فرم ارسال بشن
امیدوارم منظورمو رسونده باشم.

pedram.11
چهارشنبه 14 آبان 1393, 22:04 عصر
شما برای هر مرور گر باید کد های مخصوص خودش رو بنویسید. هندل اون فرم رو بدست بیارید و اطلاعاتی که میخواید رو بدست بیارید که کار ساده ای نیست. اما بازهم میگم اگه هدف شما بدست آوردن آدرس سایتاییه مرورگرها و دیگر برنامه ها بهشون متصل میشن راه ساده تری هست

behnamgholipoor
پنج شنبه 15 آبان 1393, 00:48 صبح
ممنون از صبر و حوصله ای که دارین و جواب میدین
قسمت دوم جمله که میگین ساده تر هست رو لطف میکنین بیشتر توضیح بدین

behnamgholipoor
پنج شنبه 15 آبان 1393, 15:40 عصر
ممنون sagggad
دوستان لطف کردن ولی زیاد قابل فهم نبود

behnamgholipoor
پنج شنبه 15 آبان 1393, 15:44 عصر
این کد رو یکی از دوستان فرستاده



Application application = Application.Launch("foo.exe");
Window window = application.GetWindow("bar", InitializeOption.NoCache);
Button button = window.Get<Button>("save");
button.Click();




آیا با این کد میشه برنامه مدنظر رو نوشت ؟

behnamgholipoor
شنبه 17 آبان 1393, 00:33 صبح
کسی نمیتونه کمک کنه ؟

behnamgholipoor
شنبه 17 آبان 1393, 00:45 صبح
تو یکی از تاپیک های قدیمی کد زیر و پیدا کردم
کسی میتونه این کد رو توضیح بده یا بگه میشه برنامه رو با اون نوشت یا نه ؟!

using SHDocVw;

static void Main(string[] args) {

foreach (InternetExplorer item in new ShellWindows())
{
Console.WriteLine(item.LocationURL);
}
Console.ReadKey();

}

behnamgholipoor
یک شنبه 18 آبان 1393, 16:51 عصر
دوستان یعنی راهی نداره باید بیخیال این برنامه شم !؟

behnamgholipoor
چهارشنبه 21 آبان 1393, 15:56 عصر
یه سوال :
برنامه های مدیریت دانلود مثل IDM چطور با بیشتر مرورگر ها ارتباط برقرار میکنن و زمانی که شما روی لینکی کلیک میکنین اون لینک وارد لیست IDM میشه ؟

aliagamon
چهارشنبه 21 آبان 1393, 16:08 عصر
سلام .
الان وقت نمونه گذاشتن ندارم چندان درگیر کاری هستم اما شما باید از NDde و چند روش دیگه استفاده کنید ... چند ماه پیش حتی یکی از دوستان تو این زمینه یه کاپوننت پیدا کرده بودن که این کارو به راحتی انجام میداد براتون ...
شما برای مرورگر فایرفاکس اینا از NDde استفاده کنید ...
برای اینترنت اکسپلورر کار راحت تره کامپوننت نمیخواد از SHDocvw استفاده کنید ....(dll مال خوده ویندوزه ...)
البته این هم بد نیست :
http://www.codeproject.com/Articles/16236/URL-Web-Addresses-Logger
بعدا اومدم بیشتر توضیح میدم:لبخند:

behnamgholipoor
پنج شنبه 22 آبان 1393, 01:16 صبح
دوست عزیز aliagamon (http://barnamenevis.org/member.php?214213-aliagamon)
اگه لطف کنین و راهنمایی جامع تری بکنین ممنون میشم
یا نمونه ای بفرستید

aliagamon
پنج شنبه 22 آبان 1393, 11:33 صبح
سلام .
این کار برای هر مرورگر متفاوته ...
1.برای اینترنت اکسپلور همون طور که گفتم باید از SHDocvw استفاده کنید
2.برای فایرفاکس و اپرا هم باید از dde استفاده بشه
3.برای کروم یکم کار سخت تره چون روش بالا جواب نمیده ...
4.برای سافاری رو دقیقا نمیدونم روش راحت تری وجود داره یا نه اما مثل کروم میتونید انجام بدین(اینو اطلاعات زیادی ندارم)

اینترنت اکسپلورر :

از add reference تب COM شما Microsoft Internet Controls رو add کنید
بعد این کد رو بنویسین:

foreach (SHDocVw.InternetExplorer ie in new SHDocVw.ShellWindows())
{
MessageBox.Show(ie.LocationURL);
}

فایرفاکس و اپرا :

اول کامپوننت Ndde رو از اینجا بگیرین و به پروژه اضافه کنید:
http://ndde.codeplex.com/
بعد از این کد استفاده کنید :

string browser = "firefox";//ya opera
NDde.Client.DdeClient dde = new NDde.Client.DdeClient(browser, "WWW_GetWindowInfo");
dde.Connect();
string url = dde.Request("URL", int.MaxValue);
string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
dde.Disconnect();
MessageBox.Show( text[0].Substring(1));

کروم
برای کروم هم از این استفاده کنید

Process[] procsChrome = Process.GetProcessesByName("chrome");
foreach (Process chrome in procsChrome)
{
if (chrome.MainWindowHandle == IntPtr.Zero)
{
continue;
}

AutomationElement elm = AutomationElement.FromHandle(chrome.MainWindowHand le);
AutomationElement elmUrlBar = elm.FindFirst(TreeScope.Descendants,
new PropertyCondition(AutomationElement.NameProperty, "Address and search bar"));

if (elmUrlBar != null)
{
AutomationPattern[] patterns = elmUrlBar.GetSupportedPatterns();
if (patterns.Length > 0)
{
ValuePattern val = (ValuePattern)elmUrlBar.GetCurrentPattern(patterns[0]);
MessageBox.Show("Chrome URL found: " + val.Current.Value.toString());
}

behnamgholipoor
پنج شنبه 22 آبان 1393, 19:50 عصر
دوست عزیز aliagamon (http://barnamenevis.org/member.php?214213-aliagamon)
خیلی خیلی ممنون کمک بزرگی به من کردین خیلی دنبال این موضوع بودم که آخر شما جواب درست و دادین بازم ممنونم .
فقط دو تا سوال دیگه دارم اگه لطف کنین اینم جواب بدین ممنون میشم :
1-تو قسمت سورس کد اینترنت اکسپلورر عنوان هر پنجره باز دیگه هم تو Message Box نشون میده مشکل کجاست ؟
2-برنامه ای که من میخوام بنویسم Button ی به عنوان درج لینک داره ، من چطور باید تو همین Button کد نویسی کنم که تشخیص بده مرورگر جاری کدومه تا url اون رو Message کنه (کد همه مرورگرها رو باید با شرط خاصی تو همین یک Button بنویسم) ؟

aliagamon
پنج شنبه 22 آبان 1393, 20:59 عصر
جواب سوال اول رو باید بگم با SHDocvw نمیشه این کارو کرد یعنی در هر صورت همرو میده مگر اینکه بدونید تب فعال کدومه تا بتونید ادرس اونو بگیرین ... براش نمونه کد ندارم بزارم وقتم ندارم الان بعدا وقت بود براتون مینویسم شما خودتون با spy++ یه امتحانی بکنید یکم اشنایی داشته باشین مشکلتون جل میشه احتمالا ...
دومی رو هم اسون ترین راهش اینه تمام پروسس های در حال اجرا رو بگیرین ببینید کدوم مرورگر توشون وجود داره هرکدوم بود متد مربوطه رو اجرا کنید (البته مشکلاتی هم داره اما در کل اسون ترین راهه)

behnamgholipoor
یک شنبه 25 آبان 1393, 01:13 صبح
ممنون مشکل تا حدودی حل شد
فقط یه مشکل کوچیک دیگه هست اونم اینه که وقتی دوتا مرورگر با هم باز باشن نمیتونه url هر دو رو تو همون Textbox بریزه
به نظر شما اینجا باید از Tread استفاده کنم ؟

aliagamon
یک شنبه 25 آبان 1393, 14:33 عصر
بله اون مشکلو اطلاع داشتم اما راحت ترین راه اون بود ... شما میتونید تمام پروسس هارو بگردین نه اینکه یه مرورگر پیدا کردین چرخه رو متوقف کنید همه مرورگر هارو چک کنین مثلا اگه 3 مرورگر باز بود 3 متد مربوطه رو اجرا کنید ...
روش کار برنامتون چیه ؟ یعنی دریافت ادرس کجا انجام میشه وقتی فرد تو مرورگره اینکارو میکنه یا باید برگرده تو برنامه ؟
اگه یه shortcut سراسری تو سیستم تعریف کنید بهترین راهه یعنی مثلا فرد تو مرورگره کلید F9 رو بزنه و عملیات انجام بشه
روش بالا بهترین راهه چون شما میتونید handle پنچره فعال رو با استفاده از api های ویندوز بگیرین و بفهمین کدوم مرورگر در هنگام فشردن روش focus بوده
چون تو روش اول اگه من مرورگرم فایرفاکس باشه اما یه اپرا هم باز کرده باشم برای کار دیگه برنامه میاد هر دو url رو میگیره و این بسته به نوع کارتون ممکنه مشکل براتون ایجاد کنه (برا من مشکل ایجاد نکرد چون رو کنترل کودک کار میکردم)اما روش دوم اگه به کارتون بیدا بهترین حالت ممکنه ...
البته دقیقا تمیدونم با یک افزونه میشه فرمان به یک برنامه دیگه داد یا نه ... متاسفانه تو این زمینه کار نکردم زیاد اما اگه بتونید یه افزونه برای مرورگر بنویسید که به برنامه پارامتر بفرسته همه ی مشکلاتتون چون با افزونه ادرس پیج فعال رو هم راحت میشه بدست اورد
روش کار رو بگین تا بهتر بشه ایده داد ...:لبخند:

behnamgholipoor
دوشنبه 26 آبان 1393, 21:35 عصر
خودمم تو فکر افزونه هستم ولی زیاد وارد نیستم توش
الآن برنامه من urlوtitle مرورگر و به صورت خودکار وارد فرم ثبت لینک ، تو Textbox ها میریزه روش کارش اینجوریه که :
برنامه یک فرم کوچک داره که بالای همه پنجره ها میمونه (مثل آیکون Flash Get) . وقتی کاربر روش کلیک کنه آدرس لینک رو از مرورگر میگیره و میفرسته به فرم ثبت url (که خودمم فکر میکنم زیاد جالب نیست حالا باید روش کار کنم)
ولی وقتی چند تا مرورگر با هم باز باشن به مشکل میخورم
اگه بخوام چیزی شبیه IDM بنویسم که اگه تعداد ورودی زیاد شد اونها رو لیست کنه و بعد به ترتیب وارد کنه چیکار کنم ؟
برای مرورگر اوپرا هم هرکاری کردم نتوستم url ازش بگیرم!

behnamgholipoor
چهارشنبه 28 آبان 1393, 11:31 صبح
سلام به همه دوستان
دوستان سوال قبلی رو دوباره می پرسم کسی تونست راهنمایی کنه

اگه بخوام چیزی شبیه IDM بنویسم که اگه تعداد ورودی زیاد شد اونها رو لیست کنه و بعد به ترتیب وارد کنه چیکار کنم ؟

behnamgholipoor
جمعه 30 آبان 1393, 15:00 عصر
دوستان کسی نظری ، پیشنهادی ، راه حلی نداره !؟

behnamgholipoor
جمعه 07 آذر 1393, 19:37 عصر
دوستان لطفا نظر یا پیشنهاد بدین