Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отключить таймер в другой проге 
:(
    Опции темы
Vetos
Дата 6.2.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Моя программа не запускается  повторно, т.е. если есть копия.
При проверке копии она передаёт ей фокус и отрубается, надо чтоб отключался и таймер только в копии. Знаю что нифига не понятно,но просмотрев код всё становится ясно.
Вот код:
Код

program Jurnal;

uses
  Forms,
  windows,
  dialogs,
  Main in 'Main.pas' {Form1};
{$R *.res}
var H:HWND;

function Check: boolean;
var
  HM:THandle;
begin
  HM:=OpenMutex(MUTEX_ALL_ACCESS, false, 'MyOwnMutex');
  Result:=(HM <> 0);
  if HM=0 then HM:=CreateMutex(nil, false, 'MyOwnMutex');
end;

begin
  if check then
  begin
   h:=findwindow(nil, 'Журнал   ');
   showwindow(h,SW_NORMAL);
   SetForegroundWindow(h);
   {Сдесь нужно отрубить таймер копии}
   exit;
  end;
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
 

Пожалуйсто помогите. Если что не понятно задайте вопрос, я отвечу, просто я не знаю как сформулировать это правильно.
Заранее спасибо. smile 


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
_hunter
Дата 6.2.2007, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



самый простой способ заведи ыторой мьютекс и проверяй его при старте. если мюютекс занят -- мы к копии (можно включать таймер)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Vetos
Дата 6.2.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Дело в том что таймер в копии включен, а его нужно выключить из только запущенной копии, и отроубить запущенную копию.
Твой вариант я не совсем понял.


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Romikgy
Дата 6.2.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



а где сам таймер?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Vetos
Дата 6.2.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Сам таймер находиться в модуле.
В принципе мне нужно найти в чужой программе компонет TTimer и отрубить его.
Просто я не знаю команд для этой операции.


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Romikgy
Дата 6.2.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



в другой проге( она твоя ксати?)
только один таймер или их там много?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Vetos
Дата 6.2.2007, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Прога моя, таймер один, если запускаем её ещё раз то показываем уже запущенную, отрубаем в ней таймер, выходим.
Всё реализовано кроме отключения таймера.


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
_hunter
Дата 6.2.2007, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



Цитата(Vetos @  6.2.2007,  12:14 Найти цитируемый пост)
Дело в том что таймер в копии включен, а его нужно выключить из только запущенной копии, и отроубить запущенную копию.

в смысле? копия твоя? в ней (в таймере) и проверяй наличие второго (предварительно запущенного) экземпляра. или под копией ты понимаеш первым запущенное приложение?

тамер убивается функцией KillTimer или Enabled в false поставиь...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Romikgy
Дата 6.2.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



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


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Vetos
Дата 6.2.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 312
Регистрация: 4.4.2005

Репутация: нет
Всего: 4



Цитата

в смысле? копия твоя? в ней (в таймере) и проверяй наличие второго (предварительно запущенного) экземпляра. или под копией ты понимаеш первым запущенное приложение?

тамер убивается функцией KillTimer или Enabled в false поставиь... 

Прога одна - моя. Это журнал.
после регистрации в журнале прога скрывается, включается таймер, по истечению которого прога показывается.
При запуске проги повторно, показываем ранее запущенную, отрубаем в ней таймер и выходим.
Т.е. при повторном запуске должна появиться уже запущенная, как будто-бы запустилась только-что.
Я не знаю команд типа FindWindowEx чтобы убить таймер.
 Таймер нужно убить в уже запущенной проге.

Это сообщение отредактировал(а) Vetos - 6.2.2007, 13:53


--------------------
Строить нужно так, чтоб никто не сломал!
А ломать, чтоб никто не знал 8) :ne_huliganit 
PM MAIL ICQ   Вверх
Romikgy
Дата 6.2.2007, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



ничего умнее мне в голову не приходит ,
написать хук на WM_TIMER и не давать ему хода


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
_hunter
Дата 6.2.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



Цитата(Vetos @  6.2.2007,  13:46 Найти цитируемый пост)
после регистрации в журнале прога скрывается, включается таймер, по истечению которого прога показывается.При запуске проги повторно, показываем ранее запущенную, отрубаем в ней таймер и выходим.

значит делай так:
запускаемый екземпляр проверяет мьютекс (тот, что у тебя есть) и если он занят -- устанавливает событие (CreateEvent...) .
в таймере проверяй наличие этого события. если оно есть -- выполняй KillTimer для себя же.
все...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
RA
Дата 6.2.2007, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Для этого есть функция KillTimer


Эта функция по заголовку программы убьёт все таймеры, но только в приложении на Delphi
Код



procedure KillTIMERS(Caption: STRING);
Var
i:integer;
  Hinst : THandle;
  WndArr : array of THandle;
  Wnd : THandle;
begin
 Wnd:=FindWindow(nil,pchar(Caption));
 if Wnd=0 then Exit;
 hinst:=GetWindowLong(Wnd, GWL_HINSTANCE);
 EnumWindows(@GetTimerWindows,0);
 for i:=0 to High(WndArr) do
       KillTimer(WndArr[i],1);
end;



Это сообщение отредактировал(а) RA - 6.2.2007, 23:51
PM   Вверх
Romikgy
Дата 6.2.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Цитата(RA @  6.2.2007,  22:50 Найти цитируемый пост)
GetTimerWindows

на это интересно посмотреть 
подразумеваю по хистенсу сортировка

Цитата(RA @  6.2.2007,  22:50 Найти цитируемый пост)
 Wnd:=FindWindow(nil,pchar(Caption));

имхо достаточно и application.handle


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
RA
Дата 7.2.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Romikgy, Дык речь идёт о чужом приложении как я понял

Добавлено @ 14:36 
Код

function GetTimerWindows(Handle: HWND; Info: Pointer): BOOL; stdcall;
const
 sClName ='TPUtilWindow';
var
 s : String;
begin
 Result := True;
 SetLength(s,Length(sClName)+1);
 GetClassName(Handle, PChar(s),Length(s));
 SetLength(s,Length(sClName)); // Любит запихивать сивол #0 :)
 if (GetWindowLong(Handle, GWL_HINSTANCE) = Hinst) and
    (s=sClName)
 then
   begin
     SetLength(WndArr,High(WndArr)+2);
     WndArr[High(WndArr)]:=Handle;
   end;
end;

PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0845 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.