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

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

Как определить адрес в строке активного окна проводника [D6, XP]


Jiku ©   (2007-10-06 17:18:00) 

Приветствую!
Нужно определить путь активного окна в проводнике. В интернете ничего путного не нашёл. Пишу программку котороя при нажатии определённого сочетания кливиш в окне проводника создавала директорию.


Jiku   (2007-10-20 11:18:00) [1]

2Johnnnnn
Огромное спасибо!!!
Все работает!


Johnnnnn   (2007-10-12 01:36:00) [2]

Vidaet vse puti vo vseh provodnikah i IE otkritih v danni moment v sisteme

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ShDocVw,MSHTML;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Memo1: TMemo;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 okno:iShellWindows;
 brawser:iwebbrowser2;
   implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
Okno:=CoShellWindows.Create;
for i:=0 to Okno.Count-1 do
begin
Brawser:= Okno.Item(i)as IWebBrowser2;
memo1.Lines.Add(brawser.LocationURL);
end;
okno:=nil;
end;

end.


Jiku   (2007-10-07 17:03:00) [3]

2Nikfel
Сегодня немного разобрался и написал похожий код, в ComboBoxEx32 тоже храниться путь, но делфя мне выводит пустую строку как и в случае с Edit`ом. Причём у меня получалось стереть адрес но взять никак не могу.


homm   (2007-10-07 10:07:00) [4]

> [6] Nikfel ©   (07.10.07 08:52)

Хотя это и кривой способ, видимо другой требует включения моска. Работать в висте 99,9% не будет.


Nikfel   (2007-10-07 08:52:00) [5]

function  GetWindText(AHandle:  THandle):  String;
var
    cb  :  DWord;
begin
    cb  :=  SendMessage(AHandle,  WM_GETTEXTLENGTH,  0,  0);
    SetLength(Result,  cb);
    if  cb  >  0  then
        SendMessage(AHandle,  WM_GETTEXT,  cb+1,  LParam(@Result[1]));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
    AHandle:  THandle;
begin
    AHandle  :=  FindWindow('ExploreWClass',  nil);
    AHandle  :=  FindWindowEx(AHandle,  0,  'WorkerW',  nil);
    AHandle  :=  FindWindowEx(AHandle,  0,  'ReBarWindow32',  nil);
    AHandle  :=  FindWindowEx(AHandle,  0,  'ComboBoxEx32',  nil);
    AHandle  :=  FindWindowEx(AHandle,  0,  'ComboBox',  nil);
    AHandle  :=  FindWindowEx(AHandle,  0,  'Edit',  nil);
    Memo1.Text  :=  GetWindText(AHandle);
end;


homm   (2007-10-07 08:23:00) [6]

spy++
http://homm86.narod.ru/files/spyxx.rar


Jiku   (2007-10-07 08:19:00) [7]

Вчера пробовал разные способы но так и ничего не получилось. Максимум что могу это выяснить заголовок и класс окна. Был пример с помощью FindWindow находим окно нужного класса а с помощью FindWindowEx находим поле ввода, но при этом нужно название этого поля, пробовал Edit и ComboBox не получается... Остановился на варианте выводить полный путь папки в заголовок и считывать его, но получается неудобно, на панели задач теряешься в папках. Хотелось бы найти способ чтения из поле ввода адреса или, если возможно, другим способом если он существует.


homm   (2007-10-06 23:28:00) [8]

> затем handle текстовой строки

Какой еше стоки?


DVM   (2007-10-06 23:06:00) [9]


> Скорей всего нужно получить handle окна проводника

Должен быть путь проще, через взаимодействие с шеллом посредством COM.


Nikfel   (2007-10-06 21:40:00) [10]

Скорей всего нужно получить handle окна проводника, затем handle текстовой строки и затем прочитать текст в строке.


Наверх

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