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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.08.2011, 23:14   #21
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
SendMessage(FindWindow('Tcdpmain',n il),MY_MESSAGE,0,DWord(ParamStr(1)));
Это что за ересь ?

Что за двойное слово ты отправляешь ?

И для кого придумано WM_COPYDATA ?
mss вне форума Ответить с цитированием
Старый 15.08.2011, 23:19   #22
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

mss, да-да, я понял. Все уже сделал, смотри предыдущий пост.
kettanaito вне форума Ответить с цитированием
Старый 16.08.2011, 01:13   #23
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Простите, всю тему не читал, но выход из этой ситуации простой.
1)Чтобы найти хэндл уже открытой (запущенной раньше программы) его нужно искать ДО создания своей формы (и соответственно не дублировать названия окон).
Собственно в файле проектта *dpr :
Код:
program ххх;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin 
  //тут
  Application.Initialize;
  //или тут
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
или
2)Для поиска хэндла не пользоватся функцией а пользоватся перечислением всех окон проверяя несоответствие найденного и своего. тоесть findedhandle <> Form1.Handle

Код:
procedure TForm1.Button1Click(Sender: TObject);
var wnd: hwnd;
    i:Integer;
begin
Memo1.Clear;
wnd := GetWindow(handle, gw_hwndfirst);
while wnd <> 0 do
begin
if (wnd <> Application.Handle)//Или Form1.Handle
and IsWindowVisible(wnd)
and (GetWindow(wnd, gw_owner) = 0)
and (GetWindowText(wnd, buff, SizeOf(buff)) <> 0) then
begin
GetWindowText(wnd, buff, SizeOf(buff));
Memo1.Lines.Add(StrPas(buff));
end;
wnd := GetWindow(wnd, gw_hwndnext);
end;
end;
правил находу

Пол года не открывал делфи, не судите строго
Lime вне форума Ответить с цитированием
Старый 16.08.2011, 07:09   #24
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Пример: http://dl.dropbox.com/u/201788/Proje...stanceDemo.zip
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.08.2011, 10:06   #25
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
2)Для поиска хэндла не пользоватся функцией а пользоватся перечислением всех окон проверяя несоответствие найденного и своего. тоесть findedhandle <> Form1.Handle
так я и делал, возникла интересная проблема.
http://programmersforum.ru/showpost....5&postcount=13
fate вне форума Ответить с цитированием
Старый 16.08.2011, 12:02   #26
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Не надо ничего искать.

Код:
program MySuperPuperProgram;
....
var
  hMMF: THandle;
  pAppHwnd: PHandle;
begin
  hMMF := CreateFileMapping(INVALID_HANDLE_VALUE, nil, PAGE_READWRITE, 0, SizeOf(THandle),
                               PAnsiChar(ExtractFileName(ParamStr(0))));
  if GetLastError = ERROR_ALREADY_EXISTS then
    begin
      pAppHwnd := MapViewOfFile(hMMF, FILE_MAP_READ, 0, 0, SizeOf(THandle));
...
      SendMessage(pAppHwnd^, WM_COPYDATA, ....);
...
      UnMapViewOfFile(pAppHwnd);
      CloseHandle(hMMF);
      Halt;
    end
  else
    begin
      pAppHwnd := MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, SizeOf(THandle));
      pAppHwnd^ := Application.Handle;
      UnMapViewOfFile(pAppHwnd);
    end;
  Application.Initialize;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
  CloseHandle(hMMF);
end.
mss вне форума Ответить с цитированием
Старый 16.08.2011, 13:49   #27
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

mss, Ваш код не работает
Lime, чем является "buff" в Вашем коде?

В целом меня устраивает и свой вариант, но, как выяснилось, он некорректно работает если программа вылетает с ошибкой. Событие onClose/onDestroy не происходит если случается ошибка. Как можно описать такое? (что-то на подобии onTerminate)

Последний раз редактировалось kettanaito; 16.08.2011 в 14:05.
kettanaito вне форума Ответить с цитированием
Старый 16.08.2011, 14:51   #28
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Код:
Ваш код не работает
Да неужели ?!)
А у меня работает)
Что я неправильно делаю ?)
mss вне форума Ответить с цитированием
Старый 16.08.2011, 14:59   #29
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

mss, почему Вы неправильно что-то делаете? Скорее всего прием сообщения в моей программе работает не так как нужно с Вашим кодом. А повторное открытие предотвращает как нужно, просто сообщение не шлет первому окну.
kettanaito вне форума Ответить с цитированием
Старый 16.08.2011, 15:12   #30
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Сообщение от kettanaito Посмотреть сообщение
mss, прием сообщения в моей программе работает не так как нужно.
Полагаю и отправка тоже кривая)
Ну а мой код-то причем ? Он тебе исправно выдал хэндл главного окна искомого эеземпляра приложения, причем никакой поиск при этом не понадобился. Это и было целью демонстрации решения)
mss вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Взаимодействие с игрой saylar_06 Общие вопросы Delphi 13 08.06.2011 14:35
Взаимодействие C# и 1с Sparky Свободное общение 1 05.02.2010 04:31
Взаимодействие приложений artemavd Общие вопросы Delphi 22 01.08.2009 20:09
uTorrent - взаимодействие SoulReaver Win Api 1 21.06.2009 20:06
Взаимодействие с пользователем Alone_Wolf Общие вопросы Delphi 19 23.12.2008 09:34