PDA

View Full Version : بدست آوردن url سایت iهای در حال بازدید در کامپیوتر



mehdi.ae
دوشنبه 11 شهریور 1392, 13:15 عصر
سلام
من می خوام تو سی شارپ بدونم الان هر مرورگر (اکسپلورر - کروم - فایر فاکس و..)که باز هست چه url یا آدرس سایتی رو باز کرده و از اون تو برنامم استفاده کنم خیلی گیره اینم لطفا کمکم کنید
با تشکر

aliagamon
دوشنبه 11 شهریور 1392, 18:22 عصر
برای هر مرورگری روش متفاوته ...
برای اینترنت اکسپلورر ازز SHDocVw استفاده کنید...

SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
string filename;
foreach (SHDocVw.InternetExplorer ie in shellWindows)
{
filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLo wer();
if (filename.Equals("iexplore"))
{
string[] urlParts = (ie.LocationURL.ToString()).Split('/');
string website = urlParts[2];

}
}

برای فایرفاکس و اپرا باید از DDE اسفاده کنی...http://ndde.codeplex.com/
و اینطوری استفاده میشه:

private string GetBrowserURL(string browser) {
try {
DdeClient dde = new DdeClient(browser, "WWW_GetWindowInfo");
dde.Connect();
string url = dde.Request("URL", int.MaxValue);
string[] text = url.Split(new string[] { "\",\"" }, StringSplitOptions.RemoveEmptyEntries);
dde.Disconnect();
return text[0].Substring(1);
} catch {
return null;
}
}

و تابع برای اوپرا و فایرفاکس اینطوری استفاده میشه:


GetBrowserURL("opera")
GetBrowserURL("firefox")

سافاری رو خبر ندارم(اگه بشه من بلد نیستم:لبخند:)
کروم رو هم میشه انجام داد (من تاحالا نکردم) وقت کردم یکم تحقیق میکنم و تست میکنم نتیجه رو میگم
امید وارم به نتیجه برسی ...ولبته برای مقاصد خوب استفاده کنی...

aliagamon
دوشنبه 11 شهریور 1392, 21:21 عصر
برای کروم هیچ راه راحتی پیدا نکردم....فعلا برای اینکه کارت راه بیوفته از این استفاده کن (یکمی پیچیده میشه کار ولی خیلی هم سخت نیست)

private const int WM_GETTEXTLENGTH = 0Xe;
private const int WM_GETTEXT = 0Xd;

[DllImport("user32.dll")]
private extern static int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
[DllImport("user32.dll")]
private extern static int SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam);
[DllImport("user32.dll", SetLastError = true)]
private extern static IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle);

public static string getChromeUrl(IntPtr winHandle)
{
string browserUrl = null;
IntPtr urlHandle = FindWindowEx(winHandle, IntPtr.Zero, "Chrome_AutocompleteEditView", null);
const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
int length = SendMessage(urlHandle, WM_GETTEXTLENGTH, 0, 0);
if (length > 0)
{
SendMessage(urlHandle, WM_GETTEXT, nChars, Buff);
browserUrl = Buff.ToString();

return browserUrl;
}
else
{
return browserUrl;
}

}

public static Intptr GetChromeHandle()
{
IntPtr ChromeHandle = default(IntPtr);
Process[] Allpro = Process.GetProcesses();
foreach (Process pro in Allpro)
{
if (pro.ProcessName == "chrome")
{
ChromeHandle = pro.MainWindowHandle;
break;
}
}
return ChromeHandle;
}


....خود کد پیچیده هست ولی نحوه استفادش آسونه

private IntPtr CHandle = GetChromeHandle();
if (! CHandle,Equals(Intptr.Zero))
{
string url = getChromeUrl(CHandle);
}

امیدوارم به مشکل نخوری.....بازم مطمئن نیستم خوب کار کنه ....

mehdi.ae
سه شنبه 12 شهریور 1392, 23:57 عصر
ممنون خیلی عالی بود