$banner_comment_start
CRACKL@B Оригинальный DVD-ROM крэкера: CRACKL@B DVD !
Домой | Статьи | RAR-cтатьи | Форум | Программирование | Скачать | DVD-ROM
Новичку | FAQ | Ссылки | Интервью | Архив | Новости | Связь


Русский / Russian English / Английский

Сейчас на форуме: crypto, RaMMicHaeL, Ara (+7 невидимых пользователей)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 CRACKL@B —› Программирование —› Создание диалога
Посл.ответ Сообщение
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 26 мая 2006 06:21:26
Личное сообщение #1

Доброго времени суток.
Считываю из некой DLL'ки ресурс диалога. Тпереь встает вопрос, что нужно показать диалогове окно, как это можно реализовать? CreateDialog? Желательно пример подкиньте. Буду очень благодарен.

var Dll:THandle;
ResStream: TResourceStream;
begin
Dll := LoadLibrary(ю.юю);
try
ResStream := TResourceStream.CreateFromID(dll, 195, PChar(RT_DIALOG));
Вот, а как теперь показать диалоговое окно используя данные из ResStream?
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 26 мая 2006 06:36:04
Личное сообщение #2

PS: Delphi
back_analys

Ранг: 35.0 (посетитель)
Статус: Участник

Создано: 26 мая 2006 06:44:25
Личное сообщение #3

Iz TResourceStream vryad li poluchitsya, ispolsui chisto API(MSDN tebe pomoget)
Av0id

Ранг: 387.6 (мудрец)
Статус: Участник

Создано: 26 мая 2006 10:42:07
Личное сообщение #4

DialogBoxParam тут как раз подойдёт

нечто вроде:
DialogBoxParam(GetModuleHandle("ю.юю"),195,NULL,_dialogproc,NULL);
Demon666

Ранг: 213.5 (наставник)
Статус: Участник
забанен

Создано: 26 мая 2006 11:44:28
Личное сообщение #5

Да и такое подойдет, если фокус между диалогом и главным окном меняться должен.

CreateDialogParam (hInstance dll, в которой лежит диалог),(ID диалога),(привязка к главному окну hWindowParent или NULL, если автономно должно работать) ,_dialogproc,NULL

-----
ЗЫ: истЕна где-то рядом, Welcome@Google.com
Asterix

Ранг: 451.8 (мудрец)
Статус: Участник

Создано: 26 мая 2006 13:05:53
Личное сообщение #6

program Dialog;
uses
Windows, Messages;
const
IDD_DIALOG_1 = 200;
IDC_EDIT1 = 103;
IDC_EDIT2 = 104;
MAINICON = 400;
var
buffer : array [1..$80] of byte;


