21,459
社区成员
发帖
与我相关
我的任务
分享
#include <resource.h>
#define ICO_MAIN 1000
#define DLG_MAIN 1000
#define IDC_FILE 1001
#define IDC_CMDLINE 1002
#define IDC_BROWSE 1003
ICO_MAIN ICON "my.ico"
DLG_MAIN DIALOG 111,104,201,57
STYLE DS_MODALFRAME | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "执行文件 "
FONT 9,"宋体"
{
LTEXT "文件名",-1,7,8,25,8
EDITTEXT IDC_FILE,35,5,160,12,ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
LTEXT "命令行",-1,7,25,25,8
EDITTEXT IDC_CMDLINE,35,22,160,12,ES_AUTOHSCROLL | WS_BORDER | WS_TABSTOP
PUSHBUTTON "浏览",IDC_BROWSE,115,38,40,14
PUSHBUTTON "执行",IDOK,155,38,40,14,WS_DISABLED | WS_TABSTOP
}
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include comdlg32.inc
includelib comdlg32.lib
ICO_MAIN equ 1000
DLG_MAIN equ 1000
IDC_FILE equ 1001
IDC_CMDLINE equ 1002
IDC_BROWSE equ 1003
.data?
hInstance dd ?
hWinMain dd ?
stProcInfo PROCESS_INFORMATION <?> ;在创建进程时相关的数据结构之一,该结构返回有关新进程及其主线程的信息。
szFileName db MAX_PATH dup (?)
szCmdLine db MAX_PATH dup (?)
.const
szFileExt db '可执行文件(*.exe;*.com)',0,'*.exe;*.com',0,0
.code
_ProcExec proc uses ebx esi edi _lParam
_ProcExec endp
_ProcDlgMain proc uses ebx esi edi hWnd,wMsg,wParam,lParam
local @dwThreadID
local @stOF:OPENFILENAME ;OPENFILENAME结构包含了GetOpenFileName和GetSaveFileName
;函数用来初始化打开或另存为对话框的信息。在用户关闭对话框后
;系统返回关于用户的选择信息到这个结构中。
mov eax,wMsg
.if eax == WM_INITDIALOG
push hWnd
pop hWinMain
invoke SendDlgItemMessage,hWnd,IDC_FILE,EM_LIMITTEXT,MAX_PATH,0
invoke SendDlgItemMessage,hWnd,IDC_CMDLINE,EM_LIMITTEXT,MAX_PATH,0
.elseif eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_COMMAND
mov eax,wParam
.if ax == IDOK
.if stProcInfo.hProcess
invoke TerminateProcess,stProcInfo.hProcess,-1 ;终止指定进程及其所有线程
.else
invoke CreateThread,NULL,0,offset _ProcExec,NULL,\
NULL,addr @dwThreadID
invoke CloseHandle,eax
.endif
.elseif ax == IDC_BROWSE
invoke RtlZeroMemory,addr @stOF,sizeof @stOF
push hWinMain
pop @stOF.hwndOwner
mov @stOF.lpstrFilter,offset szFileExt
mov @stOF.lpstrFile,offset szFileName
mov @stOF.nMaxFile,MAX_PATH
mov @stOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
invoke GetOpenFileName,addr @stOF
.if eax
invoke SetDlgItemText,hWnd,IDC_FILE,addr szFileName
.endif
.elseif ax == IDC_FILE
invoke GetWindowTextLength,lParam
mov ebx,eax
invoke GetDlgItem,hWnd,IDOK
invoke EnableWindow,eax,ebx
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start