归档: 2018

单机游戏死亡阴影aardio内存修改器源码

aardio是专用于桌面软件快速开发的新一代混合型编程语言 – 具有动态语言轻便、灵活的特性,而且又可以同时支持静态类型开发,象静态语言那样使用。aardio可以直接支持原生DLL,即使是外部EXE进程中的函数,也可以使用一句代码声明为普通的aardio函数对象( 原生call支持 ),aardio支持非常多的标准调用约定,例如 stdcall,cdecl,thiscall,fastcall,regparm(n) 等调用约定都可以支持。aardio虽然小,但支持的接口很丰富、可以支持com静态动态双接口,象VBS一样原生支持com对象。 以下是使用aardio写的修改单机游戏死亡阴影3的游戏数据源码,仅供学习aardio使用!新建一个aardio代码文件,把下面代码复制到代码文件中,就可直接运行! 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849import win.ui;import process; //声明变量hero3,jzvar hero3,jz;hero3=process.find("Heroes3.exe")if(hero3){ //把基址赋值给jz变量 jz=hero3.readNumber(0x82B0BC) }else { win.msgbox("请您先运行游戏")}/*DSG{{*/var winform = win.form(text="死亡阴影修改器";left=300;right=440;bottom=247;max=false;parent=...)winform.add(button={cls="button";text="修改";left=33;top=202;right=105;bottom=237;z=1})/*}}*/ bqm = { "水晶:";"水银:";"石头:";"金钱:";"木材:";"宝石:";"硫磺:" }py = { sj=Oxac;sy=Oxa0;st=Oxa4;jq=0xb4;mc=Ox9c;bs=0xb0;lh=Oxa8 }bjk = { "sj";"sy";"st";"jq";"mc";"bs";"lh" }tab = { } winform.button.oncommand = function(id,event){ for(i=1;#bjk;1){ if(winform["edit_"+bjk[ i ]].text != 0&&winform["edit_"+bjk[ i ]].text !=""){ table.push(tab,bjk[ i ]) } } for(i=1;#tab;1){ //win.msgbox(winform["edit_"+tab[ i ]].text,"死亡阴影修改器") hero3.writeNumber(jz+py[tab[ i ]],winform["edit_"+tab[ i ]].text) } tab={}} var topp = 5var bott = 25for(i=1;#bqm;1){ winform.add( ["edit_"+bjk[ i ]]={num=1;bottom=bott;text="999";left=50;top=topp;z=3;right=114;edge=1;cls="edit" }) winform.add( ["static"+i]={ bottom=bott;right=52;left=16;text=bqm[ i ];top=topp;z=1;transparent=1;cls="static"}) topp+=24 bott+=24} winform.show() win.loopMessage(); 其中的基址0x82B0BC,及偏移量为什么是这个数据,就需要你使用ce自己分析了! 对aardio不熟悉可以查看在线手机 aardio使用手册

aardio的listview自绘源代码

aardio的listview自绘源代码,在aardio新建一代码文件,复制下面的代码到代码文件中,直接运行就可以看到效果! 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100import win.ui;/*DSG{{*/var winform = win.form(text="listview中添加进度条演示";right=945;bottom=474)winform.add(button={cls="button";text="(点击这里随机更新一次第二行的进度值)";left=0;top=392;right=944;bottom=472;font=LOGFONT(h=-21);z=2};流程编辑框={cls="listview";left=0;top=0;right=946;bottom=384;edge=1;font=LOGFONT(h=-19;name='FontAwesome');fullRow=1;vscroll=1;z=1})/*}}*/ import win.fontAwesome;import win.graphics;import win.imageList;var imagelist = win.imageList(5,34);winform.流程编辑框.setImageList( imagelist,1/*_LVSIL_SMALL*/ );winform.流程编辑框.insertColumn("",30,,0x2/*_LVCFMT_CENTER*/) winform.流程编辑框.insertColumn("中断",80,,0x2/*_LVCFMT_CENTER*/) winform.流程编辑框.insertColumn("备注",300,,0x0/*_LVCFMT_LEFT*/) winform.流程编辑框.insertColumn("功能",100,,0x0/*_LVCFMT_LEFT*/)winform.流程编辑框.insertColumn("参数",300,,0x0/*_LVCFMT_LEFT*/)winform.流程编辑框.insertColumn("",30,,0x2/*_LVCFMT_CENTER*/)winform.流程编辑框.insertColumn("",1,,0x2/*_LVCFMT_CENTER*/)//自适应列宽度 winform.流程编辑框.adjust = function(cx,cy){ winform.流程编辑框.fillParent(5/*列序号*/);} winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';30;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00d';'\uF05e';100;"直线运动";'{["速度"]=300;["模式"]="连续运动";["是否等待"]="是";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';200;"调用子程序";'{["调用子程序"]="连续读传感器";["是否等待"]="是";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';50;"调用子程序";'{["调用子程序"]="回字形对准算法";["是否等待"]="是";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';150;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';120;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00d';'\uF05e';10;"直线运动";'{["速度"]=300;["模式"]="连续运动";["是否等待"]="是";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';70;"调用子程序";'{["调用子程序"]="连续读传感器";["是否等待"]="是";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';260;"调用子程序";'{["调用子程序"]="回字形对准算法";["是否等待"]="是";}';'\uF01a'} } )winform.流程编辑框.addItem( { text={'\uF00c';'\uF1db';130;"直线运动";'{["速度"]=1000;["模式"]="相对运动";["距离"]="2380";["是否等待"]="否";}';'\uF01a'} } ) //自绘winform.流程编辑框.onnotify = function(id,code,ptr){ if( code == 0xFFFFFFF4/*_NM_CUSTOMDRAW*/ ){ var lvcd = winform.流程编辑框.getNotifyCustomDraw(code,ptr); if( lvcd.nmcd.dwDrawStage == 0x10001/*_CDDS_ITEMPREPAINT*/) return 0x20/*_CDRF_NOTIFYSUBITEMDRAW*/ elseif( lvcd.nmcd.dwDrawStage == 1/*_CDDS_PREPAINT*/ ){ return 0x20/*_CDRF_NOTIFYITEMDRAW*/; } elseif( lvcd.nmcd.dwDrawStage == ( 0x10001/*_CDDS_ITEMPREPAINT*/ | 0x20000/*_CDDS_SUBITEM*/) ){ //注意这里 iSubItem 的索引自0开始( 其他函数通常自1开始 ) var cvs = win.graphics.canvas(); // 创建一个画布 cvs.fromHDC(lvcd.nmcd.hdc); // 传入 hDC var nItem = lvcd.nmcd.dwItemSpec+1; var nSubItem = lvcd.iSubItem; var rc = owner.getItemRect(nItem,nSubItem); if(nSubItem == 3){ var RetRc = ::RECT(rc.left+1,rc.top+6,rc.right-tonumber(owner.getItemText(nItem,3)),rc.bottom-6); cvs.brush.color = 0x00ff00; cvs.fillRect(RetRc) } cvs.pen.color = 0xebebeb; // 定义画笔的颜色 cvs.drawEdge(rc); lvcd.update() cvs.destroy(); return 0/*_CDRF_DODEFAULT*/ } }}//演示更新进度winform.button.oncommand = function(id,event){ winform.流程编辑框.setItemText(tostring(math.random(10,280)),2,3);} winform.show() win.loopMessage();

