Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать, что запущено сторонее приложение? [D7, 95/98]


Гость22 ©   (2005-09-23 10:01:00) 

Например, Ворд.


umbra   (2005-09-23 12:09:00) [1]

Если тебе нужно узнать, открыт ли какой нибудь программой какой-нибудь файл, то смотри сюда:

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1127290638&n=5

Там в первом же ответе есть код. Документ Ворд может быть открыт не только вордом но и другими прогаммами (OpenOffice.org, напрмер, или какой нибудь твоей прогой.


ssk   (2005-09-23 12:04:00) [2]

по большому счету так можно найти не только ворд, но и любое другое окно


ssk   (2005-09-23 12:01:00) [3]

Примерно так:

function FindOpenDocumentInWord(aString: string): HWND;
var
 Buffer: array[0..255] of char;
begin
 Result := 0;
 repeat
   Result := FindWindowEx(0, Result, nil, nil);
   GetWindowText(Result, Buffer, SizeOf(Buffer));
   if StrPos(AnsiStrUpper(Buffer), PChar(AnsiUpperCase(aString))) <> nil then
     Break;
 until Result = 0;
end;


Пример:

var
 H: HWND;
begin
 H := FindOpenDocumentInWord('Документ1');
 if H <> 0 then
   ShowMessage('Документ уже открыт');
end;</


Гость22   (2005-09-23 11:59:00) [4]


> По этому заголовку можно определить хендл окна...

подскажите, как это сделать.


pavel_guzhanov   (2005-09-23 11:49:00) [5]

В заголовке ворда пишется Microsoft Word + название документа. По этому заголовку можно определить хендл окна... Если он допустимый, то значит этот документ открыт, если нет - то...


Гость22   (2005-09-23 11:41:00) [6]

Спасибо!
А как узнать, открыт ли определенный документ Ворд?


umbra   (2005-09-23 10:57:00) [7]

Если речь идет об офисных приложениях, так они все - сервера COM и узнать, запущены они или нет можно функцией GetActiveOLEObject


procedure IsWordRunning;
begin
 try
   GetActiveOleObject('Word.Application');
 except
   on OleSysError do ShowMessage('Ворд не запущенэ);
 end;
end;


гость333   (2005-09-23 10:08:00) [8]

procedure TForm1.Button2Click(Sender: TObject);
var
 handler:thandle;
 data:TProcessEntry32;

function return_name:string; // Вспомоготельная функция получения имени
var
 i:byte;
 names:string;
begin
 names:='';
 i:=0;
 while data.szExeFile[i] <> '' do
   begin
     names:=names+data.szExeFile[i];
     inc(i);
   end;
 return_name:=names;
end;

begin //Основная функция перечисления процессов
 handler:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
 if Process32First(handler,data) then
   begin
     memo1.lines.add(return_name);
     while Process32Next(handler,data) do
      memo1.lines.add(return_name);
   end
 else
   showmessage('Ошибка получения информации :)');

  CloseHandle(handler); //Хендл закрывать обязательно!!
end;


вот функция которая выводит список процессов в мемо, может поможет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо