优先级调度算法

优先级调度算法,第1张

优先级调度算法的原理是给每个进程赋予一个优先级,每次需要进程切换时,找一个优先级最高的进程进行调度。这样,如果赋予长进程一个高优先级,则该进程就不会再“饥饿”。事实上,STCF算法本身就是一种优先级调度,只不过它给予短进程高优先级而已。

优先级调度的优点是可以赋予重要的进程以高优先级以确保重要任务能够得到CPU时间。其缺点则与STCF算法一样,低优先级的进程可能会“饥饿”。不过,这个问题在优先级调度算法里比在STCF里好解决:只要动态地调节优先级即可。例如,在一个进程执行特定CPU时间后将其优先级降低一个级别,或者将处于等待进程的优先级提高一个级别。这样,一个进程如果等待时间很长,其优先级将因持续提升而超越其他进程的优先级,从而得到CPU时间。这样,“饥饿”现象就可以防止。

不过,优先级调度还有一个缺点,就是响应时间不能保证,除非将一个进程的优先级设置为最高。即使将优先级设置为最高,但如果每个人都将自己进程的优先级设为最高,则响应时间还是无法保证。

为了你20分自己去写一个不划算

你把 “” 后面的内容删除掉就行了

还可以把子程序部分直接加到代码中去,就是不调用子程序 (这样老师绝对发现不了 ………^_^)

下面是代码asm 和rc

最简单的记事本

.asm

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Sample code for <Win32ASM Programming 2nd Edition>

by 罗云彬, http://asm.yeah.net

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Richedit.asm

“丰富编辑”控件的使用例子

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

使用 nmake 或下列命令进行编译和链接:

ml /c /coff Richedit.asm

rc Richedit.rc

Link /subsystem:windows Richedit.obj Richedit.res

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.386

.model flat, stdcall

option casemap :none

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Include 文件定义

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

include windows.inc

include user32.inc

includelib user32.lib

include kernel32.inc

includelib kernel32.lib

include comdlg32.inc

includelib comdlg32.lib

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Equ 等值定义

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

ICO_MAIN equ 1000

IDA_MAIN equ 2000

IDM_MAIN equ 2000

IDM_OPEN equ 2101

IDM_SAVE equ 2102

IDM_EXIT equ 2103

IDM_UNDO equ 2201

IDM_REDO equ 2202

IDM_SELALL equ 2203

IDM_COPY equ 2204

IDM_CUT equ 2205

IDM_PASTE equ 2206

IDM_FIND equ 2207

IDM_FINDPREV equ 2208

IDM_FINDNEXT equ 2209

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

数据段

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.data?

hInstance dd ?

hWinMain dd ?

hMenu dd ?

hWinEdit dd ?

hFile dd ?

hFindDialog dd ?

idFindMessage dd ?

szFileName db MAX_PATH dup (?)

szFindText db 100 dup (?)

.data

stFind FINDREPLACE <sizeof FINDREPLACE,0,0,FR_DOWN,szFindText,\

0,sizeof szFindText,0,0,0,0>

.const

FINDMSGSTRING db 'commdlg_FindReplace',0

szClassName db 'Wordpad',0

szCaptionMain db '记事本',0

szDllEdit db 'RichEd20.dll',0

szClassEdit db 'RichEdit20A',0

szNotFound db '字符串未找到!',0

szFilter db 'Text Files(*.txt)',0,'*.txt',0

db 'All Files(*.*)',0,'*.*',0,0

szDefaultExt db 'txt',0

szErrOpenFile db '无法打开文件!',0

szModify db '文件已修改,是否保存?',0

szFont db '宋体',0

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

代码段

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

.code

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

Richedit的流 *** 作

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcStream proc uses ebx edi esi _dwCookie,_lpBuffer,_dwBytes,_lpBytes

.if _dwCookie

invoke ReadFile,hFile,_lpBuffer,_dwBytes,_lpBytes,0

