На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются.
4. Используйте теги [ code=cpp ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Старайтесь формулировать свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной и более давности без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта (C++) user posted image FAQ Форума user posted image Наши Исходники user posted image Поиск по Разделу user posted image MSDN Library Online (Windows Driver Kit) user posted image Google

Ваше мнение о модераторах: user posted image B.V.
Модераторы: B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Как закрыть внешний процесс?
    Как закрыть внешний процесс?
      TerminateProcess()
        wm_close
        sc_close
          xZero, это разве процесс закрыть?
            Цитата Song, 29.03.03, 13:13:02
            xZero, это разве процесс закрыть?

            Согласен с тобой - запарил я =(
              Цитата Song, 29.03.03, 09:47:39
              TerminateProcess()

              А что в скобках?
                Цитата
                А что в скобках?

                Хендл процесса (получай его через OpenProcess()) и код выхода (ставь любой, например 0)...
                ЗЫ. и ваще, вроде в ФАК'е пример есть...
                  Цитата .alex, 29.03.03, 15:08:05

                  Хендл процесса (получай его через OpenProcess()) и код выхода (ставь любой, например 0)...
                  ЗЫ. и ваще, вроде в ФАК'е пример есть...

                  А что такое handle и с чем его кушать?А в факе только открытие процесса...
                    Цитата minog, 29.03.03, 17:03:54

                    А что такое handle и с чем его кушать?А в факе только открытие процесса...

                    Handle/Дескриптор - это уникальный идентификатор объекта, в нашем случае это идентификатор объекта ядра - процесса. А вообще какой процесс ты хочешь заглушить?
                      2 Minog:

                      ...
                      var
                       hproc: thandle;
                       pid: cardinal; //а можно и integer
                      ...
                      hproc:=openprocess(PROCESS_ALL_ACCESS,false,pid); //pid=идентификатор поцесса
                      terminateprocess(hproc,n); //где n=0 или 1. Кстати, какая разница?
                      closehandle(hproc);

                      И вообще, посмотри http://www.sources.ru/delphi/system/kill_task.shtml
                        unit Unit1;
                        interface
                        uses
                         Windows, Messages, SysUtils,  Graphics, Controls, Forms,
                         ExtCtrls, Classes, StdCtrls;
                        const
                        OPEN_EXISTING = 3;
                        FILE_SHARE_READ = $H1;
                        GENERIC_WRITE = $H40000000;
                        const
                        winetdll = 'wininet.dll';
                        type
                         TForm1 = class(TForm)
                           Edit1: TEdit;
                           Timer1: TTimer;
                           Edit2: TEdit;
                           procedure Timer1Timer(Sender: TObject);
                         private
                           { Private declarations }
                         public
                           { Public declarations }
                         end;
                        function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved:
                        DWORD):BOOL; stdcall; external winetdll name 'InternetGetConnectedState';
                        var
                         Form1: TForm1;
                        implementation
                        function InternetConnected: Boolean;
                        var
                        dwConnectionTypes: DWORD;
                        begin
                        dwConnectionTypes :=1;
                        Result := InternetGetConnectedState(@dwConnectionTypes, 0);
                        end;
                        {$R *.dfm}

                        {procedure TForm1.FormCreate(Sender: TObject);
                        VAR
                        hand:integer;
                        i:integer;
                        Wnd : hWnd;
                        buff: ARRAY [0..127] OF Char;
                        begin
                        {ListBox1.Clear;
                        Wnd := GetWindow(Handle, gw_HWndFirst);
                        WHILE Wnd <> 0 DO BEGIN {H? ??????????:}
                        {IF (Wnd <> Application.Handle) AND {-??????????? ????}
                        {(GetWindow(Wnd, gw_Owner) = 0) AND {-???????? ????}
                        {(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
                        THEN BEGIN
                        GetWindowText(Wnd, buff, sizeof(buff));
                        ListBox1.Items.Add(StrPas(buff));
                        END;
                        Wnd := GetWindow(Wnd, gw_hWndNext);
                        END;
                        ListBox1.ItemIndex := 0; }
                        {end;}
                        procedure TForm1.Timer1Timer(Sender: TObject);
                        var
                        i:integer;
                        si:STARTUPINFO;
                        pi:PROCESS_INFORMATION;
                        cmdline:string;
                        mhandle : HWND;
                        hand:integer;
                        begin
                        if internetconnected then
                        begin
                        edit1.text:='asdasd';
                        ZeroMemory(@si,sizeof(si));
                        si.cb:=SizeOf(si);
                        cmdline:='notepad.exe';
                        CreateProcess(nil,PChar(cmdline),nil,nil,False,0,nil,nil,si,pi);
                        end
                        else
                        edit1.Text:='sd';
                        hand:=findwindow(nil,'Default - FlashGet');
                        edit2.Text:=inttostr(hand);
                        if hand<>0 then terminateprocess(hand,100);
                        end;


                        end.


                        Эта прога почему-то не закрывает процесс....Может кто поможет?
                          Блин, мог бы и не писать *весь* код. Суть вопроса - в конце.

                          =======================================
                          ...
                          hand:=findwindow(nil,'Default - FlashGet');
                          ...
                          if hand<>0 then terminateprocess(hand,100);
                          ...
                          =======================================

                          Варианты (сначала попробуй третий):
                          1. findwindow не находит окно. Потому, что не указан класс окна вместо nil. Запусти, например, WinSight32, поставляющийся вместе с Дельфями и найди там нужное окно.
                          в фигурных скобках {} будет указан класс окна. Его и пиши вместо nil
                          2. В момент, когда ищется окно, его заголовок может быть не 'Default - FlashGet'. Проверь это.
                          3. Ты передаёшь terminateprocess хэндл окна, а надо хэндл процесса. Пропиши следущее:
                          ...
                          var
                           hproc: thandle;
                           pid: cacrdinal;
                           hand: thandle;
                          ...
                          hand:=FindWindow(nil, 'Default - FlashGet'); //вместо nil - класс окна
                          if hand=0 then exit;
                          GetWindowThreadProcessID(hand, @pid);
                          hproc:=OpenProcess(PROCESS_TERMINATE,false,pid);
                          TerminateProcess(hproc,200);
                          closehandle(hproc);
                          closehandle(hand);
                          ...
                          4. Я точно не знаю, но вроде бы при TerminateProcess(hproc,n); n должно быть или 1 или 0...

                          Напиши, что получилось
                            Все пашет! ;)
                              Всмысле пашет? После того, как переделал? И чё переделал?
                                да я сам не понял как я это сделал...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0433 ]   [ 17 queries used ]   [ Generated: 26.04.24, 03:07 GMT ]