[转载]IIS配置PHP环境(快速最新版) - 曾祥展 - 博客园

mikel阅读(942)

[转载]IIS配置PHP环境(快速最新版) – 曾祥展 – 博客园.

我们知道php配置有几种:

1、CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少。
特点是:稳定,但效率太低。

2、ISAPI方式加载PHP环境,通常就是IIS里面配置解释器为php5isapi.dll,目前使用最多,应用最广。
特点是:多线程,效率较高,但不够稳定。

3、FastCGI方式加载PHP环境,在IIS环境里并不常见,但其它系统环境应用还是有的,不过IIS7.0开始内置FastCGI了。
特点是:高效率,高稳定性,属于将来发展趋势。

我试过其他的特别麻烦,PHP 5.3发布的Windows版已经不支持ISAPI模式了,所以我打算按微软推荐的FastCGI方式运行PHP。

我用的就第三种,也是最好最快的,因为FastCGI大大加强了IIS处理PHP的能力,能迅速提高PHP站点的反应速度和生产力,

并具有更高的稳定性和安全性.

下载地址:http://windows.php.net/download/里面有好多种,要那种呢?

PHP现在推出5.3.2版本了,不过下载的时候有几个不同版本选择。那就是VC6 X86和VC9 X86。
首先我来解答:
VC6是什么?
VC6就是legacy Visual Studio 6 compiler,就是使用这个编译器编译的。
VC9是什么?
VC9就是the Visual Studio 2008 compiler,就是用微软的VS编辑器编译的。

那我们如何选择下载哪个版本的PHP呢?
如果你是在windows下使用Apache+PHP的,请选择VC6版本;
如果你是在windows下使用IIS+PHP的,请选择VC9版本;

那Non Thread Safe是什么?
Non Thread Safe就是非线程安全;
Thread Safe 是什么?
Non Thread Safe 是线程安全;

FastCGI 执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以 FastCGI(无论搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip 套件)所以我们选择NO-Thread Safe 版本的PHP来使用
而线程安全检查正是为ISAPI方式的PHP准备的,因为有许多php模块都不是线程安全的,所以需要使用Thread Safe的PHP。

 

下载安装,我安装默认路径了:

曾祥展

记得选中第三项:IIS FASTCGI

曾祥展

如果没有安装IIS FASTCGI的 下一步会提示没有安装的,下载安装就行了

FastCGI  for IIS 6  7   http://www.iis.net/expand/fastcgi

曾祥展

2-1

安装好后,继续下一步,我按照默认了:

曾祥展

安装完毕后,就是配置了。

这种配置有两种方法,我用cmd配置,一条命令就行了。

 

 

 

转到刚才安装CGI的目录下:

>cd C:\WINDOWS\system32\inetsrv

>cscript fcgiconfig.js -add -section:”PHP” -extension:php -path:”C:\Program Files\PHP\php-cgi.exe”

注意:path:”xxxx\php-cgi.exe” 是你安装php的目录

> cscript fcgiconfig.js -set -section:”PHP” -InstanceMaxRequests:10000
> cscript fcgiconfig.js -set -section:”PHP” -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

曾祥展

ok!完毕!

测试下:

新建一个.php文件,里面

<?php

phpinfo();

?>

保存!

运行,出现下面页面,说明配置成功了!

曾祥展

这样的方法 IIS就不用怎么配置,他都会自动配置好了!微软提供的配置更加详细

如果按上面的教程配置好后,运行php测试页面,出现了500错误。

那就设置php.ini中的date.timezone项。

我这里设置成上海时区:date.timezone = Asia/beijing

设置完后就一切正常了!

[转载]在WIN7下如何成功配置AppServ - 挨踢小生.子丹 - 博客频道 - CSDN.NET

mikel阅读(1037)

[转载]在WIN7下如何成功配置AppServ – 挨踢小生.子丹 – 博客频道 – CSDN.NET.

由于打算用PHP+Apache架起个人博客服务器,需要在实验室的机器上(安装有WIN7旗舰版系统)配置PHP环境。查资料看到有一个快速配置工具:AppServAppServ号称在1分钟内即可将Apache  PHPMySQL环境安装配置好,同时带有phpMyAdmin以便管理数据库,看到如此便捷实用,于是放弃了分别配置的念头,由于安装的过程有些需要注意的地方,故分享给大家。
 
普通安装步骤:
 
第一步:需要下载AppServ Windows安装包,我下载的是appserv-win32-2.5.9安装包。

第二步:点击AppServ安装程序,根据提示一步一步操作下去即可。

AppServ中的Apache配置:主要配置Apache中的Server Name、Email以及HTTP服务的端口,Server Name一般设置为localhost,如果80端口已有其他服务,需要修改HTTP的服务端口,比如8080

配置AppServ中的MySQL服务用户名和密码:MySQL服务数据库的默认管理帐户为root,默认字符集为UTF-8,可根据需要自行修改相关的字符集编码,一般UTF-8比较通用。

 下一步后开始自动安装AppServ,最后点击Finish后,AppServ会自动启动APACHE和MYSQL服务,如果安装一些杀毒软 件监控注册表,会弹出对话框询问是否开机时启动,建议开机时自动启动,我在测试时没有选择开机自动启动AppServ,导致时常AppServ无法运行, 每次手工启动后一段时间,APACHE或MYSQL即停止服务,需要再行启动。
只要在游览器中输入http://localhost,即可看到Apache下图,说明AppServ安装成功了。

但在WIN7旗舰版中,直接安装后是不能成功启动Apache的,还需要对默认启动的IIS进行配置,方可正确运行Apache(两者是同样类型的软件,对于浏览器这个相同的接口,必然有冲突)

首先,进入系统,管理工具,选中Internet信息服务(IIS)管理器
会打开IIS的配置对话框,点击右边栏的停止,等待一会后,IIS会停止运行。
别急,还没好,这时如果在游览器中输入http://localhost,会显示无法访问该页,说明此时没有后台服务器运行
我们重新打开开始菜单,选择Appserv下的Add-Remove Windows Service子菜单中的Apache Install Service
安装成功后,在游览器中输入http://localhost,即成功显示AppServ相关信息页。
本文参考了(《PHP项目开发全程实录》及网络文章《PHP环境配置:WindowsAppServ配置与安装使用教程》)

[转载]防止浏览器记住用户名及密码的简单实用方法_javascript技巧_脚本之家

mikel阅读(1306)

[转载]防止浏览器记住用户名及密码的简单实用方法_javascript技巧_脚本之家.很多浏览器都有自动填写功能,我在input上使用了autocomplete=”off”,但在有的浏览器上还是被记住了用户名跟密码,请问有没有更有效及简便的方法来防止浏览器记住用户名及密码。

如何设置能禁止浏览器自动保存表单信息,比如用户名,密码?
现在很多浏览器都有自动填写功能,我在input上使用了autocomplete=”off”,但在有的浏览器上还是被记住了用户名跟密码,请问有没有更有效及简便的方法来防止浏览器记住用户名及密码?

1、针对浏览器记住密码
1).首先大部分浏览器都是根据表单域的type=”password”来判断密码域的,所以针对这种情况可以采取“动态设置密码域”的方法:

<input type="text" name="password" onfocus="this.type='password'" /> 

解释:当这个文档框获取焦点时才将其变成密码域,这样浏览器就不会记住密码,当然为了更加完善,还可以把autocomplete=”off”属性也加上。
2).在onload事件,把密码框的值清空,即:

<script language="javascript">
window.load = function(){
document.getElementById('密码域ID').value='';
};
</script> 

3).页面采用https协议,因为https是不会对表单进行保存信息的。
4).采用flash做登录表单,这种情况浏览器也不会记录表单信息。
5).再来个变态的好了,就是可以把type=”password”改成type=”text”,因为type不是password就不会出现记住密码功能,然后设置一个变量如:var val=””或者是设置一个隐藏域,最后用onpropertychange把密码换成一行圆点,并把值赋给val,提交时再把val的值还原回去,由于效果和*号一样。 用户是看不出来的。

