Direct3D中实现图元的鼠标拾取

Direct3D中实现图元的鼠标拾取
Direct3D中实现图元的鼠标拾取

3D交互图形应用程序中,常常要用鼠标去选择图形,其实现的机制基于鼠标拾取算法。本文主要讲述如何在D3D中实现图元的鼠标拾取。为了讨论简单,本文假定读者理解D3D 坐标变换流程和基本的图形学知识,如果阅读有困难请参考相关资料。

1、什么是拾取,拾取能做什么?

首先,拾取操作指当我们在屏幕上用鼠标点击某个图元应用程序能返回该图元的一个标志和某些相关信息。有图形程序设计经验的人都知道,有这些信息就表示我们有了对该图元的控制权,我们可以删除,可以编辑,可以任意对待该图元,至于你到底想干什么,就是阁下自己的事了^_^。

2、拾取操作的步骤和实现

拾取算法的思想很简单:得到鼠标点击处的屏幕坐标,通过投影矩阵和观察矩阵把该坐标转换为通过视点和鼠标点击点的一条射入场景的光线,该光线如果与场景模型的三角形相交(本文只处理三角形图元),则获取该相交三角形的信息。本文讲述的方法除可以得到三角形的一个索引号以外还可以得到相交点的重心坐标。

从数学角度来看,我们只要得到射线的方向矢量和射线的出射点,我们就具备了判断射线与空间一个三角面是否相交的条件,本文主要讨论如何获得这些条件,并描述了射线三角面相交判断算法和D3D的通常实现方法。

根据拾取操作的处理顺序,大概可以依次分为以下几个步骤

2.1.变换并获得通过视点和屏幕上点击点的射线矢量(Dir)

详细介绍之前,为了大家方便理解,我们要先简单说一下d3d坐标转换的大概流程,如下图:

所以我们要通过一系列的反变换,得到我们关心的值在世界坐标中的表示。

2.1.1 确定鼠标选取点的屏幕坐标

这一步是非常简单的Windows给我们提供了API来完成屏幕坐标的获取,使用GetCursorPos获得鼠标指针位置,然后再利用ScreenToClient转换坐标到客户区坐标系(以窗口视区左上角为坐标原点,单位为像素),设该坐标为(POINT screenPt)。

2.1.2 得到Dir在观察坐标空间内的表示

在观察坐标系中,Dir是一条从观察坐标原点出发的射线,所以我们只需要再确定一个该射线经过的点,就可以得到它在观察坐标系中的表示。假设我们要求的射线上的另外一点为该射线与透视投影平截头体近剪切面的交点,针对最普遍的透视投影而言,透视投影平截头体经投影变换后,变成一个1/2立方体(请允许我这么叫^_^,因为它的大小为一个正方体的一半,x,y方向边长为2,z方向为1)如图:

投影坐标系以近剪切面中心为坐标原点,该立方体从z轴负向看过去与图形程序视区相对应,最终近剪切面(前剪切面)上一点与屏幕坐标之间的对应关系如下图所示:

projPt.y = (screenPt.y-screenHeight/2)/screenHeight*2; (公式2)

projPt.z =0;(实际该值可任意取,不影响最终结果。为了处理简单,我们取改值为0,表示该点取在近剪切面上)得到projPt后,我们需要做的是把该点坐标从投影空间转换到观察空间(view space),根据透视投影的定义,

可假设点(projPt.x,projPt.y,projPt.z)

对应的其次坐标为(projPt.x*projPt.w,projPt.y*projPt.w,projPt.z*projPt.w,projPt.w) 我们可以通过GetTransform( D3DTS_PROJECTION, &ProjMatrix)函数获得投影矩阵ProjMatrix,则根据观察空间到投影空间的变换关系则

(projPt.x*projPt.w,projPt.y*projPt.w,projPt.z*projPt.w,projPt.w)= (viewPt.x,viewPt.y,viewPt.z, 1)*pProjMatrx;

根据定义和图形学原理

根据比例关系,screenPt与投影空间上的点projPt之间的关系为

假设图形程序窗口的宽为screenWidth,高为screenHeight,

projPt.x = (screenPt.x-screenWidth/2)/screenWidth*2; (公式1)

所以,

(projPt.x*projPt.w,projPt.y*projPt.w,projPt.z*projPt.w,projPt.w)

= ( viewPt.x*ProjMatrix._m11,

viewPt.y*ProjMatrix._m22,

viewPt.z*Q-QZn,

viewPt.z)

所以

projPt.x*projPt.w = viewPt.x*ProjMatrix._m11

projPt.y*projPt.w = viewPt.y*ProjMatrix._m22

projPt.z*projPt.w = viewPt.z*Q-QZn (注意projPt.z = 0)

projPt.w = viewPt.z;

解得

viewPt.x = projPt.x*Zn/ ProjMatrix._m11;

viewPt.y = projPt.y*Zn/ ProjMatrix._m22;

viewPt.z = Zn;

好了,到这里为止我们终于求出了射线与近剪切面交点在观察坐标系中的坐标,现在我们拥有了射线的出发点(0,0,0)和射线方向上另外一点(viewPt.x,viewPt.y,viewPt.z),则该射线的方向矢量在观察空间中的表示可确定为(viewPt.x-0,viewPt.y-0,viewPt.z-0),化简一下三个分量同除近剪切面z坐标Zn,该方向矢量可写作

DIRview = (projPt.x/projMatrix._m11,projPt.y/projMatrix._m22,1)

代入公式1,公式2

DIRview.x = (2*screenPt.x/screenWidth-1)/projMatrix._m11;

DIRview.y = (2*screenPt.y/screenHeight-1)/projMatrix._m22;

DIRview.z = 1;

其中screenWidth和screenHeight可以通过图像显示的backBuffer的目标表面

(D3DSURFACE_DESC)来获得,该表面在程序初始化时由用户创建。

2.1.3 转换Dir到世界坐标空间,并得到观察点在世界坐标系中的坐标

由于最终的运算要在世界坐标空间中进行,所以我们还需要把矢量DIRview从观察空间转换为世界坐标空间中的矢量DIRworld。

因为

DIRview = DIRworld*ViewMatrix;

其中ViewMatrix为观察矩阵,在D3D中可以用函数GetTransform( D3DTS_VIEW,

&ViewMatrix )得到。

所以DIRworld = DIRview * inverse_ViewMatrix,其中inverse_ViewMatrix为

ViewMatrix的逆矩阵。

观察点在观察坐标系中坐标为OriginView(0,0,0,1),所以其在世界坐标系中的坐标同样可以利用ViewMatrix矩阵,反变换至世界坐标系中,事实上我们可以很简单的判断出,其在世界坐标系中的表示为:

OriginWorld = (inverse_ViewMatrix._41,

inverse_ViewMatrix._42,

inverse_ViewMatrix._43,

1);

到这里为止,判断射线与三角面是否相交的条件就完全具备了。

2.2 使用射线矢量对场景中的所有三角形图元求交,获得三角形索引值和重心坐标。

这一步骤地实现由两种途径:

第一种方法非常简单,利用D3D提供的扩展函数D3DXIntersect可以轻松搞定一切。见2.1

第二种方法就是我们根据空间解析几何的知识,自己来完成射线三角形的求交算法。一般来讲,应用上用第一种方法就足够了,但是我们如果要深入的话,必须理解相交检测的数学算法,这样才能自由的扩展,面对不同的需求,内容见2.2

下面分别讲解两种实现途径:

2.2.1 D3D扩展函数实现求交

这种方法很简单也很好用,对于应用来说应尽力是用这种方式来实现,毕竟效率比自己写得要高得多。

实际上其实没什么好讲的,大概讲一下函数D3DXIntersect吧

D3D SDK该函数声明如下

HRESULT D3DXIntersect(

LPD3DXBASEMESH pMesh,

CONST D3DXVECTOR3 *pRayPos,

CONST D3DXVECTOR3 *pRayDir,

BOOL *pHit,

DWORD *pFaceIndex,

FLOAT *pU,

FLOAT *pV,

FLOAT *pDist,

LPD3DXBUFFER *ppAllHits,

DWORD *pCountOfHits

);

l pMesh指向一个ID3DXBaseMesh的对象,最简单的方式是从.x文件获得,描述了要进行相交检测的三角面元集合的信息,具体规范参阅direct9 SDK

l pRayPos 指向射线发出点

l pRayDir 指向前面我们辛辛苦苦求出的射线方向的向量

l pHit 当检测到相交图元时,指向一个true,不与任何图元相交则为假

l pU 用于返回重心坐标U分量

l pV返回重心坐标V分量

l pDist 返回射线发出点到相交点的长度

注意:以上红色字体部分均指最近的一个返回结果(即*pDist最小)

l ppAllHits用于如果存在多个相交三角面返回相交的所有结果

l pCountOfHits 返回共有多少个三角形与该射线相交

补充:重心坐标的概念

其中pU和pV用到了重心坐标的概念,下面稍作描述

一个三角形有三个顶点,在迪卡尔坐标系中假设表示为

V1(x1,y1,z1),V2(x2,y2,z2),V3(x3,y3,z3),则三角形内任意一点的坐标可以表示为pV = V1 + U(V2-V1) + V(V3-V1),所以已知三个顶点坐标的情况下,任意一点可用坐标(U,V)来表示,其中参数U控制V2在结果中占多大的权值,参数V控制V3占多大权值,最终1-U-V 控制V1占多大权值,这种坐标定义方式就叫重心坐标。

2..2.2射线三角面相交的数学算法

使用d3d扩展函数,毕竟有时不能满足具体需求,掌握了该方法,我们才能够获得最大的控制自由度,任意修改算法。

已知条件: 射线源点orginPoint,三角形三个顶点v1,v2,v3,射线方向Dir

(均以三维坐标向量形式表示)

算法目的: 判断射线与三角形是否相交,如果相交求出交点的重心坐标(U,V)和射线原点到交点的距离T。

我们可先假设射线与三角形相交则交点(注以下均为向量运算,*数乘,dot(X,Y) X,Y 点乘,cross(X,Y)X,Y叉乘;U,V,T为标量)

则:

IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;

IntersectPoint = originPoint + T*Dir;

所以

orginPoint + T*Dir = V1 + U*(V2-V1) + V*(V3-V1);

整理得:

这是一个简单的线性方程组,若有解则行列式[-Dir,V2-V1,V3-V1] 不为0。

根据T,U,V的含义当T>0, 0

解此方程组即可获得我们关心的值,具体解法不再赘述,克莱姆法则就够了(详细见线性代数):射线原点到相交点的距离T,和交点的中心坐标(U,V)。

下面给出Direct 9 SDK示例程序中的实现代码

IntersectTriangle( const D3DXVECTOR3& orig,

const D3DXVECTOR3& dir, D3DXVECTOR3& v0,

D3DXVECTOR3& v1, D3DXVECTOR3& v2,

FLOAT* t, FLOAT* u, FLOAT* v )

{

// 算出两个边的向量

D3DXVECTOR3 edge1 = v1 - v0;

D3DXVECTOR3 edge2 = v2 - v0;

D3DXVECTOR3 pvec;

D3DXVec3Cross( &pvec, &dir, &edge2 );

// 如果det为0,或接近于零则射线与三角面共面或平行,不相交//此处det就相当于上面的,

FLOAT det = D3DXVec3Dot( &edge1, &pvec );

D3DXVECTOR3 tvec;

if( det > 0 )

{

tvec = orig - v0;

}

else

{

tvec = v0 - orig;

det = -det;

}

if( det < 0.0001f )

return FALSE;

// 计算u并测试是否合法(在三角形内)

*u = D3DXVec3Dot( &tvec, &pvec );

if( *u < 0.0f || *u > det )

return FALSE;

// Prepare to test V parameter

D3DXVECTOR3 qvec;

D3DXVec3Cross( &qvec, &tvec, &edge1 );

//计算u并测试是否合法(在三角形内)

*v = D3DXVec3Dot( &dir, &qvec );

if( *v < 0.0f || *u + *v > det )

return FALSE;

/*计算t,并把t,u,v放缩为合法值(注意前面的t,v,u不同于算法描述中的相应量,乘了一个系数det),注意:由于该步运算需要使用除法,所以放到最后来进行,避免不必要的运算,提高算法效率*/

*t = D3DXVec3Dot( &edge2, &qvec );

FLOAT fInvDet = 1.0f / det;

*t *= fInvDet;

*u *= fInvDet;

*v *= fInvDet;

return TRUE;

}

2.2.3 拾取完成根据获得的中心坐标计算我们关心的常见量。

根据重心坐标(U,V),我们可以很容易的算出各种相关量比如纹理坐标和交点的差值颜色,假设以纹理坐标为例设V1,V2,V3的纹理坐标分别为T1(tu1,tv1),T2(tu2,tv2),T3(tu3,tv3)则交点的坐标为

IntersectPointTexture = T1 + U(T2-T1) + V(T3-T1)

3、结束及声明

Ok, 到这里为止关于拾取的相关知识就介绍完了,小弟第一次写这种文章,不知道有没有把问题说清楚,希望对大家有所帮助,有任何问题可以给我发email:

jzhang1@https://www.360docs.net/doc/3c5095290.html,或者到我的网站留言:https://www.360docs.net/doc/3c5095290.html,

声明:本文写作的目的是为了广大D3D学习者方便学习服务,文中算法为作者参考相关文献总结,作者无意把这些据为自己的成果,所有权原算法提出者所有(参阅参考文献),文中代码为D3d SDK的示例内容,由笔者进行了必要的解释,代码版权归microsoft所有。

鼠标经常不能移动该怎么办

鼠标经常不能移动该怎么办 可能还有些网友对于鼠标经常不能移动的情况不太了解,下面就由小编给你们介绍鼠标经常不能移动的解决方法吧,希望能帮到大家哦! 鼠标经常不能移动该的解决方法: 鼠标不动,可以用键盘+光标键关机或重新启动或注销。按住键盘windows徽标键,打开开始菜单栏按“u”会弹出关机或重启界面,再按“u”就关闭电脑了。 组合键windows+u+u(在xp系统下用,win7系统用光标键移动),或者用光标键移动来执行想要执行的命令。也可以打开cmd,输入tsshutdn命令60秒后关机! 针对于usb接口的鼠标,突然之间不动了,我们只需要及时插拔,重新拔下再插上,就可以立即使用了。如果重新插了还是不能移动,那就说明电脑假死机了。按住热键组合键Ctrl+Alt+delete 键关机或注销或重启。如果键盘还可以操作,利用windows键打开开始菜单栏,用光标键移动来执行命令。或直接打开cmd,输入tsshutdn命令60秒后关机! 对于无线电鼠标突然不能移动了,这个时候您首先需要检查鼠标电池是否还有电?蓝牙端口配对是否有问题,没有电了,则需要换电池,与电脑蓝牙接口配对有问题,需要重新配对。如果鼠标的距离超出蓝牙操控规定的范围内,需要重新调整鼠标与电脑之间的距离。