ApacheBench(ab)服务器负载压力测试软件

ApacheBench(ab)使用简介服务器负载太大而影响程序效率也是很常见的,Apache服务器自带有一个叫AB(ApacheBench)的工具,在bin目录下。使用这个轻巧的工具我们可以对服务器进行负载测试, 基本用法: ab -n 全部请求数 -c 并发数 测试url例;ab -n 100 -c 50 http://192.168.22.150:8088/gfmis/login http://19.104.10.79:8080/gfmis/login例:ab -n 1000 -c 50 http://www.abc.com/a.php 得到结果类似于(后面颜色字为中文翻译): Server Software: Apache/2.0.55Server Hostname: localhostServer Port: 80 Document Path: /1.phpDocument Length: 82522 bytes #请求文档大小 Concurrency Level: 50 #并发数Time taken for tests: 92.76140 seconds #全部请求完成耗时Complete requests: 10000 #全部请求数Failed requests: 1974 #失败的请求(Connect: 0, Length: 1974, Exceptions: 0)Write errors: 0Total transferred: 827019400 bytes #总传输大小HTML transferred: 825219400 bytesRequests per second: 108.61 [#/sec] (mean) #每秒请求数(平均)Time per request: 460.381 [ms] (mean) #每次并发请求时间(所有并发)Time per request: 9.208 [ms] (mean, across all concurrent requests) #每一请求时间(并发平均)Transfer rate: 8771.39 [Kbytes/sec] received #传输速率 Connection Times (ms) #连接时间min mean [+/-sd] median maxConnect(#连接): 0 0 2.1 0 46Processing(#处理): 31 458 94.7 438 1078Waiting(#等待): 15 437 87.5 422 938Total: 31 458 94.7 438 1078 其它参数:

TeamViewer_resetclientID重置PC端id源码

