Последние записи
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
- wprintf как напечатать кириллицу
- Взаимодействие через командную строку
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
10th
Сен
Как поменять иконки все папок Windows 11 со стандартной желтой на свою?
Как поменять иконки все папок Windows 11 со стандартной желтой на свою?
По одной папке умею менять. Хочу поменять все и плюс новые когда будут создавать, чтобы с моей иконкой создавались.
5th
Сен
WinIO для чтения/записи портов I/O и физической памяти
Есть подписанный ЭЦП драйвер WinIo 3.0 для доступа к портам и мапинга физической памяти для 32/64-разрадяных Windows. Драйвер с открытым исходным кодом и является весьма популярным.
На Delphi 7 я воспроизвёл код установки драйвера в системе и обращение к нему через DeviceIoControl. Драйвер успешно зарегистрировался в Service Control Manager, запустился через StartService, успешно возвратил хэндл через CreateFile и даже смог считать и писать порты ввода-вывода, как под Windows 11 x64, так и Windows 7 32-bit.
Однако если попытаться замапить память через MapPhysToLin, то драйвер возвращает совсем не то, что нужно. Код мапинга очень простой и ошибки здесь нет:
type
TtagPhysStruct = packed record
dwPhysMemSizeInBytes : Int64; //Number of bytes to map
pvPhysAddress : Int64; //Physical address to be mapped
PhysicalMemoryHandle : Int64; //Handle to a section returned by ZwOpenSection
pvPhysMemLin : Int64; //Pointer to a variable that receives the base address of the view
pvPhysSection : Int64;
end;
function MapPhysToLin(var PhysStruct: TtagPhysStruct) : Int64;
var
dwBytesReturned : DWORD;
begin
if not DeviceIoControl(hDriver,
IOCTL_WINIO_MAPPHYSTOLIN, //IOCTL 0x810
@PhysStruct,
SizeOf(TtagPhysStruct),
@PhysStruct,
SizeOf(TtagPhysStruct),
dwBytesReturned,nil)
then Result:=0
else Result:=PhysStruct.pvPhysMemLin;
Поэтому я решился попробовать замапить память через прилагаемую к драйверу библиотеку WinIo32.dll, которая экспортирует функцию GetPhysLong. Данная функция возвращает значение типа DWORD, записанное по определённому адресу в физической памяти.
var
dllGetPhysLong: function (pbPhysAddr: PByte; out pdwPhysVal: PDWORD): Boolean; stdcall;
dllInitializeWinIo: function : Boolean; stdcall;
procedure TForm1.Button2Click(Sender: TObject);
var
hLibrary: THandle;
hBuffer : PDWORD;
begin
hBuffer:=0;
hLibrary:=LoadLibrary('WinIo32.dll');
if hLibrary > HINSTANCE_ERROR then
begin
@dllInitializeWinIo:=GetProcAddress(hLibrary, 'InitializeWinIo');
@dllGetPhysLong:=GetProcAddress(hLibrary, 'GetPhysLong');
if @dllInitializeWinIo <> nil then
if dllInitializeWinIo then
if @dllGetPhysLong <> nil then
begin
if dllGetPhysLong(Ptr($C0000),hBuffer) then
ShowMessage(IntToHex(DWORD(hBuffer),8))
else ShowMessage('Error '+IntToHex(GetLastError,8));;
end;
FreeLibrary(hLibrary);
end;
end;
В коде выше я считываю 4 байта под адресу 0xC0000 (видеопамять). По этому адресу записано 0хE972AA55, которое успешно и возвращается при нажатии на кнопку. Но юзать DLL-ку мне не хочется. Хотелось бы воспроизвести все функции в своём коде самостоятельно.
Есть подозрение, что в С++ своя особенная упаковка структуры TtagPhysStruct:
#pragma pack(push)
#pragma pack(1)
struct tagPhysStruct
{
DWORD64 dwPhysMemSizeInBytes;
DWORD64 pvPhysAddress;
DWORD64 PhysicalMemoryHandle;
DWORD64 pvPhysMemLin;
DWORD64 pvPhysSection;
};
#pragma pack(pop)
#endif
В общем, если кому-то уже ранее удалось портировать WinIo на Delphi, то я был бы рад любой помощи!
30th
Авг
Delphi: Вывести N директорий в заданной (без рекурсии вложенных папок)
Ищу рабочие примеры с правильным использованием FindFirst, FindNext.
25th
Авг
Дополнительные кнопки мышки
На моей мышке есть дополнительные две кнопки
Вопрос: как в D7 отловить их нажатие, чтобы использовать в своей программе?
20th
Авг
Курсы программистов. Стоит ли?
Посмотрел курсы программистов. В одном из курсов написано, что продолжительность курса — 40 академических часов. Что-то мне подсказывает, что за 40 часов вряд ли можно серьезно погрузиться в тему. Или я ошибаюсь? И там действительно можно получить что-то полезное.
18th
Авг
Удаление одинаковых строк
Прошерстил много подобных задач но везде ищут дубликаты и удаляют, оставляя при этом одну строку. Мне же в моей задаче нужно находить дубликаты (полностью идентичные строки в которых все значения во всех столбцах совпадают) и удалять и исходную строку и дублера. Оставив только уникальные строки у которых изначально во всем диапазоне не было дубликатов.
11th
Авг
Создание потоков в процессе
Как в powershell создать процесс, а в нем два потока? Первый поток вызывает утилиту на компе, второй убивает первый поток спустя 20 секунд после начала его работы (первого потока)?
28th
Июл
Вывод на печать графического файла
При печати графического файла распечатывается только часть изображения. Подскажите, как вывести на печать все изображение?
Использовал такой код:
using (var pd = new System.Drawing.Printing.PrintDocument())
{
pd.PrintPage += (o, en) =>
{
var img = System.Drawing.Image.FromFile(@"D:\Scan.jpg");
en.Graphics.DrawImage(img, new Point(100, 100));
};
pd.DefaultPageSettings.Landscape = true;
pd.Print();
}
23rd
Июл
Аналоги функций FindFirstFile, CopyFile, DeleteFile в Qt
Какие существуют аналоги WinAPI-шных функций FindFirstFile, CopyFile, DeleteFile в Qt?
19th
Июл
Как передать ссылку на интерфейс при использовании автоматизации OLE
Вопрос по использованию технологии OLE Automation. Есть интерфейс IWFBP, который непосредственно наследуется от IDispatch. Как я могу ссылку на этот интерфейс передать в стороннюю функцию, а в последующем использовать её? Допустим, у меня сейчас есть следующий код этой функции(пытаюсь использовать тип VARIANT):
void Func(VARIANT WFBL) {
WFBL.Func1();
}
Здесь Func1 собственно функция интерфейса, WFBL — ссылка на него. Компилятор ругается, что он не видит Func1() в составе WFBL, причём ещё до компиляции. В чём может быть ошибка?
Пытался заменить VARIANT WFBL на IDispatch* WFBL, с последующим приведением переданного указателя к указателю на IWBP с помощью dynamic_cast. Предварительно импортировав библиотеку типов из нужной DLL. В этом случае компилятор уже видит Func1, но при написании чего-то вроде WFBL->Func1() во время выполнения вылезает ошибка Access violation с указанием на данную строку.
Буду признателен, если кто-то сможет помочь разобраться.
Облако меток
css реестр ассемблер timer SaveToFile ShellExecute программы массив советы word MySQL SQL ListView pos random компоненты дата LoadFromFile form база данных сеть html php RichEdit indy строки Win Api tstringlist Image мысли макросы Edit ListBox office C/C++ memo графика StringGrid canvas поиск файл Pascal форма Файлы интернет Microsoft Office Excel excel winapi журнал ПРОграммист DelphiКупить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)