Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.01.2014, 04:21
Woha28 Woha28 вне форума
Прохожий
 
Регистрация: 29.12.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
Вопрос Учет трафика

Привет всем! Помогите новичку. У меня интернет через мегафон-модем, тариф 50gb на месяц но с 00:00 до 08:00 трафик не учитывается. И я хочу написать простенькую прогу которая будет вести учет трафика:
входящий
исходящий
всего
но только в выбраное мной время (на данный момент с 8 утра до полуночи) и с автозагрузкой (запуск вместе с Windows).
Помогите пожалуйста, желательно в виде кода.
P.S. Нашел кое-что:
Цитата:
var zero: integer;

procedure TMainForm.FormCreate(...);
var MibArr : IpHlpAPI.TMIBIfArray;
begin
Get_IfTableMIB(MibArr);
zero:=MibArr[1].dwInOctets;
end;

procedure TMainForm.Timer1Timer;
var
MibArr : IpHlpAPI.TMIBIfArray;
begin
Get_IfTableMIB(MibArr);
Label1.Caption:=IntToStr(MibArr[1].dwInOctets - zero);
end;

Кстатти тебе потребуются 2 модуля: IPHelper.pas и IPHLPAPI.pas
но у меня нет таких модулей (IPHelper.pas и IPHLPAPI.pas), пробовал скачать но не нашел.
Ответить с цитированием
  #2  
Старый 02.01.2014, 05:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Плохо искал.
Вот, например:
https://github.com/sebadima/pinger/b...r/IPHelper.pas
https://github.com/sebadima/connaliv...r/IPHLPAPI.pas

Последний раз редактировалось lmikle, 02.01.2014 в 05:30.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Woha28 (02.01.2014)
  #3  
Старый 02.01.2014, 05:41
Woha28 Woha28 вне форума
Прохожий
 
Регистрация: 29.12.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо, но как это использовать. Скопировать создать IPHelper.pas а куда кидать
Ответить с цитированием
  #4  
Старый 02.01.2014, 05:54
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Woha28
Спасибо, но как это использовать. Скопировать создать IPHelper.pas а куда кидать
Кидай туда, где Delphi сможет их найти, например в папку с проектом. И у себя в проекте в uses добавь эти модули.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Woha28 (02.01.2014)
  #5  
Старый 02.01.2014, 06:44
Woha28 Woha28 вне форума
Прохожий
 
Регистрация: 29.12.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо модули подключились! Но код привиденый више ни хрена не работает,
выводит постаянно 0.
Может есть еще варианты, или этот код как-то изменить?

Спасибо модули подключились! Но код привиденый выше ни хрена не работает,
выводит постаянно 0.
Может есть еще варианты, или этот код как-то изменить?

Последний раз редактировалось M.A.D.M.A.N., 02.01.2014 в 19:52.
Ответить с цитированием
  #6  
Старый 02.01.2014, 13:02
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Woha28
Спасибо модули подключились! Но код привиденый выше ни хрена не работает,
выводит постаянно 0.
Может есть еще варианты, или этот код как-то изменить?
Скорее всего ты не тот интерфейс контролируешь, ведь Get_IfTableMIB возвращает массив. Попробуй выводить другой элемент массива , или же выводи все элементы массива например в Memo (или ListBox или ListView и т.п.).
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Woha28 (02.01.2014)
  #7  
Старый 02.01.2014, 18:43
Woha28 Woha28 вне форума
Прохожий
 
Регистрация: 29.12.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Подскажите что не так?

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IPHelper, IpHlpApi, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Timer1: TTimer;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  zero,i : Real;
  InDowm, InOut, Resul: string;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var MibArr : IpHlpAPI.TMIBIfArray;
begin
  Get_IfTableMIB(MibArr);
  zero:=MibArr[1].dwInOctets;
  //i:=MibArr[0].dwOutOctets;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 MibArr : IpHlpAPI.TMIBIfArray;
begin
  Get_IfTableMIB(MibArr);
  InDowm:= FloatToStr(MibArr[17].dwInOctets);
  InOut:= FloatToStr(MibArr[17].dwOutOctets);
  Resul:=InDowm+InOut;
  Label1.Caption:=InDowm;
  Label2.Caption:=InOut;
  //Label3.Caption:='Весь трафик: '+ Resul;
end;

end.

Последний раз редактировалось Woha28, 02.01.2014 в 18:48.
Ответить с цитированием
  #8  
Старый 02.01.2014, 22:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Переменная MibArr у тебя локальная и после выхода из OnCreate она исчезает. Сделай её глобальной.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 03.01.2014, 15:13
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Woha28
Подскажите что не так?
Да тут многое что не так...
Переменная zero объявлена почему-то вещественным типом Real, хотя по идее должна иметь тот же тип что и dwInOctets, т.е. DWORD. Причём считывается в FormCreate в эту переменную из 1-го элемента массива, хотя потом, в таймере, работа вовсю идёт с 17-ым элементом. Да и не используется эта нулевая точка отсчёта нигде - как считалась в FormCreate так и висит "мёртвым грузом" (а ведь в первом сообщении она использовалась по назначению).
Так как dwInOctets и dwOutOctets имеют не вещественный, а целочисленный тип, то и преобразовывать их в строку нужно не через FloatToStr, а через IntToStr.

А смысл этой операции я вообще не понял:
Код:
  Resul:=InDowm+InOut;
Это же конкатенация? Т.е. допустим я получил 32768 байт и отправил 1024 байт, теперь после тех преобразований я получу в переменной Resul строку "327681024". И какой в этом смысл?
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter