Показать полную графическую версию : Программное открытие ссылки
На WinForm имеется DataGridView, в ячейках которого содержатся ссылки на HTML страницы в Инете. При CellFormatting отображается только текст ссылки, при клике (CellContentClick) запускается процесс Process.Start(URI ссылки).
Ворос: как открывать такую ссылку в новом окне (если Браузер закрыт) и в новой вкладке (если есть окно Браузера), при этом чтобы фокус оставался на моем приложении?
Delirium
21-09-2009, 01:19
как открывать такую ссылку в новом окне (если Браузер закрыт) и в новой вкладке (если есть окно Браузера), при этом чтобы фокус оставался на моем приложении? »
Смотря какой браузер. К примеру, у меня Opera. При открытой фоново опере ссылки открываются в новой вкладке, а фокус остается на моей программе. Если закрыт, то открывает в новом окне.
Скорее всего, вручную задать способ открытия не получится, т.к. функцией Process.Start вы передаете параметр URL, а дальше его уже обрабатывает операционка, и процесс обработки уже не зависит от Вашей программы.
Если свёрнутое окошко запустить - покатит? ShowState = WS_MINIMIZED
Все дело в том, что:
1. при каждом нажатии на такую ссылку открывается новое окно IE и фокус переходит на него;
2. пробовал передавать методу Process.Start параметр ProcessStartInfo:
ProcessStartInfo startInfo = new ProcessStartInfo("IExplore.exe");
startInfo.WindowStyle = ProcessWindowStyle.Minimized;
startInfo.Arguments = link.NavigateUrl;
startInfo.CreateNoWindow = true;
Process.Start(startInfo);
Та же песня :(
Мне нужно, нажать несколько ссылок, потом перейти в окно Эксплорера...
вот так у меня сработало (XP, Explorer 6.0):
void __fastcall TForm1::Button1Click(TObject *Sender)
{
STARTUPINFO start_info = {sizeof(STARTUPINFO),
0, 0, 0, // screen info
100, 100, // position
320, 200, // size,
80, 25, 0, //
STARTF_USEPOSITION|STARTF_USESHOWWINDOW|STARTF_USESIZE,
SW_MINIMIZE};
PROCESS_INFORMATION process_info = {};
if (!CreateProcess(0,
"c:\\program files\\internet explorer\\iexplore.exe http://forum.oszone.net/forum-21.html",
0, 0, // default security
false, // no inheritance
NORMAL_PRIORITY_CLASS,
0, // default environment,
0,
&start_info,
&process_info))
{
ShowMessage("failed");
}
}
скромненько запускается в фоне, свёрнутое, и даже не моргает, что дескать обрати на меня внимание.
сделай то же самое для .net
Ээээ...
ShellExecute(0, "open", lpszAdress, 0, 0, SW_SHOWNA);
если я правильно понял задачу, то это решается в одну строку windows api.
Спасибо pva, но к сожалению я не профессиональный программист - любитель, и с С++ знаком слабо, так что у меня не получится сделать тоже самое в .NET :(
не получится сделать тоже самое в .NET »
попробуй выставить свойство типа flags в STARTF_USESHOWWINDOW. Смысл такой: если в NET просто делается класс-обёртка, и не контролируется поправка этого свойства при изменении других свойств, то ты подал команду: запустить процесс, минимизировать окно, но не использовать информацию о том, что ты хочешь его минимизировать. У меня нет описания нетовских классов под рукой, поэтому как оно называется точно сказать не могу. Но должно быть что-то вроде flags или mask.
#define STARTF_USESHOWWINDOW 0x00000001
#define STARTF_USESIZE 0x00000002
#define STARTF_USEPOSITION 0x00000004
#define STARTF_USECOUNTCHARS 0x00000008
#define STARTF_USEFILLATTRIBUTE 0x00000010
#define STARTF_RUNFULLSCREEN 0x00000020 // ignored for non-x86 platforms
#define STARTF_FORCEONFEEDBACK 0x00000040
#define STARTF_FORCEOFFFEEDBACK 0x00000080
#define STARTF_USESTDHANDLES 0x00000100
то есть тебе его надо установить в 1
или
если сможешь использовать ShellExecute, предложенный arrest, получится то же самое, но без бубна
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.