如何重置TeamViewer的ID?我们先来了解一下什么是WMI,WMI有一组API。我们不管使用VBScript、PowerShell脚本还是利用C#的来访问WMI的类库,都是因为WMI向外暴露的一组API。这些API是在系统安装WMI模块的时候安装的,通过他们我们能够能拿到我们想要的类。WMI有一个存储库。尽管WMI的多数实例数据都不存储在WMI中,但是WMI确实有一个存储库,用来存放提供程序提供的类信息,或者称为类的蓝图或者Schema。WMI有一个Service。WMI总是能够响应用户的访问,那是因为它有一个一直运行的Windows服务,名字叫Winmgmt。停止这个服务,所有对WMI的操作都将没有反应。WMI是可扩展的。人人都知道WMI能干很多事情,读取本机硬盘信息、读取远程计算机的用户信息、读取域用户信息等等。基本上,你能想到的获取或者更改资源的操作,它都能干。可谓吃得少,干得多。它为什么这么能干呢?这基于WMI的可扩展性。WMI对资源的操作,不是它自己实现了什么方法,而完全取决于向它注册的提供程序。 如何重置TeamViewer的ID?重置TeamViewer的ID的原理是什么,请看下面的源码Autoit3源代码 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460; ; ----------------------------------------------------------------------------; ; ----------------------------------------------------------------------------#RequireAdmin; ----------------------------------------------------------------------------; ; ----------------------------------------------------------------------------Func _ProcessGetName($i_PID) If Not ProcessExists($i_PID) Then SetError(1) Return '' EndIf Local $a_Processes = ProcessList() If Not @error Then For $i = 1 To $a_Processes[0][0] If $a_Processes[$i][1] = $i_PID Then Return $a_Processes[$i][0] Next EndIf SetError(1) Return ''EndFuncFunc _ProcessGetPriority($vProcess) Local $i_PID = ProcessExists($vProcess) If Not $i_PID Then SetError(1) Return -1 EndIf Local $hDLL = DllOpen('kernel32.dll') Local $aProcessHandle = DllCall($hDLL, 'int', 'OpenProcess', 'int', 0x0400, 'int', False, 'int', $i_PID) Local $aPriority = DllCall($hDLL, 'int', 'GetPriorityClass', 'int', $aProcessHandle[0]) DllCall($hDLL, 'int', 'CloseHandle', 'int', $aProcessHandle[0]) DllClose($hDLL) Switch $aPriority[0] Case 0x00000040 Return 0 Case 0x00004000 Return 1 Case 0x00000020 Return 2 Case 0x00008000 Return 3 Case 0x00000080 Return 4 Case 0x00000100 Return 5 Case Else SetError(1) Return -1 EndSwitchEndFuncFunc _RunDOS($sCommand) Return RunWait(@ComSpec & " /C " & $sCommand, "", @SW_HIDE)EndFunc; ----------------------------------------------------------------------------; ; ----------------------------------------------------------------------------; ----------------------------------------------------------------------------; ; ----------------------------------------------------------------------------Func _FileCountLines($sFilePath) Local $N = FileGetSize($sFilePath) - 1 If @error Or $N = -1 Then Return 0 Return StringLen(StringAddCR(FileRead($sFilePath, $N))) - $N + 1EndFuncFunc _FileCreate($sFilePath) Local $hOpenFile Local $hWriteFile $hOpenFile = FileOpen($sFilePath, 2) If $hOpenFile = -1 Then SetError(1) Return 0 EndIf $hWriteFile = FileWrite($hOpenFile, "") If $hWriteFile = -1 Then SetError(2) Return 0 EndIf FileClose($hOpenFile) Return 1EndFuncFunc _FileListToArray($sPath, $sFilter = "*", $iFlag = 0) Local $hSearch, $sFile, $asFileList[1] If Not FileExists($sPath) Then Return SetError(1, 1, "") If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "") If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "") $hSearch = FileFindFirstFile($sPath & "\" & $sFilter) If $hSearch = -1 Then Return SetError(4, 4, "") While 1 $sFile = FileFindNextFile($hSearch) If @error Then SetError(0) ExitLoop EndIf If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop ReDim $asFileList[UBound($asFileList) + 1] $asFileList[0] = $asFileList[0] + 1 $asFileList[UBound($asFileList) - 1] = $sFile WEnd FileClose($hSearch) Return $asFileListEndFuncFunc _FilePrint($s_File, $i_Show = @SW_HIDE) Local $a_Ret = DllCall("shell32.dll", "long", "ShellExecute", _ "hwnd", 0, _ "string", "print", _ "string", $s_File, _ "string", "", _ "string", "", _ "int", $i_Show) If $a_Ret[0] > 32 And Not @error Then Return 1 Else SetError($a_Ret[0]) Return 0 EndIfEndFuncFunc _FileReadToArray($sFilePath, ByRef $aArray) Local $hFile $hFile = FileOpen($sFilePath, 0) If $hFile = -1 Then SetError(1) Return 0 EndIf $aArray = StringSplit(StringStripCR(FileRead($hFile, FileGetSize($sFilePath))), @LF) FileClose($hFile) Return 1EndFuncFunc _FileWriteFromArray($sFilePath, $a_Array, $i_Base = 0, $i_UBound = 0) Local $hFile If Not IsArray($a_Array) Then SetError(2) Return 0 EndIf Local $last = UBound($a_Array) - 1 If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last If $i_Base < 0 Or $i_Base > $last Then $i_Base = 0 $hFile = FileOpen($sFilePath, 2) If $hFile = -1 Then SetError(1) Return 0 EndIf FileWrite($hFile, $a_Array[$i_Base]) For $x = $i_Base + 1 To $i_UBound FileWrite($hFile, @CRLF & $a_Array[$x]) Next FileClose($hFile) Return 1EndFuncFunc _FileWriteLog($sLogPath, $sLogMsg) Local $sDateNow Local $sTimeNow Local $sMsg Local $hOpenFile Local $hWriteFile $sDateNow = @YEAR & "-" & @MON & "-" & @MDAY $sTimeNow = @HOUR & ":" & @MIN & ":" & @SEC $sMsg = $sDateNow & " " & $sTimeNow & " : " & $sLogMsg $hOpenFile = FileOpen($sLogPath, 1) If $hOpenFile = -1 Then SetError(1) Return 0 EndIf $hWriteFile = FileWriteLine($hOpenFile, $sMsg) If $hWriteFile = -1 Then SetError(2) Return 0 EndIf FileClose($hOpenFile) Return 1EndFuncFunc _FileWriteToLine($sFile, $iLine, $sText, $fOverWrite = 0) If $iLine <= 0 Then SetError(4) Return 0 EndIf If Not IsString($sText) Then SetError(6) Return 0 EndIf If $fOverWrite <> 0 And $fOverWrite <> 1 Then SetError(5) Return 0 EndIf If Not FileExists($sFile) Then SetError(2) Return 0 EndIf Local $filtxt = FileRead($sFile, FileGetSize($sFile)) $filtxt = StringSplit($filtxt, @CRLF, 1) If UBound($filtxt, 1) < $iLine Then SetError(1) Return 0 EndIf Local $fil = FileOpen($sFile, 2) If $fil = -1 Then SetError(3) Return 0 EndIf For $i = 1 To UBound($filtxt) - 1 If $i = $iLine Then If $fOverWrite = 1 Then If $sText <> '' Then FileWrite($fil, $sText & @CRLF) Else FileWrite($fil, $sText) EndIf EndIf If $fOverWrite = 0 Then FileWrite($fil, $sText & @CRLF) FileWrite($fil, $filtxt[$i] & @CRLF) EndIf ElseIf $i < UBound($filtxt, 1) - 1 Then FileWrite($fil, $filtxt[$i] & @CRLF) ElseIf $i = UBound($filtxt, 1) - 1 Then FileWrite($fil, $filtxt[$i]) EndIf Next FileClose($fil) Return 1EndFuncFunc _PathFull($sRelativePath, $sBasePath = @WorkingDir) If Not $sRelativePath Or $sRelativePath = "." Then Return $sBasePath Local $sFullPath = StringReplace($sRelativePath, "/", "\") Local $sPath = StringLeft($sFullPath, 2) StringReplace($sFullPath, "\", "") If @extended = StringLen($sFullPath) Then Return StringLeft($sBasePath, 2) & "\" If StringLeft($sFullPath, 1) = "\" Then If $sPath = "\\" Then $sFullPath = StringTrimLeft($sFullPath, 2) $sPath &= StringLeft($sFullPath, StringInStr($sFullPath, "\") - 1) Else $sPath = StringLeft($sBasePath, 2) EndIf ElseIf Not StringInStr($sPath, ":") Then $sFullPath = $sBasePath & "\" & $sFullPath $sPath = StringLeft($sBasePath, 2) EndIf Local $aTemp = StringSplit($sFullPath, "\") Local $aPathParts[$aTemp[0]], $j = 0 For $i = 2 To $aTemp[0] If $aTemp[$i] = ".." Then If $j Then $j -= 1 ElseIf Not ($aTemp[$i] = "" And $i <> $aTemp[0]) And $aTemp[$i] <> "." Then $aPathParts[$j] = $aTemp[$i] $j += 1 EndIf Next $sFullPath = $sPath For $i = 0 To $j - 1 $sFullPath &= "\" & $aPathParts[$i] Next While StringInStr($sFullPath, ".\") $sFullPath = StringReplace($sFullPath, ".\", "\") WEnd Return $sFullPathEndFuncFunc _PathMake($szDrive, $szDir, $szFName, $szExt) Local $szFullPath If StringLen($szDrive) Then If Not (StringLeft($szDrive, 2) = "\\") Then $szDrive = StringLeft($szDrive, 1) & ":" EndIf If StringLen($szDir) Then If Not (StringRight($szDir, 1) = "\") And Not (StringRight($szDir, 1) = "/") Then $szDir = $szDir & "\" EndIf If StringLen($szExt) Then If Not (StringLeft($szExt, 1) = ".") Then $szExt = "." & $szExt EndIf $szFullPath = $szDrive & $szDir & $szFName & $szExt Return $szFullPathEndFuncFunc _PathSplit($szPath, ByRef $szDrive, ByRef $szDir, ByRef $szFName, ByRef $szExt) Local $drive = "" Local $dir = "" Local $fname = "" Local $ext = "" Local $pos Local $array[5] $array[0] = $szPath If StringMid($szPath, 2, 1) = ":" Then $drive = StringLeft($szPath, 2) $szPath = StringTrimLeft($szPath, 2) ElseIf StringLeft($szPath, 2) = "\\" Then $szPath = StringTrimLeft($szPath, 2) $pos = StringInStr($szPath, "\") If $pos = 0 Then $pos = StringInStr($szPath, "/") If $pos = 0 Then $drive = "\\" & $szPath $szPath = "" Else $drive = "\\" & StringLeft($szPath, $pos - 1) $szPath = StringTrimLeft($szPath, $pos - 1) EndIf EndIf Local $nPosForward = StringInStr($szPath, "/", 0, -1) Local $nPosBackward = StringInStr($szPath, "\", 0, -1) If $nPosForward >= $nPosBackward Then $pos = $nPosForward Else $pos = $nPosBackward EndIf $dir = StringLeft($szPath, $pos) $fname = StringRight($szPath, StringLen($szPath) - $pos) If StringLen($dir) = 0 Then $fname = $szPath $pos = StringInStr($fname, ".", 0, -1) If $pos Then $ext = StringRight($fname, StringLen($fname) - ($pos - 1)) $fname = StringLeft($fname, $pos - 1) EndIf $szDrive = $drive $szDir = $dir $szFName = $fname $szExt = $ext $array[1] = $drive $array[2] = $dir $array[3] = $fname $array[4] = $ext Return $arrayEndFuncFunc _ReplaceStringInFile($szFileName, $szSearchString, $szReplaceString, $fCaseness = 0, $fOccurance = 1) Local $iRetVal = 0 Local $szTempFile, $hWriteHandle, $aFileLines, $nCount, $sEndsWith, $hFile If StringInstr(FileGetAttrib($szFileName),"R") then SetError(6) Return -1 EndIf $hFile = FileOpen($szFileName, 0) If $hFile = -1 Then SetError(1) Return -1 EndIf Local $s_TotFile = FileRead($hFile, FileGetSize($szFileName)) If StringRight($s_TotFile, 2) = @CRLF Then $sEndsWith = @CRLF ElseIf StringRight($s_TotFile, 1) = @CR Then $sEndsWith = @CR ElseIf StringRight($s_TotFile, 1) = @LF Then $sEndsWith = @LF Else $sEndsWith = "" EndIf $aFileLines = StringSplit(StringStripCR($s_TotFile), @LF) FileClose($hFile) $szTempFile = _TempFile() $hWriteHandle = FileOpen($szTempFile, 2) If $hWriteHandle = -1 Then SetError(2) Return -1 EndIf For $nCount = 1 To $aFileLines[0] If StringInStr($aFileLines[$nCount], $szSearchString, $fCaseness) Then $aFileLines[$nCount] = StringReplace($aFileLines[$nCount], $szSearchString, $szReplaceString, 1 - $fOccurance, $fCaseness) $iRetVal = $iRetVal + 1 If $fOccurance = 0 Then $iRetVal = 1 ExitLoop EndIf EndIf Next For $nCount = 1 To $aFileLines[0] - 1 If FileWriteLine($hWriteHandle, $aFileLines[$nCount]) = 0 Then SetError(3) FileClose($hWriteHandle) Return -1 EndIf Next If $aFileLines[$nCount] <> "" Then FileWrite($hWriteHandle, $aFileLines[$nCount] & $sEndsWith) FileClose($hWriteHandle) If FileDelete($szFileName) = 0 Then SetError(4) Return -1 EndIf If FileMove($szTempFile, $szFileName) = 0 Then SetError(5) Return -1 EndIf Return $iRetValEndFuncFunc _TempFile($s_DirectoryName = @TempDir, $s_FilePrefix = "~", $s_FileExtension = ".tmp", $i_RandomLength = 7) Local $s_TempName If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @TempDir If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @ScriptDir If StringRight($s_DirectoryName, 1) <> "\" Then $s_DirectoryName = $s_DirectoryName & "\" Do $s_TempName = "" While StringLen($s_TempName) < $i_RandomLength $s_TempName = $s_TempName & Chr(Random(97, 122, 1)) WEnd $s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension Until Not FileExists($s_TempName) Return ($s_TempName)EndFunc; ----------------------------------------------------------------------------; ; ---------------------------------------------------------------------------- If WinExists(@ScriptName) Then Exit AutoItWinSetTitle(@ScriptName) AutoItSetOption("TrayIconHide", 1) AutoItSetOption("MouseCoordMode", 0) If ProcessExists("TeamViewer_Service.exe") Then RunWait(@ComSpec & " /C net stop TeamViewer","", @SW_HIDE) EndIf If ProcessExists("TeamViewer.exe") Then ProcessClose("TeamViewer.exe") EndIf RegDelete("HKEY_LOCAL_MACHINE\SOFTWARE\TeamViewer", "ClientID") Local $iRc = _RunDos("wmic class Win33_ComputerSystemProduct delete") $VBSFile = @ScriptDir&'\source.vbs' If Not FileExists($VBSFile) Then _FileCreate($VBSFile) FileSetAttrib(@ScriptDir&'\source.vbs', "+H") FileWriteLine ('source.vbs', 'intHighNumber = 99999') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'intLowNumber = 10000') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'intNumbers = 1') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', ' Randomize') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', ' intNumber = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber)') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'strnum = "01234567-8910-ABCD-1111-093F03C"') FileWriteLine ('source.vbs', 'strnum = strnum & Cstr(intNumber)') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'Set oLocation = CreateObject("WbemScripting.SWbemLocator")') FileWriteLine ('source.vbs', 'Set oServices = oLocation.ConnectServer(, "root\cimv2")') FileWriteLine ('source.vbs', 'Set FakeClass = oServices.Get') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'FakeClass.Path_.Class = "Win33_ComputerSystemProduct"') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "Caption", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "Description", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "IdentifyingNumber", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "Name", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "SKUNumber", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "UUID", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "Vendor", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_.add "Version", 8') FileWriteLine ('source.vbs', 'FakeClass.Properties_("Name").Qualifiers_.add "key", false') FileWriteLine ('source.vbs', 'FakeClass.Put_') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'Set FakeClass = GetObject("Winmgmts:root\cimv2:Win33_ComputerSystemProduct").SpawnInstance_') FileWriteLine ('source.vbs', '') FileWriteLine ('source.vbs', 'FakeClass.Caption = "http://www.teamviewer.com"') FileWriteLine ('source.vbs', 'FakeClass.Description = "class for teamviewer"') FileWriteLine ('source.vbs', 'FakeClass.IdentifyingNumber = "www.teamviewer.com"') FileWriteLine ('source.vbs', 'FakeClass.Name = "Teamviewer"') FileWriteLine ('source.vbs', 'FakeClass.SKUNumber = ""') FileWriteLine ('source.vbs', 'FakeClass.UUID = strnum') FileWriteLine ('source.vbs', 'FakeClass.Vendor = "Teamviewer"') FileWriteLine ('source.vbs', 'FakeClass.Version = "6.x"') FileWriteLine ('source.vbs', 'FakeClass.Put_') ShellExecute ("source.vbs", "", "", "open") Sleep(500) FileDelete(@ScriptDir&'\source.vbs') RunWait(@ComSpec & " /C net start TeamViewer","", @SW_HIDE) Run(@ScriptDir&'\TeamViewer.exe'); ----------------------------------------------------------------------------; ; ---------------------------------------------------------------------------- 其中关键的source.vbs代码1234567891011121314151617181920212223242526272829303132333435363738394041intHighNumber = 99999 intLowNumber = 10000 intNumbers = 1 Randomize intNumber = Int((intHighNumber - intLowNumber + 1) * Rnd + intLowNumber) strnum = "01234567-8910-ABCD-1111-093F03C"strnum = strnum & Cstr(intNumber) Set oLocation = CreateObject("WbemScripting.SWbemLocator")Set oServices = oLocation.ConnectServer(, "root\cimv2")Set FakeClass = oServices.Get FakeClass.Path_.Class = "Win33_ComputerSystemProduct" FakeClass.Properties_.add "Caption", 8FakeClass.Properties_.add "Description", 8FakeClass.Properties_.add "IdentifyingNumber", 8FakeClass.Properties_.add "Name", 8FakeClass.Properties_.add "SKUNumber", 8FakeClass.Properties_.add "UUID", 8FakeClass.Properties_.add "Vendor", 8FakeClass.Properties_.add "Version", 8FakeClass.Properties_("Name").Qualifiers_.add "key", falseFakeClass.Put_ Set FakeClass = GetObject("Winmgmts:root\cimv2:Win33_ComputerSystemProduct").SpawnInstance_ FakeClass.Caption = "http://www.teamviewer.com"FakeClass.Description = "class for teamviewer"FakeClass.IdentifyingNumber = "www.teamviewer.com"FakeClass.Name = "Teamviewer"FakeClass.SKUNumber = ""FakeClass.UUID = strnumFakeClass.Vendor = "Teamviewer"FakeClass.Version = "10.x"FakeClass.Put_ 仅此远远不够,还得需要修改teamviewer中的Win32_ComputerSystemProduct为Win33_ComputerSystemProduct,同时去掉teamviewer的自校验!

安卓手机控制windows电脑的三种方法

windows系统的远程控制,软件有很多,但支持使用安卓手机控制windows电脑的软件,却不多,本文介绍三个常用的app来控制电脑! windows自带的远程桌面win7系统如何打开远程桌面呢?右键打开桌面的[计算机]选择[属性],进入[系统]界面,点击左边操作菜单中的[远程设置]选项卡,将直接进入[系统属性]中的[远程]菜单。钩选远程桌面,如下图 ,如果远程桌面在windows电脑中已经正常开放,那么你在命令行中使用telnet ip 3389,应该显示的是这样的界面 其中标题中的IP显示的是你输入的IP。 如果远程桌面未正常开放,是会一直显示正在连接到你输入的ip,最后会显示连接失败!如果远程桌面不能正常开启,请搜索相关文章!本文不做深究!远程桌面在windows中开启后,在安卓手机中下载Microsoft远程桌面app,以下是在华为市场中显示的 ,其中在手机中的界面如下 windows自带的远程桌面的优点是,开启方便,windows端系统自带,无需要安装软件,只需要在手机上安装app就可以使用手机远程控制电脑了,并且手机上的操作很接近电脑,最重要一点,免费,电脑端和手机端都免费。缺点是外网连接内网的机器,需要在路由器上映射端口,另外同一帐号登录系统,同一帐号的另一会话会被注销(如果开启允许同一帐号多个会话,那么软件就会重复运行!就破坏了当前进程!),也就是windows中的同一用户,登录系统使用的会话不同,windows本身是console,而远程登录的是rdp,远程登录上来后从console会话变为rdp,这会造成有些软件不能正常运行,比如点播软件就会停止播放音乐!2. teamviewerteamviewer是一款远程协助软件,个人使用免费,商业使用收费,需要在电脑端安装teamviewer,teamviewer如何使用手机控制电脑,可以看这篇文章《如何让手机控制电脑之TeamViewer 》最近teamviewer经常会出现判断为商业应用,然后5分钟中止连接,实际只有1分钟多点就中止连接了,如使用手机连接显示这样,在电脑中被判断为商业用途还可以使用reset id程序重置teamviewer id(电脑中如何重置teamviewer ID,可以看《teamviewer 13破解方法-teamviewer 13 重置ID 》和《破解 teamviewer 12的5分钟商业用途判断-teamviewer 12 ID重置》 这两篇文章及下载相关程序,破解方法是泰国网站提供的,网站打开速度较慢),teamviewer安卓手机被判定为商业用途怎么办呢?我们可以在手机中安装 双开助手 app,双开助手很多,但使用的是这一个http://www.multiopen.cn/ 这个双开助手可以模拟手机的IMEI,在双开助手中新开teamviewer,teamviewer ID会重新生成,成功解决了teamviewer手机判定为商业用途的问题! teamviewer的优点就是可以访问任何连网的机器,而不需要映射端口,内网对内网,内网对外网,外网对内网都可以访问!teamviewer是通过了teamviewer的服务器中转认证的,所以无需要映射端口。teamviewer远程连接后不会改变当前的会话,对当前正在运行的程序没有任何影响!缺点是teamviewer个人使用免费,商业用途收费,teamviewer被国内公司代理后,如果同一个teamviewer经常连接多个teamviewer ID,会被判定为商业用途,teamviewer收费还很贵!3. vncvnc在windows系统中安装vnc服务端,如http://www.tightvnc.com/ 的tvnc,是开源免费的,在手机端安装vnc viewer vnc viewer手机界面如下vnc的优点是免费开源,自己会c++,完全可以自定义vnc的服务端和客户端,但apk是realvnc的,不开源,tvnc网站也提供有app,vnc方式远程登录也不会更新当前会话,对正在运行的程序没有影响,vnc是跨平台的,vnc服务端可以安装在linux,windows,mac机器, 也就是手机可以控制各个平台的系统。缺点vnc内网也需要映射端口,并且vnc的密码只能8位,默认还是空密码(造成好多肉机存在),密码也是保存在注册表中的,还原密码程序也存在,不够安全!4. 向日葵向日葵远程控制软件,也支持移动设备远程访问电脑,向日葵远程控制软件只远程桌面不收费,其他如传文件是收费的,向日葵远程控制软件就是花生壳公司出品的!免费远程限速300k,基本使用够用了! 电脑端的远程控制软件radmin,没有手机版app,在现在移动设备飞速发展的今天,实属遗憾!

