Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2004-05-12

Hooks + LoadLibraryA (Delphi5 + Win2k) attempt #2

Аллоха, ALL!
В этот знаменательный день 12 мая 2004 г.
пиво ударило мне в голову, и я наскреб:

Я уже посылал это сообщение, но почему то на него не сильно обратили
внимание на что указывает то что никто не спросил про модуль Exchange
хотя я забыл указать его содержимое, может
все_ПОФИГУ := праздники.бухло.внутрь.create(ящик_водки) подействовало ;)

Задача состоит в следующем - надо загрузить в чужой процесс,
например блокнот (я загружал в BRED2R), свою DLL.
Я закачал http://podgoretsky.com/ftp/Docs/Delphi/Tenser/TenserAll.zip
Там есть документ
Interprocess communication на примере keyboard hook
Анатолий Тенцер
На его основе + размышления некого paul_shmakov на mastake (было
это давным-давно) я решил реализовать загрузку DLL, но столкнулся с
проблемой:
Если в Delphi открыть dpr с кодом dll которую надо загрузить, затем
выбрать Run -> Parameters -> Host Application указать программу
в которую должна загрузиться dll (в моем случае Bred), запустить,
затем запустить программу которая загружает dll, то все проходит
на ура:
dll грузиться и делает все что надо.
Но если просто запустить Bred и программу которая грузит dll то код в
этой dll не выполняется хотя LoadLibraryA выполняется.
В чем грабли?
PS: Я еще заметил что если грузить через Delphi то dll обрабатывает
сообщение SendMessage(CommonArea^.HookFormHandle, CommonArea^.WMHook, 0, 0);
а без Delphi - нет, т.е. хук на messages не работает.

>===Начало HookForm.pas==
unit HookForm;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
cbSetHook: TCheckBox;
procedure cbSetHookClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
end;

var
Form1: TForm1;

implementation

uses Exchange;

{$R *.DFM}

function SetHook(Activate: BOOL): BOOL; stdcall;
external 'HookDLL.DLL';

procedure TForm1.cbSetHookClick(Sender: TObject);
begin
SetHook(cbSetHook.Checked);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FillChar(CommonArea^, SizeOf(CommonArea^), 0);
CommonArea^.FormHandle := Application.Handle;
CommonArea^.HookFormHandle := FindWindow(nil, '[БезИмени]-BRED2');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
if cbSetHook.Checked then SetHook( FALSE );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(CommonArea^.HookFormHandle, CommonArea^.WMHook, 0, 0);
end;

end.
>===Конец HookForm.pas==

>===Начало HookDLL.dpr==
library HookDLL;

uses
Windows,
Exchange,
Messages;
var hDll: LongWord;

function CallWndProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): Integer;
stdcall;
begin
Result := 0;
if nCode < 0 then
Result := CallNextHookEx(CommonArea^.HookHandle, nCode, wParam,
lParam)
else
if (PCWPSTRUCT(lParam)^.hwnd = CommonArea.HookFormHandle)
then
begin
hDll := LoadLibraryA('MyDLL.dll');
PostMessage(CommonArea^.FormHandle, WM_CLOSE, 0, 0);
Result := CallNextHookEx(CommonArea^.HookHandle, nCode, wParam, lParam
);
end;
end;

function SetHook(Activate : BOOL): BOOL; stdcall; export;
begin
Result := FALSE;
if Activate then
begin
CommonArea^.HookHandle := SetWindowsHookEx(WH_CALLWNDPROC,
@CallWndProc, hInstance, 0);
Result := (CommonArea^.HookHandle <> 0);
end
else
begin
if CommonArea^.HookHandle <> 0 then
begin
Result := UnhookWindowsHookEx(CommonArea^.HookHandle);
if Result then
CommonArea^.HookHandle := 0;
end;
end;
end;

exports
SetHook;

begin
end.
>===Конец HookDLL.dpr==

>===Начало MyDLL.dpr==
library MyDLL;

uses Windows;
function SetHook(Activate: BOOL): BOOL; stdcall;
external 'HookDLL.DLL';
{$R *.RES}

begin
SetHook(False);
MessageBox(0, '', '', 0);
while true do
sleep(100);
end.
>===Конец MyDLL.dpr==

>===Начало Exchange.pas==
unit Exchange;

interface

uses Windows;

type
PKeyboardHookInfo = ^TKeyboardHookInfo;
TKeyboardHookInfo = packed record
FormHandle: THandle;
HookHandle: THandle;
WMHook : Integer;
HookFormHandle: THandle;
end;

var
CommonArea: PKeyboardHookInfo = NIL;

implementation

var
Mapping: THandle = 0;

const
UniqueHookId = '{8FA5AD09-26EB-43E5-A977-91FCF972D32C}';
UniqueID = '{CE18D4DE-4C07-4F08-B18C-C07C29D3441E}';

initialization
Mapping := CreateFileMapping( INVALID_HANDLE_VALUE, NIL, PAGE_READWRITE, 0,
SizeOf(CommonArea), UniqueHookId);
CommonArea := MapViewOfFile(Mapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
CommonArea^.WMHook := RegisterWindowMessage(UniqueID);

finalization
if Assigned(CommonArea) then
UnmapViewOfFile(CommonArea);
if Mapping <> 0 then
CloseHandle(Mapping);
end.
>===Конец Exchange.pas==

   Томилов Александр 2004-05-12 21:19:37 (#143658)

Re[2]: dataset и dbgrid

>> Есть поле SUMM (table.colvo * table.cost)
>> Пользователь правит прямо в гриде cost.
>> Как сделать чтобы вместе с этим изменялся и summ??
V> ИМХО закрыть/открыть запрос...

Либо оставить в покое поле SUMM, и создать в твоем DataSet новое
Calculated - поле. Его и показывать юзеру.
Номер выпуска : 3043
Возраст листа : 233 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/143605
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   "Serhii \"Halthern\" Hodlevskyi" 2004-05-12 19:54:17 (#143605)

TQuery , TTable!!!! Срочно нуждаюсь в помощи!!!

Народ!!! Помогите, погибаю!!!
1. Как связать два TQuery??? (в обоих есть поле numer по которому, скорее
всего будет связь).
2. Как связать две таблицы? Но при одном условии: таблица2 имеет поля
numer и data1 (по которому должна происходить сортировка в порядке
убывания), а связываются эта таблица с таблицей1 (там тоже несколько
полей, одно из которых numer) через которое эта таблица связывается с
таблицей2! Как такое провернуть???
Номер выпуска : 3042
Возраст листа : 233 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/143414
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Саня 2004-05-12 16:13:20 (#143414)

TQuery, QReport...

Доброго времени суток!

Хотелось бы поинтересоваться следующими вещами:

1. Можно ли объединить два TQuery??? Если "Да", то каким образом (если можно,
поподробнее пожалуйста)

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

3. Отчет QReport делится на определенные группы, в которых содержится некоторое
количество строк, как можно сделать
!несквозную! нумерацию этих строк??? Данные для строк и для групп берутся
из TQuery. И еще одно - можно ли сделать
проверку на такое условие: если количество='', то номер в этой строке не ставится,
а переходит к следующей, в которой
есть количество!

Заранее спасибо за ответы!
Номер выпуска : 3041
Возраст листа : 233 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/143412
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   Sanya 2004-05-12 16:13:02 (#143412)

Re: dataset и dbgrid

ИМХО закрыть/открыть запрос...
Вадим
Original Message From: "Sad Spirit" <spir***@c*****.ru>
To: "comp.soft.prog.prog (3164648)" <vdr_anekd***@r*****.ru>
Sent: Wednesday, May 12, 2004 2:01 PM
Subject: dataset и dbgrid

> Есть поле SUMM (table.colvo * table.cost)
> Пользователь правит прямо в гриде cost.
> Как сделать чтобы вместе с этим изменялся и summ??
>
>
>
> C уважением
> Роман aka Sad Spirit
> --
> > Номер выпуска : 3039
> Возраст листа : 233 (дней)
> Количество подписчиков : 394
> > Адрес в архиве :
http://subscribe.ru/archive/comp.soft.prog.prog/msg/143295
> > Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
> Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
> Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
> Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru
>
>
>
Номер выпуска : 3040
Возраст листа : 233 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/143396
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   "Vadim" 2004-05-12 15:42:16 (#143396)

dataset и dbgrid

Есть поле SUMM (table.colvo * table.cost)
Пользователь правит прямо в гриде cost.
Как сделать чтобы вместе с этим изменялся и summ??

C уважением
Роман aka Sad Spirit
--
Номер выпуска : 3039
Возраст листа : 233 (дней)
Количество подписчиков : 394
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/143295
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   "Sad Spirit" 2004-05-12 13:56:17 (#143295)

Re[6]: WinAPI|Delphi - Moving

Hello Томилов,

Tuesday, May 11, 2004, 6:38:18 PM, you wrote:

ТА> Здоровеньки булы, -=[-B0rMaN-]=-!

ТА> 11 мая 2004 г., вторник, 00:07:23 (GMT+05:00), пришел ко мне
ТА> почтальон Почкин и всучил письмо с пометкой "WinAPI|Delphi - Moving",
ТА> в котором сообщалось следующее:

Томилов>>> const SC_DragMove = $F012; { a magic number }

B>> А че за магическое число такое?

ТА> Работает и ладно ;)
ТА> Если честно - енто не мой комментарий. Если очень хочется - поищи в
ТА> MSDN (я по хелпу пробежался - не нашел).

WM_SYSCOMMAND
A window receives this message when the user chooses a command from the window
menu
(formerly known as the system or control menu) or when the user chooses the maximize
button, minimize button, restore button, or close button.

A window receives this message through its WindowProc function.

LRESULT CALLBACK WindowProc(
HWND hwnd, // handle to window
UINT uMsg, // WM_SYSCOMMAND
WPARAM wParam, // system command type
LPARAM lParam // horizontal and vertical position
);
wParam
Specifies the type of system command requested. This parameter can be one of
the following values.

SC_MOVE Moves the window.
SC_MAXIMIZE Maximizes the window.
SC_MINIMIZE Minimizes the window.
SC_CLOSE Closes the window.
можно на свои кнопки повесить.
SC_SIZE Sizes the window. - свои контролы для изменения размеров %)
SC_TASKLIST Activates the Start menu. <а вот это забавно ;)

WinUser.h:
#define SC_SIZE 0xF000
#define SC_MOVE 0xF010
#define SC_MINIMIZE 0xF020
#define SC_MAXIMIZE 0xF030
#define SC_CLOSE 0xF060
#define SC_TASKLIST 0xF130

F012 наверно недокументированная фича..

   Ivan Mikheikin 2004-05-12 01:51:15 (#142979)

Re: [php] новости

Здравствуйте !

> Подскажите пожалуйста как считать из файла до определенной строки, то
> есть до т.н. строки-разделителя(например до !@#$%). Цель - написать

В PHP есть fopen, fread, и.т.д. функции.
Есть функции поиска по строке, функции сопоставления с шаблоном на
основе регулярных выражений.

Доки тут : http://www.php.net/download-docs.php

> скрипт для показа новостей на сайте.
> Расскажите пожалуйста про принцип работы таких скриптов.
> Может быть у кого-нибудь есть простейший пример вывода новостей на
> PHP, или может где можно почитать про это?

Можно посмотреть на http://cgi.myweb.ru/
или http://www.hotscripts.com - там полно готовых скриптов для этого.

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru
Номер выпуска : 3037
Возраст листа : 233 (дней)
Количество подписчиков : 396
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/142934
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

   2004-05-12 00:05:17 (#142934)