C# RegisterHotkey() 함수 vk매개변수에다가 string형 못넣나요?

c-sharp

(DevDream) #1
[DllImport("user32.dll")]
private static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, uint vk);

이게 RegisterHotkey()함수고, 사용법은 찾아보시면 아시겠지만 unit vk엔 핫키로 쓸 이름을 넣어줘야 합니다.
예를들면 (int)Keys.Z 이걸 넣어줘야합니다.

제가 현재 만들고 있는게 핫키를 사용자설정 하는 방법입니다.
ini파일에 A부터 Z까지 써져 있을건데요, 이 알파벳으로 핫키를 쓰고 싶습니다.

ini파일을 읽어오면 ini의 내용이 stringbuilder로 되어있더라고요. ToString()써서 string형으로까진 바꿨습니다.
다만 Keys. + 변수명 의 형태로 써줘야 할거 같아요.
ini에서 읽은 내용의 변수명이 apple이라면, Keys. + apple을 써야합니다.

이게 가능한걸까요?
아니면 사용자가 핫키를 수동설정하게 만드셨던 분들은
어떤 방법을 사용하셨는지요?

string nowpath = Application.StartupPath;
StringBuilder finalOptKeyCtrl = new StringBuilder(255);
int finalCaptureKeyRead = GetPrivateProfileString("SaveOpt", "finalKey", "",finalOptKeyCtrl, 255, nowpath + "\\Options.ini");
RegisterHotKey(this.Handle, 0, 0x2, (int)Keys.Z); // <== Keys.Z를 Keys. + finalOptKeyCtrl로 작성하고싶음.

(DevDream) #2

앗 해결했습니다!
저 말고도 먼 미래의 코톡러가 저와 같은 고민을 하지 않기 위해서 해결 방법 적어둡니다.

KeysConverter로 String을 Keys형식으로 바꿀 수 있습니다.
그 후 (int)Keys.Z자리에 (uint)변환한변수 로 써주시면 됩니다.

예)

KeysConverter k = new KeysConverter();
Keys finalKey = (Keys)k.ConvertFromString(finalOptKeyCtrl.ToString());
RegisterHotKey(this.Handle, 0, 0x2, (uint)finalKey);

(P.노우렛지Δ) #3

https://msdn.microsoft.com/en-us/library/windows/desktop/ms646309(v=vs.85).aspx

RegisterHotKey는 Windows API 함수로서, 매개변수 vk는 키코드를 받습니다. 그러므로 uint를 받게 됩니다.

Keys 열거형은 컨버터를 통해 string과 서로 변환될 수 있고, 해당 열거형의 요소에 정의된 int 값과도 서로 변환될 수 있습니다.

만약 불필요한 연산을 줄이고 싶다면, 아래 링크에 있는 내용을 바탕으로 상수를 정의, 직접 집어넣어볼 수도 있습니다.


(DevDream) #4

아아… 당신은 그저 [빛]…

감사합니다 ㅠㅠ