当前位置:首页 > 每日看点

Excel很厉害有什么用?

卡卷网2年前 (2024-12-19)每日看点293

我拿vba做了一个德州扑克的荷官,可以在QQ上组织一台6人桌的线上比赛。

Excel 是天然的数据存放器。十万个字符量级以下,对延迟要求不高(响应延迟1s左右)的游戏(卡牌游戏,文字冒险等)都可以用EXCEL+一台电脑当服务器。

(也可以不用Excel,用Python,java都是一样的,但这里只讨论Excel,别问我为什么,问就是情有独钟。)

玩家数据就放在Excel里面,非常方便。效果如下,上班时可以和朋友摸鱼打牌↓


Excel很厉害有什么用?  第1张


Excel很厉害有什么用?  第2张


呃,稍微讲下怎么实现吧,稍微……嗯……牌类游戏,卡牌对战都是相同逻辑。

1.你要能监控自己的QQ聊天窗口(如果你要用qq窗口作为游戏面板的话)

如果你会自己创建一个网页服务器或者其他云服务器,然后再自己开发一套游戏界面。那你是大佬,求求你给我面试机会吧……

在vba里监控屏幕有很多办法,主要是调用windows自带的api——

getdc获取屏幕句柄

releasedc释放内存

(不释放有你好果汁吃,别问我怎么知道的)

GetPixel获取像素点颜色

进阶版:GetDIBits(快速获取全屏幕像素点)

使用方法自己去研究,我不可能想写论文一样告诉你怎么使用这些玩样。你可以在Microsoft文档里找到使用方法。


2.你要能控制自己的鼠标去“读消息”

由于QQ近期没有可用的api,所以我们只能用视觉控制这种暴力方法来奴役聊天窗口,api——

getcursorpos 找鼠标位置

mouse_event 控制鼠标运动

好,到这里为止,你就可以通过vba在qq聊天窗口里随便控制鼠标来复制需要的消息了。

当然,如果你不想控制鼠标点来点去,那么移步到外接OCR


3.把输出消息粘贴到聊天框里去

这里我打的是剪切板的主意

我们引用Excel自带的Msforms 2.0 object

然后使用object.settext/putinclipboard的方法来将字符放入剪切板。

然后用sendkeys函数调用Ctrl v,把内容粘贴到聊天框里去。

至此,一个简易框架就搭完了。

后续所有问题都只是码代码来补充游戏逻辑。


PS.牌友可以私聊我入群,我们好好交流技术♂啊~



然后给你们分享一个好玩的东西,这东西运行起来可以让你指定的窗口在屏幕上跳舞↓

Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As Any) As Long