附加鼠标经常移动点击没反应的解决方法: 1、点击桌面下方windows按钮,随后依次打开控制面板、系统、设备管理器。 2、在设备管理器列表中找到并展开“通用串行总线控制器”即可看到USBRootHub。如下图所示: 3、双击USBRootHub选项,在打开属性对话框,切换到“电源管理”,将“允许计算机关闭这个设备以节约电源”选项取消后按“确定”按钮即可;如下图所示: 看过“鼠标经常不能移动该怎么办”的人还看了: 1.鼠标不能移动了怎么办 2.鼠标不能移动怎么办 3.鼠标不能上下移动的解决方法 4.电脑鼠标突然不能移动怎么办 5.鼠标不好移动怎么办 6.鼠标故障无法移动怎么办

学习游戏脚本制作:按键精灵键鼠同步器源码分享

学习游戏脚本制作:按键精灵键鼠同步器源码分享 来源:按键学院【按键精灵】小编之前也有使用过其它大牛编写的游戏同步的脚本,突然间对于它是如何实现同步感到十分好奇,我们一起来研究看看,同步到底是怎么实现的吧~ NO.1-同步的前提 前提 1同步的两个窗口需要是同一个应用窗口,并且窗口大小要相同 2同步窗口可以接收到按键的键鼠发送信息 3同步的窗口支持后台键鼠操作 NO.2-本节例子及其能实现的功能 例子 1画图工具,实现同步画图 2记事本,实现同步删除内容 功能①键鼠同步 ②支持组合键 NO.3-思路大剖析

思路步骤 1获取主窗口和被同步窗口句柄 ● WaitKey 命令等待键盘按下 ○按下F6则获取当前鼠标指向的窗口句柄,作为主窗口句柄。 ○按下F7 则获取当前鼠标指向的窗口句柄,作为同步窗口句柄。 ●用Do循环来等待按键,当主窗口句柄和同步窗口句柄都获取到时,退出Do循环 ●代码 Do Key = WaitKey() If Key = 117 Then 主窗口= Plugin.Window.MousePoint() End If If Key = 118 Then 同步窗口= Plugin.Window.MousePoint() End If Delay 500 If 主窗口<> 0 and 同步窗口<> 0 Then Exit Do End If Loop 2设置两个窗口的窗口大小一致 ●窗口大小一致,同步的时候鼠标才能移动到正确的位置。 ●代码 Call Plugin.Window.Size(主窗口,800,600) Call Plugin.Window.Size(同步窗口,800,600)

Direct3D应用中的2D应用

Direct3D应用中的2D应用 2D Application 收藏(转载)2D Application 这一章将讨论IDirect3DDevices9接口怎样应用到简单的两维应用程序里去。然而,接下来讨论的方法和接口的方法不仅仅只应用在两维应用程序里面。 开始我们将看看IDirect3DSurface9接口,它用于存放像素数据。我们将看看怎样创建surfaces,怎样填充数据,并且执行像素拷贝操作。 接下来,我们讨论IDirect3DSwapChain9接口管理back buffer 集合。设备创建的时候都会携带一个默认的swap chain,但是也可以为window模式下多个视图创建新的swap chain。 再接下来,我们将讨论Presentation,Present 也是 IDirect3DDevice9提供的方法。 即使Direct3D可以不使用GDI,但是他们也要处理发送到应用程序top-level窗口的消息。我们推荐使用Direct3D应用程序来处理窗口消息。DirectX 并没有提供直接方法来将

GDI和Direct3D结合起来。但是,通常是在内存DC和流水线产生的结果像素数据上执行GDI操作。

