PDA

Просмотр полной версии : подскажите как передать какие либо переменныев мою dll


StekloReZ
31.07.2011, 09:24
Привет, в программинге не силён, но что то пытаюсь.
Delphi, Хуки, пока что-то простое.
При запуске своей программки загружаю в память ещё свою dll для перехвата клавиш.
Дальше дллка обрабатывает нажатия и в зависимости от условий, что-то делает. Работает.
Но трудность возникла в том, чтобы потом из основной программы передать какие-либо переменные в Dll и что бы она их запомнила и в дальнейшем работала с ними сама. (а именно передавала в неё Handle окна)

Код не могу кинуть, потому как его просто нет на это дело.
Гугл есть и инфа тоже, но что-то не получается(.

Morfik
31.07.2011, 13:20
pipe, socket, sendmessage
да и ваще уже раз в 3-й подобную тему вижу

xkor
31.07.2011, 15:24
о разных методах взаимодействия между основным процессом и длл - http://coderx.ru/showthread.php?t=5007
ну и конкретно о пайпах - http://coderx.ru/showthread.php?t=8219

StekloReZ
31.07.2011, 19:03
Захочешь получить помощь, а получишь головную боль лишнюю.
Либо нет времени, либо нет желания помочь.
Тему можно удалять, конкретного простого примерчика, как понял, никто не даст.

Nickers
31.07.2011, 22:10
Как насчет функций "почитать" и "подумать"?

NLObP
01.08.2011, 00:34
StekloReZ, вот тут (http://coderx.ru/showpost.php?p=162168&postcount=25) доки про пайпы, там есть примеры. И прицеплено приложение работающее на пайпах. Посмотри может поможет.

PS: ещё пакетхак можешь, как пример работs с inject.dll поглядеть.

StekloReZ
01.08.2011, 00:37
Как насчет функций "почитать" и "подумать"?
:o
кучу мыслей по поводу умников писать никакого желания, ветка не та,
как будто это не заметно. А мне даже очевидные вещи в программировании так просто не даются.
В голове и так уже каша, что бы разобраться что к чему, задал вполне конкретный вопрос.

NLObP, там немножко не то, что нужно, это работа с потокам, это сообщение уже видел и читал.

mira
01.08.2011, 16:11
Хм я вот тут извращаюсь, пытаюсь сделать скриптовый движок отдельной длл чтоб можно было подключать/выгружать тот или иной на лету.
С паксом вроде просто, а вот фс заипалса. Обертка для функций не используя варианты и другие lifetime-типы обещает стать дллке slowscript.dll

Morfik
01.08.2011, 16:40
Захочешь получить помощь, а получишь головную боль лишнюю.
Либо нет времени, либо нет желания помочь.
Тему можно удалять, конкретного простого примерчика, как понял, никто не даст.

по 2-й ссылке которую дал ксор (http://coderx.ru/showthread.php?t=8219) мною выложен исходник, где работа с пайпами в несколько строк....

чтение из пайпов
procedure Packet_Sniffer;stdcall;
var
//buffer:Pointer;
cbRead:DWORD;
packet_head:PNetworkPacket;
lpszPipeName:string;
buffer:array[1..10240]of byte;
i:integer;
s:string;
c_size:dword;

v1,v2:dword;
begin
lpszPipeName:='\\.\pipe\eye';
hNamedPipe:= CreateNamedPipe(
pchar(lpszPipeName),
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_MESSAGE or PIPE_READMODE_MESSAGE or PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
10240, 10240, 100, nil);
if not ConnectNamedPipe(hNamedPipe, nil) then MessageBOx(0,pchar(' no connect pipe #'+IntToStr(GetLastError())),'',$10);

while true do
begin
if(ReadFile(hNamedPipe, buffer, 10240, cbRead, nil)) then
begin
тут читаем из buffer
end;// else Form1.Memo1.Lines.Add('no read');
end;
end;

запись в пайпы

szPipeName:='\\.\pipe\eye';
hNamedPipe:=CreateFile(pchar(szPipeName),GENERIC_R EAD or GENERIC_WRITE,0, nil, OPEN_EXISTING, 0, 0);
WriteFile(hNamedPipe,pBuffer^,size,cbWritten,nil);