|
Вопрос # 812/ вопрос открыт / |
|
приветствую. у меня такой вопрос: как мне поместить в библиотеку *.Dll код закрытия и открытия CD-Roma для загрузки этой Dll при старте системы...
Приложение: Переключить в обычный режим- if GetAsyncKeyState(6)<>0 then
- mciSendString('Set cdaudio door open wait', nil, 0, handle);
-
- if GetAsyncKeyState(5)<>0 then
- mciSendString('Set cdaudio door closed wait', nil, 0, handle);
 |
Вопрос задал: Fox Nick (статус: Посетитель)
Вопрос отправлен: 1 августа 2007, 05:02
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: min@y™
Похоже, нужно написать такую DLL, кторую потом можно запустить с помощью стандарной rundll32.exe, я правильно понял? А сам вызов rundll32 с именем файла DLL в качестве параметра засунуть в раздел автозагрузки реестра? Вот набрал я в гугле такой запрос "написание DLL на delphi для запуска ее программой rundll32.exe" и первая же ссылка привела меня вот сюда. Советую сохранить эту статью себе на винт, может не раз пригодиться.
 |
Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 1 августа 2007, 09:02
Оценка за ответ: 2
|
Ответ #2. Отвечает эксперт: Feniks
Здравствуйте, Fox Nick!
Когда давно я делал такую штуку.
Из моей DLL вызывалась функция Manager_RunDLL с помощью командной строки:
rundll32 myDLL.dll Manager_RunDLL
Главное правильно для этого описать и написать функцию Manager_RunDLL в сама файле myDLL.dpr
Смотрим вложение...
Объявление таких параметров передаваемых Manager_RunDLL является _обязательным_.
Но это не значит, что именно все и надо передавать в командной строке.
Я, например, передавал только один и он хранится в переменной lpCmdLine и запускать надо тогда так:
rundll32 myDLL.dll Manager_RunDLL parametr1
Возможно где-то надо ставить запятую вместо пробелов, это завист от версии ОС.
На эти грабли я наступал...
Удачи Вам...
Приложение: Переключить в обычный режим- function Manager_RunDLL(hWnd, hInstance: Integer;
- lpCmdLine: PChar; dummy: Longint): Integer; StdCall; Export;
- begin
- try
- if Trim(lpCmdLine) = '' then
- lpCmdLine := PChar(ExtractFilePath(Paramstr(0)));
- ArchiveManager(lpCmdLine, True);
- except
- end;
- Result := 0;
- end;
- //------------------------------------------------------------------------------
-
- Exports
- ArchiveManager_RunDLL;
-
-
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 2 августа 2007, 13:01
Оценка за ответ: 3
|
Мини-форум вопроса
Всего сообщений: 4; последнее сообщение — 8 августа 2007, 08:39; участников в обсуждении: 3.
|
Feniks (статус: Бакалавр), 6 августа 2007, 11:50 [#1]:
Если Вам ответы не подходят, тогда уточните свой вопрос.
Что именно не получается : написать Dll, неработает ф-ция открытия/закрытия CD-ROMа, не знаете как при старте системы что-либо запустить ?
|
|
Fox Nick (статус: Посетитель), 8 августа 2007, 02:51 [#2]:
вот текст моей dll:
library cdrom;
uses
Windows,
SysUtils,
Classes,
Messages,
MMSystem;
{$R *.res}
procedure Timer1Timer(Sender: TObject);
var
Handle: HWND;
begin
if GetAsyncKeyState(6)<>0 then
mciSendString(\'Set cdaudio door open wait\', nil, 0, handle);
if GetAsyncKeyState(5)<>0 then
mciSendString(\'Set cdaudio door closed wait\', nil, 0, handle);
end;
begin
end.
при старте системы она должна загружаться в Explorer. и по нажатию клавиш код написанный в ней для открытия и раскрытия должен работать... все загружается но код не работает...
|
|
min@y™ (статус: Доктор наук), 8 августа 2007, 08:33 [#3]:
А где ж сам объект типа TTimer? И модуля ExtCtrls в uses я тоже тут не вижу. Обработчик procedure Timer1Timer(Sender: TObject); каким объектом вызывается, а?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
min@y™ (статус: Доктор наук), 8 августа 2007, 08:39 [#4]:
Да, кстати, а чей это Handle: HWND;? Он же не проинициализирован!
Видать, простой копипастинг, да? Надо понимать, чего копируешь...
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|