⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apilist.asm

📁 APilist
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;2002-12-21完成

;ver 1.02 修正版

;使用ApiIn转换程序,这样list.ifo中的垃圾大大减少
;把VC函数原型改为BC函数原型,这样大部分函数可以显示IN或OUT
;例:
;WINGDIAPI BOOL  WINAPI GetWindowExtEx( IN HDC, OUT LPSIZE);
;                                       ^^      ^^^
;IN就是输入,OUT就是输出

;Not.inc里面的函数在VC、BC、MSDN中找不到函数原型可能在VC.NET,如果谁有,请帮我加入,谢谢!
;我买了一套英文6张碟,装不上,好像是FrontePage不能更新?
;希望大家多提意见cgb123@21cn.com

;小技巧用户可以自己添加函数或常数,比如addr添加说明
;在windows.inc添加一行"addr		MASM特有的 invoke专用"
;以后输入addr加空格就可显示"addr		MASM特有的 invoke专用"



;文件说明
;ApiList.asm	主程序源码
;ApiList.exe	主程序
;list.txt		自动完成数据库(从AoGo的Masm for EditPlus提取)
;list.ifo		函数原型库(从BC5.5的\include提取)
;windows.inc	数据类型、常数库(从Masm7.0提取修改过)
;readme.txt		说明文件
;data.tmp		数据类型记忆库
;Not.inc			还没有找到函数原型的函数(如果谁有VS.NET,请帮我加入,谢谢!)

;使用方法:

