⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gsmwizunit.~pas

📁 很好的手机发短信的例子。含GSM群发机设计原理和使用说明。还有详细代码
💻 ~PAS
📖 第 1 页 / 共 3 页
字号:
  BatchTimer.Enabled := false;
  NotifyLabel.Caption := '开始查询所有设备的剩余话费,请稍候...';
  StatusBar1.Panels.Items[0].Text := '开始查询所有设备的剩余话费,请稍候...';
  StopAction.Enabled := true;
  FeeAction.Enabled := false;
  ForceFeeAction.Enabled := false;
  FEEINIFile := ExtractFilePath(Application.ExeName)+'Fee.ini';
  INIFile := TIniFile.Create(FEEINIFile);
  SendAdress := INIFile.ReadString('Fee','SendAdress','1861');
  SENDMSG := INIFile.ReadString('Fee','SendMsg','HF');
  ReceiveAdress := INIFile.ReadString('Fee','ReceiveAdress','01861');
  FeeTemplate := INIFile.ReadString('Fee','FeeTemplate','');
  INIFile.Free;
  for i:=0 to FServer.GSMSets.Count-1 do
  begin
    FServer.GSMSets.GSMSet[i].DoFee(SendAdress,SENDMSG,ReceiveAdress,FeeTemplate);
    if GlobSendMode then
      FServer.GSMSets.GSMSet[i].ReActive;
  end;

  NotAllOK := false;
  for i:=0 to FServer.GSMSets.Count-1 do
     if FServer.GSMSets.GSMSet[i].Fee<0 then
     begin
       NotAllOK := true;
       break;
     end;
  if not NotAllOK then
  begin
    SendAction.Enabled := true;
    FeeAction.Enabled := false;
    NotifyLabel.Caption := '所有设备剩余话费检查完毕,可以进行下一步操作.';
    StatusBar1.Panels.Items[0].Text := '剩余话费检查完毕';
  end
  else
  begin
    FeeAction.Enabled := true;
    NotifyLabel.Caption := '剩余话费完成,但部分设备话费结果不正确,需要重新查询';
    StatusBar1.Panels.Items[0].Text := '剩余话费不正常';
  end;

  StopAction.Enabled := false;
  FeeAction.Enabled := true;
  ForceFeeAction.Enabled := true;
  FeeTimer.Enabled := true;
end;

procedure TMainForm.ForceSendActionExecute(Sender: TObject);
begin
  GlobNeedCheckFee := false;
  SendAction.Enabled := true;
  SendActionExecute(sender);
end;

procedure TMainForm.BackUPLog;
var
  SourceFile: String;
  TargetFile: String;
begin
  SourceFile := LogINIFile;
  TargetFile := ExtractFilePath(Application.ExeName)+'Log\Log'+INITaskName+FormatDateTime('YYYYMMDDHHMMSS',now)+'.ini';
  try
    CopyFile(Pchar(LogINIFile),PChar(TargetFile),false);
  except
  end;

end;

procedure TMainForm.WriteFeeLog(FeeLog: String);
begin
  if FeeLogListBox.Items.Count>100 then
    FeeLogListBox.Items.Clear;
  FeeLogListBox.Items.Add(DateTimeToStr(now)+' : '+FeeLog);
end;

procedure TMainForm.WriteSystemLog;
var
  LogSL: TStringList;
  i: Integer;
  targetFile: String;

begin
  LogSL := TStringList.Create;
  LogSL.Add('===============================================');
  LogSL.Add(DateTimeToStr(now));
  LogSL.Add('===============================================');
  LogSL.Add('开始时间:'+DateTimeToStr(GlobStartTime));
  LogSL.Add('已发送:'+IntToStr(INISendedCount));
  LogSL.Add('未发送:'+IntToStr(MobileList.Count-INIReadCount));
  LogSL.Add('失败:'+IntToStr(IniFailedCount));
  for i:=0 to FServer.GSMSets.Count-1 do
  begin
    try
      LogSL.Add(Format('GSM%.2d 状态: %s,话费:%m',[FServer.GSMSets.GSMSet[i].Port,GComListView.Items.Item[i].SubItems.Strings[0],FServer.GSMSets.GSMSet[i].Fee]))
    except
    end;
  end;
  TargetFile := ExtractFilePath(Application.ExeName)+'Log\Sys'+INITaskName+FormatDateTime('YYYYMMDDHHMMSS',now)+'.ini';
  try
  LogSL.SaveToFile(targetFile);
  except
  end;
  LogSL.Free;
