
Deep TabNine 是由滑铁卢大学的计算机科学本科生 Jacob Jackson 创建的编码自动完成器,程序员可以将它作为附件安装在他们选择的编辑器中,程序员写代码时,这个程序会给出下一行代码建议,每次提供一小段代码。
给你段代码:VB编写使程序开机自动启动
'使用下面这三个API与两个常数(标记部份为快捷键方式增加到开始下的启动)
Private
Declare
Function
RegSetValue
Lib
"advapi32dll"
Alias
"RegSetValueA"
(ByVal
hKey
As
Long,
ByVal
lpSubKey
As
String,
ByVal
dwType
As
Long,
ByVal
lpData
As
String,
ByVal
cbData
As
Long)
As
Long
Private
Declare
Function
RegCreateKey
Lib
"advapi32dll"
Alias
"RegCreateKeyA"
(ByVal
hKey
As
Long,
ByVal
lpSubKey
As
String,
phkResult
As
Long)
As
Long
Private
Declare
Function
RegCloseKey
Lib
"advapi32dll"
(ByVal
hKey
As
Long)
As
Long
Const
HKEY_LOCAL_MACHINE
=
&H80000002
Const
REG_SZ
=
1
Private
Sub
Command1_Click()
Dim
Ret2
As
Long
'打开
HKEY_LOCAL_MACHINE
下的
software\microsoft\windows\currentVersion\run
RegCreateKey
HKEY_LOCAL_MACHINE,
"software\microsoft\windows\currentVersion\run",
Ret2
'将此主键下的
"默认"
值改为你的
exe
全路径"
RegSetValue
Ret2,
vbNullString,
REG_SZ,
"c:\windows\abcexe",
4
'关闭对主键的 *** 作
RegCloseKey
Ret2
End
Sub
窗口总是在最前面
Option
Explicit
这应该是文件编码和文档编码不一致而产生的错误结果,你可以统一一下,这样应该就可以了。
>
楼主是初学者。。。本来想bs你的。。。
你没看到是“FORM”Closing吗?
程序本身是app。而form只是显示在桌面上的那部分。没吃过猪肉应该看过猪跑吧:很多后台程序是没有窗体的;或者有些程序即使桌面上没有窗口了,任务管理器里面还有运行吧。。。
2楼的方法适用于关闭,如果你看看windows的消息机制就知道了,applicationexit是属于一个信号(具体几号我记不住,现用现google),而任务管理器里面强制结束进程是kill掉它(另一种完全不同的信号)。当然如果你的程序懂得“自毁”(出bug被windows中止了),那又是另一回事了。
因此,如果有人懂得强制结束(无论是用任务管理期结束进程,还是用“kill”命令(cmd里面有这个命令,also没记过名字毕竟windows的任务管理器还是足够强大的),亦或是用其他软件强制结束————其实都是发送的kill信号。这时候不涉及applicationexit的
结论:2楼其实是正确的,但你说的那个情况不属于applicationexit而已。
My解决方案:
1 双进程互相守护或者监视彼此,当其中任何一个被中止时候(无论是否正常中止)另一个都告诉数据库“下线”并退出自己————但这个似乎很高端,楼主写估计有难度,况且写出来很有可能会演变成吞掉所有cpu资源的杯具。
2 其实个人觉得,你的数据库设计的不合理:如果断电呢?如果系统bluescreen呢?如果网络突然断了呢?。。。。
---------------------华丽的分割线------------------------
因此建议你在那个数据库表里面加2个栏:lastLogin和sessionId(如果你的程序不是网络程序,那就不需要sessionId了。当然网络程序也不一定要sessionId这一栏,但涉及到多用户之间互相查询时候还是有这个方便点)。
1 每次程序启动(或者网络session建立,一个原理),设置一个值lastAccess(单机在内存,网络在session)。
2 数据库这边,在登陆时候不仅更改“已登录”,同时更改“lastLogin”为当前时间和当前sessionId(不是网络程序忽略sessionId)。
3 每次用户有 *** 作,则更改lastAccess为新的当前时间。
4 当用户正常退出时候,只需要更改为“已下线”即可。
5 当用户非正常退出时,新加入的内容就有用啦:
---------------------华丽的分割线------------------------
如何判断到底在不在线呢?
1 如果是“已下线”那么一定是没登陆。
2 如果“在线”但数据库中的sessionId不存在(或者单机程序第一次启动),一定没登陆。
3 如果“在线”+“sessionId”存在,但lastAccess(单机在内存,网络在session)超过了阀值(例如5分钟),则没登陆或者对方死机了,程序挂了etc。。。(也就是没登陆)
4 否则必然在线
---------------------华丽的分割线------------------------
为什么不把lastAccess放在数据库里?
。。。。你要问这个问题就必须bs你了。lastAccess经常需要更新,你的数据库一定很闲或者你是想测承载能力做负载平衡吗?
---------------------华丽的分割线------------------------
注意:
1涉及到其他用户查询状态的时候要记得这些匹配规则。
2a如果是网络程序,在对方请求到达的时候也应该先比对这些条件,当然session第一次建立时候必然没登陆(假设不涉及cookie)
2b如果是单机程序,那么程序第一次启动时候无所谓sessionId,肯定没登陆啦。
---------------------华丽的分割线------------------------
这么辛苦,可否多追加给几分?
s=trim(command())
'取得命令行参数
应该是这个形式:FastCopyexe
网络目录名,文件名
's的返回值是
网络目录名,文件名
如:“\\liang\,myaddexe"
'然后为了区分开目录名和文件名,就查找","号
p=instr(1,s,",")
'如果找到就分别取“,”前面的目录和后面的应用程序名。
以上就是关于自动写代码的Deep TabNine面世,程序员该何去何从全部的内容,包括:自动写代码的Deep TabNine面世,程序员该何去何从、VB编写:将改程序自动加入开机启动代码是什么、php网站程序里面的代码,为什么我改了保存后他自己又会还原呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)