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

Excel很厉害有什么用?

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

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

分享给朋友:

相关文章

感觉手机配置都差不多,为什么有的手机能卖2k-3k,而有的手机却能卖到6k-8k?

感觉手机配置都差不多,为什么有的手机能卖2k-3k,而有的手机却能卖到6k-8k?

与所有的商品一样,手机的价格,也是由它的成本所决定的。 虽然看起来3000元的手机和6000的手机配置差不多,甚至处理器都可能是同一个,但在很多大家容易忽略的地方,决定了两者价格的不同: 例如手机的外观,塑料的机身,与素皮机身和玻璃机身就完…

有哪些网站,一旦知道,你就离不开了?

有哪些网站,一旦知道,你就离不开了?

这六个网站,一旦用过,基本上是离不开了。都是我超爱的一些网站,基本上每天都用。 1 地图生成器 第一个,我要给大家推荐的是地图生成器。可以下载到各省,各市,各县的svg格式的地图素材。 这些素材导入PPT中都是可以编辑的。 可以单独更改颜色…

为什么有人觉得华为mate60只值2000?

为什么有人觉得华为mate60只值2000?

你以为买Mate60的人真的傻?真的那么爱国? 国庆前,我家那傻子加价800多买了一台Mate60,当时还被我骂他是傻子。 可是他说一回到公司就被老板同事朋友看到,拿去反复查看,都在惊叹他这么快就买到新机。 跟亲戚朋友聚会,别人一看就知道他…

有哪些好玩到爆的小网站?推荐?

有哪些好玩到爆的小网站?推荐?

1、Poki 免费在线游戏 https://poki.com/zh 免费在线小游戏网站。 上千款在线游戏,完全免费,无需登录,打开就能玩。 2、http://YORG.io https://yorg.io 超耐玩的塔防游戏。搭建自己的防…

你觉得oppo Find X8怎么样?

你觉得oppo Find X8怎么样?

OPPO FindX8发布也差不多一个月了,各位上手体验如何呢? 作为OPPO的年度旗舰,性能,外观,屏幕等方面都有不小的提升,篇幅有限,下面挑最值得讲的两个点,就是OPPO Find X8的外观和影像。 众所周知,这次OPPO Fin…

为什么说,运维是IT行业里技术含量最低的?

我是有幸从学校出来后转行进入IT运维这个行业的,有在上海这个行业幸跌爬滚打5年,目前2024年失业中......(老实说,这几年接触的人和事、有些厌烦这个行业了) 以一个过来人的角度讲讲这个岗位的心酸和无奈,也说说为什么很多人,包括各个公司…

发表评论

访客

看不清,换一张

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