1. popup menu 단축키 없애기
autohotkeys 속성을 mamanual로 변경
2. menu 항목의 캡션에 붙은 '&' 만 제거한 텍스트 얻기
striphotkey함수를 사용하면 '&'를 제거한 텍스트만 가져옴
https://delphi.cjcsoft.net/viewthread.php?tid=43051
Remove Automatic Accelerator Keys For Delphi Menu Item - Remove Auto "&" in Item's Caption - Delphi Tips - CJC Delphi (Cool Del
delphi.cjcsoft.net
3. 키보드 후킹하기
WParam = WM_KEYDOWN 조건을 추가하면 누를 때만 키입력을 가로챌수 있음
private
FHookHandle: HHOOK;
FInputString: string;
const
HOTKEY_MODIFIERS = MOD_CONTROL;
HOTKEY_KEY = Ord('1');
procedure TMainForm.FormCreate(Sender: TObject);
begin
FHookHandle := SetWindowsHookEx(WH_KEYBOARD_LL, @HandleKeyboardHook, HInstance, 0);
end;
procedure TMainForm.FormDestroy(Sender: TObject);
begin
UnhookWindowsHookEx(FHookHandle);
end;
procedure TMainForm.HandleKeyboardHook(Code: Integer; wParam: WPARAM; lParam: LPARAM);
var
keyboardHookStruct: PKBDLLHOOKSTRUCT;
input: array [0..1] of TInput;
i: Integer;
begin
if Code = HC_ACTION then
begin
keyboardHookStruct := PKBDLLHOOKSTRUCT(lParam);
if (keyboardHookStruct^.vkCode = HOTKEY_KEY) and
((keyboardHookStruct^.flags and LLKHF_ALTDOWN) = 0) and
((keyboardHookStruct^.flags and LLKHF_EXTENDED) = 0) and
(GetAsyncKeyState(VK_CONTROL) < 0) then
begin
if IsActiveExcelWindow then
begin
// 엑셀이 활성화되어 있는 경우에만 핫키 동작 수행
for i := 0 to Length(FInputString) - 1 do
begin
input[i].Itype := INPUT_KEYBOARD;
input[i].ki.wVk := 0;
input[i].ki.wScan := Ord(FInputString[i+1]);
input[i].ki.dwFlags := KEYEVENTF_UNICODE;
input[i].ki.time := 0;
input[i].ki.dwExtraInfo := 0;
end;
// 문자열 입력
SendInput(Length(FInputString), input[0], SizeOf(TInput));
end;
end;
end;
// 후킹된 메시지 처리 계속 진행
Result := CallNextHookEx(FHookHandle, Code, wParam, lParam);
end;
function TMainForm.IsActiveExcelWindow: Boolean;
var
Excel: TExcelApplication;
begin
Result := False;
try
Excel := TExcelApplication.Create(nil);
Result := Excel.Connected;
Excel.Free;
except
Result := False;
end;
end;
4. MSScriptControl 설치하기
import activex에서 MSScriptControl 선택 후 install 클릭
'프로그래밍 > 델파이' 카테고리의 다른 글
폼을 안보이게 하기 (1) | 2024.01.26 |
---|---|
트리뷰 노드 만들고 저장하기 chatgpt (0) | 2023.03.30 |
가상머신에 설치된 delphi7을 실컴으로 옮기기 (0) | 2023.02.17 |