Что нового

Сохранение нескольких screenshotov в одну папку

Gorenich

ГорыНыЧ
Сообщения
38
Репутация
0
Всем привет!
Подскажите пожалуйста!
Как сделать чтобы при сохранении скриншота файл не заменялся на новый, а создавался новый
НАПРИМЕР:GDIPlus_Image.jpg, GDIPlus_Image1.jpg, GDIPlus_Image2.jpg,,,,,,,,,GDIPlus_Image1000.jpg
Так выдает ошибку:
Код:
#include <ScreenCapture.au3>

_Main()

Func _Main()
    Local $hBmp

    ; Capture full screen
    $hBmp = _ScreenCapture_Capture ("")
For $j = 1 To 1000
    ; Save bitmap to file
    _ScreenCapture_SaveImage ('C:\GDIPlus' & $j &'.jpg', $hBmp)

EndFunc   ;==>_Main
Заранее большое спасибо!
Извините за глупые вопросы,я только учусь!
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Код:
#include <ScreenCapture.au3>

_Main()

Func _Main()
	For $j = 1 To 1000
		_ScreenCapture_Capture('C:\GDIPlus' & $j &'.jpg')
	Next
EndFunc
 
Автор
G

Gorenich

ГорыНыЧ
Сообщения
38
Репутация
0
Спасибо!



Добавлено:
Сообщение автоматически объединено:

Спасибо!Увидел!Тоже изменил!!!!!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Func _GetNextFileName($sPath, $sExt, $sPrefix = '', $sSuffix = '', $iAlignment = 1)

	Local $Result, $Count = 0

	$sPath = StringRegExpReplace($sPath, '\A[ \\]+|[ \\]+\Z', '')
	If Not $sPath Then
		$sPath = DllCall('kernel32.dll', 'int', 'GetCurrentDirectoryW', 'dword', 4096, 'wstr', '')
		$sPath = $sPath[2]
	EndIf
	$sExt = StringRegExpReplace($sExt, '\A[ .]+', '')
	Do
		$Count += 1
		$Result = StringFormat($sPath & '\' & $sPrefix & '%0' & $iAlignment & 's' & $sSuffix & '.' & $sExt, $Count)
	Until Not FileExists($Result)
	Return $Result
EndFunc   ;==>_GetNextFileName

ConsoleWrite(_GetNextFileName('C:\', '.jpg', 'Image', '', 3) & @CR)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Gorenich,
Можно еще так попробовать.
Код:
#include <ScreenCapture.au3>
#include <File.au3>

For $i = 1 To 10
	_My_Screen(@ScriptDir & '\My_ScreenShots')
	ConsoleWrite(@error & @LF)
	Sleep(2000)
Next

Func _My_Screen($s_Dir, $s_File_Name = 'ScreenShot', $s_Ext = 'jpg', $i_Left = 0, $i_Top = 0, $i_Right = -1, $i_Bottom = -1, $f_Cursor = False)
	Local $a_List
	If Not FileExists($s_Dir) Then
		If Not DirCreate($s_Dir) Then Return SetError(1)
	EndIf
	$a_List = _FileListToArray($s_Dir, $s_File_Name & '*.' & $s_Ext, 1)
	If @error And @error < 4 Then
		Return SetError(1)
	ElseIf @error = 4 Then
		$s_File_Name &= '_1.' & $s_Ext
	Else
		$s_File_Name &= '_' & $a_List[0] + 1 & '.' & $s_Ext
	EndIf
	_ScreenCapture_Capture($s_Dir & '\' & $s_File_Name, $i_Left, $i_Top, $i_Right, $i_Bottom, $f_Cursor)
	Return SetError(@error)
EndFunc   ;==>_My_Screen
 
Автор
G

Gorenich

ГорыНыЧ
Сообщения
38
Репутация
0
Он в файле создает 1000 одинаковых скринов с разным именем
А как сделать чтобы 1скрин,но когда делал новый то имя менялось на 1,2,3,4,5,6,7,....
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Еще раз внимательно посмотри предыдущие два поста. Это и есть ответ на твой вопрос.

P.S

Можно еще использовать _WinAPI_PathYetAnotherMakeUniqueName().
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Yashied [?]
Можно еще использовать _WinAPI_PathYetAnotherMakeUniqueName()
У нее ограничение (у меня на XP) на 999 файлов. У меня последний файл создается по имени test (999).txt:
Код:
#include <WinAPIEx.au3>

$sFile = @ScriptDir & '\TestFolder\Test\test.txt'

For $i = 0 To 2100
	$hFile = FileOpen(_WinAPI_PathYetAnotherMakeUniqueName($sFile), 10)
	FileWrite($hFile, $i + 1)
	FileClose($hFile)
Next
А так без ограничения (вернее ограничение на 998001 файл):
Код:
#include <WinAPIEx.au3>

$sFolder = @ScriptDir & '\TestFolder\Test'
$sFile = '\test.txt'

For $i = 0 To 2100
	If Not Mod($i, 999) Then
		$sFolder = _WinAPI_PathYetAnotherMakeUniqueName($sFolder)
	EndIf
	$sPath = $sFolder & $sFile
	$hFile = FileOpen(_WinAPI_PathYetAnotherMakeUniqueName($sPath), 10)
	FileWrite($hFile, $i + 1)
	FileClose($hFile)
Next
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Yashied [?]
Неверно возвращает если файл существует и указан суффикс такой же как имя файла:

Код:
ConsoleWrite(_GetNextFileName(@DesktopDir, '.txt', 'test', '', 3) & @CR)

на рабочем столе при этом имеется файл test.txt.

Я для себя использую функцию _FileNewNameEx.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
Func _GetNextFileName($sPath, $sExt, $sPrefix = '', $sSuffix = '', $iAlignment = 1)

	Local $Result, $Count = 0

	$sPath = StringRegExpReplace($sPath, '\A[ \\]+|[ \\]+\Z', '')
	If Not $sPath Then
		$sPath = DllCall('kernel32.dll', 'int', 'GetCurrentDirectoryW', 'dword', 4096, 'wstr', '')
		$sPath = $sPath[2]
	EndIf
	$sExt = StringRegExpReplace($sExt, '\A[ .]+', '')
	Do
		$Count += 1
		$Result = $sPath & '\' & $sPrefix & StringFormat('%0' & $iAlignment & 's', $Count) & $sSuffix & '.' & $sExt
	Until Not FileExists($Result)
	Return $Result
EndFunc   ;==>_GetNextFileName
 
Верх