Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Программное открытие ссылки (http://forum.oszone.net/showthread.php?t=151031)

avmir 20-09-2009 19:33 1223434

Программное открытие ссылки
 
На WinForm имеется DataGridView, в ячейках которого содержатся ссылки на HTML страницы в Инете. При CellFormatting отображается только текст ссылки, при клике (CellContentClick) запускается процесс Process.Start(URI ссылки).

Ворос: как открывать такую ссылку в новом окне (если Браузер закрыт) и в новой вкладке (если есть окно Браузера), при этом чтобы фокус оставался на моем приложении?

Delirium 21-09-2009 01:19 1223654

Цитата:

Цитата avmir
как открывать такую ссылку в новом окне (если Браузер закрыт) и в новой вкладке (если есть окно Браузера), при этом чтобы фокус оставался на моем приложении? »

Смотря какой браузер. К примеру, у меня Opera. При открытой фоново опере ссылки открываются в новой вкладке, а фокус остается на моей программе. Если закрыт, то открывает в новом окне.
Скорее всего, вручную задать способ открытия не получится, т.к. функцией Process.Start вы передаете параметр URL, а дальше его уже обрабатывает операционка, и процесс обработки уже не зависит от Вашей программы.

pva 21-09-2009 08:43 1223727

Если свёрнутое окошко запустить - покатит? ShowState = WS_MINIMIZED

avmir 21-09-2009 18:05 1224180

Все дело в том, что:
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);

Та же песня :(

Мне нужно, нажать несколько ссылок, потом перейти в окно Эксплорера...

pva 22-09-2009 13:40 1224701

вот так у меня сработало (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

Arrest 22-09-2009 17:15 1224868

Ээээ...
Код:

ShellExecute(0, "open", lpszAdress, 0, 0, SW_SHOWNA);
если я правильно понял задачу, то это решается в одну строку windows api.

avmir 23-09-2009 00:51 1225160

Спасибо pva, но к сожалению я не профессиональный программист - любитель, и с С++ знаком слабо, так что у меня не получится сделать тоже самое в .NET :(

pva 23-09-2009 06:50 1225238

Цитата:

Цитата avmir
не получится сделать тоже самое в .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, получится то же самое, но без бубна


Время: 09:52.

Время: 09:52.
© OSzone.net 2001-