IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Delphi, Asm, C, WinAPI, PHP, ..., FAQ
-=CHE@TER=-
Jan 5 2007, 00:35
Сообщение #1


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,361
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 314 раз(а)



Delphi programs in API.
На английском.
Очень подробно всё описано, плюс есть исходные коды готовых юнитов.
Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Jul 7 2007, 16:37
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,361
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 314 раз(а)



Вопрос - кто знает, как по MUTEX'у процесса получить его путь и имя файла? Что-то типа ParamStr(0), только у другого процесса...
Суть в чём: при перезапуске моей программы, нужно чтобы она завершила свою старую копию (если есть) перед загрузкой, чтобы не убивать процесс вручную в TaskManager'е и затем снова запускать.

Для убиения процесса используется такая, вот, нелёгкая процедура (потому что TerminateProcess() оставляет иконку в трее - т.е. она просто хлопает процесс, а мне нужно, чтобы он корректно завершился):
CODE
Function EnumThreadWndProc(Handle: Cardinal; lParam: Integer): LongBool; stdcall;
Begin
  SendMessage(Handle, $0010{WM_CLOSE}, 0, 0);
  Result:=(lParam<>0);
End;

Function ProcessClose(FileName: String; bCloseAll: Boolean): Boolean;
Var
    ThreadSearch, ModuleSearch: Cardinal;
                   ThreadEntry: TThreadEntry32;
                   ModuleEntry: TModuleEntry32;
Begin
  result:=False;
  FileName:=ExtractFileName(FileName);
  ThreadSearch:=CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD, 0);
  If ThreadSearch > 0 Then
    Begin
      ThreadEntry.dwSize:=SizeOf(TThreadEntry32);
      If Thread32First(ThreadSearch, ThreadEntry) Then
        Repeat
          ModuleSearch:=CreateToolHelp32Snapshot(TH32CS_SNAPMODULE, ThreadEntry.th32OwnerProcessID);
          If ModuleSearch > 0 Then
            Begin
              ModuleEntry.dwSize:=SizeOf(TModuleEntry32);
              If Module32First(ModuleSearch, ModuleEntry) Then
                Repeat
                  If lstrcmpi(PChar(ExtractFileName(ModuleEntry.szExePath)), PChar(FileName)) = 0 Then
                    Begin
                      EnumThreadWindows(ThreadEntry.th32ThreadID, @EnumThreadWndProc, Integer(bCloseAll));
                      result:=True;
                    End;
                Until (Not Module32Next(ModuleSearch, ModuleEntry)) Or (result);
              CloseHandle(ModuleSearch);
            End;
        Until (Not Thread32Next(ThreadSearch, ThreadEntry)) Or (result);
      CloseHandle(ThreadSearch);
    End;
End;


Имя файла нужно для сравнения с ModuleEntry.szExePath - вдруг, мою программу, переименовали, так что я не могу спускать в функцию ParamStr(0) от текущего процесса.
Т.е. была, скажем, программа "A1.EXE", сделали копию "A2.EXE". Теперь пускают "A1.EXE", затем "A2.EXE" - т.к. MUTEX у них один, то вторая должна как-то (т.к. имя уже не совпадает) зная только MUTEX завершить предыдущую.

Вообще, пытаюсь сделать такой алгоритм:
1) Производится попытка создать MUTEX с определённым именем
2) Если пришла ошибка GetLastError = ERROR_ALREADY_EXISTS, то убить этот процесс (корректно, как в коде выше, через посылание WM_CLOSE, иначе иконка в трее останется)

Кто-нибудь знает как или, возможно, более простой путь решения?..
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
jTommy
Jul 8 2007, 16:01
Сообщение #3


Наблюдающий
***

Группа: CTPAX-X
Сообщений: 197
Регистрация: 4-February 08
Из: деревня Москва
Пользователь №: 6
Спасибо сказали: 19 раз(а)



