IPB

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

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


Walter Sullivan
***

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



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=-
Oct 13 2008, 10:55
Сообщение #2


Walter Sullivan
***

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



Вот код тру перезапускалки:
CODE

Program WHungApp;

Uses Windows;

Function IsHungAppWindow(Wnd: hWnd): BOOL; stdcall; external 'user32.dll' name 'IsHungAppWindow';
Function GetModuleFileNameEx(hProcess: THandle; hModule: HMODULE; lpFilename: PAnsiChar; nSize: DWORD): DWORD; stdcall; external 'psapi.dll' name 'GetModuleFileNameExA';
Function NtQueryInformationProcess(ProcessHandle: THandle; ProcessInformationClass: Byte; ProcessInformation: Pointer; ProcessInformationLength: ULONG; ReturnLength: PULONG): DWORD; stdcall; external 'ntdll.dll' name 'NtQueryInformationProcess';

// Как по PID процесса узнать CMDLINE?, то есть, командную строку?
// http://forum.sources.ru/index.php?showtopic=136611
// http://undocumented.ntinternals.net/

// http://forum.sources.ru/index.php?showtopic=243663
Type

  UNICODE_STRING = Packed Record
    Length       : Word;
    MaximumLength: Word;
    Buffer       : PWideString;
  end;

  PROCESS_BASIC_INFORMATION = Packed Record
    ExitStatus    : DWORD;
    PebBaseAddress: DWORD; // PPEB
    AffinityMask  : DWORD;
    BasePriority  : DWORD;
    uUniqueProcessId: ULong;
    uInheritedFromUniqueProcessId: ULong;
  End;

Function GetProcessCmdLine(hProcess: THandle): String;
Var
       PBI: PROCESS_BASIC_INFORMATION;
    pp, cb: DWORD;
        ws: WideString;
        uz: UNICODE_STRING;
Begin
  Result:='';
  If (NtQueryInformationProcess(hProcess, 0{ProcessBasicInformation},
                               @PBI, SizeOf(PROCESS_BASIC_INFORMATION),
                               @cb) = 0) Then
    Begin
      If ReadProcessMemory(hProcess, Ptr(PBI.PebBaseAddress+16), @pp, 4, cb) Then
        If ReadProcessMemory(hProcess, Ptr(pp+64), @uz, SizeOf(UNICODE_STRING), cb) Then
          Begin
            SetLength(ws, uz.Length Div 2);
            If ReadProcessMemory(hProcess, uz.Buffer, PWideChar(ws), uz.Length, cb) Then
              Result:=AnsiString(ws);
          End;
    End;
End;

Procedure WriteLog(S: String);
Var
    Fl: THandle;
    dw: DWORD;
Begin
  Fl:=CreateFile(PChar(ParamStr(0)+'.log'), GENERIC_WRITE Or GENERIC_READ, 0, Nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  If Fl <> INVALID_HANDLE_VALUE Then
    Begin
      SetFilePointer(Fl, 0, Nil, FILE_END);
      WriteFile(Fl, S[1], Length(S), dw, Nil);
      CloseHandle(Fl);
    End;
End;

Function GetDateTime: String;
Begin
  SetLength(result, 19);
  GetDateFormat(LOCALE_SYSTEM_DEFAULT, 0, Nil, 'yyyy.MM.dd', @result[1], 10);
  GetTimeFormat(LOCALE_SYSTEM_DEFAULT, 0, Nil, 'HH:mm:ss', @result[12], 8);
  result[11]:=#32;
End;

Function EnumWindowsProc(Wnd: hWnd; lparam: LPARAM): BOOL; stdcall;
Var
      pid: DWORD;
       ph: THandle;
     S, C: String;
    PInfo: TProcessInformation;
    SInfo: TStartupInfo;
Begin
  If IsHungAppWindow(Wnd) Then
    Begin
      GetWindowThreadProcessId(Wnd, @pid);
      ph:=OpenProcess(PROCESS_ALL_ACCESS, False, pid);
      If ph<>0 Then
        Begin
          SetLength(S, MAX_PATH);
          SetLength(S, GetModuleFileNameEx(ph, 0, @S[1], MAX_PATH));
          C:=GetProcessCmdLine(ph);
          If Pos('"', C)<>0 Then
            Begin
              C[1]:='_';
              Delete(C, 1, Pos('"', C)+1);
            End
          Else
            Begin
              If Pos('  ', C)<>0 Then
                Delete(C, 1, Pos('  ', C)+1);
            End;
          S:='"'+S+'" '+C;
          WriteLog(GetDateTime+#32+S+#13#10);
          // terminate process
          TerminateProcess(ph, 0);
          CloseHandle(ph);
          // restart process
          FillChar(SInfo, SizeOf(SInfo), 0);
          SInfo.cb:=SizeOf(SInfo);
          CreateProcess(Nil, PChar(S), Nil, Nil, False, 0, Nil, Nil, SInfo, PInfo);
          CloseHandle(PInfo.hThread);
          CloseHandle(PInfo.hProcess);
        End;
    End;
  Result:=True;
End;

Begin
  EnumWindows(@EnumWindowsProc, 0);
End.
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
20 чел. читают эту тему (гостей: 20, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 24th May 2024 - 21:21