Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Активировать главное окно приложения по PID-у


Автор: Alca 5.11.2012, 20:26
Как активировать (вывести на передний план рабочего стола) главное окно приложения по PID-у (id процесса)?

Автор: loneybibi 6.11.2012, 00:08
Цитата(Alca @ 5.11.2012,  19:26)
Как активировать (вывести на передний план рабочего стола) главное окно приложения по PID-у (id процесса)?

думаю кросс-платформенно никак ! это зависит от компоновщика окон ОС, в Виндовс это API, в линукс X.org(DBus) думаю надо будет под каждую ОС свой код писать..

Автор: borisbn 6.11.2012, 09:09
Я это делал под Windows таким (извращенским на мой взгляд) способом:
Код
BOOL CALLBACK nextWindow( HWND hwnd, LPARAM lParam )
{
    DWORD processId = (DWORD)lParam;
    DWORD wndProcessId = (DWORD)-1;
    GetWindowThreadProcessId( hwnd, &wndProcessId );
    if ( wndProcessId == processId )
    {
        SetForegroundWindow( hwnd );
        return FALSE;
    }
    return TRUE;
}

void setFGWindowByPID( DWORD processId )
{
    ::EnumWindows( nextWindow, (LPARAM)processId );
}

Автор: tzirechnoy 6.11.2012, 14:13
В линуксе примерно такжэ, как и в винде -- получить (перебрать) список окон, определить для каждого его PID (в случае линукса -- PID и host, на самом деле, окна с таким PID могут быть осзданы разными хостами), если какой-то подходит -- активировать.

Список окон нормальный получается из свойства (property) _NET_CLIENT_LIST у root window. Более полный -- перебором через XQueryTree на root windows (ну, примерно как http://lj.rossia.org/users/ketmar/709591.html?thread=4565719#t4565719). 

PID записан в свойство _NET_WM_PID у окна, хост -- в WM_CLIENT_MACHINE.

Активируется окно -- как описано http://standards.freedesktop.org/wm-spec/1.4/ar01s03.html#id2746435.

Автор: Alca 7.11.2012, 22:07
http://dev.libqxt.org/libqxt/src/42b2525cb578/src/gui/qxtwindowsystem.h

http://dev.libqxt.org/libqxt/src/42b2525cb578/src/gui/qxtwindowsystem_win.cpp
http://dev.libqxt.org/libqxt/src/42b2525cb578/src/gui/qxtwindowsystem_x11.cpp

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)