.else

invoke WriteFile,hFile,_lpBuffer,_dwBytes,_lpBytes,0

.endif

xor eax,eax

ret

_ProcStream endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

保存文件,如果没有打开或创建文件则调用“另存为”子程序

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_SaveFile proc

local @stES:EDITSTREAM

invoke SetFilePointer,hFile,0,0,FILE_BEGIN

invoke SetEndOfFile,hFile

mov @stES.dwCookie,FALSE

mov @stES.pfnCallback,offset _ProcStream

invoke SendMessage,hWinEdit,EM_STREAMOUT,SF_TEXT,addr @stES

invoke SendMessage,hWinEdit,EM_SETMODIFY,FALSE,0

ret

_SaveFile endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

打开及输入文件

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_OpenFile proc

local @stOF:OPENFILENAME

local @stES:EDITSTREAM

********************************************************************

显示“打开文件”对话框

********************************************************************

invoke RtlZeroMemory,addr @stOF,sizeof @stOF

mov @stOF.lStructSize,sizeof @stOF

push hWinMain

pop @stOF.hwndOwner

mov @stOF.lpstrFilter,offset szFilter

mov @stOF.lpstrFile,offset szFileName

mov @stOF.nMaxFile,MAX_PATH

mov @stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST

mov @stOF.lpstrDefExt,offset szDefaultExt

invoke GetOpenFileName,addr @stOF

.if eax

********************************************************************

创建文件

********************************************************************

invoke CreateFile,addr szFileName,GENERIC_READ or GENERIC_WRITE,\

FILE_SHARE_READ or FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0

.if eax == INVALID_HANDLE_VALUE

invoke MessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONSTOP

ret

.endif

push eax

.if hFile

invoke CloseHandle,hFile

.endif

pop eax

mov hFile,eax

********************************************************************

读入文件

********************************************************************

mov @stES.dwCookie,TRUE

mov @stES.pfnCallback,offset _ProcStream

invoke SendMessage,hWinEdit,EM_STREAMIN,SF_TEXT,addr @stES

invoke SendMessage,hWinEdit,EM_SETMODIFY,FALSE,0

.endif

ret

_OpenFile endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

允许继续 *** 作则返回TRUE

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_CheckModify proc

local @dwReturn

mov @dwReturn,TRUE

invoke SendMessage,hWinEdit,EM_GETMODIFY,0,0

.if eax &&hFile

invoke MessageBox,hWinMain,addr szModify,addr szCaptionMain,\

MB_YESNOCANCEL or MB_ICONQUESTION

.if eax == IDYES

call _SaveFile

.elseif eax == IDCANCEL

mov @dwReturn,FALSE

.endif

.endif

mov eax,@dwReturn

ret

_CheckModify endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

查找文字

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_FindText proc

local @stFindText:FINDTEXTEX

********************************************************************

设置查找范围

********************************************************************

invoke SendMessage,hWinEdit,EM_EXGETSEL,0,addr @stFindText.chrg

.if stFind.Flags &FR_DOWN

push @stFindText.chrg.cpMax

pop @stFindText.chrg.cpMin

.endif

mov @stFindText.chrg.cpMax,-1

********************************************************************

设置查找选项

********************************************************************

mov @stFindText.lpstrText,offset szFindText

mov ecx,stFind.Flags

and ecx,FR_MATCHCASE or FR_DOWN or FR_WHOLEWORD

********************************************************************

查找并把光标设置到找到的文本上

********************************************************************

invoke SendMessage,hWinEdit,EM_FINDTEXTEX,ecx,addr @stFindText

.if eax == -1

mov ecx,hWinMain

.if hFindDialog

mov ecx,hFindDialog

.endif

invoke MessageBox,ecx,addr szNotFound,NULL,MB_OK or MB_ICONINFORMATION

ret

.endif

invoke SendMessage,hWinEdit,EM_EXSETSEL,0,addr @stFindText.chrgText

invoke SendMessage,hWinEdit,EM_SCROLLCARET,NULL,NULL

ret

_FindText endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

根据情况改变菜单项状态

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_SetStatus proc

local @stRange:CHARRANGE

invoke SendMessage,hWinEdit,EM_EXGETSEL,0,addr @stRange

********************************************************************

mov eax,@stRange.cpMin

.if eax == @stRange.cpMax

invoke EnableMenuItem,hMenu,IDM_COPY,MF_GRAYED

invoke EnableMenuItem,hMenu,IDM_CUT,MF_GRAYED

.else

invoke EnableMenuItem,hMenu,IDM_COPY,MF_ENABLED

invoke EnableMenuItem,hMenu,IDM_CUT,MF_ENABLED

.endif

********************************************************************

invoke SendMessage,hWinEdit,EM_CANPASTE,0,0

.if eax

invoke EnableMenuItem,hMenu,IDM_PASTE,MF_ENABLED

.else

invoke EnableMenuItem,hMenu,IDM_PASTE,MF_GRAYED

.endif

********************************************************************

invoke SendMessage,hWinEdit,EM_CANREDO,0,0

.if eax

invoke EnableMenuItem,hMenu,IDM_REDO,MF_ENABLED

.else

invoke EnableMenuItem,hMenu,IDM_REDO,MF_GRAYED

.endif

********************************************************************

invoke SendMessage,hWinEdit,EM_CANUNDO,0,0

.if eax

invoke EnableMenuItem,hMenu,IDM_UNDO,MF_ENABLED

.else

invoke EnableMenuItem,hMenu,IDM_UNDO,MF_GRAYED

.endif

********************************************************************

invoke GetWindowTextLength,hWinEdit

.if eax

invoke EnableMenuItem,hMenu,IDM_SELALL,MF_ENABLED

.else

invoke EnableMenuItem,hMenu,IDM_SELALL,MF_GRAYED

.endif

********************************************************************

invoke SendMessage,hWinEdit,EM_GETMODIFY,0,0

.if eax &&hFile

invoke EnableMenuItem,hMenu,IDM_SAVE,MF_ENABLED

.else

invoke EnableMenuItem,hMenu,IDM_SAVE,MF_GRAYED

.endif

********************************************************************

.if szFindText

invoke EnableMenuItem,hMenu,IDM_FINDNEXT,MF_ENABLED

invoke EnableMenuItem,hMenu,IDM_FINDPREV,MF_ENABLED

.else

invoke EnableMenuItem,hMenu,IDM_FINDNEXT,MF_GRAYED

invoke EnableMenuItem,hMenu,IDM_FINDPREV,MF_GRAYED

.endif

********************************************************************

ret

_SetStatus endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_Init proc

local @stCf:CHARFORMAT

********************************************************************

注册“查找”对话框消息,初始化“查找”对话框的结构

********************************************************************

push hWinMain

pop stFind.hwndOwner

invoke RegisterWindowMessage,addr FINDMSGSTRING

mov idFindMessage,eax

********************************************************************

建立输出文本窗口

********************************************************************

invoke CreateWindowEx,WS_EX_CLIENTEDGE,offset szClassEdit,NULL,\

WS_CHILD OR WS_VISIBLE OR WS_VSCROLL OR WS_HSCROLL \

OR ES_MULTILINE or ES_NOHIDESEL,\

0,0,0,0,\

hWinMain,0,hInstance,NULL

mov hWinEdit,eax

invoke SendMessage,hWinEdit,EM_SETTEXTMODE,TM_PLAINTEXT,0

invoke RtlZeroMemory,addr @stCf,sizeof @stCf

mov @stCf.cbSize,sizeof @stCf

mov @stCf.yHeight,9 * 20

mov @stCf.dwMask,CFM_FACE or CFM_SIZE or CFM_BOLD

invoke lstrcpy,addr @stCf.szFaceName,addr szFont