QUOTE(-=CHE@TER=- @ Jul 7 2007, 08:37 PM) *
Вопрос - кто знает, как по MUTEX'у процесса получить его путь и имя файла? Что-то типа ParamStr(0), только у другого процесса...
Суть в чём: при перезапуске моей программы, нужно чтобы она завершила свою старую копию (если есть) перед загрузкой, чтобы не убивать процесс вручную в TaskManager'е и затем снова запускать.
Если я правильно понял ситуация такая: загружена твоя программа, пользователь изменил, например, настройки и надо перезагрузить программу, так?

В таком случае, может-быть так: пользователь жмет "применить", программа создает mutex, запускает второй экземпляр и заканчивает работу (при завершении, в самом конце удаляет mutex). Второй экземпляр находит mutex и ждет, пока он не пропадет.

P.S.: А закрыть (корректно) процесс наверное можно, если послать ему сообщение WM_CLOSE или WM_DESTROY. В этом я не уверен - надо проверять.

P.P.S.: Кажется я вернулся smile.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Jul 9 2007, 12:10
Сообщение #4


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,361
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 314 раз(а)



QUOTE(jTommy @ Jul 8 2007, 04:01 PM) *
Если я правильно понял ситуация такая: загружена твоя программа, пользователь изменил, например, настройки и надо перезагрузить программу, так?
Нет, всё гораздо хуже - программа при загрузке компьютера загружается и "садится" в SystemTray. А из-за чего я делаю такую хрень с её перезагрузкой - так это из-за того, что при загрузке компа, иногда, проявляется такой баг: программа загрузилась, в процессах есть, а в трее иконки нет. Х.з. из-за чего это. Приходится её перезапускать. В принципе, если бы всё было нормально и иконка всегда появлялась, то с перезагрузкой проги бы проблем не было - я бы просто не давал запускать ещё одну копию и сразу выходил. У меня есть подозрение, что это из-за того, что я держу автозапуск "Run" в HKCU, а не в HKLM, однако, ставить программу на автозапуск для всех пользователей - тупо. Каждый сам должен выбирать нужна она ему или нет.


QUOTE(jTommy @ Jul 8 2007, 04:01 PM) *
P.S.: А закрыть (корректно) процесс наверное можно, если послать ему сообщение WM_CLOSE или WM_DESTROY. В этом я не уверен - надо проверять.
Handle'у процесса посылал WM_CLOSE - без толку. Это только формам посылать надо - как я сейчас и делаю. WM_DESTROY не пробовал.


