Есть такая функция, только не в kernel32, а в msvcrt. Соответственно для masm нужно подлинковывать msvcrt.lib, а для fasm импортировать из msvcrt.dll.
Еще раз спасибо, с CreatDirectory разобрался , не хотелось лишний раз создавать тему вы бы не могли объяснить как создать файл (**.bmp например)
hakeem Разумеется CreateFile )) Например: Код (Text): .data File_Name db "MyBMP.bmp", 0 .code invoke CreateFile, offset File_Name, GENERIC_READ or GENERIC_WRITE, 0, 0, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
Последним идет описатель временного файла, на основе которого создается текущий. Обычно этот описатель равен NULL. Описатель создаваемого файла возвращается в качестве значения функции.
Phantom_84 Если нужно создать файл из содержимого буфера обмена, нужно вставить его описатель, верно?
Стало быть вот так: Код (Text): ; читаем из буфера invoke OpenClipboard, hWnd invoke GetClipboardData, CF_BITMAP ; в eax - указатель на буфер с данными mov hBitmap,eax ;создаем файл **.bmp invoke CreateFile, offset File_Name, GENERIC_READ or GENERIC_WRITE, 0, 0,\ CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,hBitmap Если так то:
hakeem Мда... Ред бредкий... Последний параметр к CreateFile в Вашем случае вообще не нужно использовать. В него передаются только хэндлы уже открытых файлов, атрибуты которых Вы хотели бы приписать создаваемому файлу. Вам необходим только доступ для записи (GENERIC_WRITE). Для записи в файл - WriteFile. Недоступен просмотр, потому что файл на самом деле пуст, и к тому же Вы хэндл не закрыли. P.S. MSDN в помощь... причем по всем вышеупомянутым в теме вопросам.
hakeem Да. Но, как я уже написал, всё равно MSDN в помощь. Потому как GetClipboardData тоже не указатель на данные возвращает.
MSDN конечно классная штука, но когда с английским не ахти... Еще один вопрос Код (Text): BOOL WriteFile( HANDLE hFile, // дескриптор файла LPCVOID lpBuffer, // буфер данных DWORD nNumberOfBytesToWrite, // число байтов для записи LPDWORD lpNumberOfBytesWritten, // число записанных байтов LPOVERLAPPED lpOverlapped // асинхронный буфер ); hFile- мне даст CreateFile А по остальному я немножко не в понятках... Код (Text): lpBuffer [in] Указатель на буфер, содержащий данные, которые будут записаны в файл. nNumberOfBytesToWrite nNumberOfBytesToWrite [in] Число байтов, которые будут записаны в файл. Значение нуля определяет пустую операцию записи. Поведение пустой операции записи зависит от лежащей в основе файловой системы. Чтобы сократить или продлить файл, используйте функцию SetEndOfFile. Операции записи в именованном канале по всей сети ограничены 65 535 байтами. lpNumberOfBytesWritten [out] Указатель на переменную, которая получает число записанных байтов. Функция WriteFile устанавливает это значение в нуль перед выполнением какой-либо работы или выявлением ошибок. lpOverlapped [in] Указатель на структуру OVERLAPPED. Эта структура требуется тогда, если параметр hFile создавался с флажком FILE_FLAG_OVERLAPPED.
hakeem Хм... Вам лучше начать с азов. Либо пробовать разбираться самому, пользуясь желательно англо-русским словарём, а не переводчиком.
lpOverlapped у тебя будет NULL или 0 lpNumberOfBytesWritten - адрес переменной в которой функция вернёт тебе результат - сколько байт она смогла записать по факту. Делается это так: .data? NumberOfBytesWritten dd ? а при вызове WriteFile укажешь offset NumberOfBytesWritten А вот lpBuffer, nNumberOfBytesToWrite соответсвенно адрес и размер того куска памяти который ты хочешь сбросить в файл - если ты записываешь свои данные то с этим, сам понимаешь, никаких проблем, но у тебя есть только handle чужого BitMap... К сожалению M$ не предусмотрела прямого и простого пути как получить по handle адрес структуры BITMAPINFO в которой эти данные содержатся (по крайней мере я такого пути не нашёл так что предстоит тебе большая пляска с бубном - возьми для начала задачку попроще Хотя в твоём случае обходной манёвр предусмотрен - нужно запрашивать в GetClipboardData не CF_BITMAP, а CF_DIB тогда получишь вместо непонятного handle нужный адрес BITMAPINFO но над её структурой тебе придётся помедитировать - поскольку картинка состоит из трёх блоков - заголовка, палитры и собственно изображения, которые вообще-то не обязаны располагаться в памяти последовательно, а могут быть раскиданы куда попало , а тебе это придётся собрать и записать в нужном порядке, добавив сигнатуру "BM" ЗЫ: и не забывай про CloseClipboard