;按CTRL+ALT显示或隐藏本程序,按ALT+UP或ALT+DOWN选择函数
;输入函数按空格即可自动完成和提示
;(比如输入GetWi按空格就会在IDE里显示GetWindow,下面编辑框里会显示提示
;输入数据类型后下次再查看类型按'.'
;(如先输入LV_ITEM,中间可以输入各种函数,下次输入(如果变量是lv)lv.)就会显示数据类型
;多级输入(如:你已经输入了 NMHDR、LV_COLUMN,输入'..'就可以跳到NMHDR
;还有类型的提示
;		(比如输入NOTIFYICONDATA可以显示
;			NOTIFYICONDATAA STRUCT
;			  cbSize            DWORD      ?
;			  hwnd              DWORD      ?
;			  uID               DWORD      ?
;			  uFlags            DWORD      ?
;			  uCallbackMessage  DWORD      ?
;			  hIcon             DWORD      ?
;			  szTip             BYTE 64 dup (?)
;			NOTIFYICONDATAA ENDS

;本程序已经被收录在www.AoGoSoft.com的软件发布、www.pediy.com的相关工具的编译工具里、华军软件园编程工具
;如果有你们新的函数或程序修改加入请你们通知我的邮箱cgb123@21cn.com或AoGoSoft.com网站的留言
;本程序现在是用HOOK不能直接读取编辑器里的内容,如果有自己的编辑器或加入NotePad中的插件,那将有可能比VC还好用

;小技巧函数GetWindow它的常数是GW_,SetWindowPos它的常数是SWP_
;          ^  ^                   ^  ^     ^
;它们都是取函数的大写字母
;窗口风格ListBox是LBS_,Edit是ES_,Windows是WS_,都是在后面加个S(Style)
;其它的雷同

		.386
      .model flat, stdcall
      option casemap :none   ; case sensitive

; #########################################################################
		include \masm32\include\windows.inc
		include \masm32\include\gdi32.inc
		include \masm32\include\user32.inc
		include \masm32\include\kernel32.inc
		include \masm32\include\comctl32.inc

		includelib \masm32\lib\gdi32.lib
		includelib \masm32\lib\user32.lib
		includelib \masm32\lib\kernel32.lib
		includelib \masm32\lib\comctl32.lib
; #########################################################################
;WM_KEYBOARDHOOK    equ    WM_APP + 18

			WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
			WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
			HookProc proto :DWORD,:DWORD,:DWORD
			GetApi	proto
	.data
		szDisplayName	db "ApiList",0
		szClassName		db "ListBox",0
		szEditName		db "Edit",0
		ApiFile			db "list.txt",0
		ApiIfo			db "list.ifo",0
		TempData			db	"data.tmp",0
		WinDat			db "Windows.inc",0
		simsun			db "宋体",0
	.data?
		ScreenSize		SIZEL <?>
		lpfnWndProc		dd ?
		hInstance		dd ?
		CommandLine		dd ?
		hWnd				dd ?
		m_Edit			HWND ?
		structends		db 4096 dup (?)
		ApiReset			db 4096 dup (?)
		ItemBuffer		db 270 dup (?)
		nfile				dd ?
		br					dd ?
		nfor				dd ?
		po					POINT <?>
		hHook				dd	?
		nFont				dd ?
		szAscii			db	32 dup (?)
		IsHook			dd ?
		strfor			dd ?
	.code
start:
		invoke GetModuleHandle, NULL
		mov hInstance, eax

		invoke GetCommandLine
		mov CommandLine, eax

		invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT
		invoke ExitProcess,eax

; #########################################################################

WinMain proc hInst     :DWORD,
					hPrevInst :DWORD,
					CmdLine   :DWORD,
					CmdShow   :DWORD
				LOCAL msg:MSG
		invoke CreateFont,12,0,0,0,0,FALSE,FALSE,FALSE,DEFAULT_CHARSET,DEFAULT_QUALITY,DEFAULT_QUALITY,DEFAULT_QUALITY,FIXED_PITCH + FF_SWISS,addr simsun
		mov nFont,eax
		invoke CreateWindowEx,WS_EX_TOPMOST,
					ADDR szEditName,
					ADDR szDisplayName,
					ES_READONLY + ES_WANTRETURN + ES_MULTILINE + WS_POPUP \
					+WS_BORDER + ES_AUTOVSCROLL+ES_AUTOHSCROLL,
					0,150,800,0,
					NULL,NULL,
					hInst,NULL
		mov m_Edit,eax
		invoke CreateWindowEx,WS_EX_TOPMOST,
					ADDR szClassName,
					ADDR szDisplayName,WS_POPUP+WS_BORDER+LBS_NOSEL+WS_VSCROLL,
					0,0,300,150,
					m_Edit,NULL,
					hInst,NULL
		mov   hWnd,eax

		invoke SetWindowLong,hWnd,GWL_WNDPROC,ADDR WndProc
		mov lpfnWndProc, eax
		invoke SendMessage,hWnd,WM_SETFONT,nFont,0
		invoke SendMessage,hWnd,LB_INITSTORAGE,30000,500000
		invoke SendMessage,m_Edit,WM_SETFONT,nFont,0
		invoke ShowWindow,m_Edit,SW_SHOWNOACTIVATE
		mov br,4
		invoke SendMessage,m_Edit,EM_SETTABSTOPS,1,addr br
		invoke CreateFile,addr	TempData,GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL
		invoke CloseHandle,eax
		invoke CreateFile,ADDR ApiFile,080000000h,03,
			0,03,80,NULL
		mov nfile,eax
		push edi
		.while eax != -1
			invoke ReadFile,nfile,addr ItemBuffer,128,addr br,NULL
			cmp br,128
			jnz FileEnd
			lea edi,ItemBuffer
			mov ecx,br
			mov al,0dh
			repne scasb
			dec edi
			mov BYTE ptr [edi],0
			sub ecx,br
			not ecx
			inc ecx
			inc ecx
			add nfor,ecx
			invoke SetFilePointer,nfile,nfor,NULL,FILE_BEGIN
			.if br != 0
				invoke SendMessage,hWnd,LB_ADDSTRING,0,ADDR ItemBuffer
			.else
				mov eax,-1
			.endif
		.endw
FileEnd:
		pop edi
		invoke CloseHandle,nfile
      ; --------------------------------------------------------
		invoke GetSystemMetrics,SM_CXFULLSCREEN
		mov ScreenSize.x,eax
		invoke GetSystemMetrics,SM_CYFULLSCREEN
		shr eax,1
		mov ScreenSize.y,eax
		invoke ShowWindow,hWnd,SW_SHOWNOACTIVATE
		invoke ShowWindow,hWnd,SW_HIDE
		invoke UpdateWindow,hWnd
		mov nfor,0
		invoke SetWindowsHookEx,WH_JOURNALRECORD,addr HookProc,hInstance,NULL
		mov hHook,eax
		mov IsHook,TRUE
		mov BYTE ptr ItemBuffer,0
		invoke SetTimer,hWnd,1,50,NULL
      ;===================================
      ; Loop until PostQuitMessage is sent
      ;===================================
StartLoop:
		invoke GetMessage,ADDR msg,NULL,0,0
		cmp eax, 0
		je ExitLoop
		invoke TranslateMessage, ADDR msg
		invoke DispatchMessage,  ADDR msg
		jmp StartLoop
ExitLoop:
		mov eax,msg.wParam
		ret
WinMain endp
; #########################################################################
WndProc proc hWin   :DWORD,
             uMsg   :DWORD,
             wParam :DWORD,
             lParam :DWORD
	.if uMsg == WM_CLOSE
	.elseif uMsg == WM_DESTROY
		invoke DeleteObject,nFont
		invoke PostQuitMessage,NULL
		invoke UnhookWindowsHookEx,hHook
		xor eax,eax
		ret
	.elseif uMsg == WM_LBUTTONUP
		invoke SendMessage,hWin,LB_GETCURSEL,0,0
		invoke SendMessage,hWin,LB_GETTEXT,eax,addr ItemBuffer+128
		call GetApi
		mov nfor,0
		invoke SendMessage,m_Edit,EM_GETLINECOUNT,0,0
		push eax
		xor ecx,ecx
		xor ebx,ebx
		.while ecx != [esp]
			push ecx
			mov WORD ptr ItemBuffer+128,128
			invoke SendMessage,m_Edit,EM_GETLINE,ecx,addr ItemBuffer+128
			.if ebx < eax
				mov ebx,eax
			.endif
			pop ecx
			inc ecx
		.endw
		pop eax
		imul ebx,ebx,6
		add ebx,4
		imul eax,eax,14
		.if po.y > 300
			sub po.y,eax
		.else
			add po.y,24
		.endif
		invoke MoveWindow,m_Edit,5,po.y,ebx,eax,TRUE
	.elseif uMsg == WM_RBUTTONUP
		invoke SendMessage,hWin,WM_DESTROY,0,0
	.elseif uMsg == WM_TIMER
		invoke GetAsyncKeyState,VK_MENU
		push eax
		invoke GetAsyncKeyState,VK_CONTROL
		pop ebx
		.if eax >2 && ebx>2
			.while eax != 0
				invoke GetAsyncKeyState,VK_CONTROL
			.endw
			.if IsHook != 0
				invoke UnhookWindowsHookEx,hHook
				invoke ShowWindow,hWin,SW_HIDE
				invoke ShowWindow,m_Edit,SW_HIDE
				mov nfor,-1
				mov IsHook,0
			.else
				invoke SetWindowsHookEx,WH_JOURNALRECORD,addr HookProc,hInstance,NULL
				mov hHook,eax
				invoke ShowWindow,hWin,SW_SHOWNOACTIVATE
				invoke ShowWindow,m_Edit,SW_SHOWNOACTIVATE
				mov nfor,0
				mov BYTE ptr ItemBuffer,0
				mov IsHook,TRUE
			.endif
		.endif
		invoke GetAsyncKeyState,VK_MENU
		.if eax >2
			invoke GetAsyncKeyState,VK_UP
			push eax
			invoke GetAsyncKeyState,VK_DOWN
			pop ebx
			.if eax >2 || ebx >2
				invoke SendMessage,hWnd,LB_GETTOPINDEX,0,0
				.if ebx > 2
					dec eax
				.else
					inc eax
				.endif
				invoke SendMessage,hWnd,LB_SETTOPINDEX,eax,0
			.endif
			invoke GetAsyncKeyState,VK_PGUP
			PUSH eax
			invoke GetAsyncKeyState,VK_PGDN
			pop ebx
			.if eax >2 || ebx >2
				invoke SendMessage,hWnd,LB_GETTOPINDEX,0,0
				.IF EBX>2
					SUB eax,10
				.ELSE
					ADD eax,10
				.ENDIF
				invoke SendMessage,hWnd,LB_SETTOPINDEX,eax,0
			.endif
			ret
		.endif
	.endif
	invoke CallWindowProc,lpfnWndProc,hWin,uMsg,wParam,lParam
	ret
WndProc endp
HookProc	proc	_dwCode,_wParam,_lParam
		local	@szKeyState[256]:byte
		invoke	CallNextHookEx,hHook,_dwCode,_wParam,_lParam
		pushad
		.if	_dwCode == HC_ACTION && nfor != -1
			mov ebx,_lParam
			assume ebx:ptr EVENTMSG
			.if [ebx].message == WM_KEYDOWN
				invoke GetCaretPos,ADDR po
				invoke GetFocus
				invoke ClientToScreen,eax,ADDR po
				invoke GetKeyboardState,addr @szKeyState
				invoke GetKeyState,VK_SHIFT
				mov @szKeyState + VK_SHIFT,al
				mov ecx,[ebx].paramH
				shr ecx,16
				invoke ToAscii,[ebx].paramL,ecx,addr @szKeyState,addr szAscii,0
				mov byte ptr szAscii [eax],0
				mov al,BYTE ptr szAscii
				.if al == 20h
					lea esi,ItemBuffer
					INVOKE SendMessage,hWnd,LB_GETTOPINDEX,0,0
					.if eax == 0
						mov nfor,0
						jmp @ret
					.endif
					INVOKE SendMessage,hWnd,LB_GETTEXT,eax,addr ItemBuffer+128
					push eax
					invoke lstrcmp,addr ItemBuffer,addr ItemBuffer+128
					pop ecx
					push eax
					push ecx
					.if eax == 0
						mov WORD ptr ItemBuffer+128[ecx],020h
					.endif
					.if nfor == 0
						mov nfor,0
						mov BYTE ptr ItemBuffer,0
						jmp @ret
					.endif
					xor eax,eax
					inc eax
					.while al != 0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -