Andrey24 |
Отправлено: 26.07.2006, 11:11 |
|
Не зарегистрирован
|
Задача такая: началось с того, что неудобно вытаскивать компакт-диски из привода, так как фальш панель не имеет кнопки в открытом состоянии, вообщем это лирика... Написал небольшую прогу, которая сворачивается в трэй, там менюшка из 4х пунктов
О программе
Выход
Открыть
Закрыть
Так вот, как открывать или закрывать лоток по горячей клавише, а то тоже неудобно каждый раз метиться в иконку в трее?
И попутно, может кто знает, как сделать так, чтобы меню само исчезало, если кликнуть по рабочему столу, а то приходится что-нибудь выбирать в меню, даже если не надо?
Программировать не умею, просто жизнь заставила
Заранее спасибо. |
|
Dark40000 |
Отправлено: 29.07.2006, 22:39 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Прива.
Я сам здесь новичек, счас вопрос тоже задавать буду. Заглянул сюда — и сразу захотелось ответить Во 1-ых можно вообщем скачать такую прогу, точно есть такие, но ет получается типа не интерестно
А вообще сам еще не разобрался, тоже делал прогу что типа в трее и нада по горячим клавишам ее вызывать, так и не доделал... а счас опять взялся за нее, кароч блин здесь типа ето процедура чтоли называется Хук, типа следит на что нажимает пользователь и реагирует... в них оч мне сложно разобраться было.. но счас вроде дело пойдет, исходник более-менее норм скачал, счас буду сидеть додумывать
Так что если тебе это еще надо и ты понял че я тут накалякал — отпишись — дам исходник нормальный или пойсчи в нете Хук, Хуки С++ или чет типа того. надеюсь хоть чемнить те помог=) |
|
Andrey24 |
Отправлено: 31.07.2006, 05:48 |
|
Не зарегистрирован
|
ОК, поищу. Что-то квёлый форум какой-то, то ли все отдыхают, то ли влом отвечать |
|
Gedeon |
Отправлено: 31.07.2006, 08:18 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Потому что такие вопросы тут не 1 раз обсуждались и воду в ступе толочь никто не хочет, ищите по форуму слово хук или hook.
Если сидюков несколько то управлять ими трохи сложнее
вот код проги рисующей на форме для каждого сидюка кнопарь открыть и закрыть.
CODE |
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
#define BUFSIZE 512
TCHAR szTemp[BUFSIZE];
static int i = 15;
if (GetLogicalDriveStrings(BUFSIZE-1, szTemp))
{
TCHAR szDrive[3] = TEXT(" :");
BOOL bFound = FALSE;
TCHAR* p = szTemp;
do
{
// Copy the drive letter to the template string
*szDrive = *p;
if(GetDriveType(szDrive)==DRIVE_CDROM)
{
TButton *btn = new TButton(this);
btn->Top = i;
btn->Width = 40;
btn->Caption = szDrive;
btn->Parent = this;
btn->OnClick = btn1Click;
btn = new TButton(this);
btn->Left = 41;
btn->Top = i;
btn->Width = 40;
btn->Caption = szDrive;
btn->Parent = this;
btn->OnClick = btn2Click;
i=i+25;
}
// Go to the next NULL character.
while (*p++);
} while (!bFound && *p); // end of string
}
this->Height = i+27;
this->Width = 87;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn1Click(TObject *Sender)
{
TButton *btn = dynamic_cast<TButton*> (Sender);
DriveLetter = "\\\\.\\" + btn->Caption;
hCDDevice = CreateFile(DriveLetter.c_str(),
GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hCDDevice!=INVALID_HANDLE_VALUE)
{
DeviceIoControl(hCDDevice,/*IOCTL_DISK_EJECT_MEDIA*/0x074808,NULL,0,NULL,0,&lpBytesReturned,NULL);
CloseHandle(hCDDevice);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn2Click(TObject *Sender)
{
TButton *btn = dynamic_cast<TButton*> (Sender);
DriveLetter = "\\\\.\\" + btn->Caption;
hCDDevice = CreateFile(DriveLetter.c_str(),
GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
if(hCDDevice!=INVALID_HANDLE_VALUE)
{
DeviceIoControl(hCDDevice,/*IOCTL_DISK_LOAD_MEDIA*/0x07480C,NULL,0,NULL,0,&lpBytesReturned,NULL);
CloseHandle(hCDDevice);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
for(int i=0; i<this->ComponentCount; i++)
{
TButton *btn = dynamic_cast<TButton*> (this->Components[i]);
if(btn)
{
delete btn;
i=0; // так как кол-во компонентов изменилось, то цикл проходим заново
}
}
}
//---------------------------------------------------------------------------
|
расчет высоты и ширины формы у меня не обязательно правильный для вас, но такие мелочи думаю асилить можно.
Отредактировано Gedeon — 31/07/2006, 08:20
|
|
|