Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Программа возвращает значение, Winexec 
:(
    Опции темы
Ksen
Дата 16.2.2007, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Всем здрасти))))

У меня такая проблемка....
запускаю программу с помощью функции Winexec, она отрабатывает всё хорошо....но эта программа должна возвращать мне некий ID, с которым мне дальше нужно работать....как мне можно перехватить этот ID??? Помогите, пожалуйтса!! Может можно использовать какую-нибудь другую функцию.....??

PM MAIL ICQ   Вверх
Rodman
Дата 16.2.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



SendMessage может?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Yanis
Дата 16.2.2007, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(MSDN)
Note  This function is provided only for compatibility with 16-bit Windows. Applications should use the CreateProcess function.


Добавлено @ 09:53 
Цитата(Ksen @  16.2.2007,  10:49 Найти цитируемый пост)
но эта программа должна возвращать мне некий ID

А как она, тебе его возвращает?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ksen
Дата 16.2.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Rodman, чего-то у меня не получается....(((


Yanis, как возвращает??....ну например...если я в командной строке запущу это приложение....оно мне после запуска выводит ID...
PM MAIL ICQ   Вверх
Rodman
Дата 16.2.2007, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



что конкретно не получается?!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ksen
Дата 16.2.2007, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Rodman, ...немного не догоняю....а сообщение мне какое посылать?
Вот, например, я написала так....

a:=sendmessage ('trigadm.exe /Request:AddTrigger /Name:Trig01 /Queue:kolesnikovcomp\private$\isq_in', WM_ACTIVE, 0, 0);

Правильно??? поправь если не правильно....пожалуйста)))
PM MAIL ICQ   Вверх
Yanis
Дата 16.2.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Ksen
http://vingrad.ru/DELPHI-DLP-000792
Представь, что в Memo выводится твой ID.
PM MAIL WWW ICQ   Вверх
Rodman
Дата 16.2.2007, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



что то ты замудрил...

одно приложение (которое формирует переменную) отсылает сообщение, а второе получает (а не запускает приложение)...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ksen
Дата 16.2.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Yanis,  smile не получается...говорит, что я передаю слишком много параметров(((
может я не правильно делаю...посмотри...
Код

procedure RunDosInMemo(CmdLine:String;AMemo:TMemo);
const  
  ReadBuffer = 2400;  
var
 Security       : TSecurityAttributes;  
 ReadPipe,WritePipe  : THandle;  
 start        : TStartUpInfo;
 ProcessInfo     : TProcessInformation;  
 Buffer        : Pchar;  
 BytesRead      : DWord;
 Apprunning      : DWord;  
begin  
 Screen.Cursor:=CrHourGlass;
 Form1.Button1.Enabled:=False;  
 With Security do begin  
 nlength        := SizeOf(TSecurityAttributes);
 binherithandle    := true;  
 lpsecuritydescriptor := nil;  
 end;
 if Createpipe (ReadPipe, WritePipe,  
        @Security, 0) then begin  
 Buffer  := AllocMem(ReadBuffer + 1);
 FillChar(Start,Sizeof(Start),#0);  
 start.cb      := SizeOf(start);  
 start.hStdOutput  := WritePipe;
 start.hStdInput  := ReadPipe;  
 start.dwFlags   := STARTF_USESTDHANDLES +  
            STARTF_USESHOWWINDOW;
 start.wShowWindow := SW_HIDE;  
 
 if CreateProcess(nil,
     PChar(CmdLine),  
     @Security,  
     @Security,
     true,  
     NORMAL_PRIORITY_CLASS,  
     nil,
     nil,  
     start,  
     ProcessInfo)
 then  
 begin  
  repeat
  Apprunning := WaitForSingleObject  
         (ProcessInfo.hProcess,100);  
   ReadFile(ReadPipe,Buffer[0],
      ReadBuffer,BytesRead,nil);  
   Buffer[BytesRead]:= #0;  
   OemToAnsi(Buffer,Buffer);
   AMemo.Text := AMemo.text + String(Buffer);  
 
  Application.ProcessMessages;
  until (Apprunning <> WAIT_TIMEOUT);  
 end;
 FreeMem(Buffer);
 CloseHandle(ProcessInfo.hProcess);
 CloseHandle(ProcessInfo.hThread);
 CloseHandle(ReadPipe);
 CloseHandle(WritePipe);
 end;
 Screen.Cursor:=CrDefault;
 Form1.Button1.Enabled:=True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Clear;
RunDosInMemo('trigadm.exe /Request:AddTrigger /Name:Trig01 /Queue:kolesnikovcomp\private$\isq_in',Memo1);
end;


Добавлено @ 10:57 
Rodman, а можешь примерчик привести?
PM MAIL ICQ   Вверх
Yanis
Дата 16.2.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Ksen
А обы приложения твои? Или запускаемая программа чужая?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Ksen
Дата 16.2.2007, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



запускаемая программа чужая...(((( она создаёт тригер и связывает его с очередью сообщений.....а мне бы вытащить этот идентификатор тригера...для дальнейшей работы(((( вот мучаюсь...
PM MAIL ICQ   Вверх
Ksen
Дата 16.2.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



нашла статью про CreateProcess, который возвращает консольный вывод....на DelphiWord
http://delphiworld.narod.ru/base/createprocess_console.html

пытаюсь просто пингануть соседнюю машину....и посмотреть выведит ли мне в мемо результат пингования....

Вываливается ошибка Too many actual parameters......(((((( почему??!! кто-нибудь может подсказать...??  smile 

Код

procedure ExecConsoleApp(CommandLine: AnsiString; Output: TStringList; Errors:
  TStringList);
var
  sa: TSECURITYATTRIBUTES;
  si: TSTARTUPINFO;
  pi: TPROCESSINFORMATION;
  hPipeOutputRead: THANDLE;
  hPipeOutputWrite: THANDLE;
  hPipeErrorsRead: THANDLE;
  hPipeErrorsWrite: THANDLE;
  Res, bTest: Boolean;
  env: array[0..100] of Char;
  szBuffer: array[0..256] of Char;
  dwNumberOfBytesRead: DWORD;
  Stream: TMemoryStream;
begin
  sa.nLength := sizeof(sa);
  sa.bInheritHandle := true;
  sa.lpSecurityDescriptor := nil;
  CreatePipe(hPipeOutputRead, hPipeOutputWrite, @sa, 0);
  CreatePipe(hPipeErrorsRead, hPipeErrorsWrite, @sa, 0);
  ZeroMemory(@env, SizeOf(env));
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@pi, SizeOf(pi));
  si.cb := SizeOf(si);
  si.dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
  si.wShowWindow := SW_HIDE;
  si.hStdInput := 0;
  si.hStdOutput := hPipeOutputWrite;
  si.hStdError := hPipeErrorsWrite;

  (* Remember that if you want to execute an app with no parameters you nil the
     second parameter and use the first, you can also leave it as is with no
     problems.                                                                 *)
  Res := CreateProcess(nil, pchar(CommandLine), nil, nil, true,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, @env, nil, si, pi);

  // Procedure will exit if CreateProcess fail
  if not Res then
  begin
    CloseHandle(hPipeOutputRead);
    CloseHandle(hPipeOutputWrite);
    CloseHandle(hPipeErrorsRead);
    CloseHandle(hPipeErrorsWrite);
    Exit;
  end;
  CloseHandle(hPipeOutputWrite);
  CloseHandle(hPipeErrorsWrite);

  //Read output pipe
  Stream := TMemoryStream.Create;
  try
    while true do
    begin
      bTest := ReadFile(hPipeOutputRead, szBuffer, 256, dwNumberOfBytesRead,
        nil);
      if not bTest then
      begin
        break;
      end;
      Stream.Write(szBuffer, dwNumberOfBytesRead);
    end;
    Stream.Position := 0;
    Output.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;

  //Read error pipe
  Stream := TMemoryStream.Create;
  try
    while true do
    begin
      bTest := ReadFile(hPipeErrorsRead, szBuffer, 256, dwNumberOfBytesRead,
        nil);
      if not bTest then
      begin
        break;
      end;
      Stream.Write(szBuffer, dwNumberOfBytesRead);
    end;
    Stream.Position := 0;
    Errors.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;

  WaitForSingleObject(pi.hProcess, INFINITE);
  CloseHandle(pi.hProcess);
  CloseHandle(hPipeOutputRead);
  CloseHandle(hPipeErrorsRead);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  OutP: TStringList;
  ErrorP: TStringList;
  a:string;
begin
  OutP := TStringList.Create;
  ErrorP := TstringList.Create;

  ExecConsoleApp('ping 192.168.0.212', OutP, ErrorP);
  Memo1.Lines.Assign(OutP);

  OutP.Free;
  ErrorP.Free;
end;

для примера...как у меня....хотя в статье всё тоже самое...((((

PM MAIL ICQ   Вверх
bartram
Дата 16.2.2007, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1606
Регистрация: 22.2.2004
Где: Russia, Samara

Репутация: 3
Всего: 29



Ksen, этот код у меня работает, синтаксических ошибок нет! Какая версия Делфи? Я проверял на BDS 2006


--------------------
В каждом из нас спит гений, но с каждым днем все крепче ;-)
bartram.ru
Twitter
user posted image 

PM MAIL ICQ   Вверх
Ksen
Дата 16.2.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 97
Регистрация: 24.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



я в delphi7.....сейчас попробую тогда в 2006....
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5211 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.