Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Внизвопрос по EnumThreadWindows Найти похожие ветки
← →
Elen © (2007-07-31 11:44) [0]Задача : нужно из моей программы запустить Ворд, открыть в нем файл и найти все окна в нем. Для этого использую CreateProcess потом EnumThreadWindows. Если до этого Ворд не был открыт, Enum правильно мне возвращает списочек окон, если же уже открыты какие-либо доки то Enum работать не хочет. Вот код :
unit Unit1;
interface
uses shellapi,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function Enum(h:THandle;l:integer):boolean; stdcall;
var ProcessInf:_PROCESS_INFORMATION;
StartInfo:_STARTUPINFOA;
Form1: TForm1;
implementation
{$R *.dfm}
function Enum;
//********** FUNCTION **********
function WindowClass(wind:hwnd):string;
var Nm:Array[0..255] of Char;
begin
nm:="";
GetClassName(Wind,Nm,sizeof(nm)); // ñ÷èòûâàåì òåêñò çàãîëîâêà îêíà
result:=string(nm);
end;
//********** END FUNCTION ******
begin
form1.ListBox1.Items.Add(WindowClass(h));
result:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
var i:integer; d:Cardinal;
//********** END FUNCTION ****** {}
function OpenFileProcess(filea:string):cardinal;
var exc:pchar; cdir:string;
begin
getmem(exc,2550);
FindExecutable(pchar(filea),pchar(cdir),exc);
cdir:=ExtractFilePath(filea);
if not CreateProcess(exc,pchar(exc+" ""+filea+"""),0,0,
false,0,nil,pchar(cdir),StartInfo,ProcessInf) then
RaiseLastWin32Error;
freemem(exc);
result:=ProcessInf.dwThreadId;
end;
//**************************************************************************
begin
d:=OpenFileProcess("c:\temp\q.doc");
sleep(1001);
enumThreadWindows(d,@Enum,0);
end;
end.
Думается это потому что новооткрытый Ворд и те которые уже открыты находятся в одной треаде.
Вопрос : как мне получить все окна запущенного мной Ворда?
Просто EnumWindows не желательно, т.к. будущий капшин открывающегося дока я могу и не определить.
Заранее спасибо.
← →
Сергей М. © (2007-07-31 11:52) [1]
> как мне получить все окна запущенного мной Ворда?
Зачем они тебе понадобились, можно полюбопытствовать ?
← →
umbra © (2007-07-31 11:53) [2]
ShellExecuteEx
?
← →
Elen © (2007-07-31 12:06) [3]
> Зачем они тебе понадобились, можно полюбопытствовать ?
Можно. В общем если в кратце, это один из вариантов просмотра доковских файлов. Идея проста - запустить ворд, найти хендл его окна, допустим главного и изменить ему родителя, т.е. сделать его дитем моей формы.
Общая задача - просмотр документов офиса без возможности редактирования. Можно написать макрос к ворду чтоб запретить редактировать, но еще хотелось бы вставить окно ворда в мою форму как дочерней. Компонента, который позволил бы это делать я не нашла, а через OLEContainer плохо.
Насчет ShellExecuteEx я как раз пробую, но если знаете еще способы решить общую задачу подскажите.
← →
Сергей М. © (2007-07-31 12:11) [4]
> через OLEContainer плохо
Почему ?
← →
Elen © (2007-07-31 12:18) [5]
> Сергей М. © (31.07.07 12:11) [4]
Потому что с ним работать не удобно, да и отображение у него ужасное, это конечно как вариант прокатит, но хотелось что-то более привычное пользователю, похожее на ворд, как можно максимальнее.
> umbra © (31.07.07 11:53) [2]
А что мне дает эта функа? только запуск?
← →
clickmaker © (2007-07-31 12:18) [6]
> [3] Elen © (31.07.07 12:06)
TWebBrowser?
← →
Elen © (2007-07-31 12:21) [7]
> TWebBrowser?
Пробовали. Тормозит неподетски :(
Кстати вот по поводу OLEContainer - тут какая-то трабла, которую я не могу обьяснить: На некоторых компах при CreateLinkToFile не отоброжение происходит, а просто иконка показывается, а открывать запрещено.
← →
Сергей М. © (2007-07-31 12:23) [8]
> с ним работать не удобно, да и отображение у него ужасное
Если вы не любите кошек, то вряд ли вы умеете их готовить)
Ну а что, к примеру, мешает использовать Ворд заставляя его конвертировать интересующий документ в RTF-формат с целью визуализации средствами компонента TRichView ?
← →
Elen © (2007-07-31 12:27) [9]Тоже идея. т.е. Создавать временный файл, его открывать Ричем...
Ща попробую, но если тормозить будет то...
← →
Сергей М. © (2007-07-31 12:30) [10]
> Создавать временный файл
Можно и не создавать, работая ченез IStream
← →
Elen © (2007-07-31 12:37) [11]Верно. Ща попробую. Тут другая трабла - откроет ли Рич доки, где форматирование нестандартное, плюс рисунки, ну и всякие ворд-выкрутасы... В общем буду пробовать, если что напишу.
← →
Elen © (2007-07-31 12:58) [12]А как в Риче открыть документ ворда таким как он есть с форматированием с картинками и таблицами?
← →
Сергей М. © (2007-07-31 13:03) [13]Никак.
Рич не работает с нативными вордовыми документами.
← →
Elen © (2007-07-31 13:09) [14]Эх. чеж делать...
← →
oxffff © (2007-07-31 13:15) [15]Может поможет
Google WordView
The WordVIEW toolkit VIs use ActiveX automation to implement all the basic tasks required to create, edit and manage Word documents.
Или скачать Word Viewer от Microsoft. И попробовать там свои HackELEN методы.
← →
oxffff © (2007-07-31 13:17) [16]Word Viewer OCX 2.0
http://ruloads.com/dev/activex/16204prog.html
← →
Elen © (2007-07-31 13:36) [17]
> oxffff © (31.07.07 13:15) [15]
Как раз его прорабатываю. А насчет OCX это огромное пасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c