QUOTE(jTommy @ Jul 8 2007, 04:01 PM) *
P.P.S.: Кажется я вернулся smile.gif
Welcome back! Хорошо отдохнул? (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Aug 22 2014, 11:14
Сообщение #5


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,361
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 314 раз(а)



QUOTE(-=CHE@TER=- @ Jul 9 2007, 12:10) *
Нет, всё гораздо хуже - программа при загрузке компьютера загружается и "садится" в SystemTray. А из-за чего я делаю такую хрень с её перезагрузкой - так это из-за того, что при загрузке компа, иногда, проявляется такой баг: программа загрузилась, в процессах есть, а в трее иконки нет. Х.з. из-за чего это. Приходится её перезапускать.
QUOTE(jTommy @ Jul 9 2007, 20:09) *
Бардак на корабле! © Попугай из Пиратов Карибского моря. smile.gifНадо разбираться, так не должно быть.
Как оказалось, это не я дурак, а кривая реализация в Windows (выделение моё):
QUOTE
First is a timeout of 4 seconds, raised to 7 in Windows Vista. Second is that delivery is aborted if the target process seems hung. According to Microsoft's documentation, this means that the target hasn't been seen to pick up any messages for at least 5 seconds.
<...>
Experiments with Windows XP confirm that the taskbar window can be busy for more than a minute during startup, most notably because of network discovery.
© Missing Icons in Notification Area
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме
-=CHE@TER=-   Delphi, Asm, C, WinAPI, PHP, ...   Jan 5 2007, 00:35
Siberian GRemlin   Может не в тему, но не решился создавать новую тем...   Jul 5 2007, 16:36
-=CHE@TER=-   Может не в тему, но не решился создавать новую тем...   Jul 5 2007, 16:44
-=CHE@TER=-   Вопрос - кто знает, как по MUTEX'у процесса по...   Jul 7 2007, 16:37
jTommy   Вопрос - кто знает, как по MUTEX'у процесса по...   Jul 8 2007, 16:01
-=CHE@TER=-   Если я правильно понял ситуация такая: загружена т...   Jul 9 2007, 12:10
jTommy   Нет, всё гораздо хуже - программа при загрузке ком...   Jul 9 2007, 20:09
-=CHE@TER=-   Нет, всё гораздо хуже - программа при загрузке ком...   Aug 22 2014, 11:14
Xplorer   Handle'у процесса посылал WM_CLOSE - без толку...   Jul 10 2007, 09:44
-=CHE@TER=-   Бардак на корабле! © Попугай из Пиратов Карибс...   Jul 10 2007, 12:51
Xplorer   Я изменил код. А вот, кстати, интересный тогда вп...   Jul 10 2007, 13:54
-=CHE@TER=-   Я изменил код. Смотри в коде.Хе-хе, ты своё сообщ...   Jul 10 2007, 22:04
-=CHE@TER=-   Думаю, тут будет полезно приводить некоторые полез...   Jul 16 2007, 16:40
Siberian GRemlin   Извиняюсь, если не в тему (вроде это WinAPI). Хоте...   Jul 19 2007, 09:14
-=CHE@TER=-   Извиняюсь, если не в тему (вроде это WinAP). Хотел...   Jul 19 2007, 13:51
-=CHE@TER=-   А теперь моя очередь задавать вопрос. (*улыбается*...   Jul 20 2007, 01:30
Xplorer   Для 2000/XP/2003/Vista - RasGetConnectionStatistic...   Jul 20 2007, 06:08
-=CHE@TER=-   Xplorer! RasGetConnectionStatistics - это как ...   Jul 20 2007, 13:48
-=CHE@TER=-   [b]Xplorer! RasGetConnectionStatistics - это к...   Jul 21 2010, 16:00
-=CHE@TER=-   Переименовал тему - теперь тут можете обсуждать чт...   Jul 23 2007, 19:01
-=CHE@TER=-   Кстати, насчёт ReadKey / KeyPressed - вот, неплоха...   Aug 11 2007, 13:54
-=CHE@TER=-   Вопрос ко всем - возможно ли при помощи класса TFi...   Apr 7 2008, 17:03
Xplorer   S := TFileStream.Create('x.x', fmO...   Apr 8 2008, 19:30
-=CHE@TER=-   Xplorer! Ой, спасибо большое! Что-то я сто...   Apr 9 2008, 10:09
-=CHE@TER=-   Ещё пара глупых вопросов: 1. В Си можно сделать т...   Jun 8 2008, 11:49
Grom PE   -=CHE@TER=-, вопросы нормальные =) 1. Если я прав...   Jun 8 2008, 12:28
-=CHE@TER=-   Grom PE! Спасибо большое, только создавать ещё...   Jun 8 2008, 17:59
-=CHE@TER=-   Небольшая программка для перезапуска зависших прил...   Oct 12 2008, 19:56
-=CHE@TER=-   Вопрос: кто-нибудь знает как получить ключи команд...   Oct 13 2008, 08:16
-=CHE@TER=-   Вот код тру перезапускалки: Program WHungApp; Us...   Oct 13 2008, 10:55
-=CHE@TER=-   PHP 5.2.1 + IIS 6 PHP has encountered an Access V...   Oct 18 2008, 11:15
-=CHE@TER=-   Очередная херня - столько времени убил, пока нагуг...   Oct 31 2008, 15:54
-=CHE@TER=-   Есть на форме UpDown1, ассоциированный (Associate)...   Nov 15 2008, 07:32
Grom PE   -=CHE@TER=-, у меня с чистым созданным проектом вс...   Nov 15 2008, 12:58
-=CHE@TER=-   Еще попробуй перезапустить Delphi.Как оно всё оказ...   Nov 15 2008, 13:08
-=CHE@TER=-   Вопрос сложный, но может кто-то знает в чём прикол...   Dec 18 2008, 18:26
-=CHE@TER=-   Делал тут как-то плеер. И решил сделать для него в...   Jan 2 2009, 19:53
-=CHE@TER=-   Кто-нибудь знает, как можно проверить сокет на дох...   Jun 25 2009, 04:10
-=CHE@TER=-   Однако! Первая строчка с получением 0 байт у м...   Dec 5 2009, 16:36
Siberian GRemlin   Обычно указывается драйвер вызвавший эту ошибку. Е...   Jun 25 2009, 06:22
-=CHE@TER=-   Обычно указывается драйвер вызвавший эту ошибку. Е...   Jun 25 2009, 11:56
Siberian GRemlin   Полезную статейку нашёл. Даже если ошибка на чужом...   Nov 2 2009, 10:11
-=CHE@TER=-   Товарищи, объясните мне кто-нибудь такой феномен: ...   Jan 15 2010, 19:26
Grom PE   -=CHE@TER=- Ну дык, процессор так работает, x shr...   Jan 16 2010, 07:46
-=CHE@TER=-   Думаю, что это лучше здесь разместить, чем в ссылк...   Jan 23 2010, 18:35
Siberian GRemlin   Может не в тему, но есть ли готовый модуль\би...   Feb 15 2010, 15:45
Axsis   пара ссылок с первой страницы гугла: http://www.de...   Feb 15 2010, 16:10
-=CHE@TER=-   Чтобы долго не писать чего да как - приведу [/cut]...   Apr 22 2010, 10:05
-=CHE@TER=-   Иногда бывает надо при распаковке игровых архивов ...   Jun 1 2010, 17:46
-=CHE@TER=-   Блин, ставил по работе на удалённый сайт Joomla - ...   Jul 27 2010, 17:38
-=CHE@TER=-   Вчерась ковырял одну игрушку, где данные были упак...   Aug 10 2010, 14:27
-=CHE@TER=-   Вчерась ковырял одну игрушку, где данные были упак...   Mar 7 2012, 20:37
Siberian GRemlin   Сегодня у меня был очередной сеанс мозгофилии. При...   Jan 7 2011, 15:20
-=CHE@TER=-   1) Либо Inno: AnsiString -> WideString; Delphi:...   Jan 7 2011, 23:20
Siberian GRemlin   Собственно, я и спрашивал как правильно перегнать ...   Jan 8 2011, 10:49
-=CHE@TER=-   Locale - это, грубо так говоря, язык установленный...   Jan 8 2011, 12:35
-=CHE@TER=-   Ковырял тут по просьбе CMS одну. Собственно, были ...   Jan 9 2011, 16:01
Siberian GRemlin   Не подскажите ка можно на JavaScript вставить (гип...   Apr 14 2011, 16:49
-=CHE@TER=-   Если тебе просто что-то надо вставить, а не файл, ...   Apr 14 2011, 18:26
Siberian GRemlin   Мне нужно было именно на JS или jQ, ибо для AJAX н...   Apr 15 2011, 11:12
-=CHE@TER=-   Поставил я тут новый colorer для FAR и моя тачка з...   Jul 23 2011, 13:01
Siberian GRemlin   Намедни столкнулся с тем что IE не понимает InnerH...   Jul 28 2011, 03:05
-=CHE@TER=-   У Delphi такой смешной оптимизатор (компилирую про...   Nov 11 2011, 15:15
-=CHE@TER=-   Siberian GRemlin! До меня, кажется, дошло, по...   Nov 14 2011, 13:41
-=CHE@TER=-   У Delphi такой смешной оптимизатор (компилирую про...   Mar 12 2012, 09:13
Siberian GRemlin   для каждой строки писать String[кол-во_символов] =...   Mar 12 2012, 11:07
Siberian GRemlin   Как я понимаю при конкатенации (дурацкое слово) ст...   Nov 11 2011, 15:25
-=CHE@TER=-   Похоже долго ты на Java писал. (*улыбается*) Нет,...   Nov 11 2011, 20:39
-=CHE@TER=-   Писал я недавно патч для включения крови в German ...   Jan 14 2012, 13:26
Siberian GRemlin   Кто-нибудь знает где можно взять готовый код под P...   Mar 24 2012, 09:13
-=CHE@TER=-   Вот тут (за номером 7 самый простой, и ниже - до к...   Mar 24 2012, 11:58
-=CHE@TER=-   В Си есть такая замечательная функция, как sprintf...   Apr 14 2012, 15:39
-=CHE@TER=-   И ещё о нескольких устаревших (по мнению MSDN, где...   Apr 15 2012, 10:32
-=CHE@TER=-   Проводя очередную чистку системы, натолкнулся на ф...   Apr 19 2012, 13:23
Grom PE   Сам у себя встречал такие файлы. Полюбопытствовал,...   Apr 19 2012, 19:05
-=CHE@TER=-   В очередной раз зайдя на сайт товарища Siberian GR...   Apr 24 2012, 12:14
Siberian GRemlin   Я так понимаю, ты знаешь способ создания динамичны...   Apr 24 2012, 13:16
-=CHE@TER=-   Я так понимаю, ты знаешь способ создания динамичны...   Apr 24 2012, 15:37
Siberian GRemlin   Месяц назад я только договорился с админом и мне в...   Apr 24 2012, 15:49
-=CHE@TER=-   О, блин, 4-ый PHP это уже здорово, чем вообще ниче...   Apr 24 2012, 16:19
-=CHE@TER=-   Нашёл в Delphi 7 охрененный косяк, который вынес м...   May 30 2012, 10:22
-=CHE@TER=-   Все, наверное, помнят, что в .BMP формате строки и...   Sep 6 2012, 20:32
jTommy   Ради интереса полез в свою "библию" - кн...   Sep 8 2012, 20:52
-=CHE@TER=-   Ты имеешь ввиду GFF? Я нашёл там вот такое описани...   Sep 9 2012, 12:43
jTommy   Да, она самая, издание от 1997 года.   Sep 9 2012, 21:25
-=CHE@TER=-   Поделюсь двумя вещами. 1) Во-первых, в Delphi 7 к...   Dec 15 2012, 09:29
-=CHE@TER=-   Товарищи, у меня вопрос - может кто-нибудь помочь?...   Apr 6 2013, 18:25
-=CHE@TER=-   Нашёл вот такую штуку: Это из исходных кодов ста...   Apr 9 2013, 16:17
-=CHE@TER=-   Исходные коды можно нагуглить, могу выложить, если...   Apr 18 2013, 16:48
-=CHE@TER=-   Я, походу, перестану скоро Delphi пользоваться, во...   Apr 27 2013, 15:06
Siberian GRemlin   Моя прога по работе использует TTimer и пока пробл...   Apr 29 2013, 13:48
-=CHE@TER=-   P. S. С получением текста помочь не могу, к сожале...   Apr 30 2013, 11:40
-=CHE@TER=-   Ну, ладно, пока никто с получением текста не помог...   May 1 2013, 11:54
-=CHE@TER=-   Сделал себе замечательный srvrun.bat для перезапус...   Jun 6 2013, 17:11
Siberian GRemlin   Возникла внезапная потребность использовать socks ...   Jun 22 2013, 08:06
-=CHE@TER=-   Мне не так давно было ещё одно откровение, которым...   Jun 28 2013, 11:09
-=CHE@TER=-   Часто пишу программы, которые со временем довольно...   Sep 14 2013, 14:32
-=CHE@TER=-   Пишу в последнее время на Си, так что недавно мне ...   Nov 23 2013, 17:38
-=CHE@TER=-   Недавно я тут писал про утилиту COMPRESS.EXE, сжим...   Nov 27 2013, 15:42
-=CHE@TER=-   Натолкнулся на то, что в нескольких играх использу...   Feb 13 2014, 14:49
2 Страниц V  1 2 >


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 5th November 2024 - 18:14