2、针对有些浏览器插件的自动填表功能
这个就比较麻烦了,我想这种情况应该是插件记住表单域name的值,然后再进行填表,这种情况,我觉得可以在页面加载时动态更改name的值,当提交表单的时候再把表单的值组合成正确的对应值再提交。这个没有经过验证,只是我个人的想法。你可以试试

如果以上这些方法还满足不了你,那我也没办法了。

建议:
试一下把对应域名下的cookie清掉,浏览器应该是根据cookie来记住用户名密码的。
(不是的,有的浏览器是在你提交表单后,根据你提交的值来记住的)
(对的 有些浏览器不记录在COOKIE 这个比较头疼 顺便问下INPUT里输入过的值如何清除?我希望能像银行的那样 输入过的值不再出现)
浏览器记住密码的实现方式就是通过寻找type为password的input输入框,然后前边一个输入框就作为用户名记住。所以解决这个问题的办法就是在用户名input和密码input之间增加一个type为text的输入框设置css属性display为none。

每天写日志写啥

mikel阅读(937)

很多人说每天坚持写日志不知道写啥

要是你是为了写日志而写,那就真不如不写。

日志其实就是日记,记录总结每天你的生活和收获,这样每天写啥自然而然就解决了,不用刻意去找内容。

写日志不是自媒体,自媒体也不是什么高大上的玩意儿,说白了就是都想发出自己声音,百家争鸣,想找点儿存在感。

写日志其实不是给别人看的,是给自己看的,别人看到的是一个活生生的人,通过你的日志了解你的生活和人,进而产生信任,然后愿意和你讨论问题而成为朋友。

其实自媒体不是让你成为明星,人人都知道你没必要,只需要人们了解你就行了,觉得这人还行,不是骗子。

互联网就是虚拟的玩意儿,上面那么多信息和人,“信任”是最难建立的一种关系!

无论是购物还是QQ社交,大家都是个虚拟的id,谁知道你到底是谁?你人品如何?只有通过你的空间,你的日志或者你发布的文章来了解你,进而建立起最初的信任。

未来互联网上声音会越来越嘈杂 ,信任也就越来越重要,互联网上同样鱼龙混杂,各种圈子都有,想要如鱼得水就要重视自己的口碑,成也自媒体,败也自媒体。

10分钟学会邮件自动回复营销

mikel阅读(1057)

前天写了《10分钟获取互动的好友》的日志,说到给207人发送邮件,里面送出答应放牛哥赠送的干货,加群的不少,但是发现个有趣的现象,回复的寥寥无几,但凡回复的,我都印象深刻,放牛班的居多。

下面是一个有意思的自动回复:
e1
不得不说,我又学到了一招儿, 就是邮件自动回复营销。

真的是 细节决定成败! 思维决定命运!

很多人群发邮件推广自己的项目,要是有人回复,QQ会有提示,并且一般都会点开看看内容,巴不得自己发出的邮件能有效果,高手正是把握了这个心理,才有了上面截图的那个邮件,可见高手都是从细节处见水平啊!

下面说下QQ邮箱设置自动回复的步骤:

1.进入QQ邮箱的“设置”

e2

2.点击“常规”里面的“假期自动回复”的“启用”

e3

e4
3. 编辑器里面可以加“链接”,这一项是营销最喜欢的,你懂得!
e44
4.保持修改吧,收邮箱的我们开始逆袭营销了!
e51

好了,上面讲了这次发送邮件收获的营销方法,我还收获到什么?

2/8原则总是对了,207封邮件发出去了,只收到9封回复邮件,其中有3个还是自动回复的。
e61

可见80%的人还停留在索取的思维模式里,20%做到懂得感恩和互动交流。

还有一个有意思的现象,207人中,还只有20多个执行力强的加了群,剩下的可以说基本都是看热闹的!

现在明白为什么网上那么多人说互联网赚不到钱了吧!

细节决定成败! 思维决定命运!行动决定收益!

[转载]Notice: Undefined offset 的解决方法_飞翔俯视_百度空间