end;

procedure TMainForm.SheduleTimerTimer(Sender: TObject);
var
  i: Integer;
begin
  if GlobAutoStop then
//    if (timeOf(now)>=GlobAutoStopTime) and GlobSendMode then
//    begin
//      WriteLog('自动停止');
//      StopActionExecute(sender);
//    end
//    else
    if (TimeOf(Now)>GlobStartTime) and not GlobSendMode then
    begin
      WriteLog('自动运行');
      SendActionExecute(sender);
    end;

//  if GlobSendMode then
    for i:=0 to FServer.GSMSets.Count-1 do
      if not FServer.GSMSets.GSMSet[i].InThread then
        FServer.GSMSets.GSMSet[i].ReActive;
end;

procedure TMainForm.PrepaireSending;
var
  INIFile: TIniFile;
begin
  GlobLogCount := 0;
  GlobSendMode := false;
  GlobAutoCheckFeeMode := false;
  NotifyLabel.Caption := '';
  FeeNotifyLabel.Caption := '';

  FTasks.Task[0].WaitSendItems.Clear;
  INIFile := TIniFile.Create(WizINIFile);

  if not INIisCallPhoneTask then
  begin
    INIMobileListName := ExtractFilePath(Application.ExeName)+INIFile.ReadString('COMMON','MobileListName','');
    if FileExists(INIMobileListName) then
    begin
      MobileList.LoadFromFile(INIMobileListName);
    TaskInfoEditor.Values['手机列表文件'] := INIMobileListName;
    end
    else
      TaskInfoEditor.Values['手机列表文件'] := INIMobileListName + '《----文件不存在!!!!';
    INISMSMessage := INIFile.ReadString('COMMON','SMSMessage['+DateToStr(now)+']','');
    TaskInfoEditor.Values['短信内容'] := INISMSMessage;
  end;
  INIFile.Free;

  INIFile := TIniFile.Create(LogINIFile);
  INISendedCount := INIFile.ReadInteger('LOG','SendedCount',0);
  IniFailedCount := INIFile.ReadInteger('LOG','FailedCount',0);
  INIReadCount := INISendedCount + IniFailedCount - ((INISendedCount +  IniFailedCount) div ININotifyCount);
  GlobStartCount := INIReadCount;
  INIFile.Free;


  TaskInfoEditor.Values['已发送'] := IntToStr(INISendedCount);
  if not INIisCallPhoneTask then
    TaskInfoEditor.Values['未发送'] := IntToStr(MobileList.Count-INIReadCount)
  else if INIRepeatCount=-1 then
    TaskInfoEditor.Values['未发送'] := '无限次'
  else
    TaskInfoEditor.Values['未发送'] := IntToStr(INIRepeatCount-INIReadCount);

end;

procedure TMainForm.AddMobileActionExecute(Sender: TObject);
var
  LSL: TStringList;
  i: Integer;
  Str: String;
  StrCar: Cardinal;
begin
  if OpenDialog1.Execute then
  begin
    try
      if MobileList.Count<>0 then
      begin
        LSL := TStringList.Create;
        LSL.LoadFromFile(OpenDialog1.FileName);
        for i:=0 to LSL.Count-1 do
        begin
          Application.ProcessMessages;
          str := Trim(LSL.Strings[i]);
          if Length(Str)<11 then
            Continue;
          if str[1]<>'1' then
            Continue;
          if Length(str)>11 then
            str := copy(str,1,11);
          try
            strCar := StrToInt(Copy(str,3,9));
          except
            Continue;
          end;
          Application.ProcessMessages;
          if MobileList.IndexOf(Str)=-1 then
            MobileList.Add(Str);
          Application.ProcessMessages;

        end;
        LSL.free;
        MobileList.SaveToFile(INIMobileListName);
        ShowMessage('追加成功');
      end;
    except

    end;


  end;

end;

procedure TMainForm.FormShow(Sender: TObject);
begin
  SheduleTimerTimer(sender);
  SheduleTimer.Enabled := true;
end;

procedure TMainForm.FeeTimerTimer(Sender: TObject);
var
  i: Integer;
  INIFile: TINIfile;
  SendAdress: String;
  SENDMSG: String;
  ReceiveAdress: String;
  FeeTemplate: String;
  NotStop: Boolean;
  NotAllOK: Boolean;
  TimeOut: Integer;
  Tick: Cardinal;
  setIndex: Integer;