如何自定义编译CheatEngine6.7

如何自定义编译Cheat Engine6.7(打造自己的CE6.7修改器,避免部分游戏的检测)Cheat Engine(作弊引擎ce) 是一款内存修改编辑工具 ,它允许你修改你的游戏或软件内存数据,以得到一些其他功能。它包括16进制编辑,反汇编程序,内存查找工具。与同类修改工具相比,它具有强大的反汇编功能,且自身附带了外挂制作工具,可以用它直接生成外挂。Cheat Engine的开发语言是pascal,采用Lazarus IDE开发!Cheat Engine是一个开源软件!Cheat Engine开源地址: https://github.com/cheat-engine/cheat-engineCheat Engine 官方网站:http://cheatengine.org/ 官方有编译好的版本,如果没有专门检测CE的程序,那么使用官方的CE就足够了,直接下载就可以运行!但现在很多游戏或程序对CE有检测,直接下载官方的CE会无法运行。这时我们可以自己编译Cheat Engine,当前官方最新版本为6.7,所以我们这儿介绍Cheat Engine6.7的修改及编译,避免部份游戏检测CE! 前期工作: 需要使用到的软件及ce源码等下载地址: lazarus-1.6.4-fpc-3.0.2-win64.exe下载地址(Cheat Engine6.7是使用的lazarus1.6.4编译,所以必须下载1.6.4,此文件是64位的lazarus1.6.4的主安装文件)官方推荐第三方下载链接:https://sourceforge.net/projects/lazarus/files/Lazarus%20Windows%2064%20bits/百脑问提供的百度云下载链接:https://pan.baidu.com/s/1VIRTU57RikwSMk1X15RP2w 密码:mbwj lazarus-1.6.4-fpc-3.0.2-cross-i386-win32-win64.exe(此文件是lazarus1.6.4编译为32位程序的补丁包)官方推荐第三方下载链接:https://sourceforge.net/projects/lazarus/files/Lazarus%20Windows%2064%20bits/百脑问提供的百度云下载链接:https://pan.baidu.com/s/1iGnpHnOor2ygiz4TaY3OJw 密码:bt8s cheat-engine-6.7.zip(Cheat Engine6.7的源码包,你可以直接到https://github.com/cheat-engine/cheat-engine 下载)百脑问提供的百度云下载链接:https://pan.baidu.com/s/1bXTJkn6lHCFmOKc2AoJjEw 密码:68×2 安装好 lazarus-1.6.4-fpc-3.0.2-win64.exe和lazarus-1.6.4-fpc-3.0.2-cross-i386-win32-win64.exe 解开cheat-engine-6.7.zip源码包! 进入CE源码包的Cheat Engine目录,找到cheatengine.lpi,双击打开! 自定义cheatengine6.7如果你熟悉lazarus的使用就可以轻松的修改Cheat Engine的源文件了,以下是假如你不了解lazarus的使用,仅仅是为了不让程序检测到ce而自定义ce! 前面的源码中双击cheatengine.lpi打开后的界面,象这样第一步,我们修改ce的标题,按Shift+F12(也可以点击上面所示图中的第二行的第二个图标)打开窗口管理器,找到MainForm,双击打开,然后在Object Inspector窗口(如果没有显示Object Inspector窗口,可以在view菜单中点击Object Inspector打开,或者按F11打开)中单击MainForm:TMainForm 在下面的Properties选项卡中,找到Caption,修改后面的Cheat Engine 6.8为自己的标题,比如这儿修改为C_BnWin.Com_E6.7,然后Ctrl+O找到MainUnit2.pas打开,修改第16行的Cheat Engine 6.8 Beta 1为自己的标题,如这儿修改为C_BnWin.Com_E6.7