mikel阅读(922)

[转载]Notice: Undefined offset 的解决方法_飞翔俯视_百度空间.

今天在帮朋友调试服务器的时候发现以前wp的404搞的伪静态竟然用不了了,然后就试着访问404出错页,结果首部出现

Notice: Undefined offset: 1 in D:\wwwroot\wr\askSEO\404.php on line 5

Notice: Undefined offset: 2 in D:\wwwroot\wr\askSEO\404.php on line 5

Notice: Undefined offset: 2 in D:\wwwroot\wr\askseo\404.php on line 7

Notice: Undefined offset: 1 in D:\wwwroot\wr\askseo\404.php on line 12

这 问题很常出现在数组中的,程序是能正确地运行下去,但是在屏幕上总会出现这样的提示:Notice: Undefined offset: ….. 网上普遍是采用抑制其显示的方法,即更改php.ini文件中error_repoting的参数为”EALL & Notice “,这样屏幕就能正常显示了.
问题是解决了,但是总想不透offset:接下去的数字(如 Notice: Undefined offset: 4 ….)是什么意思.还有,句子里的语法明明是正确的,为什么会出现警告.冷静地思考了好 几遍并尝试了每种可能,终于找到了答案.offset:接下去的数字是出错的数组下标,一般是超出了数组的取值范围,如定义了数组$A[]有10个元数, 如果出现了$A[10]就会出现错误(Notice: Undefined offset: 10 ….),因为数组的下标是从0开始的,所以这个数组的下标就只能是0~9.因此在出现这类问题时,不要急于用抑制显示的方法(更简单的可以在当前 文件的最前面加上一句”error_reporting(填offset:接下去的那个数字);,一定要注意你所用的数组下标,仔细思考一下,问题一定会 很快得到解决的 !发也有可能是unset数组后再尝试读取其内容,php手册中有:

Just to confirm, USING UNSET CAN DESTROY AN ENTIRE ARRAY. I couldn’t find reference to this anywhere so I decided to write this.
The difference between using unset and using $myarray=array(); to unset is that obviously the array will just be overwritten and will still exist.
<?php
$myarray=array(“Hello”,”World”);
echo $myarray[0].$myarray[1];
unset($myarray);
//$myarray=array();
echo $myarray[0].$myarray[1];
echo $myarray;
?>
Output with unset is:
<?
HelloWorld
Notice: Undefined offset: 0 in C:webpagesdainsidermyarray.php on line 10
Notice: Undefined offset: 1 in C:webpagesdainsidermyarray.php on line 10
Output with $myarray=array(); is:
?>
<?
HelloWorld
Notice: Undefined offset: 0 in C:webpagesdainsidermyarray.php on line 10
Notice: Undefined offset: 1 in C:webpagesdainsidermyarray.php on line 10
Array
?>
?OK,问题解决,该睡觉了……

其实在报错的那一行前面加一个@符号,屏蔽错误就ok了。非常简单。

[转载]c#使用spy进行模拟操作 - 迟来的春天 - 博客园

mikel阅读(1092)

[转载]c#使用spy进行模拟操作 – 迟来的春天 – 博客园.

很无奈,写了很长时间,最后保存时网页失去响应,真是要命呢。本来想就此放弃了,但是想还是粗略的重写一次吧,希望日后可以对朋友有一定的帮助。

Microsoft.Spy工具是一个基础工具,我们简要介绍一下使用方法:

spy在vs有自带的,也可以在网下直接下载。

打开spy工具,主界面如下:

今天我们使用vnc作为一个示例

目标是在server内写入192.168.2.200,并点击Options第二个按钮

第一步,如何获取vnc窗体,使用spy进行窗体查找

拖动查找工具图标到需要的界面上。

这样我们就可以找到需要的窗体。

FindWindow 可以查找第一个主窗体,使和类名或标题。

FindWindowEx可以查找窗体下的控件。

SendMessage向窗体发送消息。

使和窗口搜索查找控件。

[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
//参数1:指的是类名。参数2,指的是窗口的标题名。两者至少要知道1个
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string lclassName, string windowTitle);

[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, int wParam, string lParam);

[DllImport("user32.dll", EntryPoint = "SendMessage", SetLastError = true, CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hwnd, uint wMsg, int wParam, int lParam);
IntPtr win =FindWindow(null, "VNC Viewer : Connection Details");
if (win != IntPtr.Zero)
{
IntPtr winComboBox = FindWindowEx(win, new IntPtr(), "ComboBox", null);
if (winComboBox != IntPtr.Zero)
{
IntPtr winEdit = FindWindowEx(winComboBox, new IntPtr(), "Edit", null);

IntPtr resultEdit = SendMessage(winEdit, 0xC, 0, "192.168.2.100");

//获取第一个按钮
IntPtr button1 = FindWindowEx(win, new IntPtr(), "Button", "&amp;Options...");

if(button1 != IntPtr.Zero)
SendMessage(button1, 0xF5, 0, 0); //点击事件

if (winEdit != IntPtr.Zero)
{
MessageBox.Show("找到编辑框");
}
//MessageBox.Show("找到下拉框");
}
else
{
//MessageBox.Show("没有找到下拉框");
}

MessageBox.Show("已经找到窗体");
}
else
{
MessageBox.Show("没有找到窗体");
}
}

 
执行结果如下:

 

 

如果多个按钮,又没有标题,则只能一个一个的获取,如下

如果哪位朋友还有其它方法,还请多多指教。

1 IntPtr button1 = FindWindowEx(win, new IntPtr(), "Button", null);
2 IntPtr button2 = FindWindowEx(win, button1, "Button", null);

[转载]WEBBROWSER中模拟鼠标点击(SendMessage/PostMessage) - 云上2014 - 博客园

mikel阅读(1213)

[转载]WEBBROWSER中模拟鼠标点击(SendMessage/PostMessage) – 云上2014 – 博客园.

好久没有写文章,发一篇顶顶博客访问量。别人建议转一些比较好的代码也贴过来,但是我打算这里主要发自己原创的代码,所以么。。流量该多少就多少吧。。。

 

回到主题,在webbrowser中点击某链接网上几乎都是用document对象模拟点击,这个方法基本能应对一般的情况,但是例如广告联盟的点 击XXX就有检测机制(不多解释,你们懂的)。所以完全模拟鼠标的点击事件就比较完美。于是我用了最常见的SendMessage。

 

接下来就要解决一个问题,webbrowser的句柄问题。从控件本身得到的句柄不是真正的浏览窗口的句柄,用SPY++看一下就能看出来,这里不贴图了。按照这个窗体的结构,用以下代码可以获取到网页的窗口的句柄。
‘获得webbrowser的句柄
Private Function GetBrowserWindow(hWnd As Long) As Long
Dim lngHnd As Long
lngHnd = FindWindowEx(hWnd, 0, “Shell Embedding”, vbNullString) ‘
lngHnd = FindWindowEx(lngHnd, 0, “Shell DocObject View”, vbNullString)
lngHnd = FindWindowEx(lngHnd, 0, “Internet Explorer_Server”, vbNullString)
GetBrowserWindow = lngHnd
End Function

 

然后就是网页元素的定位,向哪个坐标发送点击。这里用了DOM对象遍历来获取具体位置。都知道网页上一个元素有 offsetLeft,offsetWidth,offsetHeight,offsetTop属性,但是都是相对容器来说的,所以可以通过遍历相加得到 这个元素的绝对位置(这个绝对也是相对于网页浏览器窗口来说的。。)。于是代码如下:
Private Sub GetPos(objA As Object)
On Error Resume Next
adW = objA.offsetWidth
adH = objA.offsetHeight
adX = objA.offsetLeft
adY = objA.offsetTop
Set objA = objA.parentNode   ‘遍历结点 获取绝对位置
Do While Not (objA Is Nothing)
adX = adX + objA.offsetLeft
adY = adY + objA.offsetTop
Set objA = objA.parentNode
Loop
txtX.Text = CStr(adX)
txtY.Text = CStr(adY)
Debug.Print “X:” & adX, “Y:” & adY, “W:” & adW, “H:” & adH, “P:” & adPos
End Sub

 

好了,主要的问题分析完毕,我不多说废话了,直接贴代码看吧。

 

‘获得webbrowser的句柄
Private Function GetBrowserWindow(hWnd As Long) As Long
Dim lngHnd As Long
lngHnd = FindWindowEx(hWnd, 0, “Shell Embedding”, vbNullString) ‘
lngHnd = FindWindowEx(lngHnd, 0, “Shell DocObject View”, vbNullString)
lngHnd = FindWindowEx(lngHnd, 0, “Internet Explorer_Server”, vbNullString)
GetBrowserWindow = lngHnd
End Function

 

Private Function IsURL(objHTML As Object) As Boolean
On Error Resume Next

 

Dim strHTML As String, strURL As String

IsURL = False
strURL = LCase$(txtHost.Text)
strHTML = LCase$(objHTML.innerhtml)   ‘都转成小写

If InStr(strHTML, strURL) > 0 Then IsURL = True  ‘是这个域名 返回true

 

End Function

 

Private Sub GetPos(objA As Object)
On Error Resume Next

 

adW = objA.offsetWidth
adH = objA.offsetHeight
adX = objA.offsetLeft
adY = objA.offsetTop
Set objA = objA.parentNode   ‘遍历结点 获取绝对位置

 

Do While Not (objA Is Nothing)
adX = adX + objA.offsetLeft
adY = adY + objA.offsetTop
Set objA = objA.parentNode
Loop

 

txtX.Text = CStr(adX)
txtY.Text = CStr(adY)
Debug.Print “X:” & adX, “Y:” & adY, “W:” & adW, “H:” & adH, “P:” & adPos
End Sub

 

”获取坐标按钮点击事件
Private Sub cmdGetXY_Click()
On Error Resume Next

 

Dim objHTML As Object
Dim i       As Integer

If txtHost.Text = “” Then
‘MsgBox “不写域名,搞我呀。。。”
Exit Sub
End If

 

txtX.Text = “”
txtY.Text = “”
adX = 0
adY = 0
adW = 0
adH = 0

For i = 0 To 9
Set objHTML = webB.Document.GetElementByID(“bdfs” & CStr(i))

 

If Not (objHTML Is Nothing) Then
If IsURL(objHTML) Then
Set objHTML = webB.Document.GetElementByID(“dfs” & CStr(i))
adPos = 1   ‘右侧链接区
Call GetPos(objHTML)
Exit For
End If
End If

 

Set objHTML = webB.Document.GetElementByID(“400” & CStr(i))

 

If Not (objHTML Is Nothing) Then
If IsURL(objHTML) Then
Set objHTML = webB.Document.GetElementByID(“aw” & CStr(i – 1))
adPos = 0
Call GetPos(objHTML)
Exit For
End If
End If

 

Set objHTML = webB.Document.GetElementByID(“300” & CStr(i))

 

If Not (objHTML Is Nothing) Then
If IsURL(objHTML) Then
Set objHTML = webB.Document.GetElementByID(“aw” & CStr(i – 1))
adPos = 2
Call GetPos(objHTML)
Exit For
End If
End If

 

Next

‘If adX = 0 And adY = 0 Then MsgBox “没有找到。。。”

Set objHTML = Nothing

End Sub

 

”’发送点击按钮点击事件
Private Sub cmdClick_Click()
On Error Resume Next
Dim x      As Long, y As Long
Dim intRnd As Integer

 

Randomize   ‘启动随机数

 

If adX = 0 And adY = 0 Then
‘MsgBox “没有找到链接你也点。。。”
Exit Sub
End If

wbHwnd = GetBrowserWindow(Me.hWnd)  ‘得到句柄

 

If adPos = 0 Then  ‘在搜索结果区的上面
webB.Document.parentwindow.Scroll 0, adY – adH + 8  ‘修正下数据 正好对准
x = 30 + Int((Rnd * adW) / 2)
y = (Int((Rnd * adH) / 2) + 2) * &H10000
ElseIf adPos = 1 Then ‘在右侧的推广链接区
webB.Document.parentwindow.Scroll adX, adY – 11 ‘修正下数据
x = 150 + Int((Rnd * adW) / 2)
y = (Int((Rnd * adH) / 2) + 2) * &H10000
ElseIf adPos = 2 Then ‘在搜索结果当中
webB.Document.parentwindow.Scroll 0, adY – 11  ‘修正下数据
x = 30 + Int((Rnd * adW) / 2)
y = (Int((Rnd * adH) / 2) + 2) * &H10000
End If

Debug.Print “Click:”, x, y / &H10000
PostMessage wbHwnd, WM_LBUTTONDOWN, 1&, x + y
PostMessage wbHwnd, WM_LBUTTONUP, 1&, x + y

End Sub

 

 

有什么问题可以加我Q跟我讨论

[转载]Android的Activity屏幕切换动画-左右滑动切换 - ip小子 - 博客园

mikel阅读(1185)

[转载]Android的Activity屏幕切换动画-左右滑动切换 – ip小子 – 博客园.Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity增加了一个方法:


public void overridePendingTransition (int enterAnim, int exitAnim)
其中:
enterAnim 定义Activity进入屏幕时的动画
exitAnim 定义Activity退出屏幕时的动画

overridePendingTransition 方法必须在startActivity()或者 finish()方法的后面。Android已经内置了几种动画效果,可以见 android.R.anim 类。一般情况下我们需要自己定义屏幕切换的效果。首先我们先了解Activity的位置定义,如下图:

从上图可以看出,以手机屏幕下面边未X轴,屏幕左边为Y轴,当Activity在X轴值为-100%p时,刚好在屏幕的左边(位置1),当X轴值为0%p时,刚好再屏幕内(位置2),当X=100%p时刚好在屏幕右边(位置3)。清楚了位置后,我们就可以实现左右滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。实现过程如下,首先定义2个动画,在 res目录创建anim目录, 然后在目录创建动画的xml文件:out_to_left.xml (从左边退出动画) 、in_from_right.xml(从右边进入动画)

out_to_left.xml (从 位置2 移动到 位置1)


<!--?xml version="1.0" encoding="utf-8"?-->


in_from_right.xml (从 位置3 移动到 位置2)


<!--?xml version="1.0" encoding="utf-8"?-->


android:fromXDelta 动画开始的位置, android:toXDelta 动画结束的位置,android:duration动画的时间。

public class LeftRightSlideActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Button button = (Button)findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(LeftRightSlideActivity.this, SlideSecondActivity.class);
startActivity(intent);
//设置切换动画,从右边进入,左边退出
overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}
});
}
}

