سلام
من می خوام تو سی شارپ بدونم الان هر مرورگر (اکسپلورر - کروم - فایر فاکس و..)که باز هست چه url یا آدرس سایتی رو باز کرده و از اون تو برنامم استفاده کنم خیلی گیره اینم لطفا کمکم کنید
با تشکر
سلام
من می خوام تو سی شارپ بدونم الان هر مرورگر (اکسپلورر - کروم - فایر فاکس و..)که باز هست چه url یا آدرس سایتی رو باز کرده و از اون تو برنامم استفاده کنم خیلی گیره اینم لطفا کمکم کنید
با تشکر
برای هر مرورگری روش متفاوته ...
برای اینترنت اکسپلورر ازز 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")
سافاری رو خبر ندارم(اگه بشه من بلد نیستم)
کروم رو هم میشه انجام داد (من تاحالا نکردم) وقت کردم یکم تحقیق میکنم و تست میکنم نتیجه رو میگم
امید وارم به نتیجه برسی ...ولبته برای مقاصد خوب استفاده کنی...
برای کروم هیچ راه راحتی پیدا نکردم....فعلا برای اینکه کارت راه بیوفته از این استفاده کن (یکمی پیچیده میشه کار ولی خیلی هم سخت نیست)
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);
}
امیدوارم به مشکل نخوری.....بازم مطمئن نیستم خوب کار کنه ....
ممنون خیلی عالی بود