begin
  if not GlobAutoCheckFee then
    exit;
  if not  ((TimeOf(Now)>GlobAutoCheckFeeStartTime) and (TimeOf(Now)<GlobAutoCheckFeeStopTime)) then
    exit;
    
  if SetList.Count = 0 then
    for i:=0 to FServer.GSMSets.Count-1 do
      SetList.Add(IntToStr(i));

  if SetList.Count=1 then
    FeeTimer.Interval :=  GlobAutoCheckFeeTime
  else
    FeeTimer.Interval := 30000;

  Randomize;
  setIndex := StrToInt(SetList.Strings[Random(SetList.Count)]);
  SetList.Delete(SetList.IndexOf(IntToStr(setIndex)));

  FeeNotifyLabel.Caption := format('开始查询设备[GSM%.2d]的剩余话费,请稍候...',[FServer.GSMSets.GSMSet[setIndex].Port]);
  StatusBar1.Panels.Items[0].Text := '开始查询设备的剩余话费,请稍候...';

  INIFile := TIniFile.Create(FEEINIFile);
  SendAdress := INIFile.ReadString('Fee','SendAdress','1861');
  SENDMSG := INIFile.ReadString('Fee','SendMsg','HF');
  ReceiveAdress := INIFile.ReadString('Fee','ReceiveAdress','01861');
  FeeTemplate := INIFile.ReadString('Fee','FeeTemplate','');
  INIFile.Free;

  Tick := GetTickCount;
  TimeOut := 40000;
  FServer.GSMSets.GSMSet[setIndex].DoFee(SendAdress,SENDMSG,ReceiveAdress,FeeTemplate);
  repeat
    SimpleWait(200);
  until (not FServer.GSMSets.GSMSet[setIndex].InThread) or (Application.Terminated) or (GetTickCount-Tick>TimeOut);
  if GlobSendMode then
    FServer.GSMSets.GSMSet[setIndex].ReActive;

  if SetList.Count=0 then
  begin
    FeeNotifyLabel.Caption := format('剩余话费查询['+TimeToStr(Now)+']结束,下一次在%d分钟后进行',[FeeTimer.Interval div 60000]);
    StatusBar1.Panels.Items[0].Text := '剩余话费本轮查询结束';
    WriteSystemLog;
  end;
end;

procedure TMainForm.N1Click(Sender: TObject);
var
  i: integer;
  INIFile: TINIfile;
  SendAdress: String;
  SENDMSG: String;
  ReceiveAdress: String;
  FeeTemplate: String;
  Tick: Cardinal;
  TimeOut: Integer;
begin
  INIFile := TIniFile.Create(FEEINIFile);
  SendAdress := INIFile.ReadString('Fee','SendAdress','1861');
  SENDMSG := INIFile.ReadString('Fee','SendMsg','HF');
  ReceiveAdress := INIFile.ReadString('Fee','ReceiveAdress','01861');
  FeeTemplate := INIFile.ReadString('Fee','FeeTemplate','');
  INIFile.Free;

  for i:= 0 to FServer.GSMSets.Count-1 do
  begin
    if GComListView.Items[i].Selected then
    begin
      Tick := GetTickCount;
      TimeOut := 40000;
      FServer.GSMSets.GSMSet[i].DoFee(SendAdress,SENDMSG,ReceiveAdress,FeeTemplate);
      repeat
        SimpleWait(200);
      until (not FServer.GSMSets.GSMSet[i].InThread) or (Application.Terminated) or (GetTickCount-Tick>TimeOut);
      if GlobSendMode then
        FServer.GSMSets.GSMSet[i].ReActive;
    end;

  end;

end;

procedure TMainForm.S1Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to FServer.GSMSets.Count-1 do
    if GComListView.Items[i].Selected then
    begin
      FServer.GSMSets.GSMSet[i].KeepIT := false;
      FServer.GSMSets.GSMSet[i].ReActive;
    end;
end;

procedure TMainForm.N3Click(Sender: TObject);
var
  i: Integer;
begin
  for i:= 0 to FServer.GSMSets.Count-1 do
    if GComListView.Items[i].Selected then
      FServer.GSMSets.GSMSet[i].KeepIT := true;
end;

procedure TMainForm.LowSpeedActionExecute(Sender: TObject);
begin
  GlobDialLowSpeed := not GlobDialLowSpeed;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -