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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать, чтоб программу можно было запустить, комбинацией WIN+X? 
:(
    Опции темы
78125
Дата 20.6.2003, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



САБЖ

После установки программы она должна запускаться горячей комбинацией. (Может Sheeld Express и ключи реестра какие переправить).

После того, как программа запущена, и была свернута, та же горячая комбинация должна восстанавливать окно поверх всех........
--------------------
купим подпись
PM MAIL   Вверх
SmaLL
Дата 20.6.2003, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 2



Сделай для проги ярлык и назнач в нЁм горячую комбинацию
Когда прога уже запущена, то повторное нажатие на комбинацию запустит вторую копию программы, и вторая копия должна проверять, а не запущена ли первая копия, если ДА, то активировать первую копию, а самой закрыться.
Т.Е. ищи "как предотвратить запуск второй копии приложеия"


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
stab
Дата 20.6.2003, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



поискал в реестре имена прог которые запускаются по Win+что-нить и не нашел, так что судя по всему тока через хуки.


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
78125
Дата 20.6.2003, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(SmaLL @ 20.6.2003, 12:38)
Когда прога уже запущена, то повторное нажатие на комбинацию запустит вторую копию программы, и вторая копия должна проверять, а не запущена ли первая копия, если ДА, то активировать первую копию, а самой закрыться.
Т.Е. ищи "как предотвратить запуск второй копии приложеия"

Можно написать текстовый файлик, который будет содержать 0 или 1 в зависимости от запущенности программы, повторный запуск, с проверкой этого файла, приведет к закрытию копии....
--------------------
купим подпись
PM MAIL   Вверх
SmaLL
Дата 20.6.2003, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 2



Цитата(78125 @ 20.6.2003, 13:07)
Можно написать текстовый файлик, который будет содержать 0 или 1 в зависимости от запущенности программы, повторный запуск, с проверкой этого файла, приведет к закрытию копии....

А если прога вылетела в трубу, в смысле прога подвисла и пришлось снять задачу.
Тогда у тебя прога больше не запустится.

Такое делается либо мьютексами либо FindWindow


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
Shuricksoft
Дата 20.6.2003, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 177
Регистрация: 27.3.2002
Где: Odessa, Ukraine

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



Где-то тут уже обсуждалась подобная тема. Или не тут =) Короче, там, вроде как, через какие-то "атомы" мутили - остаётся след в памяти, и вторая прога не запускается. А перед выгрузкой - затирается "след".
PM MAIL ICQ   Вверх
dm9
Дата 20.6.2003, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: 6
Всего: 137



Shuricksoft
ИМХО, то же, что и с файлом. Если вырубят программу по CAD, до перезагрузки винды программа больше не запустится. (Насколько я помню, атомы остаются в памяти, пока их не уберёшь сам (в программе) или пока не перегрузишься).
PM MAIL ICQ   Вверх
78125
Дата 20.6.2003, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(SmaLL @ 20.6.2003, 12:38)
Сделай для проги ярлык и назнач в нЁм горячую комбинацию

мне нужна комбинация не ctrl + alt + X
а необходимо WIN + X
--------------------
купим подпись
PM MAIL   Вверх
&-ray
Дата 20.6.2003, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

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



Цитата
вторая копия должна проверять, а не запущена ли первая копия, если ДА, то активировать первую копию, а самой закрыться.


Это делается в dpr:

Код

var
PrevWin: HWND;

begin
 Application.Initialize;
 PrevWin:=findwindow('TForm1','Form1');
 if PrevWin<>0
 then begin
         SetForegroundWindow(PrevWin);
         halt;
         end;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.



--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
stab
Дата 20.6.2003, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



Цитата
Такое делается либо мьютексами либо FindWindow


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


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
SmaLL
Дата 21.6.2003, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 1
Всего: 2



Цитата(cully @ 20.6.2003, 21:52)
если по FindWindow делать, так как это приведено выше то тогда отлаживать будет не удобно, т.к. этот код найдет окно в дизайнере дельфей, но это так мелочи

Согласен, но я пользуюсь операторами условной компиляции, так что никаких напрягов


--------------------
Что ни делается - всЁ к лучшему! SmallWeb
Мой адрес не дом и не улица, мой адрес родной пивзавод!
PM MAIL WWW ICQ   Вверх
&-ray
Дата 21.6.2003, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

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



А я вообще этот код прикрываю скобками {} до лучших времен, а когда проект уже готов 100%, открываю его и компилирую последний раз wink.gif


--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
stab
Дата 21.6.2003, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 14
Всего: 48



я то ж так делал раньше, но больно уж часто приходилось {$DEFINE DEBUG} то коментить, то раскоменчивать, в итоге сделал через атомы. И мой вам совет делайте так же да будет вам меньше работы. smile.gif


