как запретить появление формы зная ее имя
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
Ситуация слудеющая :
юзаю компонент активиксовский который перед показом моей формы показывает свой диалог типа эбаут нужно сделать так чтобы пользователь его не видел.
причем эта неприятность происходит до Application.CreateForm(TForm1, Form1);
юзаю компонент активиксовский который перед показом моей формы показывает свой диалог типа эбаут нужно сделать так чтобы пользователь его не видел.
причем эта неприятность происходит до Application.CreateForm(TForm1, Form1);
-
- Сообщения: 273
- Зарегистрирован: 30 июн 2005, 14:53
Найди ее с помощью FindWindow и закрой
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Можно попробовать с помощью "хука", "подвесившись" на создание окна. Посмотеть Spy-ем, какое у этого окна (формы) название класса и/или заголовок и запретить (в "хуке") его создание.
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
А по подробней можно?BBB писал(а):Можно попробовать с помощью "хука", "подвесившись" на создание окна. Посмотеть Spy-ем, какое у этого окна (формы) название класса и/или заголовок и запретить (в "хуке") его создание.
Честно говоря, я это дело (сам хук) на C++ писал.
Еще тонкость: неизвестно, как то приложение, которое пытается создать это окно, отреагирует на то, что создать его не удалось. Может, у него логика такая, что оно после этого дальше ничего делать не захочет и тут же закроется.
Значениями acHooked_WinClassName и acHooked_WinTitle подставляешь нужные имена. Условие запрете создания окна можно "по вкусу" поменять, чтобы, например, реагировать только на название класса окна или только на заголовок окна.
Microsoft пишет, что хук-процедцра ДОЛЖНА находиться во внешней DLL, так что без создания DLL все равно не обойтись.
Соответственно, в своей программе перед "критическим участком" вызываешь функцию DoHook, а когда необходимость в хуке отпадет, то DoUnHook.
Еще тонкость: неизвестно, как то приложение, которое пытается создать это окно, отреагирует на то, что создать его не удалось. Может, у него логика такая, что оно после этого дальше ничего делать не захочет и тут же закроется.
Код: Выделить всё
#include <Windows.H>
//-------------------------------
const char acHooked_WinClassName [] = "??????????",
char acHooked_WinTitle [] = "?????????";
HINSTANCE hInst;
HHOOK hHook = NULL;
//======================================================
LRESULT CALLBACK MyHook_CBTProc (
int nCode, // hook code
WPARAM wParam, // depends on hook code
LPARAM lParam // depends on hook code
){
LRESULT iRes;
int cxSCREEN, cySCREEN;
//---------------
switch (nCode) {
case HCBT_CREATEWND :
if (lParam) {
if (((LPCBT_CREATEWND)lParam)->lpcs) {
static char acWinClName [512];
HWND hw = (HWND)wParam;
//-------------------------------
if (GetClassName (hw, acWinClName, sizeof (acWinClName) - 1) > 0) {
if ((lstrcmp (acHooked_WinClassName, acWinClName) == 0) &&
(lstrcmp (acHooked_WinTitle, ((LPCBT_CREATEWND)lParam)->lpcs->lpszName) == 0)) {
// Запрещаем окну создаваться:
// If the hook procedure returns a nonzero value,
// the system destroys the window;
// the CreateWindow function returns NULL, but
// the WM_DESTROY message is not sent to the window.
return (1);
};
};
};
};
// "Вызываем по цепочке"
iRes =
CallNextHookEx (
hHook, // HHOOK hhk, // handle to current hook
nCode, // hook code passed to hook procedure
wParam, // value passed to hook procedure
lParam // value passed to hook procedure
);
return (iRes);
default :
// "Вызываем по цепочке"
return (
CallNextHookEx (
hHook, // HHOOK hhk, // handle to current hook
nCode, // hook code passed to hook procedure
wParam, // value passed to hook procedure
lParam // value passed to hook procedure
)
);
}; // switch (nCode)
}; // MyHook_CBTProc
//======================================================
extern "C"
void __declspec(dllexport) DoHook (void)
{
if (hHook == NULL) {
hHook = SetWindowsHookEx (
WH_CBT, // int idHook, // hook type
(HOOKPROC)MyHook_CBTProc, // HOOKPROC lpfn, // hook procedure
hInst, // HINSTANCE hMod, // handle to application instance
0 // DWORD dwThreadId // thread identifier
);
}; // if (hHook == NULL)
}; // DoHook
//------------------------------------
extern "C"
void __declspec(dllexport) DoUnHook (void)
{
if (hHook != NULL) {
if (UnhookWindowsHookEx (hHook))
hHook = NULL;
}
}; // DoUnHook
//-------------------------------
//------------------------------------
BOOL WINAPI DllMain (HINSTANCE hInstance,
DWORD Reason,
LPVOID Reserved
)
{
switch(Reason) {
//Register messages on creation (not needed but to be safe :) )
case DLL_PROCESS_ATTACH:
hInst = hInstance;
return TRUE;
//When disconnected then detach from the hook
case DLL_PROCESS_DETACH:
DoUnHook ();
return TRUE;
}; // switch(Reason)
return TRUE;
}; // DllMain
Microsoft пишет, что хук-процедцра ДОЛЖНА находиться во внешней DLL, так что без создания DLL все равно не обойтись.
Соответственно, в своей программе перед "критическим участком" вызываешь функцию DoHook, а когда необходимость в хуке отпадет, то DoUnHook.
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
Да но тут еще прикол в том что окно вызавается до FormCreate точнее до всех моих строк
Application.Initialize;
Application.Title := 'FTP';
Application.CreateForm(TForm1, Form1); //тут жмакаю F7 и сразу вылазит окно а после его закрытия уже происходит вся инициализация
Application.Run;
Application.Initialize;
Application.Title := 'FTP';
Application.CreateForm(TForm1, Form1); //тут жмакаю F7 и сразу вылазит окно а после его закрытия уже происходит вся инициализация
Application.Run;
А что мешает вызвать установку хука до вызова Application.CreateForm?
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
чето не получается компильнуть библиотеку
А поконкретнее? (Я компилировался MS VC++ 6.0)namomelkor писал(а):чето не получается компильнуть библиотеку
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
мммммм.... У меня 2005-я студия. 6-го нет. А библиотеку выложеть сюда можешь?
Caption окна "About FolderView Control"
Caption второго окна "About FileView Control"
если не трудно.
Caption окна "About FolderView Control"
Caption второго окна "About FileView Control"
если не трудно.