最后,我们将讨论流水线的Video scan out部分以及swap chain从back buffer到front back 的过程。video scan out 电流读取数据,使用cursor overlay,gamma校正以及像素数据转化成monitor的模拟信号。Pixel Surface Pixel 面是像素数据的矩形集合。像素数据的内存layout 是通过D3DFORMAT定义的。在设备上使用surface有几处地方:back buffer surfaces, depth/stencil buffer surfaces,纹理层surface,render target surface 以及图片surface。Direct3D 使用IDirect3DSurface9接口表示一个surface,CreateOffscreenPlainsurface方法可以创建一个图片surface,它能存在于scrath内存池,系统内存池和设备内存池。CreateDepthStencilSurface和CreateRenderTarget分别返回depth/stencil的surface和render target的surface。一个plain surface可能不是3D 渲染的目标,但是你能在plain surface和其他surface之间进行数据拷贝。HRESULT CreateOffscreenPlainSurface(UINT width,

鼠标桌面上不移动怎么办

鼠标桌面上不移动怎么办 鼠标桌面上不移动的解决方法: 1、你在“计算机管理-设备管理器”下找到对应的鼠标,看看是否被禁用了。如果被禁用了,将禁用打开。 2、如果你用的是安装电池的无线鼠标,那么鼠标不动了可能会是鼠标电池没电了,换新的电池试用一下看看能不能动。 3、如果你不是无线鼠标,是有线的鼠标不动了,那么把鼠标连接电脑的插口重新插拔一下(usb插口的尽量多换几个插口试一下)。 4、如果重新插拔或换插口还是不行,那么最好拿另一只好的鼠标来换上试一下。 5、也可以在鼠标不动的情况下,按键盘上相关键,比如键盘最下面一排有小窗图标的键可以唤出开始菜单,看看电脑有没有死机,如果电脑没死机,基本确定是鼠标有问题,如果电脑不动了,可以重启再试鼠标。 6、基本上就是以上几个排查方面,有备用鼠标的话,直接替换鼠标试用是最省事的。 鼠标不灵敏怎么办 如果鼠标是光电无线鼠标的话可以检查一下电池是不是快没电了。如果电池充分的话可以检查一下电脑是否中毒。或者你应该换一个鼠标了。这个鼠标陪你太久了。

无线和有线鼠标都可以按照以下步骤对鼠标进行设置。 1.点击开始菜单,选择控制面板。 2.选择打印机和其他硬件。 3.选择鼠标 4.选择指针选项。勾选提高指针精确度。调节快还是慢,调节到适合自己感觉的时候,点击应用。确定。 鼠标灯亮不动怎么办 (一)怎么办? usb接口鼠标需重启,pc接口的鼠标不需要重启,即插即用 1、从接口拔下鼠标再插上试试 2、重启电脑 3、可能和系统有某些冲突,要么删除了,如果找不到就只好重装系统! 4、键盘能用的话用组合键ctrl+alt+del试下 5、建议更换新鼠标 6、要么是机器中毒了 (二)怎么回事? 1.鼠标本身(除非你赶上万分之几的次品率) 2.接口,接触不好或已坏,我的一个口就插鼠标没反应 3.电脑的供电或其他问题,让鼠标失去有正常工作的环境 4.硬件上中断冲突. 5.就是上面也说过的鼠标工作的表面介质,像玻璃镜子这类反光太强的不行,现象是会不动或乱跳,因为是鼠标底下是红光,所以红的表面当然就效果不好了,表面散射太多也不行(其实普通

Direct3D 10系统

摘要 本文描述了第四代PC平台上图形图像单元(GPU)的系统构架。与上一代图形管道相比,新的管道有了重大改变,引入了一个新的可编程阶段(stage)用于生产额外的图元,并把图元流保存到内存中;扩展了所有可编程阶段的功能,涉及到顶点、图片内存资源,以及新的储存格式。此外,我们还描述了API、运行时以及实现新管道的着色语言的结构性改变。解决当前系统中的缺陷,是我们设计的基本思想。文章不但描述了重要设计抉择背后的原理,同时也描述了那些最终被否决的方案。 1.前言 过去10年,OpenGL和Direct3D所依赖的渲染管道构架已经取得了重大发展。最近5年中,随着从固定管道到可编程管道的过渡,发生了许多戏剧性的变化。虽然变化的进程很快,但每一步都反映出了设计者在通用性、性能以及成本上所做出的妥协。 我们一直在努力了解以及构建一个系统,来解决许多程序中对图形加速器的需求(呈现图形、CAD、多媒体处理,等等)。但是,我们更想把注意力集中在交互式娱乐应用中。这些程序需要管理数十亿字节的艺术品,包括几何体、纹理、动画数据以及着色程序,占用大量系统资源(CPU、内存、带宽),以可交互的速率渲染丰富的、充满细节的图片。在处理海量数据的同时,保证渲染的灵活性,是对设计者的重大挑战之一。在系统设计的方方面面,都可以反映出我们对这个问题的解决方案。 与上个版本的Direct3D一样,Direct3D 10同样是在应用程序开发者、硬件设计师以及API/运行时构架师三方的合作下设计的。在三年多的设计过程中,合作者之间详细的交流是无价的,让我们更深入了软硬件部署的代价,以及在大量不同硬件进行权衡。在开发Direct3D 10的过程中,调查显示应用程序开发者通常受以下限制的困扰,以及用来缓解这些问题的策略: 1. 状态(state)改变的代价过高。改变任何类型的状态(顶点格式、纹理、shader、shader参数、混合模式,等等)都会付出很大代价。优化方法通常是通过查询对象状态来排序,减少API状态改变次数;减少外观的改变;或者使用基于shader的技术,使用shader来决定状态。对于后者,例子之一就是把多张纹理打包为一张纹理地图(texture map)(也称为纹理地图集),通过纹理坐标变换,来索引相应的子纹理。 2. 硬件加速器性能变化太多。应用程序不得不编写一系列分支语句,以保证在不同硬件上都能正常运行。这些问题会影响到程序的特性设置,资源管理,算法精度,以及储存格式。 3. CPU和GPU之间频繁的同步。传统的图形管道允许有限制的重新使用管道当前产生的数据,作为下一个处理步骤的输入数据。Render-to-texture就是这种机制的最好例子之一,所渲染的图片接下来能被当作纹理使用,最小化CPU的干涉。但是,产生新顶点数据,或者创建立方贴图就需要CPU与GPU进行更多的协调和通信,降低了效率。 4. 指令以及数据类型的限制。通常都以精度和所支持的流程控制指令来衡量vertex shader,同样的方法也用来衡量pixel shader,但是,无论是pixel还是vertex shader都不支持整数指令。此外,出于对pixel shader精确性的要求,还指定了浮点算法。应用程序要么不使用这些额外的功能,要么模仿他们的使用。基于表格功能的计算就是例子之一。 5. 资源限制。纹理读取的次数、纹理范围、程序指令,等等,都受到限制。应用程序不得不压缩算法,或者把它们分为多个shader pass。因此,还出现了对自动划分shader程序的研究。 2.背景 我们的系统建立于PC,工作站以及游戏机平台上的应用程序可编程渲染管道。当前的图形管道分为两个编程阶段,一个用于处理顶点数据(vertex shader),一个用来处理像素或片断(fragment or pixel shader)。在Lindholm2001里描述了设计早期vertex shader的思想和折中。除了细小的差别以外,pixel shader也是按这样的轨迹来设计的。可以把顶点以及像素着色器的发展分为4代(包括Direct3D 10),如表一所示:

获取当前鼠标所在的窗口句柄

用到的API函数: GetCursorPos 基本信息 函数功能:该函数检取光标的位置,以屏幕坐标表示。 函数原型:BOOL GetCursorPos(LPPOINT lpPoint); 参数: IpPoint:POINT结构指针,该结构接收光标的屏幕坐标。 使用时要先定义一个数据结构: Public Type POINTAPI x As Long y As Long End Type 例如: dim biao as POINTAPI GetCursorPos biao 那么biao.x用来存放当前光标的x轴坐标,biao.y用来存放当前y轴的坐标。 返回值:如果成功,返回值非零;如果失败,返回值为零。若想获得更多错误信息,请调用GetLastError函数。 备注: 1.光标的位置通常以屏幕坐标的形式给出,它并不受包含该光标的窗口的映射模式的影响。该调用过程必须具有对窗口站的WINSTA_READATTRIBUTES访问权限。 2.此函数为api函数,调用时要函数声明:Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long 速查:Windows NT:3.1及以上版本:Windows:95及以上版本;Windows CE:不支持;头文件:winuser.h;库文件:user32.lib。 WindowFromPoint 函数功能:该函数获得包含指定点的窗口的句柄。 函数原型:HWND WindowFromPoint(POINT Point); 参数:

Point:指定一个被检测的点的POINT结构。 返回值S:返回值为包含该点的窗口的句柄。如果包含指定点的窗口不存在,返回值为NULL。如果该点在静态文本控件之上,返回值是在该静态文本控件的下面的窗口的句柄。 备注:WindowFromPoint函数不获取隐藏或禁止的窗口句柄,即使点在该窗口内。应用程序应该使用ChildWindowFromPoint函数进行无限制查询,这样就可以获得静态文本控件的句柄。 速查:Windows NT:3.1以上版本:Windows:95以上版本;Windows CE:1.0以上版本:头文件:Winuser.h;库文件:user32.lib。 获取当前鼠标所在的窗口句柄代码: POINT pNow = {0,0}; If (GetCursorPos(&pNow)) { HWND hwndPointNow = NULL; hwndPointNow = WindowFromPoint(pNow); if (hwndPointNow) cout <<“Success!!”<< endl; else cout <<“Error!!”<< endl; } else cout <<“Error!!”<< endl;

2018-电脑鼠标自己乱动的解决方法-word范文 (3页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除! == 本文为word格式,下载后可方便编辑和修改! == 电脑鼠标自己乱动的解决方法 没有使用鼠标垫,在光滑屏幕或者玻璃面上使用也会造成鼠标乱动。下面是小编收集整理的电脑鼠标自己乱动的解决方法,欢迎阅读。 电脑鼠标自己乱动的解决方法一: 鼠标指针自动移动、乱跳的原因: 1,鼠标底部透镜有杂物; 2,鼠标垫凹凸不平或者有杂物; 3,没有使用鼠标垫,在光滑屏幕或者玻璃面上使用也会造成鼠标乱动; 4,鼠标质量差,“丢帧”导致。 鼠标丢帧: 又叫“跳帧”。如果鼠标移动的时候反应非常非常“灵敏”,当轻微移动鼠标时,屏幕上的鼠标到处乱窜,导致无法控制它到指定的位置,那这时候就是鼠标跳帧了。 解决方法: 1,清理鼠标底部透镜的杂物; 2,清理鼠标垫的杂物或者更换平整的鼠标垫; 3,在鼠标垫上使用鼠标; 4,更换质量较好的鼠标。 电脑鼠标自己乱动的解决方法二: 原因一:鼠标垫不平。

解决方法:将鼠标垫铺平。 遇到鼠标乱动的情况,首先检查鼠标垫是否铺平。如果没有铺平,会造成鼠标乱动的情况,清理下鼠标垫。 原因二:鼠标进灰尘 解决办法:清理鼠标里的灰层 鼠标的滚动珠有缝隙,容易进灰层,卡住滚动珠,就会造成鼠标乱动,可以将鼠标拆开,清理下灰层。 原因三:某东西压住键盘或有东西掉进键盘的按键里。 解决办法:清理下键盘,保证键盘按键正常使用。 如果有东西压着笔记本的触摸板或者压住了键盘的按键或者有东西卡在按键里,都会造成鼠标乱动。 原因四:有木马或病毒 解决方法:使用杀毒软件清理木马和杀毒 如果电脑中木马或者中病毒,鼠标有可能会乱动,可以使用杀毒软件清理木马和病毒。 原因五:是否被远程控制 解决办法:关闭远程控制 有时候可能使用远程解决问题时选择允许被控制,却忘记结束远程控制,比如使用qq中的远程控制,所以遇到鼠标乱动的情况可以检查一下是否有开启远程的情况。 原因六:鼠标驱动与系统发生冲突 解决办法:将鼠标快速初始化的勾去掉 有时候可能是与系统发生冲突,那么就选择控制面板,找到鼠标,在快速初始化前的勾去掉。 相关文章:

KVM鼠标不同步解决方法

1.鼠标速度问题。 2种办法解决: 售前需要确认,单光标模式没有被启用:如图红色圈出的地方没有被选上,如被选上了,请取消选择。 1.对于WINDOWS系统的机器(图1,图2) 1.1在“AVOCENT会话查看器“-“工具”-“会话选型”“AVOCENT鼠标同步选项“的选上(对于WINDOWS 机器)。 选上后关闭窗口,重新打开“AVOCENT会话查看器” 2.对于WINDOWS系统的机器(图3) 2.1.或者在被控服务器的控制面板-鼠标选项-指针选项-提供指针精确度的选项取消(对于WINDOWS机器) 选上后关闭窗口,重新打开“AVOCENT会话查看器” 1和2不要同时使用,如果使用1方法感觉效果不好的情况下。可以取消“AVOCENT鼠标同步”再使用2方法来尝试. 3.对于Red Hat LINUX机器,8.0以前版本: 1. 从“工作区”菜单中单击“桌面管理器”图标,选择“应用程序管理器”-“桌面控 制”以打开“控制中心”对话框。 2. 从树型视图中选择“外围设备”-“鼠标”以显示鼠标设置列表。 3. 将“加速度”滑块设置到中点。 4. 单击“确定 5.选上后关闭IE窗口,重新打开“AVOCENT会话查看器” 4.对于Red Hat LINUX机器,8.0版本或者更高 1. 单击“Red Hat”图标,然后选择“首选项”-“鼠标”以打开“鼠标首选项”对话框。 2. 单击“运动”选项卡。 3. 将“加速度”滑块设置到中点稍偏左的位置。 4. 单击“关闭”。: 5.选上后关闭IE窗口,重新打开“AVOCENT会话查看器”

5.对于红旗机器。 如图4设置。鼠标加速度滑块移动到最左边,确认后关闭IE窗口,重新打开“AVOCENT会话查看器” 如何判断鼠标正常,即在使用时,有2个鼠标,2个鼠标完全重合。 图1 图2

UML状态图编写规范

UML状态图规范说明 一、状态图简介 状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。通常我们创建一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。 状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。 状态机用于对模型元素的动态行为进行建模,更具体地说,就是对系统行为中受事件驱动的方面进行建模(请参见概念:事件与信号)。状态机专门用于定义依赖于状态的行为(即根据模型元素所处的状态而有所变化的行为)。其行为不会随着其元素状态发生变化的模型元素不需要用状态机来描述其行为(这些元素通常是主要负载管理数据的被动类)。 状态是对象执行某项活动或等待某个事件时的条件。对象可能会在有限 长度内保持某一状态。状态具有以下几项特征: 二、状态图内容 2.1 转移 转移是两个状态之间的关系,它表示当发生指定事件并且满足指定条件时,第一个状态中的对象将执行某些操作并进入第二个状态。当发生这种状态变更

时,即“触发”了转移。在触发转移之前,可认为对象处于“源”状态;在触发转移之后,可认为对象处于“目标”状态。转移具有以下几项特征: 一个转移可能有多个源状态,在这种情况下,它将呈现为一个从多个并行状态出发的结合点;一个转移也可能有多个目标状态,在这种情况下,它将呈现为一个到多个并发状态的叉形图。 2.2 事件触发器 在状态机环境中,事件是指可触发状态转移的激励的发生。事件可能包括信号、调用、时间推移或状态变更。信号或调用可能具有其值可用于转移的参数,其中包括警戒条件和操作的表达式。也可能会有无触发器的转移,这样的转移没有事件触发器。这种转移也被称为完成转移,它们在源状态完成其活动后将被隐含触发。 2.3 警戒条件 当转移的触发事件发生时,将对警戒条件进行求值。只要警戒条件不重叠,就可能会有来自同一源状态并具有同一事件触发器的多个转移。在事件发生时,只为转移进行一次警戒条件求值。该布尔表达式可能会引用对象的状态。 2.4 操作

笔记本鼠标无法移动该怎么办

笔记本鼠标无法移动该怎么办 笔记本鼠标无法移动的解决方法一: 鼠标不动,可以用键盘+光标键关机或重新启动或注销。按住键盘windows徽标键,打开开始菜单栏按“u”会弹出关机或重启界面,再按“u”就关闭电脑了。 组合键windows+u+u(在xp系统下用,win7系统用光标键移动),或者用光标键移动来执行想要执行的命令。也可以打开cmd,输入tsshutdn 命令60秒后关机! 针对于usb接口的鼠标,突然之间不动了,我们只需要及时插拔,重新拔下再插上,就可以立即使用了。如果重新插了还是不能移动,那就说明电脑假死机了。按住热键组合键ctrl+alt+delete键关机或注销或重启。如果键盘还可以操作,利用windows键打开开始菜单栏,用光标键移动来执行命令。或直接打开cmd,输入tsshutdn命令60秒后关机! 对于无线电鼠标突然不能移动了,这个时候您首先需要检查鼠标电池是否还有电?蓝牙端口配对是否有问题,没有电了,则需要换电池,与电脑蓝牙接口配对有问题,需要重新配对。如果鼠标的距离超出蓝牙操控规定的范围内,需要重新调整鼠标与电脑之间的距离。 笔记本鼠标无法移动的解决方法二: 鼠标指针抖动及自行移动的问题,在日常生活中较为常见,

不正确的使用习惯和鼠标自身硬件问题,均有可能造成鼠标指针抖动和自行移动的现象发生。让我们一起来进行总结,看看那些情况会导致鼠标指针自行移动。 1、表面兼容性问题 表面兼容性问题而导致鼠标指针自行移动现象,应该是最为常见的一种情况,尤其是在部分主廉价鼠标上,该问题可以说是屡见不鲜。为压缩鼠标制造成本,部分鼠标使用了表面兼容能力较引擎的鼠标引擎,在部分三维表面(例如毛巾,皮草)及特殊纹理表面(表面具备一定反光性的白色杂不规则黑灰色点表面)上使用时,鼠标会出现抖动及自行移动的问题 解决方案:使用深色,表面色彩过渡较少的鼠标垫,优先布质。 2、鼠标透镜松动 鼠标由于内部出现损坏或装配不好,造成鼠标引擎成像透镜松动,同样会出现鼠标指针自动移动的现象,这是因为鼠标透镜出现错位,引擎无法捕捉到正确的表面定位信息所造成,该现象在一些廉价鼠标上出现的机率较高,这是由于廉价鼠标通常均停靠鼠标上盖直接压紧电路板及透镜,当压紧机构出现损坏时,即导致透镜移位松动。 解决方案:拆开鼠标,看鼠标透镜是否固定良好,如出现松动可将透镜重新放正并固定好。

时间同步设置说明

时间同步客户端设置说明 一、对于那些采用UNIX平台通用操作系统的设备,如Sun OS, Unix, Linux,Solaris, IBM AIX等系统均包含有标准的时间同步模块包,安装后,直接对对应的配置文件进行配置即可实现时间同步功能。以下部分系统的配置方法供参考: AIX 版本:IBM AIX 5.1/5.2 目的:使系统通过NTP服务器进行时间校对(同时作为客户端和服务端) 方法: 1)安装NTP服务模块 2)打开etc/ntp.conf文件 3)加入NTP服务器IP地址(如服务器地址为A.B.C.D则加入”server A.B.C.D”) 4)加入IP地址:127.127.1.0(本机作为NTP Server) #broadcastclient server A.B.C.D server 127.127.1.0 driftfile /etc/ntp.drift tracefile /etc/ntp.trace 5)存盘退出 6)本机时间和NTP服务器时间差超过1000秒,需要进行人工修正。 a)、ntp客户端使用 ntpdate 命令来确认是否可用指定的 ntp 服务器进行时间同步, 命令的结果会显示客户端与服务器的时间偏移。 #ntpdate -d 192.168.30.221 …… 18 Mar 10:52:54 ntpdate[23578]: step time server 192.168.30.221 offset 86323.068272 sec b)、若时间间隔大于1000秒,使用ntpdate 进行调整, 如: #date (查询当前时间) Tue Mar 18 11:06:29 BEIST 2003 #ntpdate 192.168.30.221 (修正本机时间为NTP服务器的时间) 19 Mar 11:06:51 ntpdate[23832]: step time server 192.168.30.221 offset 86403.402607 sec #date (查询修正后的时间,时间误差应该小于1000秒) Wed Mar 19 11:06:54 BEIST 2003 7)设置xntpd进程自启动: # smit xntpd 选择Start Using the xntpd Subsyste 选择BOTH方式,表示立即启动以及系统下次启动的时候将自动启动 通过如下命令可以看到,其实xntpd是tcpip服务组的一个子服务而已 #lssrc -g tcpip Subsystem Group PID Status inetd tcpip 303118 active snmpd tcpip 651356 active xntpd tcpip 589898 active ……