--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
78125
  Дата 24.6.2003, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(78125 @ 20.6.2003, 19:18)
мне нужна комбинация не ctrl + alt + X
а необходимо WIN + X

Всем, большое спасибо!
Вот только теперь непосредственно с комбинацией горячих клавиш помогите.... hehe.gif
--------------------
купим подпись
PM MAIL   Вверх
Guest
Дата 17.7.2003, 12:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
Это делается в dpr:

Код

var
PrevWin: HWND;

begin
 Application.Initialize;
 PrevWin:=findwindow('TForm1','Form1');
 if PrevWin<>0
 then begin
         SetForegroundWindow(PrevWin);
         halt;
         end;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Сделал как тут написано, но:

Код

[Error] CBClient.dpr(11): Undeclared identifier: 'HWND'
[Error] CBClient.dpr(15): Undeclared identifier: 'findwindow'
[Warning] CBClient.dpr(17): Comparing signed and unsigned types - widened both operands
[Error] CBClient.dpr(18): Undeclared identifier: 'SetForegroundWindow'


что делатьconfused.gif

bored.gif
  Вверх
PostEr
Дата 17.7.2003, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата
Можно написать текстовый файлик, который будет содержать 0 или 1 в зависимости от запущенности программы, повторный запуск, с проверкой этого файла, приведет к закрытию копии....


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


--------------------

------------------------------------------------------------------

[email protected]
До востребования

PM MAIL WWW ICQ   Вверх
&-ray
Дата 17.7.2003, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

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



Цитата
Сделал как тут написано, но:

CODE

[Error] CBClient.dpr(11): Undeclared identifier: 'HWND'
[Error] CBClient.dpr(15): Undeclared identifier: 'findwindow'
[Warning] CBClient.dpr(17): Comparing signed and unsigned types - widened both operands
[Error] CBClient.dpr(18): Undeclared identifier: 'SetForegroundWindow'



что делать


в раздел uses в dpr впиши windows


--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
78125
Дата 18.7.2003, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата
Цитата
вторая копия должна проверять, а не запущена ли первая копия, если ДА, то активировать первую копию, а самой закрыться.


Это делается в dpr:

Код

var
PrevWin: HWND;

begin
 Application.Initialize;
 PrevWin:=findwindow('TForm1','Form1');
 if PrevWin<>0
 then begin
         SetForegroundWindow(PrevWin);
         halt;
         end;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.

Странно, но у меня этот код не заработал....

Можно запускать хоть сто копий - может кто знает другой способ?
--------------------
купим подпись
PM MAIL   Вверх
<Spawn>
Дата 18.7.2003, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Попробуй так(Только учти, что заместо 'TForm1' и 'Form1' ты должен поставить свои названия класса и имени окна):

Код

var
hMutex:THandle;
begin
hMutex:=CreateMutex(nil, False, 'TestMutex');
if  WaitForSingleObject(hMutex,0)<>WAIT_TIMEOUT then
begin
 Application.Initialize;
 Application.CreateForm(TForm1,Form1);
 Application.Run;
end
else
SetForegroundWindow(FindWindow('TForm1','Form1'))
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
pascal
Дата 18.7.2003, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

[Error] CBClient.dpr(11): Undeclared identifier: 'HWND'
[Error] CBClient.dpr(15): Undeclared identifier: 'findwindow'
[Warning] CBClient.dpr(17): Comparing signed and unsigned types - widened both operands
[Error] CBClient.dpr(18): Undeclared identifier: 'SetForegroundWindow'

Так в uses надо было ещё и модуль Windows припесать, где всё это описывается...
PM MAIL WWW ICQ   Вверх
78125
Дата 21.7.2003, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



АГА !!! Получилсь!!!
Спасибо <Spawn> .

pascal, посмотри двумя высказываниями выше твоего, что написано. smile.gif

<Spawn> Все работает, but if моя программа свернута то выражение
Код

SetForegroundWindow(FindWindow('TForm1','Form1'))

не восстанавливает ее, оно только передает фокус, если программа не является активной....

Может кто подскажет, что сюда дописать?
--------------------
купим подпись
PM MAIL   Вверх
<Spawn>
Дата 21.7.2003, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Поиграйся с этим :

Код
if IsZoomend(Hwnd) then
SetActiveWindow(Hwnd){или ShowWindow(Hwnd,SW_RESTORE)}



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
&-ray
Дата 21.7.2003, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 406
Регистрация: 15.4.2003
Где: Казахстан, г Аста на

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



Цитата
if IsZoomend(Hwnd) then

лучше проверять на IsIconic


--------------------
"Совсем неважно от чего помрешь, ведь куда важнее - для чего родился..." С.Б.

--------------------
И снова мышь беру я в руки
Куда иду? - Конечно в сруки!
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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