如何快速让cef、wke、blink等支持mp4和mp3

如何快速让cef、wke、blink等支持mp4和mp3(支持html5的video和audio标签)?在cef中,默认是不支持mp3和mp4的,使用cef控件写的软件打开带有video或audio标签的视频或音频是会播放失败的!一种方法就是自己重新编译cef的库,加入支持mp3和mp4的支持。如何编译看这篇文章 如何让dcef3支持mp3和h.264 mp4解码播放(有源码及dll)! 这是从文件的本身出发,修改后支持mp3和mp4,从另一方面来说,采用cef的精简版控件,比如wke,blink或低版本的ie等,修改文件重新编译支持mp3和mp4的方法就不可行了!能不能不修改文件直接支持mp3和mp4的video和audio标签呢?这儿介绍一种修改html本身而不动浏览器控件文件的解决方法,当然你得有修改html文件的权限。 使用html5media让浏览器兼容<Video><Audio>标签。html5media是一个开源项目html5media 官网:https://html5media.info/html5media 项目:https://github.com/etianen/html5mediahtml5media Wiki:https://github.com/etianen/html5media/wiki html5media 官网CDN:http://api.html5media.info/1.2.2/html5media.min.jshtml5media 国内CDN:http://www.bootcdn.cn/html5media/ 如何使用html5media?它只需要一行代码就可以使HTML5的video和audio标签在所有主流浏览器中都能正常工作。只需要在html的head文档中添加如下代码 1< script src = “ http://api.html5media.info/1.1.8/html5media.min.js ” > </ script > 然后按照html5的video标签添加的视频 1< video src="video.mp4" preload="" controls="controls" width="320" height="200"> 按照html5的audio标签添加的音频

