编程达人99我吧~~~

大神帮我编个程序吧~~
也就是个自启动文件(随电脑启动或电脑登陆桌面后启动,反正要自动的!)~~
1. 这个启动文件是启动程序X的(这个X可以修改为任意程序)
2. X程序启动完毕后模拟键盘按键F9(可以在第一步运行后加个定时,比如30秒后执行第2步)



2009-11-08 09:58
2009-11-08 12:03
2009-11-08 12:54
能帮我编个现成的吗?
2009-11-08 13:55
2009-11-09 06:58
程序代码:编译一下就行了。
;*******************************************************************
;配置ini文件,把要启动的程序写在=号后面
;by onepc
;*******************************************************************
.386
.model flat,stdcall
option casemap:none
;*******************************************************************
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
include Shlwapi.inc
includelib shlwapi.lib ;PathFileExists
include Advapi32.inc
includelib Advapi32.lib ;注册表
include macro.asm ;ctxt("")
;*******************************************************************
.data
szMutex db 'onepc',0
szConfigFile db '\cfg.ini',0 ;配置文件
szSection db 'onepc',0 ;节名
szKeyName db '开机运行程序',0
szKeyValue db 'notepad.exe',0dh,0ah,'; BY 153785587',0
szRegSub db 'Software\Microsoft\Windows\CurrentVersion\Run',0
;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
.data?
hInstance dd ?
hMutex dd ?
szFileBuffer db MAX_PATH dup (?) ;ini文件
szReturnBuffer db MAX_PATH dup (?) ;读取ini的值
.code
;*******************************************************************
_CheckChongFu proc
invoke CreateMutex,NULL,FALSE,addr szMutex
.if eax
mov hMutex,eax
invoke GetLastError
.if eax==ERROR_ALREADY_EXISTS
invoke ReleaseMutex,hMutex
invoke ExitProcess,NULL
.endif
invoke ReleaseMutex,hMutex
.endif
ret
_CheckChongFu endp
_CheckPath proc
invoke GetCurrentDirectory,MAX_PATH,addr szFileBuffer
invoke lstrcat,addr szFileBuffer,addr szConfigFile
invoke PathFileExists,addr szFileBuffer ;0表示不存在 1表示存在
.if eax!=1
invoke MessageBox,NULL,CTXT("INI文件不存在,是否创建?"),CTXT("ERROR"),MB_OKCANCEL
.if eax==IDOK
invoke WritePrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szFileBuffer
.if !eax
invoke MessageBox,NULL,CTXT("不能建立文件程序退出,是否有可写权限?"),CTXT("ERROR"),MB_OK
invoke ExitProcess,NULL
.endif
.else
invoke ExitProcess,NULL
.endif
.endif
invoke GetPrivateProfileString,addr szSection,addr szKeyName,addr szKeyValue,addr szReturnBuffer,sizeof szReturnBuffer,addr szFileBuffer
ret
_CheckPath endp
_CreateRegRuns proc
local @hReg:DWORD
local @szPathName[MAX_PATH]:BYTE
local @dwLen:DWORD
local @dwReadSize:DWORD
local @szReadReg[MAX_PATH]:BYTE
invoke RtlZeroMemory,addr @szReadReg,sizeof @szReadReg
invoke RtlZeroMemory,addr @szPathName,sizeof @szPathName
invoke GetModuleFileName,hInstance,addr @szPathName,MAX_PATH
invoke lstrlen,addr @szPathName
mov @dwLen,eax
invoke RegCreateKeyEx,HKEY_CURRENT_USER , addr szRegSub,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,addr @hReg,NULL
mov @dwReadSize,sizeof @szReadReg
invoke RegQueryValueEx,@hReg,addr szMutex,0,NULL,addr @szReadReg,addr @dwReadSize
.if eax==ERROR_SUCCESS
invoke lstrcmpi,addr @szPathName,addr @szReadReg
.if !eax
;invoke MessageBox,NULL,addr @szPathName,addr @szReadReg,0
jmp @F
.endif
.endif
invoke RegSetValueEx,@hReg,addr szMutex,0,REG_SZ,addr @szPathName,@dwLen
@@:
invoke RegCloseKey,@hReg
ret
_CreateRegRuns endp
_RunProcess proc
invoke Sleep,10000 ;十秒
invoke WinExec,addr szReturnBuffer,SW_NORMAL
invoke Sleep,5000 ;五秒
invoke keybd_event,VK_F9,0,0,0
invoke keybd_event,VK_F9,0,KEYEVENTF_KEYUP,0
ret
_RunProcess endp
;*******************************************************************
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke _CheckChongFu
invoke _CheckPath
invoke _CreateRegRuns
invoke _RunProcess
invoke ExitProcess,NULL
end start
;*******************************************************************
2009-11-09 09:28

2009-11-09 10:08

2009-11-09 10:52


2009-11-09 13:58


再教教我~~
2009-11-09 14:13