Конференция "WinAPI" » Управление процессами с определенным PID [D7, Win2k, WinXP]
 
  • Morgan128 (23.10.09 10:13) [0]
    Добрый день.
    Есть несколько одинаковых процессов (например mstsc.exe) различных только по PID. Можно ли переключаться между этими процессами по нажатию горячих клавиш (например ctrl+1 - на первый процесс, ctrl+2 - на второй и т.д.) так, чтобы доступ к другим блокировался? То есть пока первый процесс активен другие находятся в свернутом виде и их можно вызвать только по горячей клавише.
  • Сергей М. © (23.10.09 10:18) [1]
    Твои процессы-то ? Или чужие ?
  • Morgan128 (23.10.09 10:27) [2]
    мои, на локальном компе.
  • Сергей М. © (23.10.09 10:32) [3]
    Тогда можно.
  • brother © (23.10.09 10:33) [4]
    а теперь будет логичный вопрос: как или дайте код)
  • Morgan128 (23.10.09 10:36) [5]
    Ага, а заодно можно ли запустить приложение назначив ему свой PID и как это сделать?
  • Morgan128 (23.10.09 10:37) [6]
    to Сергей М.
    Как это сделать, хотя бы какими командами - подскажите, что бы знать что искать.
  • brother © (23.10.09 10:38) [7]
    > назначив ему свой PID

    низя.
  • Morgan128 (23.10.09 10:42) [8]
    Ок, тогда с управлением подскажите. Как получить PID процесса я нашел.
  • Morgan128 (23.10.09 10:47) [9]
    Еще вопрос: Среди выполняемых процессов можно отфильтровать определенные процессы по названию для получения их PID? Дабы не считывать все процессы подряд.
  • brother © (23.10.09 10:49) [10]
    ты хоть один pid процесса получил в своей программе?
  • Morgan128 (23.10.09 11:01) [11]
    function GetProcessID(Exename: string): DWORD;
  • Morgan128 (23.10.09 11:03) [12]
    to brother
    А что? Сомневаетесь, что я на это способен? :)
    Я просто никогда не работал с WinAPI. А ща потребовалось.
  • brother © (23.10.09 11:05) [13]
    > Среди выполняемых процессов можно отфильтровать определенные
    > процессы по названию

    получаешь список всех процессов
    вызываешь GetProcessID только для нужных
  • Morgan128 (23.10.09 11:07) [14]
    Понятно. Тогда остался только первый вопрос: как этим всем управлять :)
  • brother © (23.10.09 11:08) [15]
    > как этим всем управлять

    нууу, это программу надо писАть...
  • Morgan128 (23.10.09 12:27) [16]
    Блин, умники. Нормально ответить нельзя? Что, стандартных функций нет?
  • Сергей М. © (23.10.09 13:20) [17]

    > как этим всем управлять


    Что значит "управлять" ?


    > пока первый процесс активен другие находятся в свернутом
    > виде


    Процесс не может быть "активен" или "свернут".
    Активным и.или свернутым может быть окно, порожденное потоком процесса.
  • Morgan128 (23.10.09 13:25) [18]
    Если вы все равно поняли, что я имею в виду, зачем задавать вопросы?
    1. Управлять:
    > Есть несколько одинаковых процессов (например mstsc.exe)
    > различных только по PID. Можно ли переключаться между этими
    > процессами по нажатию горячих клавиш (например ctrl+1 -
    > на первый процесс, ctrl+2 - на второй и т.д.) так, чтобы
    > доступ к другим блокировался? То есть пока первый процесс
    > активен другие находятся в свернутом виде и их можно вызвать
    > только по горячей клавише.


    > Сергей М. ©   (23.10.09 10:32) [3]
    >
    > Тогда можно.

    2.
    > Процесс не может быть "активен" или "свернут".
    > Активным и.или свернутым может быть окно, порожденное потоком
    > процесса.
    Ну оговорился, ну окно. Все равно ведь понятно.
  • clickmaker © (23.10.09 13:38) [19]
    > [18] Morgan128   (23.10.09 13:25)

    процесс запускается - ищем окна с таким же классом, сворачиваем.
    при попыике разворота окна, проверяем, нет ли активного (GetForegroundWindow) окна с таким же классом. Если есть, не даем развернуть.

    > по нажатию горячих клавиш

    RegisterHotKey()
  • Сергей М. © (23.10.09 13:44) [20]
    Регистрация горяцей клавиши - RegisterHotKey()
    Управление визуальным состоянием и активностью окна - ShowWindow()
  • Leonid Troyanovsky © (23.10.09 14:25) [21]

    > Morgan128   (23.10.09 13:25) [18]

    > > на первый процесс, ctrl+2 -

    WM_SETHOTKEY

    --
    Regards, LVT.
  • Юрий Зотов © (26.10.09 03:56) [22]
    > Morgan128   (23.10.09 13:25) [18]

    Создание процесса: CreateProcess из отдельного потока. Запоминаем полученные хэндлы нового процесса и его главного потока в массивах, затем вызываем WaitForSingleObject. По окончании ожидания закрываем оба хэндла и удаляем их из массивов.

    Горячие клавиши - RegisterHotKey.

    Получение списка окон потока: EnumThreadWindows. Управление их состоянием - ShowWindow.

    Деактивация потока: SuspendThread. Активация - ResumeThread.
 
Конференция "WinAPI" » Управление процессами с определенным PID [D7, Win2k, WinXP]
Есть новые Нет новых   [134431   +16][b:0][p:0.001]