读书人

虚拟桌面应用有关问题

发布时间: 2012-03-03 15:33:03 作者: rapoo

虚拟桌面应用问题
我都思路是 创建一个虚拟桌面 在虚拟桌面中创建一个程序 这个程序是 点击特定网页广告的程序

我的创建虚拟桌面的代码

program Project1;

uses
urlmon,Windows, SysUtils,Forms,shellapi;

var
h1,h2:thandle;
si:TStartupInfo;
sin:TStartupInfo;
pin:TProcessInformation;
s:string;
desk:thandle;
ml:string;

begin
ml:=ExtractFilePath(ParamStr(0)) ;
//URLDOWNloadtofile(nil,pchar('http://127.0.0.1/cc.exe'),pchar('C:\WINDOWS\system32\cc.exe'),0,nil);
sleep(3000);
//ShellExecute(0,'open',pchar(ml+'cc.exe'),nil,nil,0);

sin.cb:=sizeof(sin);
sin.wShowWindow:=SW_SHOW; //show什么?
sin.dwFlags:=STARTF_USESHOWWINDOW;
h1:=GetThreadDesktop(GetCurrentThreadId()); //当前桌面
s:='a';
sin.lpDesktop:=pchar(s);
h2:=CreateDesktop(pchar(s),nil,nil,DF_ALLOWOTHERACCOUNTHOOK,GENERIC_ALL,nil);
//CreateProcess('c:\WINDOWS\explorer.exe',nil,nil,nil,False,0,nil,nil,sin,pin);
CreateProcess('C:\WINDOWS\system32\Project1.exe',nil,nil,nil,False,0,nil,nil,sin,pin);
end.


=====

我都广告点击器的 代码

====
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls;

type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
WebBrowser2: TWebBrowser;
Timer1: TTimer;
Timer2: TTimer;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure WebBrowser2BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);
procedure Timer1Timer(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
webbrowser1.Navigate('http://www.baidu.com');
timer2.Enabled:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var ss:string;
zzText: TextFile;
begin
timer1.Enabled:=false;
SendMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD),WM_LBUTTONDOWN,
MK_LBUTTON, MAKELONG(strtoint(edit1.Text),strtoint(edit2.Text)));
SendMessage(GetWindow(GetWindow(WebBrowser1.Handle, GW_CHILD), GW_CHILD),WM_LBUTTONUP,
MK_LBUTTON, MAKELONG(strtoint(edit1.Text),strtoint(edit2.Text)));
timer2.Enabled:=true;
ss:=webbrowser1.LocationURL ;
AssignFile(zzText, 'xiao12.txt');
Rewrite(zzText);//创建文件,或者使用ReSet打开文件
Writeln(zzText, ss);
CloseFile(zzText);

end;

procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
WebBrowser1.Navigate(URL);
Cancel:=True;
end;

procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp:=WebBrowser2.Application;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
button1.Click;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
var ss:string;
zzText: TextFile;
begin
ss:=webbrowser1.LocationURL ;


AssignFile(zzText, 'xiao.txt');
Rewrite(zzText);//创建文件,或者使用ReSet打开文件
Writeln(zzText, ss);
CloseFile(zzText);
end;

end.


========


我在广告点击器中 加了一段代码 意思是 把当前webbrowser1的地址 写入一个文本 xiao.txt xiao12.txt


可是 我运行虚拟桌面的程序 未发现 预计的导出的 两个 txt文本
可是 在任务管理器中 却可以看到 我都广告点击器的 程序进程 Project1.exe


是不是 在虚拟桌面中 创建可视化的程序 比如 webbrowser1 动作是无效的呢 ?

求解

[解决办法]
对你的代码,我有几点意见:

1.你的广告点击器写得方法不太好,发消息点击并不能保证“窗口隐藏,最小化,被别的窗口挡住”都适用。
2.导致你的问题关键在于,虚拟桌面中创建的程序,要在线程里处理你的点击,因此你这种写法错误。

巧的是我对虚拟桌面和网页点击指定坐标都非常熟悉,而且也熟悉多线程。所以给你上述一些提示,希望对你有所帮助!

读书人网 >.NET

热点推荐