Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1185953714
TStas
2007-08-01 11:35
2007.08.26
Как пишется диск?


15-1185444219
Иксик
2007-07-26 14:03
2007.08.26
Клиент для VSS


3-1178386569
Razor
2007-05-05 21:36
2007.08.26
Delphi + Mysql5


11-1166785407
Fregl
2006-12-22 14:03
2007.08.26
Работа с BDE32


15-1185519203
Сатир
2007-07-27 10:53
2007.08.26
Восстановление клиента Оракла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский