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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2010, 13:33   #1
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию Handle окна по процессу

Доброго времени суток.
У меня задача: как узнать хендл окна по названию его процесса. В подобных темах есть хендл по названию окна, но моё окно меняет название, и я не хотел бы привязыватся к нему.

Помогите узнать хендл по процессу.
Очень буду благодарен за код
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 07.01.2010, 15:34   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может вам надо привязатся к классу окна?

процесс может иметь и триста окон(не все видимые)
и никак не определить какое из них главное.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2010, 16:07   #3
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Если чесно, я не работал с классами никогда.

Я пишу приложение, которое будет скрывать необходимые окна (программы). В моем случае, мне нужно скрыть программу Opera.exe. Название процесса я знаю. Пользуюсь так:
Цитата:
if Edit1.Text<>'' then begin
H:=FindWindow(nil,PChar(Edit1.text) );
ShowWindow(s2, SW_HIDE);
Т.е. скрывает по заголовку окна. Хорошо конечно, но повторюсь, что заголовок меняется) а скрывать всё-равно нужно. (та и по процесу проще мне кажется, чем печатать громоздкий заголовок)

Надеюсь я объяснил понятно. Если нет - спрашивайте, я уточню все нюансы. Но я специально не хотел отводить Ваше внимание от темы, т.к. мне нужно просто получить handle от процесса
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 07.01.2010, 16:20   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну нет у процесса такого параметра как окно.
это вам не Application Дельфийский.

Код:
FindWindow('OpWindow',nil); вернет хендл главного окна оперы.
юзайте WinSight,Spy++ или иное подобное.


Цитата:
Если чесно, я не работал с классами никогда.
я надеюсь вы не путаете класс окна и класс как структуру(type TMyClass=class)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2010, 16:37   #5
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

оО Не путаю конечно.
Я думал преобразовать из этой процедуры, посмотрите:
Цитата:
uses tlhelp32;

function KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;

FSnapshotHandle := CreateToolhelp32Snapshot
(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);

while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProces sEntry32.szExeFile)) =
UpperCase(ExeFileName))
or (UpperCase(FProcessEntry32.szExeFil e) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProces s(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end;
Только заменить функцию уничтожения процесса на функцию скрытия.
Попробуете?
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });
Sensizu вне форума Ответить с цитированием
Старый 07.01.2010, 17:32   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
ShowWindow(FindWindow('OpWindow',nil), SW_HIDE);
вот один из вариантов.
Код:
function OpWnd(Handle:HWND;ShowCmd:integer):bool;stdcall;
var s:ANSIstring;
begin
 SetLength(s,100);
 GetClassNameA(Handle,PANSIChar(s),100);
 SetLength(s, lStrLen(PANSIChar(s)));
 if s='OpWindow' then ShowWindow(Handle,ShowCmd);
 result:=true;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
 EnumWindows(@OpWnd,SW_HIDE);
//второй параметр это для функции ShowWindow 
//то есть что мы сделаем с окнами оперы.(покажем SW_Show, скроем SW_HIDE)
end;
этим кодом я себе благополучно скрыл все окна Оперы...правда показатся они потом не захотели(или просто надо было Restore а не Show)

Алекс, благодарю, я исправил
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось rpy3uH; 24.05.2012 в 10:18.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.01.2010, 17:34   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
ShowWindow(FindWindow('OpWindow',ni l);, SW_HIDE);
Лишняя точка с запятой.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 07.01.2010, 17:39   #8
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Ага.. я так понимаю, что OpWindow - это класс окна оперы, верно?
П.С. Кстати, выполняя такую команду опера не скрывается. Почему-то.

Я Вам очень благодарен, с нетерпением жду код =)

Alex Cones, ага) но заметить не сложно) особенно нажав Ctrl+F9
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });

Последний раз редактировалось Sensizu; 07.01.2010 в 17:42.
Sensizu вне форума Ответить с цитированием
Старый 07.01.2010, 17:54   #9
Sensizu
Otsukitakitte
Форумчанин
 
Аватар для Sensizu
 
Регистрация: 01.10.2009
Сообщений: 126
По умолчанию

Всё, сделал!

Цитата:
procedure TForm1.ShowHwndAndClassName(CrPos: TPoint);
var
hWnd: THandle;
aName: array [0..255] of Char;
begin
hWnd := WindowFromPoint(CrPos);
Label1.Caption := IntToStr(hWnd);

if Boolean(GetClassName(hWnd, aName, 256)) then
Label2.Caption := string(aName)
else
Label2.Caption := 'Íå íàéäåíî';

procedure TForm1.Timer1Timer(Sender: TObject);
var
rPos: TPoint;
begin
if Boolean(GetCursorPos(rPos)) then ShowHwndAndClassName(rPos);
end;
end;
Через наведение курсора на окно Оперы. Да, нужно подвигать мышкой, но мне не воблом) Спасибо всем.

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#" (а не значка #). И не значком цитаты.
Вы не знали? Почитайте правила раздела...
Модератор
Помог - ставь плюс.
$("question").onAnswer(function() { $(this).getItWright(true); });

Последний раз редактировалось mihali4; 07.01.2010 в 18:35.
Sensizu вне форума Ответить с цитированием
Старый 08.01.2010, 14:42   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Пример из книги - "Получение списка процессов, запущенных в системе, их модулей, окон и свойств этих окон":
ProcInfo.rar
mihali4 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Handle окна по файлу EXE SERG1980 Общие вопросы Delphi 6 13.06.2012 23:05
окна, принадлежащие процессу Var17 Win Api 3 04.12.2009 13:21
Как узнать handle окна имея handle обного из его компонентов SeRhy Win Api 2 18.10.2009 19:31
Позиция окна, по Handle. Izhic Win Api 4 13.10.2009 17:18
Как имея handle окна узнать handle edit-a который находится в етом окне SeRhy Общие вопросы Delphi 1 20.07.2008 13:48