Win7系统Direct3d功能不可用的解决方法

Win7系统Direct3d功能不可用的解决方法 DirectX加速不可用或者被禁用,直接导致我们大型游戏玩不,这对于爱玩游戏的人来说是个麻烦。最近,使用Win7系统的用户,发现Direct3d功能不可用,是由于DirectX组件出现问题,才导致Direct3d功能不可用。那要如何解决这个问题呢?今天,小编就和大家介绍一下Win7系统Direct3d功能不可用的解决方法。 推荐更快速解决方法:系统重装 步骤如下: 1、首先,点开开始按钮,在搜索框里输入“dxdiag”。 2、会搜索出一大堆东西,没关系的,只要打开最上边的“dxdiag.exe”这个程序就行了。 3、Dxdiag的中文名叫做DirectX诊断工具,打开后界面如下图: 4、这时我们在主界面上点击“显示”选项卡(如上图红圈所示),就能看到关于系统中所有与图形有关的内容了(如下图):

5、正常的话,下面“DirectX功能”框里的DirectDraw加速、Direct3D 加速、AGP纹理加速应该都是“已启用”状态,这时你的电脑的显示系统没有问题,玩大型游戏、用CAD软件等,应该都可以正常使用。 6、但是有一部分人的DirectX加速功能是不可用状态,怎么修复呢?确定你的显卡驱动是否正常。

