It is possible to do this in a very hacky and prone to breakage way using the Win32 API function FindWindow.
The following C++ example that finds a running instance of the windows Calculator and gets the value of the edit field in it. You should be able to do something similar in C#. Disclaimer: I haven't actually checked to make sure this code compiles, sorry. :)
float GetCalcResult(void)
{
float retval = 0.0f;
HWND calc= FindWindow("SciCalc", "Calculator");
if (calc == NULL) {
calc= FindWindow("Calc", "Calculator");
}
if (calc == NULL) {
MessageBox(NULL, "calculator not found", "Error", MB_OK);
return 0.0f;
}
HWND calcEdit = FindWindowEx(calc, 0, "Edit", NULL);
if (calcEdit == NULL) {
MessageBox(NULL, "error finding calc edit box", "Error", MB_OK);
return 0.0f;
}
long len = SendMessage(calcEdit, WM_GETTEXTLENGTH, 0, 0) + 1;
char* temp = (char*) malloc(len);
SendMessage(calcEdit, WM_GETTEXT, len, (LPARAM) temp);
retval = atof(temp);
free(temp);
return retval;
}
In order to find out the right parameters to use in FindWindow and FindWindowEx, use the Visual Studio tool Spy++ to inspect a running instance of your browser window. Sorry, I don't have a code sample for web browsers on-hand, but it should be possible. Note that your solution will be Windows OS specific, and also changes to the UI architecture in future versions of the web browsers could cause your solution to stop working.
Using this method to lift the URL right out of the address bar obviously only works for the current tab. I can't see how this would work for all tabs unless you did something really tricky like simulating user input to cycle through the tabs. That would be very intrusive and a user could easily mess up your application by interrupting it with input of their own, but it might work if you're writing something that runs unattended, like an automated test script. If that is the case, you may want to look into other tools like AutoIt.
This advice is all paraphrased from a blog post I once wrote. Good luck!