invoke SendMessage,hWinEdit,EM_SETCHARFORMAT,0,addr @stCf

invoke SendMessage,hWinEdit,EM_EXLIMITTEXT,0,-1

ret

_Init endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_Quit proc

invoke _CheckModify

.if eax

invoke DestroyWindow,hWinMain

invoke PostQuitMessage,NULL

.if hFile

invoke CloseHandle,hFile

.endif

.endif

ret

_Quit endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_ProcWinMain proc uses ebx edi esi hWnd,uMsg,wParam,lParam

local @stRange:CHARRANGE

local @stRect:RECT

mov eax,uMsg

.if eax == WM_SIZE

invoke GetClientRect,hWinMain,addr @stRect

invoke MoveWindow,hWinEdit,0,0,@stRect.right,@stRect.bottom,TRUE

********************************************************************

处理菜单、加速键及工具栏消息

********************************************************************

.elseif eax == WM_COMMAND

mov eax,wParam

movzx eax,ax

.if eax == IDM_OPEN

invoke _CheckModify

.if eax

call _OpenFile

.endif

.elseif eax == IDM_SAVE

call _SaveFile

.elseif eax == IDM_EXIT

invoke _Quit

.elseif eax == IDM_UNDO

invoke SendMessage,hWinEdit,EM_UNDO,0,0

.elseif eax == IDM_REDO

invoke SendMessage,hWinEdit,EM_REDO,0,0

.elseif eax == IDM_SELALL

mov @stRange.cpMin,0

mov @stRange.cpMax,-1

invoke SendMessage,hWinEdit,EM_EXSETSEL,0,addr @stRange

.elseif eax == IDM_COPY

invoke SendMessage,hWinEdit,WM_COPY,0,0

.elseif eax == IDM_CUT

invoke SendMessage,hWinEdit,WM_CUT,0,0

.elseif eax == IDM_PASTE

invoke SendMessage,hWinEdit,WM_PASTE,0,0

.elseif eax == IDM_FIND

and stFind.Flags,not FR_DIALOGTERM

invoke FindText,addr stFind

.if eax

mov hFindDialog,eax

.endif

.elseif eax == IDM_FINDPREV

and stFind.Flags,not FR_DOWN

invoke _FindText

.elseif eax == IDM_FINDNEXT

or stFind.Flags,FR_DOWN

invoke _FindText

.endif

********************************************************************

.elseif eax == WM_INITMENU

call _SetStatus

.elseif eax == idFindMessage

.if stFind.Flags &FR_DIALOGTERM

mov hFindDialog,0

.else

invoke _FindText

.endif

********************************************************************

.elseif eax == WM_ACTIVATE

mov eax,wParam

.if (ax == WA_CLICKACTIVE ) || (ax == WA_ACTIVE)

invoke SetFocus,hWinEdit

.endif

********************************************************************

.elseif eax == WM_CREATE

push hWnd

pop hWinMain

invoke _Init

********************************************************************

.elseif eax == WM_CLOSE

call _Quit

********************************************************************

.else

invoke DefWindowProc,hWnd,uMsg,wParam,lParam

ret

.endif

********************************************************************

xor eax,eax

ret

_ProcWinMain endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

_WinMain proc

local @stWndClass:WNDCLASSEX

local @stMsg:MSG

local @hAccelerator,@hRichEdit

invoke LoadLibrary,offset szDllEdit

mov @hRichEdit,eax

invoke GetModuleHandle,NULL

mov hInstance,eax

invoke LoadMenu,hInstance,IDM_MAIN

mov hMenu,eax

invoke LoadAccelerators,hInstance,IDA_MAIN

mov @hAccelerator,eax

********************************************************************

注册窗口类

********************************************************************

invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

invoke LoadIcon,hInstance,ICO_MAIN

mov @stWndClass.hIcon,eax

mov @stWndClass.hIconSm,eax

invoke LoadCursor,0,IDC_ARROW