7、注意到画红框的部分了吗?这里就会显示你的显卡驱动是否正常。第一张图为一个显卡驱动正常的系统截图,第二张图为一个显卡驱动有问题的系统截图。通过两张图的对比,各位其实很好看出什么样的叫正常,什么样的叫异常。为了严谨,我还是把驱动中每项参数都简单介绍一下。 8、参数中主程序驱动里面会写着驱动的文件名,如果写的是一大堆文件名(如nvd3dumx.dll,nvwgf2umx.dll等等,不同的显卡品牌这里显示的文件名会不一样,这个无所谓的),就是正常状态,如果只写了vga,则100%是显卡驱动有问题。 9、下面是版本信息,如果是以6.1.7600开头的,那么就是显卡驱动有问题,如果是其他的,就是显卡驱动正常。其实这个6.1.7600指的是Windows 7的版本号,系统只能用自己的版本号填在这,说明显卡驱动就是缺失的。 接下来是日期,如果是2009/7/14 7:25:51,那么就是显卡驱动有问题,如果是其他的,就是显卡驱动正常。其实这个2009/7/14 7:25:51,指的是Windo ws 7系统编译完成的时间。 然后是WHQL签名,这个签名无所谓,不管有还是没有都不影响使用。

用3DMAX打造逼真鼠标模型的教程

鼠标是最常用的电脑外设了,时间长了对它也会有一种特殊的感情,下面我们用3DMAX来打造一只常见的滚轮鼠标模型。 效果图: 制作工具:3DMAX9.0 制作过程: 1、在视图中创建4个用于拟合放样的二维模型,分别为基础路径、基础截面、X轴拟合图形、Y轴拟合图形,如图所示。

2、在顶视图中选择“基础路径”,然后进行基本放样操作,选择前视图中的“基础截面”。 3、进入修改命令面板,展开“变形”卷展栏,单击其中的“拟合”按钮,在弹出的窗口中单击“均衡”按钮取消坐标轴的锁定状态,这样可以分别对两个轴进行调整,效果如图所示。

