![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать, что запущено сторонее приложение? [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;
вот функция которая выводит список процессов в мемо, может поможет?