Schumi |
Отправлено: 31.01.2006, 17:13 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
CODE |
WNDPROC wpOrigEditProc;
//---------------------------------------------------------------------------
LRESULT APIENTRY EditSubclassProc(
HWND hwnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
if (uMsg == WM_SETTEXT) {
int k = Form1->Label2->Caption.ToInt();
k++;
Form1->Label2->Caption = IntToStr(k);
}
// в следующей строке ошибка
return CallWindowProc(wpOrigEditProc, hwnd, uMsg, wParam, lParam);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
wpOrigEditProc = (WNDPROC) SetWindowLong(Memo1->Handle,
GWL_WNDPROC, (LONG) EditSubclassProc);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
SetWindowLong(Memo1->Handle, GWL_WNDPROC,
(LONG) wpOrigEditProc);
}
//---------------------------------------------------------------------------
|
Она выдает:
E2342 Type mismatch in parameter 'lpPrevWndFunc' (wanted 'int (__stdcall *)()', got 'long (__stdcall *)(void *,unsigned int,unsigned int,long)')
|
|
Gedeon |
Отправлено: 31.01.2006, 18:02 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
АГа я вообще не понял, все законно что ему не нравится ХЗ, пока не понял, но еще поколупаюсь.
|
|
GIZMO |
Отправлено: 31.01.2006, 22:09 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (Gedeon @ 31/01/2006, 18:02) | АГа я вообще не понял, все законно что ему не нравится ХЗ, пока не понял, но еще поколупаюсь. |
#define STRICT
|
|
Schumi |
Отправлено: 01.02.2006, 09:14 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
У меня еще вопрос, правда немного не в тему, но является логич. продолжением.
Отчего я поперся в субклассинг?
Есть чужая программа — на ней всего-то: мемо и 2 баттон — "выполнить" и "отмена". При запуске появляется надпись на англ (мемо). Тыкается кнопка выполнить — она что-то делает и меняет мемо, а если тыкнуть отмена — тоже закроется.
Мне не нравится, что на англ. Я хотел заменить мемо wndproc на свой и отображать свой текст и для кнопок, чтобы названия всех контролов были моими.
Сам ехе чем-то запакован и все ресурсы типа есть, но они "повреждены", поэтому просто и наивно сделать не получилось.
Учитывая что так просто wndproc заменить нельзя в 2000/xp, я понял эта идея не самая лучшая. Поэтому хотел спросить как лучше поступить?
Я уже подумал, может сделать так: запустить из своей программы чужую, но чтобы она была hide, и нигде не отображалась, а потом через FindWindow программно нажать кнопку и прочитать мемо — узнать результат работы, а потом закрыть чужую прогу. Правда у меня возникают сомнения — будет ли создано вообще окно в этом случае для чужой проге?
|
|
Gedeon |
Отправлено: 01.02.2006, 09:57 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
Будет.
А что мешает менять нужный текст в проге с помощью того же FindWindow и SetWindowText?
|
|
Schumi |
Отправлено: 01.02.2006, 16:18 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Да, но это программа ведь меняет текст мемо в соответствии со своим алгоритмом работы несколько раз. А узнать момент? И что же ставить таймер, и смотреть, что находится в мемо?
|
|
Guest |
Отправлено: 02.02.2006, 10:29 |
|
Не зарегистрирован
|
QUOTE (Schumi @ 01/02/2006, 16:18) | Да, но это программа ведь меняет текст мемо в соответствии со своим алгоритмом работы несколько раз. А узнать момент? И что же ставить таймер, и смотреть, что находится в мемо? |
Зачем таймер, установить глобальный хук. И вообще по моему засабкласить процедуру окна полученного FindWindow не удастся. |
|
Schumi |
Отправлено: 03.02.2006, 11:25 |
|
Машинист паровоза
Группа: Участник
Сообщений: 206
|
Ну как сказать, в 98 без проблем, а в nt, да геморойно.
|
|