Declare PtrSafe Function MoveWindow Lib "user32" (ByVal hWnd As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long


Sub MoveWindowUpDown()

Dim hwnd As Long

Dim rect(1 To 4) As Long

Dim x As Long, y As Long, width As Long, height As Long

Dim stepSize As Long

Dim direction As Long


' 窗口标题(替换为你需要控制的窗口标题)

Dim windowTitle As String

windowTitle = "窗口标题" ' 例如: "Notepad"


' 查找窗口句柄

hwnd = FindWindow(vbNullString, windowTitle)

If hwnd = 0 Then

MsgBox "找不到窗口!", vbExclamation

Exit Sub

End If


' 获取窗口位置和大小

GetWindowRect hwnd, rect(1)

x = rect(1)

y = rect(2)

width = rect(3) - rect(1)

height = rect(4) - rect(2)


' 设置步长和初始移动方向

stepSize = 10 ' 每次移动的像素大小

direction = 1 ' 1表示向下移动,-1表示向上移动


' 循环移动窗口

Do While True

If direction = 1 Then

' 向下移动

MoveWindow hwnd, x, y + stepSize, width, height, True

y = y + stepSize

If y >= 600 Then direction = -1 ' 到达下边界时开始向上移动

Else

' 向上移动

MoveWindow hwnd, x, y - stepSize, width, height, True

y = y - stepSize

If y <= 0 Then direction = 1 ' 到达上边界时开始向下移动

End If


' 控制移动速度

DoEvents

Application.Wait Now + TimeValue("00:00:01") ' 1000毫秒

Loop

End sub


呃……你问我怎么获取窗口标题,好吧↓


Declare PtrSafe Function EnumWindows Lib "user32" (ByVal lpEnumFunc As LongPtr, ByVal lParam As Long) As Long

Declare PtrSafe Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

Declare PtrSafe Function IsWindowVisible Lib "user32" (ByVal hWnd As Long) As Long


Dim Titles As Collection


' 枚举窗口的回调函数

Function EnumCallback(ByVal hWnd As Long, ByVal lParam As Long) As Long

Dim title As String

Dim length As Long

' 获取窗口标题长度

length = 255

title = String$(length, vbNullChar)

' 获取窗口标题文本

length = GetWindowText(hWnd, title, length)

title = Left$(title, length)

' 如果窗口可见且标题不为空,保存到集合

If length > 0 And IsWindowVisible(hWnd) Then

Titles.Add title

End If

EnumCallback = 1 ' 继续枚举

End Function


Sub GetAllWindowTitles()

Dim i As Long

Set Titles = New Collection

' 枚举所有窗口

EnumWindows AddressOf EnumCallback, 0

' 输出所有窗口标题

If Titles.Count > 0 Then

For i = 1 To Titles.Count

Cells(i,1) = Titles(i) ' 在第一列中显示标题

Next i

Else

MsgBox "未找到任何窗口标题!", vbInformation

End If

End sub


快去试试吧~拿窗口来做屏保

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/4957.html

分享给朋友:

相关文章

如何判断 Java 工程师的基础知识是否扎实?

我来给你出几道大题,能答对70%,你就算基础扎实了。 第一部分 Java基础(27)1. 程序本质:代码是如何被执行的?CPU、操作系统、虚拟机各司何职?2. 基础语法:从CPU角度看变量、数组、类型、运算、跳转、函数等语法3. 引用类型:…

PHP承载百万/天 访问量需要用到什么技术?

当年做一个百万PV的商城,也不过是两台2c4g的阿里云虚机罢了(其实一台就够,另外一台主要的逼着大家一定开发的时候一定要有负载均衡和横向扩容的意识)。当时框架还是Thinkphp3.2,框架提高运行效率的开关全打开,标准的lnmp模式,单机…

讲真,家庭真的需要一台NAS吗?

讲真,家庭真的需要一台NAS吗?

要想回答这个问题,讲一个故事大家都能明白了,至于需要不需要,大家可以自己判断。 现在的家庭,一般都会有很多家具,比如 鞋柜,用来放鞋 衣柜,用来放衣服 书架,用来放书。 还有碗柜,床头柜等等。 当然,没有上述东西的家庭也存在,但是这些家…

为什么很多网友都说电脑用5年左右就该换了?

为什么那么说5年呢,因为你的散热器上堆积的灰尘,5年都不清理的话,会导致散热能力严重下降,硅脂也因为老化而无法做出有效的热传导。导致CPU过热只能降频运行。导致了你觉得卡。 还有固态,5年真也差不多了,会出现一些不坏不好的块,这些块会严重降…

为什么感觉wps的用户越来越多,office没人用了?

本科在西工大,当时有学生在留言板上建议学校购买office官方授权给学生用,学校回复因为学校在美国的实体清单上所以没法购买office。第二年学校买了wps的企业会员服务给全校师生使用。我21年毕业那会,学校的各个部门都在用wps,包括毕业…

百度网盘里的7z格式加密压缩包为什么也会违规?

百度网盘里的7z格式加密压缩包为什么也会违规?

原文: 技巧分享-网盘分享的几种安全级别、违规、审核与举报原理 前言根据近期对网盘分享的种种策略的 测试 ,本人尝试整理总结了网盘分享的不同安全级别,以及百度网盘的审核、举报相关的细节说明,然后给出了根据风险级别选择分享安全级别的建议,…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。