4、单击“获取图形”按钮,然后在顶视图中选取“X轴拟合图形”,这时可以看到视图中出现了一个变形的造型。单击“顺时针旋转90度”按钮,效果如图所示。

5、在“拟合变形”窗口中单击“显示Y轴”按钮,并在左视图中选取“Y轴拟合图形”,然后单击“水平镜像”按钮,此时可以产生基本的鼠标造型效果,如图所示。 6、制作凹槽,在视图中的创建如图所示的模型作为布尔运算的模型,利用“选择并移动”工具调整好位置。

7、选择放样模型,在“几何体”面板中的下拉列表框中选择“复合对象”选项,然后单击“布尔”按钮,进行布尔运算,产生鼠标凹槽。 8、单击“标准基本体”面板中的“圆环”按钮,在左视图中创建一个圆环作为滚轮,并修改相关的属性参数。 9、单击“图形”面板中的“线”按钮,在顶视图中创建一条曲线。再利用“图形”面板中的“圆”工具在前视图中创建一个圆形。 10、选择绘制的曲线,然后在“几何体”面板中的下拉列表框中选择“复合对象”,并单击其中的“放样”按钮,实现放样操作,此时放样操作拾取的截面为前视图中的圆形。

鼠标指针不能自由移动怎么办

鼠标指针不能自由移动怎么办 鼠标指针不能自由移动的解决方法一: 故障现象: 在桌面上移动鼠标器时屏幕上的光标不能灵活移动。 故障分析与处理: 故障分析与处理:一般这种现象可分两种情况考虑: (1)由于鼠标器受到强烈振动,如掉在地上,使红外发射或接收二极管稍稍偏离原位置造成故障。这种现象的特点是光标只在一个方向(如x方向)上移动不灵活。 (2)鼠标器的塑胶圆球和压力滚轴太脏(如有油污),使圆球与滚轴之间的摩擦力变小,造成圆球滚动时滚轴不能同步转动。这种现象往往是光标向各方向移动均不够灵活。处理方法如下: ①.将鼠标底部螺丝拧下,小心打开上盖。轻轻转动压力滚轴上的圆盘,同时调整圆盘两侧的二极管,观察屏幕上的光标,直到光标移动自如为止。 ②.打开鼠标器上盖取出塑胶球,用无水酒精将塑胶球和压力滚轴清洗干净。 鼠标指针不能自由移动的解决方法二: 第一:系统出现了卡顿: 一般情况系统出现卡顿,运行内存卡主,伴随着鼠标的不动。一般来说系统卡顿也有很多的方面,例如散热效果不好,系统配

置没有进行更新配置较低,电脑中的垃圾过多,没有及时清理,或者是内存不足硬盘性能低等问题。 第二:鼠标连接线接触不良: 一般鼠标的接口有usb和ps/2两种,如果鼠标不动,我们检查是否是鼠标接口接触不良,我们来晃动鼠标,如果鼠标偶尔可以移动说明接触不良,如果晃动鼠标线依然不动,则可以换个接口试试或者换个电脑试试。 第三:鼠标坏了: 要想知道鼠标是否坏了,如果出现鼠标不动这类问题,我们可以进行换个电脑试试。如果换了电脑,鼠标指针依然不动那么可以断定是鼠标坏了。 第四:硬盘驱动问题: 驱动破坏和缺失也会造成鼠标不动的问题,如果出现在这种情况,就要卸载原有驱动,重新拔插让电脑自动识别鼠标并安装驱动。 第五:电压不足,电源功率不够稳定 电压不足的时候,也会出现鼠标不动的问题。

数据同步软件Synctoy使用教程

1, 介绍 SyncToy v2.0 - 微软同步工具:它可以让您的文件在不同的磁盘和文件夹中保持同步并且可以随意处理,甚至可以输入UNC以处理网络驱动器上的文件和任何设备上的信息现在,微软给我们展示了一款软件SyncToy,用于WindowsXP的一个免费的、易于使用的工具。高度的自定义功能可以帮助用户从繁重的拷贝、移动及同步不同目录的工作中解脱出来,仅仅单击几次鼠标就能搞定更多的操作,也会有额外的自定义功能而不会增加复杂度。微软推出的免费的同步工具,不用犹豫吧? SyncToy可以同时管理多个目录系列,合并两个目录里文件为一个目录,酷似重命名并在另一个文件夹中删除。与其他程序不同,SyncToy很清楚重命名过程,并且会对同步文件夹进行确认一致。 SyncToy 2.1下载 SyncToy V2.0绿色英文版下载 2,安装 安装SyncToy需要Microsoft Sync Framework,如同步两台计算机的文件夹,则两台计算机都需要安装Microsoft Sync Framework。 3,使用 打开SyncToy 2.0 ,选择Create New Folder Pair 选择要同步的文件夹

根据你的需要选择要同步的方式 ?Synchronize:第一項是最主要的雙向同步功能,會依據左右兩端點裡檔案的增加、刪除、修改、更名,把兩端的檔案同時調整到最新的狀態。使用者可以這麼去想像,你在兩台電腦中保存了一樣的檔案,後來你在A電腦做了某些新增,又在B電腦裡做了一些修改,你已經搞不清楚哪些檔案是新是舊了,為了方便起見,就可以透過這個功能來直接的把兩端的檔案調整到最新樣態。 ?Echo:這是有限制的單向同步功能,會依據左方端點最新的檔案增加、刪除、修改、更名狀態,把「左邊的狀態」調整到「右邊」,也就是以你左方的資料夾為主來進行同步,這時候右方最新的修改不會調整到左方。這個功能適用於你帶著USB隨身碟進行旅行或移動工作,你可以確定USB隨身碟上面是你目前想要的檔案狀態,那麼你就可以在SyncToy的左端設定成USB隨身碟,然後將其檔案狀態同步更新到右方家裡的電腦主機中。 ?Contribute:這是更為安全的單向同步功能,基本上和Echo一樣是由左到右的同步,但是不會進行任何「刪除」的更新動作,即使你在左方端點刪除了一個檔案,這個「刪除的動作」在Contribute作業裡不會被「同步」到右方,也就是說檔案只會增加和修改,不會減少。這個特殊的狀態適用於當你因為某些理由必須暫時刪除左方端點中的檔案,例如

大漠插件后台找图、自动获取坐标窗口句柄鼠标多点左单击脚本

