Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ WinAPI При переделки событий в функции, перестало ловиться событие EN_CHANGE от элемента Edit Здравия, Други ) При переделки событий в функции(через HANDLE_MSG), перестало ловиться событие EN_CHANGE от элемента Edit. Почему так произошло и как исправить? LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { HANDLE_MSG(hWnd, WM_COMMAND, WndProc_OnCommand); https://www.cyberforum.ru/ win-api/ thread2027850.html C++ WinAPI MSIAfterburner.NET.dll в своей программе
Доброе время сутов форумчанам. Многие пользуются программой MSI_Afterburner для отслеживания температуры своих видео карт. Недавно нашел набор классов http://rivatuner.doomdealer.com/afterburner/MSIAfterburner.NET/1.1.0/Index.html которые позволяют написать свою программу на С++ на основе MSIAfterburner.NET.dll, которая входит в состав программы. Подскажите кто то такое делал? и может ли...
C++ WinAPI Приложение WinAPI с классом С++ Доброго дня. Создан класс С++, все функции занесены в класс. Кроме оконной процедуры: LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) Правильно будет, если занести эту процедуру в созданный класс? Если да - то как её оформить в классе. Не понимаю как, из-за двух типов сразу (LRESULT CALLBACK). Спасибо. https://www.cyberforum.ru/ win-api/ thread2027784.html C++ WinAPI PlaySound не воспроизводит нужный звук https://www.cyberforum.ru/ win-api/ thread2027771.html
Я пытаюсь научиться вставлять звук в программу. Покопался в интернете, нашел информацию про функцию PlaySound(). Написал вот такой код: #include <Windows.h> #pragma comment(lib,"winmm.lib") int main() { PlaySound(L"C:\\sound.wav", 0,0);
Вывод содержимого файла в 16-чном текстовом виде C++ WinAPI
Добрый день. Проблема такая: я пытаюсь вывести содержимое массива(заполненного содержимым файла), рисую с помощью DrawText(), но выводится в одну строку, а мне нужно, чтобы получился многострочный вывод. Подскажите пожалуйста, где сделано не так. #include <windows.h> #include <sstream> #include <iostream> #include <iomanip>
C++ WinAPI C++ Проэкт Win32 Как в windows API создать 2 полусферы (чтобы отображались одновременно, как одна сфера разделённая чертой), с изменением цвета для каждой полусферы по отдельности? (По координатам, как кораблик на рисунке) https://www.cyberforum.ru/ win-api/ thread2027638.html
C++ WinAPI Элемент Edit, при стирании, текст исчезает только после перехода на новую строку Здравия, Други. У меня такая проблема, при стирании текста, буквы исчезают только после того как курсор полностью пройдет вторую строку и перейдет на первую. То есть буквы не исчезают после того как нажал кнопку бекспейс. Хотя обработчик изменения элемента Edit я написал и программа на него попадает. #include <windows.h> #include <tchar.h> #define IDC_BUTTONTEST 1001 https://www.cyberforum.ru/ win-api/ thread2027538.html C++ WinAPI Как вывести подсказку?
при наведении на определенное место
C++ WinAPI Проверка движения мыши с SetWindowsHookEx https://www.cyberforum.ru/ win-api/ thread2027383.html
class MouseHook { public: static MouseHook& Instance() { static MouseHook myHook; return myHook; }
C++ WinAPI .dll модули Всем привет! Как дела? Я вот сижу в гугле и наткнулся я на одном форуме на тему, которая вызвала у меня бурный интерес! Там писали мол dll библиотеку можно использовать как модуль расширения возможностей для программы (например добавить калькулятор или tcp\ip клиент-сервер). Скажите, как это можно воплотить в жизнь? Это сам калькулятор пишут и компилируют в dll, а нн в ехе? Или как? Всем... https://www.cyberforum.ru/ win-api/ thread2027278.html
Кто из гуру программистов продолжает использовать голый WinAPI для своих новых проектов? C++ WinAPI
Мне интересно есть ли среди гуру программистов убежденных писать программы только на голом WinAPI без всяких помощников GLUTотв и других систем? Создавать desktop приложения только на голом WinAPI. Можете показать примеры desktop приложений, которые написаны на голом WinAPI? Достоинство и недостатки: Понятно, что на голом WinAPI вроде как говорят долго и сложно. Но когда проект достигает...
C++ WinAPI Передача данных инжектированной длл https://www.cyberforum.ru/ win-api/ thread2026983.html
Есть длл, которая при помощи программы инжектится в несколько процессов и что-то там перехватывает, в моём случае openprocess. Нужно как-то передать ей список процессов, которые надо "защитить". Можете посоветовать, как лучше всего это реализовать. Вот ф-ция, подменяющая оригинальный openprocess: HANDLE WINAPI DetourOpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId) {...
232 / 135 / 19
Регистрация: 10.11.2015
Сообщений: 305
18.08.2017, 06:52 0

Как дождаться закрытия файла другим процессом/потоком - C++ WinAPI - Ответ 10695087

18.08.2017, 06:52. Показов 3278. Ответов 14
Метки (Все метки)

Ответ

Цитата Сообщение от codesurfer Посмотреть сообщение
Скажите, а CreateFile() открывающий файл для чтения не даст нам хэндл?
Даст, если при его открытии в чужом процессе, был установлен режим FILE_SHARE_READ. Иначе получишь ERROR_SHARING_VIOLATION.

Цитата Сообщение от codesurfer Посмотреть сообщение
если его сейчас использует другой процесс/поток, то дождаться его закрытия
Самый простой вариант, это крутится в цикле. Пытаемся открыть, если получили код ошибки ERROR_SHARING_VIOLATION тогда делаем небольшую задержку и пытаемся снова.

Из непростых, это перечислить хэндлы посредством NtQuerySystemInformation (с инфоклассом SystemHandleInformation) и продублировать нужный хэндл к себе в процесс, но много подводных камней в таком способе.

Добавлено через 8 минут
Enumerate handles
Кликните здесь для просмотра всего текста
"How do I enumerate handles/opened files?" is a common beginner question here. I'll try to expand on the first handle enumeration topic and provide a bit more information on how to get handle names, etc. Complete sample code in C is attached.

Step 1: Enumerating handles
Call NtQuerySystemInformation with SystemHandleInformation (16). This will give you a list of handles opened by every single process. Here are the definitions:

#define SystemHandleInformation 16

typedef NTSTATUS (NTAPI *_NtQuerySystemInformation)(
ULONG SystemInformationClass,
PVOID SystemInformation,
ULONG SystemInformationLength,
PULONG ReturnLength
);

/* The following structure is actually called SYSTEM_HANDLE_TABLE_ENTRY_INFO, but SYSTEM_HANDLE is shorter. */
typedef struct _SYSTEM_HANDLE
{
ULONG ProcessId;
BYTE ObjectTypeNumber;
BYTE Flags;
USHORT Handle;
PVOID Object;
ACCESS_MASK GrantedAccess;
} SYSTEM_HANDLE, *PSYSTEM_HANDLE;

typedef struct _SYSTEM_HANDLE_INFORMATION
{
ULONG HandleCount; /* Or NumberOfHandles if you prefer. */
SYSTEM_HANDLE Handles[1];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

An unusual aspect of calling NtQuerySystemInformation with SystemHandleInformation is that if you supply a buffer which is too small, it returns STATUS_INFO_LENGTH_MISMATCH (0xc0000004) instead of giving you the correct buffer size in ReturnLength. This means you will have to guess the buffer size. A common technique is to call NtQuerySystemInformation in a loop until it succeeds with STATUS_SUCCESS (0), reallocating and doubling the buffer size each time it fails with STATUS_INFO_LENGTH_MISMATCH.

Step 2: Getting handle types and names
After you have the list of handles, you will probably want to get the types and names of the handles. There is no way to do this without duplicating the handle into your own process, so we can do that using DuplicateHandle (NOTE: in the source code I use NtDuplicateObject, but it's the same idea).

Handle types
Call NtQueryObject with ObjectTypeInformation (2). You will get this structure back:

typedef struct _OBJECT_TYPE_INFORMATION
{
UNICODE_STRING TypeName;
ULONG TotalNumberOfObjects;
ULONG TotalNumberOfHandles;
ULONG TotalPagedPoolUsage;
ULONG TotalNonPagedPoolUsage;
ULONG TotalNamePoolUsage;
ULONG TotalHandleTableUsage;
ULONG HighWaterNumberOfObjects;
ULONG HighWaterNumberOfHandles;
ULONG HighWaterPagedPoolUsage;
ULONG HighWaterNonPagedPoolUsage;
ULONG HighWaterNamePoolUsage;
ULONG HighWaterHandleTableUsage;
ULONG InvalidAttributes;
GENERIC_MAPPING GenericMapping;
ULONG ValidAccessMask;
BOOLEAN SecurityRequired;
BOOLEAN MaintainHandleCount;
ULONG PoolType;
ULONG DefaultPagedPoolCharge;
ULONG DefaultNonPagedPoolCharge;
} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;

Processes
To get the "name" of a process, you can duplicate the handle into your own process with PROCESS_QUERY_INFORMATION access and call GetProcessId (or use NtQueryInformationProcess with ProcessBasicInformation if you prefer, since GetProcessId is only supported on XP SP1 and higher).

Threads
Same idea as with processes (except you use THREAD_QUERY_INFORMATION access), and you can call GetThreadId and GetProcessIdOfThread (again, you can also call NtQueryInformationThread with ThreadBasicInformation and use the ClientId).

Tokens
Again, you can duplicate the handle and use GetTokenInformation to get the username.

Files, Events, Mutants, other objects
To get the names of other objects, you must duplicate the handle and use NtQueryObject with ObjectNameInformation (1) to get the name of the object. You will get a UNICODE_STRING back. IMPORTANT: NtQueryObject may hang on file handles pointing to named pipes. To fix this, do not query any file handles opened with an access (GrantedAccess) of 0x0012019f. This problem only appears for ObjectNameInformation, not ObjectTypeInformation. See the sample code for more information.

You will get filenames in native filename format (i.e. \Device\HarddiskVolume1\...). You can use QueryDosDevice to get mappings between DOS drive letters and device prefixes.

(Step 3: Closing remote handles)
To close handles opened by other processes, you simply call DuplicateHandle with DUPLICATE_CLOSE_SOURCE (1) specified in the options parameter (it's documented on the MSDN page for DuplicateHandle, so go read it). You can specify NULL for the target process handle and target handle parameters. For example:

DuplicateHandle(handleToTheRemoteProcess, theRemoteHandle, NULL, NULL, 0, FALSE, 0x1);


Вернуться к обсуждению:
Как дождаться закрытия файла другим процессом/потоком C++ WinAPI
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2017, 06:52
Готовые ответы и решения:

Как дождаться закрытия файла?
Допустим открываем файл, а потом закрываем file.close(); Или открываем для чтения ресурсов и...

Отслеживание закрытия файла процессом, запущенным через CreateProcess
Доброго времени суток! Возникла нетривиальная(на мой взгляд) задачка: Открываем какой нибудь файл...

Дождаться освобождения файла другим процессом
Доброго дня, форумчане. Подскажите, пожалуйста, есть ли в Visual Foxpro команда с помощью которой...

Ошибка открытия файла, так как он занят другим процессом
Возникла проблема: при нажатии на кнопку прописал код, чтобы открывался файл из определенной...

14
18.08.2017, 06:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2017, 06:52
Помогаю со студенческими работами здесь

Как отловить исключение при удалении использующегося другим процессом файла
сделал так, грузится длл (чит) из ресурсов программы и чтобы при выходе программы длл удалялась....

Чтение файла занятого другим процессом
Нашел много по этому вопросу, да и сам когда то делал но сейчас не работает. Файл занят другим...

Чтение файла занятого другим процессом
Приветствую. Сразу к сути. Есть бинарный файл в который постоянно пишется информация. Как мне...

Проверка занятости файла другим процессом
Здравствуйте. Существует ли метод, сообщающий, записывается ли файл другим процессом? Хочется...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru