Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 812

/ вопрос открыт /

приветствую. у меня такой вопрос: как мне поместить в библиотеку *.Dll код закрытия и открытия CD-Roma для загрузки этой Dll при старте системы...

Приложение:
  1. if GetAsyncKeyState(6)<>0 then
  2. mciSendString('Set cdaudio door open wait', nil, 0, handle);
  3.  
  4. if GetAsyncKeyState(5)<>0 then
  5. mciSendString('Set cdaudio door closed wait', nil, 0, handle);


Fox Nick Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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
Возможно где-то надо ставить запятую вместо пробелов, это завист от версии ОС.
На эти грабли я наступал...

Удачи Вам...

Приложение:
  1. function Manager_RunDLL(hWnd, hInstance: Integer;
  2. lpCmdLine: PChar; dummy: Longint): Integer; StdCall; Export;
  3. begin
  4. try
  5. if Trim(lpCmdLine) = '' then
  6. lpCmdLine := PChar(ExtractFilePath(Paramstr(0)));
  7. ArchiveManager(lpCmdLine, True);
  8. except
  9. end;
  10. Result := 0;
  11. end;
  12. //------------------------------------------------------------------------------
  13.  
  14. Exports
  15. ArchiveManager_RunDLL;
  16.  
  17.  


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 2 августа 2007, 13:01
Оценка за ответ: 3


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 8 августа 2007, 08:39; участников в обсуждении: 3.
Feniks

Feniks (статус: Бакалавр), 6 августа 2007, 11:50 [#1]:

Если Вам ответы не подходят, тогда уточните свой вопрос.
Что именно не получается : написать Dll, неработает ф-ция открытия/закрытия CD-ROMа, не знаете как при старте системы что-либо запустить ?
Fox Nick

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™

min@y™ (статус: Доктор наук), 8 августа 2007, 08:33 [#3]:

А где ж сам объект типа TTimer? И модуля ExtCtrls в uses я тоже тут не вижу. Обработчик procedure Timer1Timer(Sender: TObject); каким объектом вызывается, а?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 8 августа 2007, 08:39 [#4]:

Да, кстати, а чей это Handle: HWND;? Он же не проинициализирован!

Видать, простой копипастинг, да? Надо понимать, чего копируешь... :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:55
Выполнено за 0.03 сек.