delphi如何实现php中的parse_url网址拆分函数?

php中拆分URL的一个很重要的函数就是parse_url();但在delphi如何不正则分析就可以实现如此方便的功能呢?实际上delphi的indy有一个单元实现此功能-IdURI单元,实现如下分拆 1234http://login:password@somehost.somedomain.com:8080/some_path/something.html?param1=val&param2=val#nose\__/ \___/ \______/ \_____________________/ \__/\_______________________/ \___________________/ \__/ | | | | | | | |Scheme Username Password Host Port Path Query Fragment 123456789101112131415161718uses ..., IdURI; var URI: TIdURI; URI := TIdURI.Create('http://login:password@somehost.somedomain.com:8080/some_path/something_else.html?param1=val&param2=val');try Protocol = URI.Protocol Username = URI.Username Password = URI.Password Host = URI.Host Port = URI.Port Path = URI.Path Query = URI.Paramsfinally URI.Free;end; 以下是使用InternetCrackUrl方法实现(依赖windows的WinInet库) 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758{$APPTYPE CONSOLE} uses Windows, SysUtils, WinInet; procedure ParseURL(const lpszUrl: string);var lpszScheme : array[0..INTERNET_MAX_SCHEME_LENGTH - 1] of Char; lpszHostName : array[0..INTERNET_MAX_HOST_NAME_LENGTH - 1] of Char; lpszUserName : array[0..INTERNET_MAX_USER_NAME_LENGTH - 1] of Char; lpszPassword : array[0..INTERNET_MAX_PASSWORD_LENGTH - 1] of Char; lpszUrlPath : array[0..INTERNET_MAX_PATH_LENGTH - 1] of Char; lpszExtraInfo : array[0..1024 - 1] of Char; lpUrlComponents : TURLComponents;begin ZeroMemory(@lpszScheme, SizeOf(lpszScheme)); ZeroMemory(@lpszHostName, SizeOf(lpszHostName)); ZeroMemory(@lpszUserName, SizeOf(lpszUserName)); ZeroMemory(@lpszPassword, SizeOf(lpszPassword)); ZeroMemory(@lpszUrlPath, SizeOf(lpszUrlPath)); ZeroMemory(@lpszExtraInfo, SizeOf(lpszExtraInfo)); ZeroMemory(@lpUrlComponents, SizeOf(TURLComponents)); lpUrlComponents.dwStructSize := SizeOf(TURLComponents); lpUrlComponents.lpszScheme := lpszScheme; lpUrlComponents.dwSchemeLength := SizeOf(lpszScheme); lpUrlComponents.lpszHostName := lpszHostName; lpUrlComponents.dwHostNameLength := SizeOf(lpszHostName); lpUrlComponents.lpszUserName := lpszUserName; lpUrlComponents.dwUserNameLength := SizeOf(lpszUserName); lpUrlComponents.lpszPassword := lpszPassword; lpUrlComponents.dwPasswordLength := SizeOf(lpszPassword); lpUrlComponents.lpszUrlPath := lpszUrlPath; lpUrlComponents.dwUrlPathLength := SizeOf(lpszUrlPath); lpUrlComponents.lpszExtraInfo := lpszExtraInfo; lpUrlComponents.dwExtraInfoLength := SizeOf(lpszExtraInfo); InternetCrackUrl(PChar(lpszUrl), Length(lpszUrl), ICU_DECODE or ICU_ESCAPE, lpUrlComponents); Writeln(Format('Protocol : %s',[lpszScheme])); Writeln(Format('Host : %s',[lpszHostName])); Writeln(Format('User : %s',[lpszUserName])); Writeln(Format('Password : %s',[lpszPassword])); Writeln(Format('Path : %s',[lpszUrlPath])); Writeln(Format('ExtraInfo: %s',[lpszExtraInfo]));end; begin try ParseURL('http://login:password@somehost.somedomain.com/some_path/something_else.html?param1=val&param2=val'); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; readln;end. 以上运行输出效果Protocol : httpHost : somehost.somedomain.comUser : loginPassword : passwordPath : /some_path/something_else.htmlExtraInfo: ?param1=val&param2=val

