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

Excel很厉害有什么用?

卡卷网8个月前 (12-19)每日看点127

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

分享给朋友:

相关文章

重磅消息:多个知名盗版网站关闭,倡导正版付费,迎接正版时代

重磅消息:多个知名盗版网站关闭,倡导正版付费,迎接正版时代

近年来,互联网上的免费资源站点经历了前所未有的变革,尤其是那些深受用户喜爱的影视、动漫及软件下载平台。随着全球范围内对于知识产权保护意识的提升以及相关法律法规的不断完善,曾经风光无限的一些网站正逐渐退出历史舞台。例如,在2023年的夏天,一...

国内比较好用的快速开发平台有哪些?

国内比较好用的快速开发平台有哪些?

低代码/零代码快速开发平台,一直是近年来很热的一个词,各大巨头的纷纷加入也给这个赛道。题主需要一个能二次开发的低代码快速开发平台,可以试试JVS低代码(私有化)。JVS低代码前端采用Vuex框架和Element-ui组件库,后端则基于Spr...

到什么程度才叫精通 Linux?

我们医院有个大牛。有一次,我的Linux电脑下载了Microsoft office 365 不能运行。于是买了2.5升装康师傅冰红茶找到大牛,让他帮忙解决。大牛白了我一眼,让我把安装包发给他,只见他输入一个命令将安装包打开,整个屏幕都是数字...

NAS那么好,为什么还是没能成为大多数家庭必备的存储设备?

NAS那么好,为什么还是没能成为大多数家庭必备的存储设备?

最主要原因是因为——贵!看看我家里搭建的这一套吧。目前我家中有5台常用的NAS,分别为群晖DS1522+、威联通TS-464C2、绿联DX4600 Pro 、极空间Z4S、威联通TS-AI642。个人认为,这其中的每台NAS都是时代的翘楚,...

为什么说不懂电脑的不要碰AMD?

作为一个资深垃圾佬,说缺点前,先说优点吧AMD CPU(后续简称AU)的优点:处理器对比Intel,三级缓存更大,最明显的感知就是,网游帧数更高(5900X,7900X之类高端型号都是双CCX共享大缓存,反而不如次一点的CPU帧数更高);相...

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

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

发表评论

访客

看不清,换一张

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