大漠插件后台找图、自动获取坐标窗口句柄鼠标多点左单击 脚本 一、准备工作 第一步:下载大漠插件、解压,运行“注册大漠插件到系统.bat”,把全部东东都复制到按键精灵的plugin目录下吧~ 第二步:创建一个文件夹,以d:\test 为例。把你要找的图(60.bmp)、大漠插件里的dm.dll 和RegDll.dll复制到这个文件夹。 第三步:打开按键精灵,创建一个新脚本。往附件(在软件左边框选项)里面添加dm.dll、Reg.dll和图60.bmp 二、复制以下代码到按键精灵 dim ys1,ys2,ys3,a,b,zbx,zby//自定义变量 ys1=9000//1和2点延时 ys1=9000//2和3点延时 ys1=9000//3和1点延时 a=15//纵向下移15单位 b=-15//纵向上移15单位 zbx=100//获取窗口句柄给定的坐标x zby=100//获取窗口句柄给定的坐标y PutAttachment "d:\test", "*.*" //意思是释放所有附件到d:\test目录。就是把有用的文件打包到test目录下 PutAttachment ".\Plugin", "RegDll.dll" //意思是释放RegDll.dll文件到按键精灵安装目录的Plugin目录下,用来完成大漠插件的注册 Call Plugin.RegDll.Reg("d:\test\dm.dll") //调用大漠插件,在按键精灵中使用 Set dm = createobject("dm.dmsoft") //用大漠插件创建一个对象dm dm_ret = dm.SetPath("d:\test") // 设置全局路径,以后你找图用的图片都默认是test目录里的图片了,否则你要用绝对路径d:\test\1.bmp来该表示图片 dm_ret = dm.LoadPic("*.bmp") // 字面意思是加载test目录下的所有图片 Hwnd = dm.GetPointWindow(zbx,zby)//用大漠软件获取给定坐标(zbx,zby)的窗口句柄,保存在Hwnd里 Call Plugin.Window.Move(Hwnd, 0, 0) // 把窗口移到屏幕的(0,0),即左上角 dm_ret = dm.BindWindow(Hwnd,"gdi","windows","windows",0) //这句用来绑定辅助操作的对象窗口 //下面是一条判断语句,如果绑定失败就会提示。那就从前面几几步中找原因吧 Delay 10 If dm_ret = 1 Then Else MessageBox "绑定失败,重启脚本或联系作者" EndScript

鼠标指针飘忽不定怎么办

鼠标指针飘忽不定怎么办 鼠标指针飘忽不定的解决方法一: 1:鼠标本身出问题了,可能里面的零件坏了,建议换个鼠标试试,如果换个解决问题,就是鼠标的问题。 2:是否usb接口松动或者usb接口出问题,接触不良,换个接口看看。 3:未安装鼠标的驱动,可以下载驱动精灵之类的软件,安装相应驱动。 其次: 1:可能是中毒了,注意最近有没打开不去安全的网站,建议下载杀软杀下毒试试。 2:鼠标没有插好,usb接口老化也可能导致问题,建议重启电脑,换个插口。 3:驱动有问题,建议到我的电脑--管理--设备管理器,找到鼠标,右键属性,找到驱动那项,回滚驱动程序。 4:还是没解决的话,可能是鼠标本身的问题,可能是编码器出问题了,如果是的话可以买个焊上去。 5:系统问题,建议重装系统。 鼠标指针飘忽不定的解决方法二: 以下几种情况可以导致鼠标不受控制晃动。 1、表面兼容性问题

表面兼容性问题而导致鼠标指针自行移动现象,应该是最为常见的一种情况,尤其是在部分主廉价鼠标上,该问题可以说是屡见不鲜。为压缩鼠标制造成本,部分鼠 标使用了表面兼容能力较引擎的鼠标引擎,在部分三维表面(例如毛巾,皮草)及特殊纹理表面(表面具备一定反光性的白色杂不规则黑灰色点表面)上使用时,鼠标会出现抖动及自行移动的问题 解决方案:使用深色,表面色彩过渡较少的鼠标垫,优先布质。 2、鼠标透镜松动 鼠标由于内部出现损坏或装配不好,造成鼠标引擎成像透镜松动,同样会出现鼠标指针自动移动的现象,这是因为鼠标透镜出现错位,引擎无法捕捉到正确的表面定 位信息所造成,该现象在一些廉价鼠标上出现的机率较高,这是由于廉价鼠标通常均停靠鼠标上盖直接压紧电路板及透镜,当压紧机构出现损坏时,即导致透镜移位松动。 解决方案:拆开鼠标,看鼠标透镜是否固定良好,如出现松动可将透镜重新放正并固定好。 3、鼠标透镜杂物 与前两项问题相比,由于鼠标透镜成像区域进入杂物,导致鼠标出现抖动/自行移动的问题更为常见。当毛发及一些细微灰尘,进行鼠标底部成像透镜区域时,由于毛发和灰尘会对鼠标引擎定位造成影响,同样会导致鼠标出现自行移动的现象。 解决方案:该现象解决较为简单,只需将鼠标翻转,然后使

键盘鼠标同步器说明书

键盘鼠标同步器说明书 一.简介 键盘鼠标同步器主要实现将键盘鼠标信号同步的传输到各个受控的计算机,为了保证数据同步性,以纯硬件的方式将键盘鼠标并行发送到受控的计算机,达到精确的同步效果。同步器支持PS2键盘鼠标输入,USB信号输出,USB输出接到各个受控计算机,受控计算机可以独立的关机,冷启,热启。同步器电源直接由计算机提供,同步器在使用时不需要安装任何额外的软件或驱动。同步器键盘支持连发功能,可以同时设置小于7个连发键。支持键盘的两种切换功能,通过切换,可以实现控制任意单台或几台计算机。同步器鼠标支持三种工作模式。 ***安装方法: 请务必按照这个顺序安装 开机状态--》必须先连接键鼠到同步器--》最后再连接同步器到电脑 二.键盘功能: 切换功能一 这种方式切换可以实现任一台可控电脑有效,或全部都有效。 切换方法:小键盘上的*按键盘+ 小键盘上的0-6 (以一控六为例) 按住小键盘上的* 键,再按一下小键盘上的1键,切换到第一台电脑,键盘鼠标只对第一台电脑有效。 按住小键盘上的* 键,再按一下小键盘上的2键,切换到第一台电脑,键盘鼠标只对第二台电脑有效。 按住小键盘上的* 键,再按一下小键盘上的3键,切换到第一台电脑,键盘鼠标只对第三台电脑有效。 按住小键盘上的* 键,再按一下小键盘上的4键,切换到第一台电脑,键盘鼠标只对第四台电脑有效。 按住小键盘上的* 键,再按一下小键盘上的5键,切换到第一台电脑,键盘鼠标只对第五台电脑有效。 按住小键盘上的* 键,再按一下小键盘上的6键,切换到第一台电脑,键盘鼠标只对第六台电脑有效。 按住小键盘上的* 键,再按一下小键盘上的0 键,键盘鼠标对所有电脑都有效。 注:切换时可以看对应的指示灯,对应路的指示灯点亮的电脑控制有效。 c.切换功能二(此功能专门用户才有!) 这种方式切换可以实现控制任意接入的多台电脑同步控制,可以配合切换功能一,灵活控制多台电脑同步。 切换方法:PageUp按键+ 功能键F1 -----F6(以一控六为例) 按住PageUp键,再按一下F1键,对应第一台电脑无效,不影响其它控制电脑状态。 按住PageUp键,再按一下F2键,对应第二台电脑无效,不影响其它控制电脑状态。 按住PageUp键,再按一下F3键,对应第三台电脑无效,不影响其它控制电脑状态。 按住PageUp键,再按一下F4键,对应第四台电脑无效,不影响其它控制电脑状态。 按住PageUp键,再按一下F5键,对应第五台电脑无效,不影响其它控制电脑状态。 按住PageUp键,再按一下F6键,对应第六台电脑无效,不影响其它控制电脑状态。

相关文档
最新文档