自定义8圈桌面侧边栏_领航桌面侧边栏原理

本软件适用于不想使用营销软件,不想关闭8圈桌面侧边栏,只想把8圈桌面侧边栏遮挡(就象领航桌面侧边栏一样把8圈的桌面侧边栏遮挡),虽然不想用营销软件但又想自定义桌面侧边栏! 那么你可以使用本自定义8圈桌面侧边栏!本软件不修改8圈任何文件,不影响8圈系统的正常功能!完全独立于8圈。在网吧环境中,有时我们想不使用营销活动,不计积分,不发红包,不搞游戏活动等等,只是想使用一下呼叫网管,点歌,显示一下网吧公告等基本的功能!最重要的一点,不想使用营销软件,因为使用这些基本功能,营销软件会有广告,还有一点,在8圈计费系统中,不希望看到8圈桌面那毫无美感而不能更改的侧边栏!本软件就是适用于以上环境!功能如下 遮挡8圈桌面侧边栏删除本软件目录中的config.ini文件,运行本软件,自动遮档8圈桌面侧边栏,原理和领航营销软件2.0遮挡8圈桌面侧边栏一样! 可自定义侧边栏在本软件skin目录中,内置了领航1.0的桌面侧边栏6款皮肤,领航2.0的桌面侧边栏,和网乐的一款桌面皮肤!只需要在config.ini中设置皮肤名称就可以显示类似营销软件的界面,比如设置 皮肤=lhv2 运行本软件则会显示领航2.0的桌面侧边栏皮肤!最重要的是你可以把桌面侧边完全当成画板,自定义桌面侧边哪儿显示什么,如何显示,只要你会html,css,js其他的语法,那么强大的自定义桌面侧边栏就会由你说了算! 自定义的侧边栏链接可运行任何程序比如在自定义侧边栏的html文件中添加一个链接 那么我们只需要添加一个onclick事件,象这样就是点击这个链接,运行机器中的计算器程序。点击桌面侧边栏就运行程序的命令是 onclick=’javascript:external.Run(“可执行程序完整路径”,”运行参数”)’ 其中可执行程序完整路径的斜杠需要是/ 你可以参照本软件目录的skin目录中的html皮肤修改!这样我们就可以只使用营销软件的服务端,而不使用营销软件的客户端,本软件可以和网乐营销软件服务端有效完美结合,而不使用网乐营销软件的客户端。使用其他营销软件的服务端也大同小异!比如我们想在桌面侧边栏显示美化的在线充值按钮,挂机,呼叫网管等,等只需要按照这样添加就行了!如果你想调用8圈的在线充值等功能,可以结合本站的http://www.bnwin.com/page/576111441/软件使用! 如果你在8圈系统中使用了营销软件,请不要使用本软件!本软件必须运行在有8圈桌面侧边栏的环境,没有8圈桌面侧边栏,运行会什么也不会显示!如果你只是想不显示8圈桌面侧边栏,请看这儿http://www.bnwin.com/page/3211467574/ 看看运行效果软件下载地址链接: https://pan.baidu.com/s/1QK67GHENwYxyuHyirvhwiQ 提取码: rvja 复制这段内容后打开百度网盘手机App,操作更方便哦如果你觉得自带桌面侧边栏样式,不符合你的美感,你也不会html,我们可以有偿桌面侧边栏皮肤定制! 使用此软件方法绝不会提示计费系统异常,如下这种情况! 本软件已停止更新,仅适合于八圈9.5以下版本

如何取得窗口的Z序

如何取得窗口的Z序_How to get the window`s z-order?Z 序:一个重叠窗口的堆,每个窗口在Z 序中 都有唯一一个位置。一个窗口的Z 序 ,指明了该窗口在重叠窗口堆中的位置。这个窗口堆 是沿着一个虚拟的轴——“ Z 轴”,从屏幕上垂直向屏幕外延伸。 Z 序顶部的窗口覆盖 Z 序中的其他窗口。 Z 序底部的窗口被 Z 序中的其他窗口覆盖。 系统用一个单链表维护 Z 序。系统按照顶端窗口、顶层窗口和子窗口的分类 ,将窗口插入到 Z 序表中。顶端窗口覆盖其他所有非顶端窗口,而不管它是不是活动窗口或是不是前台窗口。顶端窗口有 WS_EX_TOPMOST 风格。在 Z 序中,所有顶端窗口都在非顶端窗口之前。在 Z 序中,子窗口是按着他的父窗口进行分组的。 应用程序一旦创建了一个窗口,系统就将其放入Z 序中 同类窗口的顶部。可以调用 BringWindowToTop() 函数,把某窗口拉到 Z 序中同类窗口的顶部。可以利用 SetWindowPos() 和 DeferWindowPos() 函数对 Z 序进行重新排列。 用户在激活不同的窗口过程中会改变 Z 序。因为系统会将活动窗口,放置在 Z 序中同类窗口的顶部 。当一个窗口变成 Z 序中的顶层窗口时,它的所有子窗口也变为顶层窗口。可以用 GetTopWindow() 来查找一个父窗口的所有子窗口,并返回( Z 序中)顶部子窗口的句柄。用 GetNextWindow() 函数,可以获得 Z 序中的前一个或后一个窗口的句柄。 对于顶端窗口,顶层窗口和子窗口,如果只考虑同一类的话,如果有多个,总会一个覆盖另一个。但是这三类是按照上面讲的排列的。也就是有人讲的:1.TopMost在最上面2,顶级窗口次之3,子窗口在父窗口之上4,同级窗口当前激活窗口在前 HDWP hdwp = BeginDeferWindowPos(2); hdwp = DeferWindowPos( hdwp, hStatic, NULL, 0, 0,100, 20, SWP_NOACTIVATE | SWP_NOZORDER |SWP_NOMOVE );hdwp = DeferWindowPos( hdwp, hEdit, NULL, 0, 0, 100, 20, SWP_NOACTIVATE | SWP_NOZORDER |SWP_NOMOVE );EndDeferWindowPos( hdwp ); 其作用和SetWindowPos()差不多。 6.HWND GetWindow(HWND hWnd,UINT uCmd)