Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2011, 18:39   #11
Spawn™Production®
Форумчанин
 
Аватар для Spawn™Production®
 
Регистрация: 06.05.2011
Сообщений: 287
По умолчанию

Тогда где-то у вас ошибки, в примере класса TButton точно нет
Spawn™Production® вне форума Ответить с цитированием
Старый 08.05.2011, 18:54   #12
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

разобрался. ему просто не нравилась команда Exit
я просто сделал ...then null else...
Storm Whisper вне форума Ответить с цитированием
Старый 08.05.2011, 18:55   #13
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

я вот и удивился что он про TButton писал, ибо проверял простой командой
Storm Whisper вне форума Ответить с цитированием
Старый 08.05.2011, 19:02   #14
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

Код:
procedure TForm1.TimerPrTimer(Sender: TObject);
var
  prcs: array[0..$FFF] of dword;
  cP:cardinal;
  I:integer;
  hP:THandle;
begin
  if not(EnumProcesses(@prcs, sizeof(prcs), cP)) then null else begin
    for i := 0 to cP div 4 - 1 do begin
      hP := OpenProcess(PROCESS_ALL_ACCESS, FALSE, prcs[i]);
      if hP > 0 then exist:=1 else exist:=0;
    end;
  end;
end;
как мне теперь узнать что это именно тот процесс? пробовал делать if hP = 'process.exe' then, он сказал что типы данных несовместимы... ([Pascal Error] Unit1.pas(74): E2015 Operator not applicable to this operand type) как сделать?

Последний раз редактировалось Storm Whisper; 08.05.2011 в 19:07.
Storm Whisper вне форума Ответить с цитированием
Старый 08.05.2011, 23:09   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Посмотрите SpeedButton2Click, может поможет, я пытаюсь сейчас это освоить, получал список процессов и программ запускающих их в привязке к окнам
Код:
unit Unit2;

interface

uses
  Windows, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBClient, Grids, DBGrids, Buttons;

type
  TForm2 = class(TForm)
    SpeedButton1: TSpeedButton;
    DBGrid1: TDBGrid;
    CDSWork: TClientDataSet;
    DSWork: TDataSource;
    CDSWorkHandle: TIntegerField;
    CDSWorkClassName: TStringField;
    CDSWorkHInstance: TFloatField;
    CDSWorkProcessId: TIntegerField;
    CDSWorkWinTitle: TStringField;
    CDSWorkFileName: TStringField;
    SpeedButton2: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses PsAPI;

{$R *.dfm}

var Count: Integer;
    Handles: array of HWND;

function GetTopMostWindows(Handle: HWND; Info: Pointer): BOOL; stdcall;
begin
  Inc(Count);
  SetLength(Handles,Count);
  Handles[Count-1]:=Handle;
  Result:=True;
end;

procedure TForm2.SpeedButton1Click(Sender: TObject);
var i,j: Integer;
    Buf: array [0..1024] of Char;
    Handle,ProcessId: THandle;
    HInstance: THandle;
begin
  Count:=0;
  EnumWindows(@GetTopMostWindows,0);
  CDSWork.CreateDataSet;
  for i:=0 to Count-1 do begin
    Handle:=Handles[i];
    CDSWork.Append;
    CDSWorkHandle.AsInteger:=Handle;
    j:=GetClassName(Handle,Buf,SizeOf(Buf));
    if j>0 then CDSWorkClassName.AsString:=Buf;
    HInstance:=GetWindowLong(Handle,GWL_HINSTANCE);
    if HInstance<>0 then begin
      CDSWorkHInstance.AsFloat:=HInstance;
      j:=GetModuleFileName(HInstance,Buf,SizeOf(Buf));
      if j>0 then CDSWorkFileName.AsString:=ExtractFileName(Buf);
    end;
    j:=GetWindowText(Handle,Buf,SizeOf(Buf));
    if j>0 then CDSWorkWinTitle.AsString:=Buf;
    if GetWindowThreadProcessId(Handle,ProcessId)<>0 then CDSWorkProcessId.AsInteger:=ProcessId;
    CDSWork.Post;
  end;
  CDSWork.First;
end;

procedure TForm2.SpeedButton2Click(Sender: TObject);
var i,j: Integer;
    Handle,ProcessId: THandle;
    Buf: array [0..1024] of Char;

    ProcCount: Integer;
    hMod: HMODULE;
    cb: DWORD;
    PIDArray: array [0..1023] of DWORD;
    ModuleName: array [0..300] of Char;
    hProcess: THandle;
begin
  Count:=0;
  EnumWindows(@GetTopMostWindows,0);
  CDSWork.CreateDataSet;
  for i:=0 to Count-1 do begin
    Handle:=Handles[i];
    CDSWork.Append;
    CDSWorkHandle.AsInteger:=Handle;
    j:=GetClassName(Handle,Buf,SizeOf(Buf));
    if j>0 then CDSWorkClassName.AsString:=Buf;
    j:=GetWindowText(Handle,Buf,SizeOf(Buf));
    if j>0 then CDSWorkWinTitle.AsString:=Buf;
    if GetWindowThreadProcessId(Handle,ProcessId)<>0 then CDSWorkProcessId.AsInteger:=ProcessId;
    CDSWork.Post;
  end;
  FillChar(ModuleName,SizeOf(ModuleName),#0);
  EnumProcesses(@PIDArray,SizeOf(PIDArray),cb);
  ProcCount:=cb div SizeOf(DWORD);
  for i:=0 to ProcCount-1 do begin
    hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,PIDArray[i]);
    if hProcess=0 then ModuleName:=#0
    else begin
      EnumProcessModules(hProcess,@hMod,SizeOf(hMod),cb);
      GetModuleFilenameEx(hProcess,hMod,ModuleName,SizeOf(ModuleName));
      CloseHandle(hProcess);
    end;
    if not CDSWork.FindKey([PIDArray[i]]) then begin
      CDSWork.Append;
      CDSWorkProcessId.AsInteger:=PIDArray[i];
      CDSWorkFileName.AsString:=ExtractFileName(ModuleName);
      CDSWork.Post;
    end
    else while not CDSWork.Eof and (CDSWorkProcessId.AsInteger=PIDArray[i]) do begin
      CDSWork.Edit;
      CDSWorkFileName.AsString:=ExtractFileName(ModuleName);
      CDSWork.Post;
      CDSWork.Next;
    end;
  end;
  CDSWork.First;
end;

end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.05.2011, 11:42   #16
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

мне просто нужно получить имя процесса
Storm Whisper вне форума Ответить с цитированием
Старый 09.05.2011, 11:59   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
      EnumProcessModules(hProcess,@hMod,SizeOf(hMod),cb);
      GetModuleFilenameEx(hProcess,hMod,ModuleName,SizeOf(ModuleName));
Как раз и получает имя модуля запустившего процесс, если под именем процесса это имеется в виду
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 09.05.2011, 12:05   #18
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

пытался вставить только с кнопки, добавил туда var из вашей, модули подключил, а он много чего выделил ошибкой... блииин, не знаю как сделать.....
спрошу не по теме, допустим, я получил список запущенных приложений, как мне проверить, есть ли там нужное мне слово? я пытался делать "for i:=1 to length(список) do copy(список, i:integer, lenght(слово))", и там проверял совпадение, но почему-то он ругался на i...

Последний раз редактировалось Storm Whisper; 09.05.2011 в 12:14.
Storm Whisper вне форума Ответить с цитированием
Старый 09.05.2011, 12:07   #19
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

http://www.realcoding.net/article/view/148 этот код работает

Последний раз редактировалось Storm Whisper; 09.05.2011 в 12:10.
Storm Whisper вне форума Ответить с цитированием
Старый 09.05.2011, 12:18   #20
Storm Whisper
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 14
По умолчанию

о, получилось!)) всё, теперь сравню название программы с нужным словом и вперёд! всем большое спасибо!
Storm Whisper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запущен ли процесс rus_phantom Паскаль, Turbo Pascal, PascalABC.NET 0 02.05.2011 22:22
Имя пользователя под которым запущен процесс nikcpp Win Api 2 13.04.2011 13:42
Как узнать - запущен ли определенный процесс ? 12usver12 Общие вопросы Delphi 16 21.02.2011 02:52
Узнать, был ли процесс запущен пользователем или системой niki2012 Общие вопросы Delphi 3 26.01.2011 21:04
запущен ли процесс Vaska Общие вопросы C/C++ 0 03.04.2009 15:42