Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
ВнизКакая-то путаница с окнами. Найти похожие ветки
← →
Новичек (2009-02-22 16:44) [0]Имеется вызов функции Enumchildwindows(hMDI, @EnumChildWindowsProc, 0);
Код функции EnumChildWindowsProc:
hWND := FindWindowEx(hMDI, 0, nil, Buffer);
windows.SetForegroundWindow(hWND);
ShowWindow(hWND, SW_NORMAL);
Sleep(500);
Application.ProcessMessages;
Sleep(500);
SendCtrY;//посылаю Ctrl+Y
Sleep(500);
Application.ProcessMessages;
SendCtrEnd;//посылаю Ctrl+End
Sleep(500);
Application.ProcessMessages;
SendKeys("list" + #13#10);//посылаю команду list
Sleep(500);
Application.ProcessMessages;
Result := True;
Вспомогательные фунции:
procedure SendKeys(buffer: string);
var
i: integer;
w: word;
D: DWORD;
P: ^DWORD;
begin
P := @D;
SystemParametersInfo(//get flashing timeout on win98
SPI_GETFOREGROUNDLOCKTIMEOUT,
0,
P,
0);
for i := 1 to length(buffer) do
begin
w := VkKeyScan(buffer[i]);
keybd_event(w, 0, 0, 0);
keybd_event(w, 0, KEYEVENTF_KEYUP, 0);
end;
SystemParametersInfo(//set flashing TimeOut=0
SPI_SETFOREGROUNDLOCKTIMEOUT,
0,
nil,
0);
SetForegroundWindow(hInput);
//->typecast working...
SystemParametersInfo(//set flashing TimeOut=previous value
SPI_SETFOREGROUNDLOCKTIMEOUT,
D,
nil,
0);
end;
procedure SendCtrY;
var
KeyInputs: array of TInput;
KeyInputCount: Integer;
procedure KeybdInput(VKey: Byte; Flags: DWORD);
begin
Inc(KeyInputCount);
SetLength(KeyInputs, KeyInputCount);
KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
with KeyInputs[KeyInputCount - 1].ki do
begin
wVk := VKey;
wScan := MapVirtualKey(wVk, 0);
dwFlags := KEYEVENTF_EXTENDEDKEY;
dwFlags := Flags or dwFlags;
time := 0;
dwExtraInfo := 0;
end;
end;
begin
KeyInputCount:=0;
KeybdInput(VK_CONTROL, 0); // Ctrl
KeybdInput(Byte("Y"), 0); // Y
KeybdInput(Byte("Y"), KEYEVENTF_KEYUP); //
KeybdInput(VK_CONTROL, KEYEVENTF_KEYUP); //
SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
end;
procedure SendCtrEnd;
var
KeyInputs: array of TInput;
KeyInputCount: Integer;
procedure KeybdInput(VKey: Byte; Flags: DWORD);
begin
Inc(KeyInputCount);
SetLength(KeyInputs, KeyInputCount);
KeyInputs[KeyInputCount - 1].Itype := INPUT_KEYBOARD;
with KeyInputs[KeyInputCount - 1].ki do
begin
wVk := VKey;
wScan := MapVirtualKey(wVk, 0);
dwFlags := KEYEVENTF_EXTENDEDKEY;
dwFlags := Flags or dwFlags;
time := 0;
dwExtraInfo := 0;
end;
end;
begin
KeyInputCount:=0;
KeybdInput(VK_CONTROL, 0); // Ctrl
KeybdInput(VK_END, 0); // Y
KeybdInput(VK_END, KEYEVENTF_KEYUP); //
KeybdInput(VK_CONTROL, KEYEVENTF_KEYUP); //
SendInput(KeyInputCount, KeyInputs[0], SizeOf(KeyInputs[0]));
end;
Проблема в том, что без Slip"ов строки передаются в окна, как Бог на душу положит - могут передаться, не передаться, передаться с ошибкой.
Уважаемые Мастера, не знает ли кто - а почему, собственно?
Спасибо.
← →
Сергей М. © (2009-02-22 16:56) [1]Ужас какой ...
А где собственно ты используешь значение хэндла окна, передаваемое тебе параметром в твою колбэк-функцию EnumChildWindowsProc ?
← →
Новичек (2009-02-22 17:03) [2]Вот здесь: hWND := FindWindowEx(hMDI, 0, nil, Buffer);
← →
Сергей М. © (2009-02-22 17:06) [3]
> Вот здесь
Это чего ты делаешь в этой строчке ?!
Какое еще окно ты собрался искать, если параметром hWnd тебе уже передан хэндл очередного перечисляемого окна в списке существующих окон, родителем которых является окно hMdШ ?
← →
Новичек (2009-02-22 17:22) [4]Хм... Чего-то я напартачил... Сейчас разберусь.
← →
Новичек (2009-02-22 17:27) [5]Ну да, действительно - масло масляное :)
← →
Сергей М. © (2009-02-22 17:33) [6]Угу.
- Нате вам масло..
- Не, мне масло не надо, я хочу масло !
))
← →
Новичек (2009-02-22 17:36) [7]Спасибо :)
← →
Сергей М. © (2009-02-22 17:38) [8]
> Новичек
Задача колбэк-функции - получить хэндл, быстро положить его куда-нибудь куда ей скажут, например, в некий результирующий список, и быстро же вернуть управление.
А основную работу с результирующим списком следует осуществлять после возврата из Enumchildwindows.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.04.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.006 c