На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Отправка СМС с GSM модема с помощью AT команд , Нужна помощь с delphi XE
    Был у меня старый код
    ExpandedWrap disabled
      uses
      windows, ...
       
      procedure SendSMS(AComPort: integer; AMsg: String; ANumTel: String);
      var
        hFile: THandle;
       
        procedure WriteStr(AStr: String); //пишет в порт переданную строку
        var
          LWrited: Cardinal;
        begin
          //Пишем в порт
          WriteFile(hFile, PAnsiChar(AStr)^, Length(AStr), LWrited, nil);
        end;
       
      begin
        //открываем порт
        hFile := Windows.CreateFile(PChar({}'\\.\COM' + IntToStr(AComPort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
       
        //если открылся
        if (hFile <> INVALID_HANDLE_VALUE) then
        begin
          try
            //устанавливаем текстовый режим
            WriteStr('AT+CMGF=1' + #$D#$A);
            //вводим номер в формате "+79xxxxxxxxx"
            WriteStr('AT+CMGS="'+ANumTel+'"' + #$D#$A);
            //вводим текст сообщения, только латиница
            WriteStr(AMsg + #$D#$A#$1A);
          finally
            //закрываем порт
            Windows.CloseHandle(hFile);
          end;
        end;// else showmessage('NOT OPEN');
      end;

    На Delphi 7 работает идеально, но при переходе на Delphi XE5 перестал.
    Особенностью данного кода есть то, что если в AMsg будет хоть один символ НЕ ЛАТИНИЦЕЙ, то смс не отправляется.
    До чего докопал:
    ExpandedWrap disabled
        //открываем порт
        hFile := Windows.CreateFile(PChar({}'\\.\COM' + IntToStr(AComPort)), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);

    В (windows.createfile), делфи7 при создании файла, он как я понял, идёт ANSI, а XE уже в кодировке WIDE. Пробовал и перебивать текст команд в ANSI из UTF8, и создал под делфи7 SMS.dll c этой процедурой... всё равно. даже dll работает только из delphi7, а на delphi XE не хочет

    Пробовал обрезать переход на новую строку TRIM, но всё равно...

    Отправляю вот так
    ExpandedWrap disabled
      sendsms(4, 'aaa', '+3809хххххххх');

    Подскажите пожалуйста как заставить этот код работать под XE
      Цитата dreyqq @
      WriteFile(hFile, PAnsiChar(AStr)^, Length(AStr), LWrited, nil);

      WriteFile(hFile, PAnsiChar(AnsiString(AStr))^, Length(AStr), LWrited, nil);
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0345 ]   [ 17 queries used ]   [ Generated: 28.03.24, 15:07 GMT ]