Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2013, 13:17   #1
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию ShellExecuteEx

Доброго, уважаемые форумчане.
Пробую запустить программу через сабж.
Запускается, но возникает несколько вопросов.

1. не знаю почему, но SInfo.hProcess запускаемого не совпадает с реальным (понять не могу в чём затык)
приходится искать сначала окно (см ниже), по окну искать PID (GetWindowThreadProcessID), а по PID'у находить hProcess (OpenProcess) - геморрой в общем. не правильно это, имхо.
из всего этого мне реально необходим только OpenProcess c параметром Full_All_Access

2. как понять, какие формы создаёт запущенное приложение ?
в данный момент пользую FindWindow - не особо удобно, хотелось бы сделать универсальную вещь, которая не привязана к имени окна, а работает с окнами процесса, как бы они не назывались

возможно, не совсем точно излагаю свои мысли
простите неуча
Chugun вне форума Ответить с цитированием
Старый 12.12.2013, 13:22   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

1. Все там правильно, содержится хэндл процесса, а не его PID.
2. EnumWindows, EnumChildWindows, EnumThreadWindows. Изучайте эти функции.
Человек_Борща вне форума Ответить с цитированием
Старый 12.12.2013, 19:38   #3
Chugun
Пользователь
 
Регистрация: 04.02.2009
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
1. Все там правильно, содержится хэндл процесса, а не его PID.
при выполнении следующего кода
Код:
ShellExecuteEx(@SInfo);
GetProcessAffinityMask(SInfo.HProcess,cpuset,sysmask);
SetProcessAffinityMask(SInfo.HProcess,sysmask xor dword(1) xor dword(2));
для этого процесса должны выключаться первые два процессора из всех существующих в системе - этого не происходит
при выполнении кода
Код:
thwnd:=FindWindow(nil,'Client');
GetWindowThreadProcessId(thwnd, @PID);
thwnd:=openprocess(Process_All_Access,true,pid);
GetProcessAffinityMask(thwnd,cpuset,sysmask);
SetProcessAffinityMask(thwnd,sysmask xor dword(1) xor dword(2));
всё выключается так, как задумано
мб я не понимаю чего-то?

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
2. EnumWindows, EnumChildWindows, EnumThreadWindows. Изучайте эти функции.
посмотрю, спасибо
Chugun вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ShellExecuteEx Neobrat Общие вопросы Delphi 6 09.09.2010 15:10