当前位置:首页 > 每日看点 > 正文内容

Excel很厉害有什么用?

卡卷网1年前 (2024-12-19)每日看点226

我拿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

分享给朋友:

相关文章

请问什么软件支持看电视直播?

请问什么软件支持看电视直播?

2024年9月6日最新更新:本文列举的所有看电视直播、或流媒体影视资源点播的软件,我这两天又重新梳理成最新版本,最大程度保证可用性。获取方式见文末图片,或见评论。后续我也将持续更新,文章是旧的软件也会是新的,保证你拿到的都是最新可用版本。作...

最让你震惊的网站有哪些?

压箱底的震惊来了,来波大的,一百个网站!这些都是我平时辛辛苦苦收集的,是真的牛逼,居然还有这种网站。1、实时地球网址:https://zoom.earth/实时图像每 10 分钟更新一次,提供风暴、天气预报、降水、火警等数据2、陕西博物馆...

网易云音乐上看到过最触动的热评是什么?

网易云音乐上看到过最触动的热评是什么?

1.“昨天晚上洗澡的时候,我忘记拿毛巾了,喊了声妈妈帮我拿下毛巾,正当我伸出左手准备接毛巾的时候,我愣了一下,又换了右手。”希望你永远不会听懂这句话,永远都不要懂。——网易云热评《关键词》2.小时候跟着父亲去城里卖西瓜,害怕同学会看到我,就...

鸿蒙到底是不是安卓套壳?

鸿蒙到底是不是安卓套壳?

把它是不是套壳先放在一边吧。我讲一个事情,大家自己判断。华为有一个应用,叫手机管家。这个手机管家对一些系统底层设置有影响:比如华为从 EMUI 9 开始不允许将第三方启动器设置为默认启动器,依靠的就是这个手机管家。为什么这么说呢?在网上搜索...

为什么 lnx 求导是 1/x?

为什么 lnx 求导是 1/x?

其实,我想对题主说,你提的问题一点都不弱智。恰恰相反,这是个非常有意义的问题。我们学习一门知识,尤其是数学知识,要知其然,更要知其所以然。今天,我尝试从“如何去定义“的角度出发来解释这个问题,不玩公式推导的符号游戏。希望能带来新的启发。为解...

怎样使自己处于高能量状态?

1、不要习惯性的回顾过去那些让你尴尬和犯了错误的事情,不要嫌弃自己蠢。学会原谅自己,当你不断回忆那些错误和囧事的时候,告诉自己:自己确实做错了,下次不要再犯即可,不需一遍遍的回忆。这件事情已经发生,不要再一遍遍的折磨自己,不断回忆一点好处没...

发表评论

访客

看不清,换一张

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