PDA

Ver la Versión Completa : CreateDesktop!! AAhhhh


adonias
21-10-2007, 02:04:34
basado en el siguente link.

http://www.clubdelphi.com/foros/showthread.php?t=18335

Resulta que carga la pagina web y si el titulo dice Bienvenido se crea el nuevo desktop, y si dice activo no.

No se porque no crea el nuevo desk, si ya revise el codigo y al parecer esta bien.

Les dejo el codigo para que le hechen un vistazo.

Codigo (http://www.adonias.cl/MainApp.zip)

Y como habeses los proveedores tienen espejos les dejo el codigo:




unit Main;

interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, OleCtrls, SHDocVw_EWB, EwbCore, EmbeddedWB, Menus, FavoritesPopup, ComCtrls, RichEditBrowser; type TMainForm = class(TForm)
EmbeddedWB1: TEmbeddedWB;
procedure EmbeddedWB1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure FormShow(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormCreate(Sender: TObject);

private LockDesktop: HDesk; procedure ExecuteLockApp;
end;

var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.FormCreate(Sender: TObject);
const Flags = DESKTOP_CREATEWINDOW or DESKTOP_SWITCHDESKTOP;

begin LockDesktop := CreateDesktop('LockDesktop', nil, nil, 0, Flags, nil);
end;




procedure TMainForm.FormShow(Sender: TObject);
begin EmbeddedWB1.Go('http://www.adonias.cl/frich/loader.php');
end;


procedure TMainForm.ExecuteLockApp;
var StartInfo: TStartupInfo; ProcInfo: TProcessInformation; begin
SwitchDesktop(LockDesktop);
FillChar(StartInfo, SizeOf(StartInfo), 0);
StartInfo.cb := SizeOf(StartInfo);
StartInfo.lpDesktop := PChar('LockDesktop');

CreateProcess('LockApp.exe', nil, nil, nil, false, 0, nil, nil, StartInfo, ProcInfo);

SwitchDesktop(LockDesktop);
Close;
end;

procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin CanClose := false; end;


procedure TMainForm.EmbeddedWB1NavigateComplete2(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var str : string;
posIp : integer;
posFin : integer;
result : integer;
ip : string;
begin str := EmbeddedWB1.DocumentSource; posIp := pos('', str);
ip := copy(str, posIp+21, posFin - (posIp+21));
// Comparamos strings
result := AnsiCompareStr('ACTIVO', ip);
if result > 0 then ExecuteLockApp; //<- Esto no resulta!
ShowMessage(ip);
end;
end.



Muchas gracias por su ayuda nuevamente amigos

adonias
21-10-2007, 16:25:31
Ok.

Encontre el problema. Era que tenia que oner un sigo = en


if result > 0 then ExecuteLockApp;

//Cambiarlo por esto
if result = 0 then ExecuteLockApp;


Ahora me entro otra pregunta.

Existe manera de saber en que desktop estoy? o al nombre del desktop en que estoy?

Busque en google y encontre esto:

GetThreadDesktop

Pero no logro hacerlo funcionar.

gracias