mov @stWndClass.hCursor,eax

push hInstance

pop @stWndClass.hInstance

mov @stWndClass.cbSize,sizeof WNDCLASSEX

mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW

mov @stWndClass.lpfnWndProc,offset _ProcWinMain

mov @stWndClass.hbrBackground,COLOR_BTNFACE+1

mov @stWndClass.lpszClassName,offset szClassName

invoke RegisterClassEx,addr @stWndClass

********************************************************************

建立并显示窗口

********************************************************************

invoke CreateWindowEx,NULL,\

offset szClassName,offset szCaptionMain,\

WS_OVERLAPPEDWINDOW,\

CW_USEDEFAULT,CW_USEDEFAULT,700,500,\

NULL,hMenu,hInstance,NULL

mov hWinMain,eax

invoke ShowWindow,hWinMain,SW_SHOWNORMAL

invoke UpdateWindow,hWinMain

********************************************************************

消息循环

********************************************************************

.while TRUE

invoke GetMessage,addr @stMsg,NULL,0,0

.break .if eax == 0

invoke TranslateAccelerator,hWinMain,@hAccelerator,addr @stMsg

.if eax == 0

invoke TranslateMessage,addr @stMsg

invoke DispatchMessage,addr @stMsg

.endif

.endw

invoke FreeLibrary,@hRichEdit

ret

_WinMain endp

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

start:

call _WinMain

invoke ExitProcess,NULL

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

end start

.rc

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#include <resource.h>

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#define ICO_MAIN 1000

#define IDA_MAIN 2000

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

#define IDM_MAIN 2000

#define IDM_OPEN 2101

#define IDM_SAVE 2102

#define IDM_EXIT 2103

#define IDM_UNDO 2201

#define IDM_REDO 2202

#define IDM_SELALL 2203

#define IDM_COPY 2204

#define IDM_CUT 2205

#define IDM_PASTE 2206

#define IDM_FIND 2207

#define IDM_FINDPREV 2208

#define IDM_FINDNEXT 2209

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

IDM_MAIN menu discardable

BEGIN

popup "文件(&F)"

BEGIN

menuitem "打开文件(&O)...\tCtrl+O", IDM_OPEN

menuitem "保存文件(&S)\tCtrl+S", IDM_SAVE

menuitem separator

menuitem "退出(&X)", IDM_EXIT

END

popup "编辑(&E)"

BEGIN

menuitem "撤销(&Z)\tCtrl+Z", IDM_UNDO

menuitem "重复(&Y)\tCtrl+Y", IDM_REDO

menuitem separator

menuitem "全选(&A)\tCtrl+A", IDM_SELALL

menuitem "拷贝(&C)\tCtrl+C", IDM_COPY

menuitem "剪切(&X)\tCtrl+X", IDM_CUT

menuitem "粘贴(&V)\tCtrl+V", IDM_PASTE

menuitem separator

menuitem "查找(&F)...\tCtrl+F", IDM_FIND

menuitem "查找上一个(&P)\tF2", IDM_FINDPREV

menuitem "查找下一个(&N)\tF3", IDM_FINDNEXT

END

END

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

IDA_MAIN accelerators

BEGIN

VK_F2, IDM_FINDPREV,VIRTKEY

VK_F3, IDM_FINDNEXT,VIRTKEY

"O", IDM_OPEN,VIRTKEY,CONTROL

"S", IDM_SAVE,VIRTKEY,CONTROL

"Z", IDM_UNDO,VIRTKEY,CONTROL

"Y", IDM_REDO,VIRTKEY,CONTROL

"A", IDM_SELALL,VIRTKEY,CONTROL

"C", IDM_COPY,VIRTKEY,CONTROL

"X", IDM_CUT,VIRTKEY,CONTROL

"V", IDM_PASTE,VIRTKEY,CONTROL

"F", IDM_FIND,VIRTKEY,CONTROL

END

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11041496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存