OK,目前这个动画就这样了

 

建网站不是摆设

mikel阅读(1618)

今天有个网友加我,他是做了个卖地方特产腊肠的网站,让我给点儿SEO建议。

我打开网站,和传统的企业网站一样,公司简介,联系我们巴拉巴拉的,首先不说SEO,就说你一个卖腊肠的,首页连个像样的腊肠产品宣传图片都没有,你让访问者怎么看?!

做网站的目的如果是当个摆设,那无可厚非,做啥样的都行,反正不想通过网站成单。

如果是想要通过网站销售东西,那就做得像个销售东西的样儿,别什么都网上整,公司简介没人看,那玩意儿也就在看了产品后怕上当,会看两眼;再说商品展示都不能让人产生购买欲,那还不如放企业简介呢,最起码还有得看!

我推荐他学学那些做减肥的百度竞价的单页,那才叫卖东西的页面呢,还有淘宝宝贝描述,各个都是目的明确,图文并茂,再加上视频,保准让你看了就想买。

然后再谈SEO,那玩意儿真的不那么重要,页面做得转化率高,随便发个QQ说说都能代理收入,SEO不是万能的,急着一点儿就是你的网站是给人看的,不是给搜索引擎看的,现在的搜索引擎更加注重用户体验和内容了,你自己网站都让人每个购买欲,再多的流量来了也白搭。

dd