function DlgProc(hDlg, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := 1;
CASE uMsg OF
WM_INITDIALOG :
begin
SendMessage(hDlg, WM_SETICON, ICON_BIG,
LoadIcon(hInstance, PChar(MAINICON)));
SendMessage(hDlg, WM_SETICON, ICON_SMALL,
LoadImage(hInstance, PChar(MAINICON), IMAGE_ICON, 16, 16, 0));
end;
WM_COMMAND :
begin
if (LOWORD(wParam) = IDC_EDIT1) and (HIWORD(wParam) = EN_CHANGE) then
begin
GetDlgItemText(hDlg, IDC_EDIT1, ADDR(buffer), SizeOf(buffer));
SetDlgItemText(hDlg, IDC_EDIT2, ADDR(buffer));
end
else
Result := 0;
end;
WM_CLOSE : EndDialog(hDlg, 0);
ELSE
Result := 0;
end; {CASE}
end;

{$R KeyGen.res}
begin
DialogBoxParam(hInstance, PChar(IDD_DIALOG_1), 0, @DlgProc, 0);
end.
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 01:37:45
Личное сообщение #7


procedure TForm1.Button1Click(Sender: TObject);
function DlgProc(hDlg, uMsg, wParam, lParam: Integer): Integer; stdcall;

begin
While GetMessage(Mesg,0,0,0) do
begin
if IsDialogMessage(hDlg,Mesg) then continue;
TranslateMessage(Mesg);
DispatchMessage(Mesg);
end;
end;
var Dll:THandle;
ResStream: TResourceStream;
buffer : array [1..$80] of byte;
begin
Dll := LoadLibrary(DLLPATH);
try
ResStream := TResourceStream.CreateFromID(dll, 1095, PChar(RT_DIALOG));
DialogBoxParam(dll,'195',Form1.handle,@DlgProc,0);
finally
ResStream.free;
end;
FreeLibrary(handle);
end;



В чем ошибка?
back_analys

Ранг: 35.0 (посетитель)
Статус: Участник

Создано: 27 мая 2006 06:52:35
Личное сообщение #8

Kakaya oshibka? Chto compilyator pishet?
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 06:54:45
Личное сообщение #9


Все нормально компилируется, диалоговое окно не выводится.
Вот код (не работает ):

procedure TForm1.Button1Click(Sender: TObject);
function DlgProc(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall;
begin
Result := False;
case uMsg of
WM_INITDIALOG:;
WM_COMMAND:
begin
case LoWord(wp) of
100: EndDialog(hWin, 0);
end;
end;
WM_DESTROY, WM_CLOSE: PostQuitMessage(0);
end;
end;
var Dll:THandle;
ResStream: TResourceStream;
hDlg :THandle;
begin

Dll := LoadLibrary(DllPath);

try
ResStream := TResourceStream.CreateFromID(dll, 195, PChar(RT_DIALOG));
DialogBox(Dll, '195', 0, @DlgProc);

finally
ResStream.free;
end;
FreeLibrary(handle);
end;

Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 06:57:30
Личное сообщение #10

Есть DLLка, так вот мне нужно показать диалогове окно, используя ресурвы из данной DLL'ки, номер ресурса 195
back_analys

Ранг: 35.0 (посетитель)
Статус: Участник

Создано: 27 мая 2006 07:52:41
Личное сообщение #11

Zachem tebe TResourceStream? Uberi ego i blok try...finally, vozmogno zarabotaet Eshe moget byt nepravilno ukazal ID dialoga, poprobui v hex.
back_analys

Ранг: 35.0 (посетитель)
Статус: Участник

Создано: 27 мая 2006 07:54:23 · Поправил: back_analys
Личное сообщение #12

(DOUBLE)
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 08:10:05
Личное сообщение #13

Dll := LoadLibrary(DllPath);
DialogBox(Dll, '195', 0, @DlgProc);
Не работает, дело не в try .. finally
ID диалога указан верно, т.к. смотрел при помощи Restoratora, номер 195 )
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 08:23:21
Личное сообщение #14

Dll := LoadLibrary(DllPath);
DialogBox(Dll, '195', 0, @DlgProc);
Может тут ошибка?
Av0id

Ранг: 387.6 (мудрец)
Статус: Участник

Создано: 27 мая 2006 12:01:25
Личное сообщение #15

может так стоит попробовать всё таки

Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle("ю.юю"),195,0,@DlgProc);
FreeLibrary(DllPath);
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 12:23:48
Личное сообщение #16

Все равно не работает
back_analys

Ранг: 35.0 (посетитель)
Статус: Участник

Создано: 27 мая 2006 13:54:17
Личное сообщение #17

Проверь, библиотека вообще грузится(Dll<>0), потом попробуй указать не номер диалога а его имя... Если не выйдет, выпей йаду
back_analys

Ранг: 35.0 (посетитель)
Статус: Участник

Создано: 27 мая 2006 13:56:00 · Поправил: back_analys
Личное сообщение #18

(DOUBLE)
Qwatr

Ранг: 13.7 (новичок)
Статус: Участник

Создано: 27 мая 2006 14:53:55
Личное сообщение #19

Все разобрался

Dll := LoadLibrary(DllPath);
DialogBox(GetModuleHandle(DllPath),MAKEINTRESOURCE(1095),0,@DlgProc);
FreeLibrary(Dll);
Av0id

Ранг: 387.6 (мудрец)
Статус: Участник

Создано: 27 мая 2006 23:23:51
Личное сообщение #20

надо же... msdn приобрети
 CRACKL@B —› Программирование —› Создание диалога
    Для печати 


Оригинальный DVD-ROM крэкера: CRACKL@B DVD !


Вы находитесь на форуме сайта CRACKLAB.RU
Проект ReactOS