编程达人99我吧~~~
大神帮我编个程序吧~~
也就是个自启动文件(随电脑启动或电脑登陆桌面后启动,反正要自动的!)~~
1. 这个启动文件是启动程序X的(这个X可以修改为任意程序)
2. X程序启动完毕后模拟键盘按键F9(可以在第一步运行后加个定时,比如30秒后执行第2步)
编译一下就行了。 ;******************************************************************* ;配置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 ;*******************************************************************