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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2012, 01:50   #1
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
Лампочка Запущенно ли приложение x64

Здравствуйте, есть вот такой код, который определяет по имени файла в процессах запущен он или нет. с х32 программами работает, а вот с х64 не работает. Подскажите выход из сложившейся ситуации.
PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsTlHelp32ShellAPIStdCtrls;

type
  TForm1 
= class(TForm)
    
Button1TButton;
    
procedure Button1Click(SenderTObject);
  private
    { Private 
declarations }
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}
function 
GetProcessByEXE(exenamestring): THandle;
var
  
hSnapshootTHandle;
  
pe32TProcessEntry32;
begin
  Result
:= 0;
  
hSnapshoot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS0);
  if (
hSnapshoot 0then Exit;
  
pe32.dwSize:= SizeOf(TProcessEntry32);
  if (
Process32First(hSnapshootpe32)) then
    repeat
      
if (pe32.szExeFile exenamethen
      begin
        Result
:= pe32.th32ProcessID;
        exit;
      
end;
    
until not Process32Next(hSnapshootpe32);
end;


procedure TForm1.Button1Click(SenderTObject);
begin
  
if GetProcessByEXE('x64.exe') = 0 then
    ShowMessage
('Уже запущено')
  else
    
ShowMessage('НЕ запущено');
end;

end
N0iD вне форума Ответить с цитированием
Старый 28.01.2012, 01:57   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Ну да все правильно, если нет процесса x64.exe то и функция вернёт соотв. результат.
Человек_Борща вне форума Ответить с цитированием
Старый 28.01.2012, 02:08   #3
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Ну да все правильно, если нет процесса x64.exe то и функция вернёт соотв. результат.
))) Вы же знаете о чем идет речь, например впишем туда 'Photoshop.exe' в заместо x64.exe и запустим Photoshop x64. В процессах он будет, а прога не видит. Если запустить Photoshop x32. То видит.
N0iD вне форума Ответить с цитированием
Старый 28.01.2012, 02:39   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

нужно получить PE Header и Image Header процесса, ьам есть соотв. флаг указывающий на разрядность запущенного процсесса.
Человек_Борща вне форума Ответить с цитированием
Старый 28.01.2012, 02:41   #5
N0iD
Пользователь
 
Аватар для N0iD
 
Регистрация: 05.05.2010
Сообщений: 50
По умолчанию

Спасибо разобрался, мне нужно было просто узнать запущенно ли приложение. Просто то что использовал, не воспринимало x64 программы. На гуглил иной вариант.
N0iD вне форума Ответить с цитированием
Старый 28.01.2012, 03:02   #6
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

(ну, правильно, использовали динозавра ToolHelp, который отмер этак лет 15 назад, чего ещё ожидали?)
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 28.01.2012, 03:04   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

GunSmoker, есть что-то по новее?
Человек_Борща вне форума Ответить с цитированием
Старый 28.01.2012, 03:08   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

PS API, конечно же.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 28.01.2012, 08:57   #9
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от N0iD Посмотреть сообщение
Спасибо разобрался, мне нужно было просто узнать запущенно ли приложение. Просто то что использовал, не воспринимало x64 программы. На гуглил иной вариант.
Выложи сюда плиз своё решение проблемы. Не одному Вам интересно
FaTaL вне форума Ответить с цитированием
Старый 28.01.2012, 09:39   #10
Rock-n-Rolla
Форумчанин
 
Регистрация: 11.01.2012
Сообщений: 177
По умолчанию

Цитата:
Сообщение от N0iD Посмотреть сообщение
))) Вы же знаете о чем идет речь, например впишем туда 'Photoshop.exe' в заместо x64.exe и запустим Photoshop x64. В процессах он будет, а прога не видит. Если запустить Photoshop x32. То видит.
что за бред? имя процесса совершенно не зависит от его битности
progromore.i2p - первый русскоязычный портал программистов в скрытосети
Rock-n-Rolla вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wi-Fi в Windows 7 x64 russian-stalker Windows 4 12.07.2011 23:35
Server2008(x64) не может закрыть моё приложение при завершении работы системы, но убивается через ДЗ Человек_Борща Общие вопросы Delphi 6 02.03.2011 17:20
Windows 7 x64 СисТемникс Windows 7 13.09.2010 07:09
Задача:в вижуал с++ Разработать приложение-сервер и приложение (смотри дальше сообщение) Мила777 Фриланс 2 21.10.2009 11:05
Как определить, запущенно ли приложение? k1r1ch Общие вопросы Delphi 1 27.07.2009 12:20