Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.09.2010, 20:14
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию Изменить заголовок окна программы после её запуска зная только exe файл и его handle

Сабж в названии темы=) Как это реализовать?
Ответить с цитированием
  #2  
Старый 20.09.2010, 21:21
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Без доп. софта - никак. Пиши сервер.
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #3  
Старый 20.09.2010, 21:37
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

зачем доп. софт?

Процесс создаётся через creteprocess а то что создано CreateProcess возваращает мне хендл программы.. как зная хендл программы узнать его видимое на экране окно и изменить заголовок?
Ответить с цитированием
  #4  
Старый 20.09.2010, 22:08
Аватар для mak-karpov
mak-karpov mak-karpov вне форума
Активный
 
Регистрация: 18.09.2008
Сообщения: 235
Версия Delphi: 2010 и 7
Репутация: 1242
По умолчанию

Тьфу, *ля. Смотрел тему "** по сети" потом переключился на твою, вот и показалось "Изменить заголовок по сети бла бля бла".

А так помоему есть ф-я API - какому процессу принадлежит окно. Смотри все окна, если найдешь нужное меняй.
__________________
Кнопка "+" - весы в правом верхнем углу сообщения...
Ответить с цитированием
  #5  
Старый 21.09.2010, 07:48
Аватар для eXplorer
eXplorer eXplorer вне форума
Активный
 
Регистрация: 06.08.2010
Адрес: Ярославль
Сообщения: 264
Версия Delphi: 7
Репутация: 14
По умолчанию

если я правильно вас понял...

Код:
procedure TForm1.FormShow(Sender: TObject);
var
h:HWND;
begin
h:=FindWindow(nil, 'Form1');
SetWindowText((h),'Delphi World FOREVER!!!');
end;
Ответить с цитированием
  #6  
Старый 21.09.2010, 08:57
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
function EnumThreadWndProc(hwnd: THandle; lParam: LPARAM): Boolean; stdcall;
var
  len: Integer;
  classname: array [0..$ff] of Char;
begin
  Result:=True;
  // если окно видимое, то
  if IsWindowVisible(hwnd) then
  begin
    // получаем его класс
    len:=GetClassName(hwnd, @classname, SizeOf(classname));
    if len>0 then
      // и заголовок меняем на класс
      SetWindowText(hwnd, PChar(Copy(classname, 1, len)));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  startupinfoa: _STARTUPINFOA;
  processinformation: _PROCESS_INFORMATION;
begin
  // инициализируемся
  ZeroMemory(@startupinfoa, SizeOf(_STARTUPINFOA));
  startupinfoa.cb:=SizeOf(_STARTUPINFOA);
  startupinfoa.wShowWindow:=SW_SHOWNORMAL;
  // создаем процесс mshearts.exe
  CreateProcess(nil, PChar('mshearts.exe'), nil, nil, False, 0, nil, nil, startupinfoa, processinformation);
  // ждем максимум 10 сек пока не создадутся окна
  WaitForInputIdle(processinformation.hProcess, 10000);
  // найдем все окна нашего процесса
  EnumThreadWindows(processinformation.dwThreadId, @EnumThreadWndProc, 0);
end;
Ответить с цитированием
  #7  
Старый 22.09.2010, 10:46
Человек_Борща Человек_Борща вне форума
Новичок
 
Регистрация: 17.09.2010
Адрес: Беларусь, г. Минск
Сообщения: 58
Версия Delphi: 7, 2010,XE
Репутация: 10
По умолчанию

хм ваш пример хорошо работает! Но в моей программе что-то не так:
Код:
function TAppThread.EnumThreadWndProc(hwnd: THandle; lParam: LPARAM): Boolean; stdcall;
var
  len: Integer;
  classname: array [0..$ff] of Char;
begin
  Result:=True;
  if IsWindowVisible(hwnd) then
  begin
    len:=GetClassName(hwnd, @classname, SizeOf(classname));
    if len>0 then
      SetWindowText(hwnd,PChar(AppInfo.AppUserCaption));
  end;
end;

{ TAppThread }

procedure TAppThread.Execute;
var
  i: integer;
  wd:HWND;
begin
    while AppInfo.AppStart do //пака стоит галочка "запуск при старте HLR"
    begin
      ZeroMemory(@SI, SizeOf(SI)); //нулируем данные о процессе

      with PI do
      begin
        SetProcessAffinityMask(hProcess, AppInfo.AppCPUAffinity); //приоритет процесса
        WaitForSingleObject(hProcess, INFINITE); //Ждём завершения программы бесконечно..
        CloseHandle(hProcess); //закрываем хендл процесса
        CloseHandle(hThread); //закрываем хендл потока
      end;

        CreateProcess(
        PChar(AppInfo.AppExe),
        PChar(AppInfo.AppParamStr), nil, nil,
        False, GetPriority(AppInfo.AppPriority), nil,
        PChar(ExtractFileDir(AppInfo.AppExe)), SI, PI);

        EnumThreadWindows(PI.dwThreadId, @EnumThreadWindows, 0);

Я пытаюсь поместить текст из AppInfo.AppUserCaption в заголовок программы, но почему-то ничего не происходит!

Хатя на простом примере , отдельно созданном все нормально. пытаюсь задействовать на калькуляторе. (На примере все ок работает с калькулятором)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter