PDA

Ver la Versión Completa : Enviar comando ADB desde delphi


force1758
13-12-2015, 13:08:40
Hola amigo como les va tiempo sin pasar por el foro tengo una duda para ver si pueden ayudar quisiera como puedo hacer en enviar comando ADB (androide) desde delphi y devolver el resultado en un tmemo ,ya que quiero crear una herramienta para uso de celulares y table basado en S.O androide se los agradecería saludo

Neftali [Germán.Estévez]
14-12-2015, 10:16:04
como puedo hacer en enviar comando ADB (androide) desde delphi y devolver el resultado en un tmemo

Yo con esto, no soy capaz de saber lo que necesitas.
:(:(:(

Casimiro Notevi
14-12-2015, 10:56:30
Yo con esto, no soy capaz de saber lo que necesitas.
:(:(:(
Me apunto.

force1758
14-12-2015, 13:29:51
Hola amigos gracias por responder tan rápido

ejemplo quiero enviar el el comando:



* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
EF4B1310044 device


ese el es resultado que me devuelve cuando envió el comando (adb devices) desde el CMD de windows. pero que quiero hacer yo bueno es enviar los comando desde mi aplicación delphi y que me muestre el resultado en un tmemo,,estoy trabajando con este ejemplo de AjpdSoft Ejecutar comando MS-DOS y capturar la salida, pero al ejecutar el comando me tarda una eternidad en mostrar la captura

function ejecutarComando (comando : string) : string;
var
Buffer: array[0..4096] of Char;
si: STARTUPINFO;
sa: SECURITY_ATTRIBUTES;
sd: SECURITY_DESCRIPTOR;
pi: PROCESS_INFORMATION;
newstdin, newstdout, read_stdout, write_stdin: THandle;
exitcod, bread, avail: Cardinal;
begin
Result:= '';
if IsWinNT then
begin
InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(@sd, true, nil, false);
sa.lpSecurityDescriptor := @sd;
end
else sa.lpSecurityDescriptor := nil;
sa.nLength := sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle := TRUE;
if CreatePipe(newstdin, write_stdin, @sa, 0) then
begin
if CreatePipe(read_stdout, newstdout, @sa, 0) then
begin
GetStartupInfo(si);
with si do
begin
dwFlags := STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
wShowWindow := SW_HIDE;
hStdOutput := newstdout;
hStdError := newstdout;
hStdInput := newstdin;
end;
Fillchar(Buffer, SizeOf(Buffer), 0);
GetEnvironmentVariable('COMSPEC', @Buffer, SizeOf(Buffer) - 1);
StrCat(@Buffer,PChar(' /c ' + comando));
if CreateProcess(nil, @Buffer, nil, nil, TRUE, CREATE_NEW_CONSOLE, nil, nil, si, pi) then
begin
repeat
PeekNamedPipe(read_stdout, @Buffer, SizeOf(Buffer) - 1, @bread, @avail, nil);
if bread > 0 then
begin
Fillchar(Buffer, SizeOf(Buffer), 0);
ReadFile(read_stdout, Buffer, bread, bread, nil);
Result:= Result + String(PChar(@Buffer));
end;
Application.ProcessMessages;
GetExitCodeProcess(pi.hProcess, exitcod);
until (exitcod <> STILL_ACTIVE) and (bread = 0);
end;
CloseHandle(read_stdout);
CloseHandle(newstdout);
end;
CloseHandle(newstdin);
CloseHandle(write_stdin);
end;
end;


espero haberme explicado un poco para lo que quiero hacer gracias saludos

Osorio
14-12-2015, 15:48:09
En una ocasion estuve probando ese ejemplo asi como cuando uno esta sin oficio y se pone a probar cosas.

Recuerdo que el tiempo de respuesta era normal. Puede ser que el tiempo de retardo este dado mas por tu dispositivo.

AgustinOrtu
14-12-2015, 17:53:50
Si, sobre todo con emuladores

force1758
19-12-2015, 01:25:41
pero no hay una manera de enviar los comando desde delphi entonces

escafandra
20-12-2015, 18:14:34
pero no hay una manera de enviar los comando desde delphi entonces

La función que encontraste para ejecutar comandos de consola, y otras muchas publicadas te permiten ejecutar comandos adb como un comando más, y lo haces desde delphi.
Existe otra forma, abd es un servidor TCPIP y puedes comunicarte con él mediante shokets desde delphi, pero es un poco más complicado y los comandos son algo diferentes.


Saludos.