- 浏览: 4397556 次
- 性别:
- 来自: 湛江
博客专栏
-
SQLite源码剖析
浏览量:80021
-
WIN32汇编语言学习应用...
浏览量:69978
-
神奇的perl
浏览量:103284
-
lucene等搜索引擎解析...
浏览量:285605
-
深入lucene3.5源码...
浏览量:15001
-
VB.NET并行与分布式编...
浏览量:67489
-
silverlight 5...
浏览量:32095
-
算法下午茶系列
浏览量:45963
文章分类
最新评论
-
yoyo837:
counters15 写道目前只支持IE吗?插件的东西是跨浏览 ...
Silverlight 5 轻松开启绚丽的网页3D世界 -
shuiyunbing:
直接在前台导出方式:excel中的单元格样式怎么处理,比如某行 ...
Flex导出Excel -
di1984HIT:
写的很好~
lucene入门-索引网页 -
rjguanwen:
在win7 64位操作系统下,pygtk的Entry无法输入怎 ...
pygtk-entry -
ldl_xz:
http://www.9958.pw/post/php_exc ...
PHPExcel常用方法汇总(转载)
用WIN汇编开发桌面报时工具
用WIN32汇编语言开发出来的WINDOWS程序具有执行效率高、占用空间小等特点。
一、 软件简介及相应开发工具
桌面报时工具主要完成以下两个功能:
1、 F12热键语音报时、语音整点报时。
2、 在屏幕中上方直接显示时间,并不被任何窗口挡住。
3、 程序运行后最小化为任务栏图标。
笔者以WIN汇编为开发语言,以MASM32为开发工具,因为它不但可以免费获取和使用,而且自带IDE编程环境,读者可访问其官方网站下载MASM32开发包,官方网站为:http://www.movsd.com/。
二、设计思路
1、软件采用标准的自定义对话框架构实现。
2、采用微软的TTS语音引擎实现语音报时。 TTS基于COM,因此开发使用Microsoft SpeechSDK,直接调用SAPI实现语音朗读。
3、使用HOOK技术,截获F12按键进行语音报时。因此,笔者单独编写了一个DLL文件,捕捉F12按键。
由此可见,该报时工具虽小,但五脏俱全,涉及对话框消息循环、HOOK技术、COM接口、DLL文件编写、主要API的调用等技术。
三、实现代码
1、主程序代码
.586
.model flat, stdcall
option casemap :none
;#########################################################################
;首先声明头文件
include windows.inc
include user32.inc
include kernel32.inc
include gdi32.inc
include masm32.inc
include shell32.inc
include ole32.inc
include d:\masm32\com\include\oaidl.inc
include timersdll.inc
includelib user32.lib
includelib kernel32.lib
includelibgdi32.lib
includelib masm32.lib
includelib shell32.lib
includelib ole32.lib
includelib timersdll.lib
;#########################################################################
;声明宏(主要是控件ID和菜单ID)
IDC_ALARM equ 101
IDC_CANCEL equ 102
IDC_OK equ 103
IDC_ABOUT equ 104
IDC_CHECKBS equ 105
IDC_CHECKSHOWTIMER equ 106
IDR_MAINFRAME equ 107
IDR_MAINMENU equ 108
MENUID_SYSTEMSET equ 109
MENUID_SPEAKTIMER equ 110
MENUID_ABOUT equ 111
MENUID_EXIT equ 112
DIALOG_MAIN equ 1
IDT_TIMER equ 1
WM_NOTIFYICONN equ WM_USER+0
WM_CLOCKALARM equWM_USER+100h
;#########################################################################
;Microsoft Speech SDK没有相应的适应于汇编语言的INC头文件,笔者在代码
;文件中直接声明TTS相关虚函数。
;定义ISpVoice的虚函数接口表(根据SDK中的sapi.h中ISpVoiceVtbl的C++定义改
;成MASM32定义)
ISpVoice STRUCT DWORD
QueryInterface comethod3 ?
AddRef comethod1 ?
Release comethod1 ?
SetNotifySink comethod2 ?
SetNotifyWindowMessage comethod5 ?
SetNotifyCallbackFunction comethod4 ?
SetNotifyCallbackInterface comethod4 ?
SetNotifyWin32Event comethod1 ?
WaitForNotifyEvent comethod1 ?
GetNotifyEventHandle comethod1 ?
SetInterest comethod3 ?
GetEvents comethod4 ?
GetInfo comethod2 ?
SetOutput comethod3 ?
GetOutputObjectToken comethod2 ?
GetOutputStream comethod2 ?
Pause comethod1 ?
Resume comethod1 ?
SetVoice comethod2 ?
GetVoice comethod2 ?
Speak comethod4 ?
SpeakStream comethod4 ?
GetStatus comethod3 ?
Skip comethod4 ?
SetPriority comethod2 ?
GetPriority comethod2 ?
SetAlertBoundary comethod2 ?
GetAlertBoundary comethod2 ?
SetRate comethod2 ?
GetRate comethod2 ?
SetVolume comethod2 ?
GetVolume comethod2 ?
WaitUntilDone comethod2 ?
SetSyncSpeakTimeout comethod2 ?
GetSyncSpeakTimeout comethod2 ?
SpeakCompleteEvent comethod1 ?
IsUISupported comethod5 ?
DisplayUI comethod6 ?
ISpVoice ENDS
;#########################################################################
;可变数据段
.data?
szbufferprev db 20 dup(?)
szbuffernow db 20 dup(?)
hWinMain DWORD ?
idTIMER DWORD ?
CommandLine DWORD ?
hInstance DWORD ?
hicon HICON ?
hmenu DWORD ?
hlib DWORD ?
timershowx DWORD ?
timershowy DWORD ?
showrect RECT <>
;常量数据段
.data
szClassName db "Timers_Class",0
szdateformat db"yyyy年MM月dd日",0
sztimeformat db "hh点mm分ss秒",0
stnidstatus NOTIFYICONDATA <>
;======
isintpointalarmDWORD 1;0-表示整点不报时,1-整点报时
isshowtimer DWORD 1;0-表示不显示,1-显示
isintpoint DWORD 0;0-表示不是整点,1-是整点
;======
sztooltip db "桌面报时工具",0
szabout db "桌面报时工具由WIN32汇编开发",0
szmscap db "错误",0
szmstext1 db "无法在桌面上显示!",0
szmstext2 db "无法得到全屏DC!",0
;======
szprevdate db 50 dup(?)
szprevtime db 50 dup(?)
sznowdate db 50 dup(?)
sznowtime db 50 dup(?)
szbegin db "桌面报时工具为您报时"
sztext db 100 dup(?)
;#########################################################################
;代码段
.code
_showtext proto :DWORD
_ProcDlgMain proto :DWORD,:DWORD,:DWORD,:DWORD
_geterrno proto :DWORD,:DWORD
_speaktext proto :DWORD
_WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
_statusicon proto :DWORD
_configload proto :DWORD
start:
;程序的入口
invoke GetModuleHandle, NULL
mov hInstance, eax
invoke GetCommandLine
mov CommandLine, eax
invoke _WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
invoke ExitProcess,eax
;#########################################################################
;得到当前时间子函数
_getnow proc
invoke lstrcpy,addr szprevtime,addr sznowtime
invoke lstrcpy,addr szprevdate,addr sznowdate
invoke GetDateFormat,NULL,NULL,NULL,addr szdateformat,addrsznowdate,50
invokeGetTimeFormat,LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,addrsztimeformat,addr sznowtime,50
invoke lstrcpy,addr sztext,addr sznowdate
invokelstrcat,addr sztext,addr sznowtime
invokeszLeft,addr szprevtime,addr szbufferprev,2
invokeszLeft,addr sznowtime,addr szbuffernow,2
invokelstrcmp,addr szbufferprev,addr szbuffernow
testeax,eax
je @f
mov isintpoint,1
@@:
ret
_getnow endp
;#########################################################################
;显示时间子函数
;参数说明:lpsztex:要显示的文本的起始地址
_showtext proc uses ebxlpsztext:DWORD
LOCAL@Desktopdc:HDC
LOCAL@dwtextcolor,@dwbkcolor
mov@dwtextcolor,00010000h
mov@dwbkcolor,0000FF00h
invokeGetWindowDC,NULL
cmpeax,0
jne@f
invokeMessageBox,NULL,offset szmstext2,offset szmscap,MB_ICONERROR
@@:
mov@Desktopdc,eax
invokelstrlen,lpsztext
movebx,eax
invokeSetBkColor,@Desktopdc,@dwbkcolor
invokeSetTextColor,@Desktopdc,@dwtextcolor
invokeTextOut,@Desktopdc,timershowx,timershowy,lpsztext,ebx
cmpeax,0
jne@f
invokeMessageBox,NULL,offset szmstext1,offset szmscap,MB_ICONERROR
@@:
invokeReleaseDC,NULL,HDC
ret
_showtext endp
;#########################################################################
_showtime proc
invoke _showtext,offset sztext
ret
_showtime endp
;#########################################################################
;语音朗读文本子函数
;参数说明: pszspeakansi:要朗读的文本起始地址
_speaktext proc uses edx ebx pszspeakansi:DWORD
.data
szspeaktext db 200dup(?),0
szerrtext db "错误号:"
szerrtextno db 20 dup(?),0
ppVoice DWORD ?
CLSID_SpVoice GUID<96749377H,3391H,11D2H,<9EH,0E3H,00H,0C0H,4FH,79H,73H,96H>>
IID_ISpVoice GUID<6C44DF74H,72B9H,4992H,<0A1H,0ECH,0EFH,99H,6EH,04H,22H,0D4H>>
.code
invoke lstrlen,pszspeakansi
mov ebx,eax
invokeMultiByteToWideChar,CP_ACP,MB_PRECOMPOSED,pszspeakansi,-1,addrszspeaktext,ebx
invoke CoInitialize,NULL
;#######################################################################
;使用pVoice接口
invoke CoCreateInstance,addr CLSID_SpVoice,NULL,CLSCTX_ALL,addrIID_ISpVoice,addr ppVoice
.IF_FAILED
invoke _geterrno,eax,addr szerrtextno
invoke MessageBox,NULL,addr szerrtext,addr szmscap,MB_ICONERROR
jmp@f
.endif
mov eax,ppVoice
mov edx,[eax]
invoke (ISpVoice PTR[edx]).SetVoice,ppVoice,NULL
.IF_SUCCEEDED
mov eax,ppVoice
mov edx,[eax]
invoke(ISpVoice PTR[edx]).SetRate,ppVoice,3
.IF_FAILED
invoke _geterrno,eax,addr szerrtextno
invoke MessageBox,NULL,addr szerrtext,addr szmscap,MB_ICONERROR
.endif
mov eax,ppVoice
mov edx,[eax]
invoke(ISpVoice PTR[edx]).Speak,ppVoice,addr szspeaktext,0,NULL
.IF_FAILED
invoke _geterrno,eax,addr szerrtextno
invoke MessageBox,NULL,addr szerrtext,addr szmscap,MB_ICONERROR
.endif
.endif
mov eax,ppVoice
mov edx,[eax]
invoke (ISpVoice PTR[edx]).Release,ppVoice
@@:
call CoUninitialize
ret
_speaktext endp
;#########################################################################
;对话框消息处理函数
_ProcMain proc uses ebx hWnd,uMsg,wParam,lParam
LOCAL @stpos:POINT
.if uMsg==WM_TIMER
mov eax,wParam
.if eax==IDT_TIMER
call _getnow
.if isshowtimer==1
call_showtime
.endif
.if isintpointalarm==1 &&isintpoint==1
invoke _speaktext,addr szbegin
mov isintpoint,0
.endif
.endif
.elseif uMsg==WM_NOTIFYICONN
moveax,wParam
.if eax== IDR_MAINFRAME
mov eax,lParam
movzx eax,ax
.if eax== WM_RBUTTONUP
invoke GetCursorPos,addr @stpos
invokeTrackPopupMenu,hmenu,TPM_LEFTALIGN,@stpos.x,@stpos.y,NULL,hWnd,NULL
.endif
.endif
.elseif uMsg==WM_CLOCKALARM
invoke_speaktext,addr szbegin
.elseif uMsg==WM_COMMAND
moveax,wParam
movzxeax,ax
.ifeax==MENUID_EXIT
invoke InvalidateRect,NULL,NULL,NULL
invoke UnInstallHook,hWnd
invoke KillTimer,hWnd,idTIMER
invoke _statusicon,NIM_DELETE
invoke DestroyWindow,hWnd
.elseif eax==MENUID_SYSTEMSET
invoke _configload,0
invoke ShowWindow,hWinMain,SW_SHOWNORMAL
.elseif eax==MENUID_ABOUT
invokeMessageBox,NULL,addr szabout,addr sztooltip,NULL
.elseif eax==MENUID_SPEAKTIMER
invoke_speaktext,addr szbegin
.elseifeax==IDC_CANCEL
invokeShowWindow,hWinMain,SW_HIDE
.elseif eax==IDC_OK
call _configsave
invokeShowWindow,hWinMain,SW_HIDE
.endif
.elseif uMsg==WM_DESTROY
invoke PostQuitMessage,NULL
.else
invoke DefDlgProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_ProcMain endp
;######################################################################### ;取得COM接口错误号函数,可以根据错误号在winerror.h中查到错误类型
_geterrno proc szerrhex:DWORD,pszerrtext:DWORD
push eax
invokedw2hex,szerrhex,pszerrtext
pop eax
ret
_geterrno endp
;######################################################################### ; 状态栏图标操作
_statusicon proc operation:DWORD
invoke Shell_NotifyIcon,operation,addr stnidstatus
ret
_statusiconendp
;######################################################################### ;主窗口消息循环
_WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
LOCAL @stwc:WNDCLASSEX
LOCAL @stmsg:MSG
LOCAL @CommandLine:DWORD
mov@stwc.cbSize, sizeof WNDCLASSEX
mov@stwc.style, CS_HREDRAW or CS_VREDRAW
mov@stwc.lpfnWndProc, offset _ProcMain
mov@stwc.cbClsExtra, NULL
mov@stwc.cbWndExtra, DLGWINDOWEXTRA
push hInst
pop @stwc.hInstance
mov @stwc.hbrBackground, COLOR_BTNFACE+1
mov @stwc.lpszMenuName, NULL
mov @stwc.lpszClassName, offset szClassName
invoke LoadIcon,hInst, IDR_MAINFRAME
mov hicon,eax
push hicon
pop @stwc.hIcon
push hicon
pop @stwc.hIconSm
invoke LoadCursor,NULL,IDC_ARROW
mov @stwc.hCursor,eax
invoke RegisterClassEx,addr @stwc
invoke CreateDialogParam,hInst,DIALOG_MAIN,NULL,NULL,NULL
mov hWinMain,eax
invoke LoadMenu,hInst,IDR_MAINMENU
mov hmenu,eax
invoke GetSubMenu,hmenu,0
mov hmenu,eax
mov stnidstatus.cbSize,sizeof NOTIFYICONDATA
push hWinMain
pop stnidstatus.hwnd
mov stnidstatus.uID,IDR_MAINFRAME
push hicon
pop stnidstatus.hIcon
mov stnidstatus.uFlags,NIF_ICON or NIF_TIP or NIF_MESSAGE
mov stnidstatus.uCallbackMessage,WM_NOTIFYICONN
invoke lstrcpy,addr stnidstatus.szTip,addr sztooltip
invoke ShowWindow,hWinMain,SW_HIDE
invoke UpdateWindow,hWinMain
invoke _configload,1
.while TRUE
invoke GetMessage,addr @stmsg,NULL,0,0
.BREAK .IF eax==0
invokeIsDialogMessage,hWinMain,addr @stmsg
.ifeax==FALSE
invoke TranslateMessage,addr @stmsg
invoke DispatchMessage,addr @stmsg
.endif
.endw
moveax,@stmsg.wParam
ret
_WinMain endp
;######################################################################### ;加载配置
_configload proc isfirstrun:DWORD
.code
.if isfirstrun==1 ;第一次运行,需要读取文件和初始化
;初始化
invoke GetDateFormat,NULL,NULL,NULL,addr szdateformat,addrsznowdate,50
invokeGetTimeFormat,LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT,NULL,addrsztimeformat,addr sznowtime,50
invoke SetTimer,hWinMain,IDT_TIMER,1000,NULL
mov idTIMER,eax
invoke _statusicon,NIM_ADD;创建状态栏图标
invokeInstallHook,hWinMain,WM_CLOCKALARM;安装热键钩子
invoke GetSystemMetrics,SM_CXSCREEN
shreax,1
movtimershowx, eax
movtimershowy, 1
.endif
.if isintpointalarm==0
invokeCheckDlgButton,hWinMain,IDC_CHECKBS,BST_UNCHECKED
.else
invoke CheckDlgButton,hWinMain,IDC_CHECKBS,BST_CHECKED
.endif
.if isshowtimer==0
invokeCheckDlgButton,hWinMain,IDC_CHECKSHOWTIMER,BST_UNCHECKED
.else
invoke CheckDlgButton,hWinMain,IDC_CHECKSHOWTIMER,BST_CHECKED
.endif
ret
_configload endp
;######################################################################### ;保存配置
_configsave proc
invoke IsDlgButtonChecked,hWinMain,IDC_CHECKBS
.if eax==BST_CHECKED
mov isintpointalarm,1
.else
mov isintpointalarm,0
.endif
invokeIsDlgButtonChecked,hWinMain,IDC_CHECKSHOWTIMER
.if eax==BST_CHECKED
mov isshowtimer,1
.else
mov isshowtimer,0
invoke InvalidateRect,NULL,NULL,NULL
.endif
ret
_configsave endp
;######################################################################### end start
2、 DLL文件代码
.586
.model flat, stdcall
option casemap:none
;#########################################################################
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data?
hHook DWORD ?
hMainWnd DWORD ?
hWmessage DWORD ?
.data
hInstance DWORD 0
sztooltip db "桌面报时工具",0
;#########################################################################
.code
;#########################################################################
;DLL入口
DllEntry prochInst:HINSTANCE,reason:DWORD,userreserved:DWORD
push hInst
pop hInstance
mov eax,TRUE
ret
DllEntry endp
;#########################################################################
;键盘消息处理函数
KeyProc proc uses ebx dwCode:DWORD,wParam:DWORD,lParam:DWORD
invokeCallNextHookEx,hHook,dwCode,wParam,lParam
.if dwCode == HC_ACTION&&wParam==VK_F12
mov ebx,1
shl ebx,30
test lParam,ebx
jne @f
invoke SendMessage,hMainWnd,hWmessage,0,0
@@:
.endif
xor eax,eax
ret
KeyProc endp
;#########################################################################
;安装HOOK函数
InstallHook proc hwnd:DWORD,dwmessage:DWORD
push hwnd
pop hMainWnd
push dwmessage
pop hWmessage
invokeSetWindowsHookEx,WH_KEYBOARD,addr KeyProc,hInstance,NULL
mov hHook,eax
ret
InstallHook endp
;#########################################################################
;卸载HOOK函数
UnInstallHook proc hwnd:DWORD
invoke UnhookWindowsHookEx,hHook
ret
UnInstallHook endp
;#########################################################################
end DllEntry
3、 DLL导出文件内容(声明DLL的外部函数)
KeyProc proto :DWORD,:DWORD,:DWORD
InstallHook proto :DWORD,:DWORD
UnInstallHook proto :DWORD
发表评论
-
win下开发跨平台GUI程序的另类选择
2011-05-03 17:21 2208GTK+ ● GTK+的网站:www.gtk. ... -
win32汇编-送消息给其它应用程序
2010-02-20 16:42 29162个函数invoke postmessage,hwnd,msg ... -
WIN32汇编之菜单、加速键、快捷键
2010-02-20 16:38 3156(一)Invoke checkmenuitem,h ... -
WIN32汇编学习应用之defwindowproc
2010-02-20 16:36 2719defwindowproc窗口过程对一些消息的默认处理方式WM ... -
windows中WM_CLOSE消息和WM_DESTORY消息的不同之处
2010-02-20 16:33 24341、WM_CLOSE仅代表用户发出了关闭的指令,但窗口过程可以 ... -
WIN32汇编获取应用程序句柄
2010-02-20 16:32 2199getmodulehandle使用方法invoke getm ... -
WIN32汇编语言学习应用之消息获取
2010-02-20 16:31 1731MSG结构:MSG STURCTHwnd DWORD ?Mes ... -
一个WIN32汇编的完整窗口入门程序的理解与注释
2010-02-20 16:28 3737;WIN32汇编的注释是;,其实WIN32汇编和VC有很多 ... -
汇编中通用寄存器的目的
2010-02-20 16:24 21921、EAX和AX:累加器,所有的I/O指令用它来与外部设备 ... -
汇编几个段
2010-02-17 16:39 4220反汇编后几个段的含义 预定义段 一个WindowsNT ... -
WIN32汇编语言解析
2010-02-17 16:36 2570win32汇编中的sizeof win32汇编中的s ... -
设置与获取窗口标题文本
2010-02-17 16:32 2016获得: CString xx=""; ... -
win32汇编快速入门
2010-02-17 16:31 4670汇编可以开发WINDOWS程序 ... -
WIN32汇编-HELLO,WORLD!
2010-02-17 16:29 4443我们用WIN32汇编构建 ... -
保护模式下段寄存器的作用
2010-02-17 14:39 32631、保护模式一,虽然在寻址上没有分段的限制问题,但对要对一个地 ... -
WIN32汇编-反汇编
2010-02-17 14:33 2801学好WIN32汇编,平时需 ... -
玩转菜单-菜单资源
2010-02-08 17:31 1946菜单资源 WINDOWS程序的菜单通常编译前定义在资 ... -
二进制资源和自定义资源使用定义
2010-02-08 17:29 21961、二进制资源 (1)定义格式: 资源IDRCDA ... -
LISTBOX和LIST CONTROL的项目增加方法
2010-02-08 17:28 54631、LIST CONTROL(report方式): (1)类 ... -
取IP寄存器的当前值
2010-02-08 17:27 1947call $+3 POP CX 把IP寄存器的当前值放 ...
相关推荐
技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
# 基于Spring、Struts和Hibernate的OA系统 ## 项目简介 本项目是一个基于Spring、Struts和Hibernate框架的办公自动化(OA)系统。该系统主要用于企业内部的日常办公管理,包括用户登录、组织管理、权限管理等功能。系统前端使用现成的模板和JavaScript、jQuery技术,后端通过Struts、Hibernate和Spring框架实现业务逻辑和数据持久化。 ## 项目的主要特性和功能 ### 登录模块 防止多设备登录系统能够检测到同一账号在不同设备上的登录情况,并在检测到异地登录时通知用户并强制下线。 WebSocket支持使用WebSocket技术实现实时通知功能。 ### 组织管理模块 部门管理支持部门的增删改查操作,包括查看部门信息、职位信息和员工数量。 用户管理支持用户的增删改查操作,包括指定用户所在部门、职位和角色。 角色管理支持角色的增删改查操作,包括查看角色权限和修改角色权限。
基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高分项目)基于MySQL、express框架、Vue3的光谷智慧交通系统源码+数据库+文档说明(高
open3d python 给点云每个点设置不同的颜色
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
HengCe-18900-2024-2030中国室内木门市场现状研究分析与发展前景预测报告-样本.docx
# 基于ASP.NET Web API的供应链管理系统 ## 项目简介 供应链管理系统(SCM)是一个基于ASP.NET Web API框架开发的企业级应用,旨在帮助企业高效管理供应链中的各个环节。系统涵盖了供应商管理、采购管理、库存管理、订单管理等多个模块,通过API接口实现数据的增删改查操作,确保供应链的顺畅运作。 ## 项目的主要特性和功能 1. 供应商管理 供应商信息的增删改查操作。 供应商联系人管理。 供应商评级和分类管理。 2. 采购管理 采购订单的创建、编辑和删除。 采购产品的状态管理。 采购合同的生成和管理。 3. 库存管理 库存产品的入库和出库管理。 库存状态的实时监控。 4. 订单管理 订单的创建、编辑和删除。 订单状态的跟踪和管理。 5. 用户管理 用户登录和权限管理。 用户角色的分配和管理。
系统主要包括首页,个人中心,学生管理,教师管理,班级信息管理,课程信息管理,签到信息管理,考勤信息管理,请假信息管理,考勤统计管理等功能模块。
c语言
DICOM文件+DX放射平片—数字X射线图像DICOM测试文件,文件为.dcm类型DICOM图像文件文件,仅供需要了解DICOM或相关DICOM开发的技术人员当作测试数据或研究使用,请勿用于非法用途。
ASP.NET仓储管理系统源码 一、 程序说明 该程序大部分使用于生产制造厂,其中结合了制造厂的采购,销售,生产等. 开源部分是仓库系统后台管理系 统, 在给客户实施的过程中利用到了很多硬件设备, 设计到Wince系统,Android系统等PDA设备,各种打印 机,条码打印机,感应设备等,而且这些可能在整个项目中占据主导,而后台管理系统只是辅助作用的。 该程序使用的.NET MVC开发,大量使用到了jQuery,以及Bootstrap。 数据库使用了SQL Server.
环境说明: 开发语言:Java/php JDK版本:JDK1.8 数据库:mysql 5.7及以上 数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者
Skia-macOS-Release-arm64.zip aseprite 安装所需依赖安装包
中国品牌日研究特辑-数字经济时代下中国品牌高质量发展之用户趋势.pdf
c语言
一个基于qt开发的包含各种基础图像处理技术的桌面应用,图像处理算法基于halcon,有直接调用halcon脚本和执行halcon C++代码方式。 导入图片,预处理,滤波,边缘检测,阈值分割,形态学变换,图像增强,图像变换,
技术选型 【后端】:Java 【框架】:springboot 【前端】:vue 【JDK版本】:JDK1.8 【服务器】:tomcat7+ 【数据库】:mysql 5.7+ 项目包含前后台完整源码。 项目都经过严格调试,确保可以运行! 具体项目介绍可查看博主文章或私聊获取 助力学习实践,提升编程技能,快来获取这份宝贵的资源吧! 在当今快速发展的信息技术领域,技术选型是决定一个项目成功与否的重要因素之一。基于以下的技术栈,我们为您带来了一份完善且经过实践验证的项目资源,让您在学习和提升编程技能的道路上事半功倍。以下是该项目的技术选型和其组件的详细介绍。 在后端技术方面,我们选择了Java作为编程语言。Java以其稳健性、跨平台性和丰富的库支持,在企业级应用中处于领导地位。项目采用了流行的Spring Boot框架,这个框架以简化Java企业级开发而闻名。Spring Boot提供了简洁的配置方式、内置的嵌入式服务器支持以及强大的生态系统,使开发者能够更高效地构建和部署应用。 前端技术方面,我们使用了Vue.js,这是一个用于构建用户界面的渐进式JavaScript框架。Vue以其易上手、灵活和性能出色而受到开发者的青睐,它的组件化开发思想也有助于提高代码的复用性和可维护性。 项目的编译和运行环境选择了JDK 1.8。尽管Java已经推出了更新的版本,但JDK 1.8依旧是一种成熟且稳定的选择,广泛应用于各类项目中,确保了兼容性和稳定性。 在服务器方面,本项目部署在Tomcat 7+之上。Tomcat是Apache软件基金会下的一个开源Servlet容器,也是应用最为广泛的Java Web服务器之一。其稳定性和可靠的性能表现为Java Web应用提供了坚实的支持。 数据库方面,我们采用了MySQL 5.7+。MySQL是一种高效、可靠且使用广泛的关系型数据库管理系统,5.7版本在性能和功能上都有显著的提升。 值得一提的是,该项目包含了前后台的完整源码,并经过严格调试,确保可以顺利运行。通过项目的学习和实践,您将能更好地掌握从后端到前端的完整开发流程,提升自己的编程技能。欢迎参考博主的详细文章或私信获取更多信息,利用这一宝贵资源来推进您的技术成长之路!
固定资产管理系统源码(带条码打印) 功能介绍 1.基本信息管理:包括资产分类,基本资料,资产编号规则,保存列间距和选择资产显示列等功能; 2.固定资产管理:包括资产增加,资产更新,资产删除,资产清理,资产清理查询和资产折旧核算 3.数据维护管理:包系统数据初始化,系统数据备份/恢复等功能; 4.系统维护管理:包括本单位信息和操作员管理等功能; 5.系统辅助工具:包括计算器和记事本等功能; 6.条码打印:对条码进行打印等功能;
文件名:Realistic Car Controller v3.95.unitypackage Realistic Car Controller 是一款在 Unity 中用于实现高度真实感的车辆控制和物理效果的插件。它提供了一整套车轮物理、动力学、碰撞检测以及其他重要功能,能够帮助开发者轻松创建逼真的汽车模拟或赛车游戏。以下是该插件的一些主要特点和功能: 主要特点: 真实的物理模拟: 提供高度精确的车轮物理,能够模拟真实的轮胎与地面之间的互动。 支持复杂的悬挂系统,可以根据地形变化调整汽车的行驶方式。 引擎、转向、刹车和加速等系统都基于真实物理算法,提供更真实的驾驶体验。 多种驾驶模式: 提供不同的控制方式,适合不同类型的游戏。包括传统的赛车游戏控制、模拟驾驶以及更轻松的街机式驾驶控制。 支持手动和自动变速器,用户可以自由设置。 高级车体控制: 支持不同类型的汽车(如运动型、SUV、卡车等)定制,可以调整每辆车的重量、引擎力量、车轮配置等参数。 车辆能够根据不同的地面情况(如草地、雪地、泥地等)表现出不同的牵引力和滑移效果。 细致的视觉效果: 支持实时反射..
CrystalDiskInfo CrystalDiskInfo9_4_4.exe 监测查看硬盘健康状况 各类硬盘均可 仅适用于Windows