![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Сабж в названии темы=) Как это реализовать?
|
|
#2
|
||||
|
||||
|
Без доп. софта - никак. Пиши сервер.
|
|
#3
|
|||
|
|||
|
зачем доп. софт?
Процесс создаётся через creteprocess а то что создано CreateProcess возваращает мне хендл программы.. как зная хендл программы узнать его видимое на экране окно и изменить заголовок? |
|
#4
|
||||
|
||||
|
Тьфу, *ля. Смотрел тему "** по сети" потом переключился на твою, вот и показалось "Изменить заголовок по сети бла бля бла".
А так помоему есть ф-я API - какому процессу принадлежит окно. Смотри все окна, если найдешь нужное меняй. |
|
#5
|
||||
|
||||
|
если я правильно вас понял...
Код:
procedure TForm1.FormShow(Sender: TObject); var h:HWND; begin h:=FindWindow(nil, 'Form1'); SetWindowText((h),'Delphi World FOREVER!!!'); end; |
|
#6
|
||||
|
||||
|
Код:
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
|
|||
|
|||
|
хм ваш пример хорошо работает! Но в моей программе что-то не так:
Код:
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 в заголовок программы, но почему-то ничего не происходит! Хатя на простом примере , отдельно созданном все нормально. пытаюсь задействовать на калькуляторе. (На примере все ок работает с калькулятором) |