Конференция "Основная" » Блокировать попытки приложения выйти на передний план [D7, WinXP]
 
  • Tack (26.02.08 12:08) [0]
    Привет.

    Запускаю стороннее приложение через CreateProcess с флагом SW_SHOWMINNOACTIVE, чтобы оно отработало и закрылось, не перехватывая фокус ввода (например, при вызове через планировщик каждый 5 минут).

    При запуске данное приложение хоть и минимизируется, но все равно его кнопка на панели задач активируется и фокус ввода из текущего окна уходит.

    Очевидно, данное приложение само себя выводит на передний план.

    Можно ли как-нибудь блокировать его попытки захватить фокус?
  • Thrasher © (26.02.08 12:59) [1]
    Не могу понять, где  CreateProcess вызывается с параметром SW_SHOWMINNOACTIVE.
  • Tack (26.02.08 13:22) [2]

    var
     ExeFile: String;
     si: TStartupInfo;
     pi: TProcessInformation;
    begin
     ZeroMemory(@si, SizeOf(si));
     si.cb := SizeOf(si);
     si.dwFlags := STARTF_USESHOWWINDOW;
     si.wShowWindow := SW_SHOWMINNOACTIVE;

     if not CreateProcess(PAnsiChar(ExeFile), PAnsiChar(ExeFile), nil, nil, FALSE,
       NORMAL_PRIORITY_CLASS, nil, nil, si, pi) then ...

  • clickmaker © (26.02.08 13:23) [3]
    а почему не SW_HIDE?
  • Tack (26.02.08 13:27) [4]

    > а почему не SW_HIDE?
    >


    Приложение после показа всегда выходит на передний план. Минимизация срабатывает, SW_HIDE не срабатывает

    скорее всего там в коде приложения где-то стоит ShowWindow с выводом своего окна наперед
  • Thrasher © (26.02.08 14:21) [5]
    Пошли окну сообщение  WM_Close. Handle уже есть ведь
  • Tack (26.02.08 15:04) [6]
    Ключевые слова здесь
    не перехватывая фокус ввода

    закрыть я его всегда успею
  • Leonid Troyanovsky © (26.02.08 22:13) [7]

    > Tack   (26.02.08 15:04) [6]

    Если [2] исполняется из foreground процесса, то все объяснимо, msdn.
    А wShowWindow пускаемое  приложение вольно проигнорировать.
    (Хотя, "с выводом своего окна наперед" - преувеличение).

    --
    Regards, LVT.
  • Tack (27.02.08 10:21) [8]

    > (Хотя, "с выводом своего окна наперед" - преувеличение).


    почему?
    ShowWindow(hwnd, SW_SHOWNORMAL) - разве не активирует окно на переднем плане?
  • Leonid Troyanovsky © (27.02.08 13:07) [9]

    > Tack   (27.02.08 10:21) [8]

    > ShowWindow(hwnd, SW_SHOWNORMAL) - разве не активирует окно
    > на переднем плане?

    Активирует, при первом вызове.
    Но, не все так просто, приложение может и не делать то, что
    оно must use or must call (see also msdn: ShowWindow Function).

    А речь, видимо, именно о подобном.

    --
    Regards, LVT.
  • Tack (27.02.08 13:17) [10]
    И кто его, это приложение, написал на мою голову... :(

    спасибо за консультацию
 
Конференция "Основная" » Блокировать попытки приложения выйти на передний план [D7, WinXP]
Есть новые Нет новых   [134483   +44][b:0][p:0.001]