Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 52 из 116<  1 ... 49  50  51  52  53  54  55 ... 116  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 08.09.2004
Попробуй так, я пробывал сэмитировать твой файл, вроде бы сработало. Может файлик выложишь сюда исходный, а то так не ясно, что делать.

while a<>'zxczxczxc' do
begin
readln(v,a);
s:='';
if pos('Date and Time: ',a)=1 then
begin
delete(a,1,15);
write(b,a);
end
else write(b,a);
writeln(b);
end;

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...



Партнер
 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
Vaitek
Попробовал - работает... Спасибо огромное! :) :beer:
А я всегда недооценивал возможности "pos" :)


 

Member
Статус: Не в сети
Регистрация: 08.09.2004
еще есть Copy ;-)

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
:bandhead: Задолбался с Делфой... теперь не работает следующее извращение с файлом:
Код:
program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var a,b:TextFile;
s,ss:widestring;
i,j:integer;
begin
assignfile(a,'out.txt');
reset(a);
assignfile(b,'out2.txt');
rewrite(b);
while s<>'zxczxczxc' do
begin
  readln(a,s);
  if (ord(s[3])=47)and(ord(s[6])=47) then
  begin
    delete(s,1,12);
    write(b,s,' ');
  end
  else
  begin
  write(b,s);
  writeln(b);
  end;
end;
close(a);
close(b);
end.

Сейчас эта зараза решила заполнить выходной файл только на 24 килобайта и с чувством выполненного долга завершиться.. В чём у меня ошибка то? Если не в ДНК :(


 

Member
Статус: Не в сети
Регистрация: 08.09.2004
Файл в студию.

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
Vaitek
Вот примерный файл...
http://www.234010120.nm.ru/out.txt(172 кб) с ним выходной заполняется на 39 килобайт.. с разными примерами по-разному...


 

Member
Статус: Не в сети
Регистрация: 08.09.2004
так попробуй:
Считываемая строка не всегда может иметь 6 символов, как думаешь, что даст вот эта строчка (ord(s[6])=47) если символов в строке скажем 4?
while s<>'zxczxczxc' do
begin
readln(a,s);
if (length(s) > 5) and (ord(s[3])=47) and (ord(s[6])=47) then
begin
delete(s,1,11);
write(b,s,' ');
end else
begin
write(b,s);
writeln(b);
end;
end;

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...


 

Member
Статус: Не в сети
Регистрация: 14.08.2004
Откуда: Москва
Vaitek
блин, точно... спасиб за идею... :)


 

Member
Статус: Не в сети
Регистрация: 24.04.2005
Откуда: Белгород :(
можно сделать чтоб процесс нельзя было завершить как напримен lsas.exe &

_________________
█ ██ █ ██ █ ██ █


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
HAZARDOUS да, перехватывать native api ф-цию, как называеться - непомню.

_________________
Ку ку


 

Junior
Статус: Не в сети
Регистрация: 30.12.2003
Откуда: Тихвин
Пишу приложение для запуска сторонней программы, но сторонняя программа не видна в запущенных приложениях в Диспетчере задач, а видна только как Процесс и висит в трэе.
Теперь вопрос:
Как проверить запущена эта программа или нет (висит в трэе и в процессах в дисп. задач)?
Т.е. я запускаю свою программу, проверяю запущена ли эта сторонняя прога и если не запущенна то запускаю.
Может кто ссылку даст или примерчик небольшой.


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Mickel_sys Вот что-то похожее
Код:
Объявляем сначала две глобальные переменные: var
si:Tstartupinfo;
p:Tprocessinformation;
Затем по нужному событию, например, по нажатию на кнопке пишет такой код:
FillChar( Si, SizeOf( Si ) , 0 );
with Si do
begin
cb := SizeOf( Si);
dwFlags := startf_UseShowWindow;
wShowWindow := 4;
end;
Form1.WindowState:=wsminimized;
Createprocess(nil,'c:\windows\sndrec32.exe e:\temp.wav',nil,nil,false,Create_default_error_mode,nil,nil,si,p);
Waitforsingleobject(p.hProcess,infinite);
Form1.WindowState:=wsNormal; 


А это по поиску процессов

Код:
Поставь на форму список TListbox и кнопку TButton, по нажатию на кнопке напиши такой код:

  procedure TForm1.Button1Click(Sender: TObject);
var
Window:hWnd;
buffer: array [0..127] of char;
begin
  ListBox1.Clear;
  Window:=GetWindow(Handle,GW_HWNDFIRST);
  while Window<>0 do begin
    if (Window<>Application.Handle) and
      IsWindowVisible(Window) and
      (GetWindow(Window,GW_OWNER)=0) and
      (GetWindowText(Window,buffer,sizeof(buffer))<>0)
      then begin
         GetWindowText(Window,buffer,sizeof(buffer));
         ListBox1.Items.Add(StrPas(buffer));
    end;
    Window:=GetWindow(Window,GW_HWNDNEXT);
  end;
  ListBox1.ItemIndex:=0;
end;


 

Как это сделано?

  С помощью функции GetWindow() мы находим первое окно находящееся в z-последовательности, дескриптор найденного окна  помещаем в переменную Window Window:=GetWindow(Handle,GW_HWNDFIRST);


после этого нужно оценить "чё, собственно, мы там нашли"  :))

  сначала исключаем возможность добавления собственного окна в список 

if (Window<>Application.Handle) and

потом скажем, что добавляем окно в список только если оно видимо

IsWindowVisible(Window) and

только если оно не является дочерним и имеет заголовок

(GetWindow(Window,GW_OWNER)=0) and
(GetWindowText(Window,buffer,sizeof(buffer))<>0)
 

 

И мол, только если найденное окно соответствует всем поставленным условиям, только тогда добавим его в список, после чего ищем следующее окно

Window:=GetWindow(Window,GW_HWNDNEXT);

и точно так же обрабатываем его.

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Mickel_sys
Если искать по имени исполняемого файла, то можно так:

Код:
unit gkIsRunning;

interface

uses
  Windows, TlHelp32;

function IsRunning(const ExeFileName: String): Boolean;

implementation

function IsRunning(const ExeFileName: String): Boolean;
var
  Handle: THandle;
  ProcessEntry32: TProcessEntry32;
begin
  Handle:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  try
    if Handle <> -1 then
    begin
      ProcessEntry32.dwSize:= SizeOf(TProcessEntry32);
      if (Process32First(Handle, ProcessEntry32)) then
      repeat
        if ExeFileName = ProcessEntry32.szExeFile then
        begin
          Result:= True;
          Break;
        end;
      until not Process32Next(Handle, ProcessEntry32);
    end;
  finally
    CloseHandle(Handle);
  end;
end;

end.


Просьба не пинать, писал навскидку. :)
Пример использования:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsRunning('winamp.exe') then
    ShowMessage('Yes')
  else
    ShowMessage('No');
end;


Минус подобного подхода в том, что если файл будет переименован, то фиг получишь правильный резалт.
Лучше (надежней ИМХО) искать анализируя заголовок окна, используя GetWindowText + EnumWindowsProc & EnumWindows.


 

Member
Статус: Не в сети
Регистрация: 08.09.2004
Сорри, если не в тему, но тогда уж лучше по классу окна - заголовок может меняться. Класс можно TDump'ом посмотреть.

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
Vaitek
Если заголовок меняется корректно самим процессом, то, как правило, базовое значение все равно присутствует.
Пример:
1. Microsoft Word
2. Документ1 - Microsoft Word
Именно поэтому я и написал об анализе заголовка окна. :)


 

Member
Статус: Не в сети
Регистрация: 08.09.2004
Согласен :-)

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...


 

Member
Статус: Не в сети
Регистрация: 04.04.2005
Откуда: Екатеринбург
В исходниках одной программы увидел, что настройки сделаны через классы, решил сделать подобным образом,
но почему-то не хочет работать.
Вот как я сделеал:
Код:
unit ProgramSettings;

interface

uses  SysUtils,Forms,Windows,Classes,JvSimpleXml;

type
   TProgrammSettings = class;
      TSettingsForms = class;
         TSettingsMain = class;

   TProgrammSettings = class(TObject)
   protected
      XML:TJvSimpleXml;
      FRoot:TJvSimpleXmlElem;
   public
      Forms:TSettingsForms;// настройки главного окна
      procedure LoadSettings;// загружаем настройки
   end;

   TSettingsForms = class(TProgrammSettings)
   public
      Main:TSettingsMain;
   end;   

   TSettingsMain = class(TSettingsForms)
   public
      Top: Integer;
      Left: Integer;
      Width: Integer;
      Height: Integer;
      OnTop: Boolean;
      StatusBar: Boolean;
   end;

implementation

   procedure TProgrammSettings.LoadSettings;
   var CurItem: TJvSimpleXmlElem;
      function GetCurItem(const ItemName: string): TJvSimpleXmlElem;
      begin
         Result := CurItem.Items.ItemNamed[ItemName];
         if Result = nil then
         begin
            Result := CurItem.Items.Add(ItemName);
            Result.Parent := CurItem;
         end;
      end;
   begin
      XML:=TJvSimpleXml.Create(nil);
      FRoot:=TJvSimpleXmlElem.Create(nil);
      FRoot:=XML.Root;
      XML.LoadFromString('<?xml version="1.0" encoding="windows-1251"?><WERTEX Version="strVersion" Date="08.12.2005"><Settings><Forms><Main Top="100" Left="100" Width="730" Height="500" /></Forms></Settings></WERTEX>');
      CurItem:=FRoot;
      CurItem:=GetCurItem('Settings');
      CurItem:=GetCurItem('Forms');
      CurItem:=GetCurItem('Main');
      with CurItem do
      begin
         Forms.Main.Top:=CurItem.Properties.IntValue('Top',0);
         Forms.Main.Left:=Properties.IntValue('Left',100);
         Forms.Main.Width:=Properties.IntValue('Width',740);
         Forms.Main.Height:=Properties.IntValue('Height',540);
      end;
   end;
end.

Дак вот, возникает следующая ошибка: EAccessViolation. Как я понял это возникает из-за того, что классы TSettingsForms и TSettingsMain не создаютя.
Каким образом можно исправит эту ошибку ?


 

Member
Статус: Не в сети
Регистрация: 08.09.2004
Может я чего не понимаю, но перед использованием Forms наверное нужна строчка
Forms := TSettingsForms.Create;
А в конструкторе TSettingsForms строчка
Main := TSettingsMain.Create;

_________________
Да здравствует то, благодаря чему, мы не смотря ни на что...


 

Member
Статус: Не в сети
Регистрация: 05.01.2005
W[E]RTEX
W[E]RTEX писал(а):
Каким образом можно исправит эту ошибку ?

И шо ты постишь одно и тоже в разные ветки?
Тебе же уже написали, по-русски :), что нужно учить ООП + конкретно указали (Daemon) где ошибка. ;)

Daemon писал(а):
А создаешь ли?


W[E]RTEX
Срочно учить мат. часть. ;)


Последний раз редактировалось _SGK 10.12.2005 23:04, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 04.04.2005
Откуда: Екатеринбург
просто изначально не в ту ветку зашел, а потом позно стало.
щас все ок.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 2317 • Страница 52 из 116<  1 ... 49  50  51  52  53  54  55 ... 116  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan