Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2009, 20:23   #1
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию Найти процесс, получить handle, послать сообщение.

Привет всем! Может эта тему здесь уже обсуждалась, но я не нашёл именно того, что мне надо.
Короче, я обратил внимание на то, как SIM (Smart Install Maker) выключает устанавливаемую программу. Т.е. Я могу сдеать так: Я установил программу через SIM, запустил её, потом НЕ ВЫКЛЮЧАЯ программы запустил деинсталяцию, или установку более новой версии программы. Установленная программы должна корректно выключится. Так вот, всё там ОК!
Настраивается следующим образом:

Так вот, как он это делает? Как мне организовать поиск таким-же способом, дело в том, что заголовок окна и имя класса могут меняться, однако SIM всегда срабатывает корректно! Мне надо таким-же макаром получить handle главного окна приложения зная что....? Имя приложения? Или? И что это за подстрока заголовка окна?

Профессионалы! Отзовитесь!
Altera вне форума Ответить с цитированием
Старый 04.01.2009, 23:42   #2
0nni
Форумчанин
 
Аватар для 0nni
 
Регистрация: 24.07.2008
Сообщений: 279
По умолчанию

скорее всего он ищет не точно название а часть названия например
"бла бла бла - Mozilla Firefox"
Находишь список всех окон и ищешь "Mozilla Firefox" в заголовке.
Сказал и загрустил от бесспорности своей правоты.
0nni вне форума Ответить с цитированием
Старый 05.01.2009, 00:07   #3
ViktorXP
Форумчанин
 
Аватар для ViktorXP
 
Регистрация: 24.11.2006
Сообщений: 108
По умолчанию

Можна гдето так
Код:
type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    procedure SetMemo(var MSG: TMessage); message WM_USER +1;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses  Masks, PsAPI;

function WindowsProc(WND:THandle; lPm: LPARAM): Bool; stdcall;
var
  ms: String[255];
begin
  if WND <> lPm then
  begin
    SendMessage(WND, WM_GETTEXT, 255, Integer(PChar(@ms)));
    SendMessage(lPm, WM_USER +1, Integer(PChar(@ms)), WND);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWindows(@WindowsProc, Handle);
end;

procedure TForm1.SetMemo(var MSG: TMessage);
var
  ProcessID, ThreadProcessID,  hProcess, hModuls, cb: DWORD;
  NameWindows: string;
  ms: String[255];
begin
  NameWindows := PChar(MSG.WParam);
  if MatchesMask(NameWindows, Edit1.Text) then
  begin
    Memo1.Lines.Add('-----------');
    Memo1.Lines.Add(NameWindows);
    Memo1.Lines.Add('Handle = '+IntToHex(MSG.LParam, 4)+'h');
    ThreadProcessID := GetWindowThreadProcessId(MSG.LParam, @ProcessID);
    Memo1.Lines.Add('ProcessId = '+IntToStr(ProcessID));
    Memo1.Lines.Add('Thread = '+IntToStr(ThreadProcessID));
    hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
    if (hProcess <> 0) then
    begin
      EnumProcessModules(hProcess, @hModuls, SizeOf(hModuls), cb);
      GetModuleFilenameEx(hProcess, hModuls, PChar(@ms), 255);
      Memo1.Lines.Add(PChar(@ms));
      CloseHandle(hProcess);
    end;
    Memo1.Lines.Add('-----------'#13#10#13#10);
  end;
end;
Если в Edit вбыть маску "*Delphi*" (естественно без лапок но со звездами) тогда он в мемо выдаст результаты всех найденых окон их хендлы, имя файла и еще кое какую инфу. я набросал поиск только по окнам но переделать не составит труда

Последний раз редактировалось ViktorXP; 05.01.2009 в 00:11.
ViktorXP вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как зная ProcessID получить Handle главной формы? NikLik Win Api 8 27.08.2021 21:29
Как послать Edit'у сообщение о нажатии клавиши Vadik(R) Общие вопросы Delphi 4 27.12.2008 20:38
Как получить handle главного окна, зная имя приложения? Altera Win Api 8 22.12.2008 18:52
как послать в окно сообщение о нажатии буквенных клавишь? Yuran Win Api 3 23.06.2008 12:10
послать сообщение кнопке Fireleo Win Api 7 06.08.2007 11:14