Нужно сделать это из того же приложения, чтобы оно само себя дописало. А оно во время выполнения блокируется. Я вижу один выход: снять блокировку с приложения.
Как это сделать?
Предложите другие варианты...
#Compile Exe
#Include "Win32api.inc"
Function IsFile(ByVal FileName As String) As Long
ErrClear
Local Attr As Long
Local LongPath As Asciiz * %MAX_PATH
Local ShortPath As Asciiz * %MAX_PATH
Local Path As String
Local Temp As String
Replace $Dq With "" In FileName
Path = FileName
While Len(Path)
Temp = Extract$(Path, "\")
LongPath = ShortPath & Temp
Path = LTrim$(Mid$(Path, Len(Temp) + 1), "\")
GetShortPathName LongPath, ShortPath, SizeOf(ShortPath)
ShortPath = ShortPath & "\"
Wend
FileName = RTrim$(ShortPath, "\")
Attr = GetAttr(FileName)
If Err Or IsTrue (Attr And %FILE_ATTRIBUTE_DIRECTORY) Then GoTo errtrap:
Function = %TRUE
Exit Function
errtrap:
Function = %FALSE
End Function
Function SystemDirectory () As String
On Error GoTo errtrap:
Local zText As Asciiz * %MAX_PATH
Local syspath As String
GetSystemDirectory zText, %MAX_PATH
syspath=Trim$(zText)
If Left$(syspath,1)<>"\" Then
syspath=syspath & "\"
End If
Function = syspath
Exit Function
errtrap:
Function=""
Exit Function
End Function
Function GetCommandExe() As String
On Error GoTo errtrap:
Local syspath As String
Local cmdpath As String
syspath = SystemDirectory()
If IsFile(syspath & "cmd.exe")=1 Then
cmdpath=syspath & "cmd.exe"
Else
If IsFile(syspath & "command.com")=1 Then
cmdpath=syspath & "command.com"
Else
cmdpath=""
End If
End If
Function=cmdpath
Exit Function
errtrap:
Function=""
Exit Function
End Function
Function CheckComspec() As Long
On Error GoTo errtrap:
Local tmpcmd As String
If Len(Environ$("COMSPEC"))<=0 Then
tmpcmd = GetCommandExe
SetEnvironmentVariable "COMSPEC",ByCopy tmpcmd
End If
Function=%TRUE
Exit Function
errtrap:
Function=%FALSE
Exit Function
End Function
Function myShellExecute (Program As String, Arguments As String, nShow As Long) As Dword
On Error GoTo errtrap:
Local ShellInfo As SHELLEXECUTEINFO
ShellInfo.cbSize = SizeOf(ShellInfo)
ShellInfo.fMask = %SEE_MASK_FLAG_NO_UI Or %SEE_MASK_NOCLOSEPROCESS
ShellInfo.lpFile = StrPtr(Program)
ShellInfo.lpParameters = StrPtr(Arguments)
ShellInfo.nShow = nShow
If ShellExecuteEx(ShellInfo) Then Function = ShellInfo.hProcess
Exit Function
errtrap:
Function=0
End Function
Function sFile(ByVal n As String) As Dword
Open "file~.tmp" For Binary As 1
Put$ #1,n
Close 1
End Function
Function PBMain() As Long
Local comspec As String
Local cmdline As String
Local szModuleName As Asciiz * %MAX_PATH
GetModuleFileName ByVal 0, szModuleName, SizeOf (szModuleName)
sFile "hello world!!!!!!!!!!!!"
If CheckComspec()=%TRUE Then
comspec = Environ$("COMSPEC")
cmdline = "/c copy /B " & $Dq & szModuleName & $Dq & " + file~.tmp"
Call myShellExecute(comspec,cmdline,%SW_HIDE)
cmdline = "/c del file~.tmp >> NUL"
Call myShellExecute(comspec,cmdline,%SW_HIDE)
End If
End Function
Crio писал(а):Условие: Никаких посторонних приложений, всплывающих ДОС-окон и появляющихся-исчезающих файлов.
Условие: Никаких посторонних приложений, всплывающих ДОС-окон и появляющихся-исчезающих файлов.
Автор, получается, говорил о файлах, исчезающих завтра
jangle писал(а):С точки зрения пользователя, посторонний файл и не появляется. Точнее время его "жизни" cтоль мало (десятые доли секунды), что оболочка Windows, а тем более файл-менеджеры не успевают прореагировать на его рождение и смерть.
tyomitch писал(а):Угу, особенно на флоппике или медленной шаре.
Угу, особенно на флоппике или медленной шаре.
Зачем-то же автор поставил своё условие? Наверное не просто так?
Off 2: А по-моему давно пора бить лицо создателям установщика винды за то, что F6 до сих пор признает только дисковод.tyomitch писал(а):Оффтоп: один раз помогал ставить винду на комп, который был куплен с пустым винтом, драйверами к нему на дискетке, и без флоппи-дисковода. Установщик винды не видит винт, если не нажать F6 и не подсунуть ему эту дискетку. Интересно, каким местом думали собиравшие такой комп продавцы?
Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 78