char* to UINT (Hotkey)
-
Hallo liebe Community,
ich möchte einen Hotkey mit RegisterHotKey() festlegen und diesen aus einer .ini Datei auslesen (den Modifier und den Key).
Mit dem folgenden Code funktioniert es leider nicht: ^^
char* key1 = new char[1024]; char* mod1 = new char[1024]; GetPrivateProfileString("hotkey", "key1", NULL, key1, 1024, dir_ini); GetPrivateProfileString("hotkey", "mod1", NULL, mod1, 1024, dir_ini); RegisterHotKey(hWnd, 22022, (UINT)mod1, (UINT)key1);
Bitte um Vorschläge wie ich die Idee umsetzen kann.
Danke ~
-
falsches subforum? klingt irgendwie nach Win ...
-
Ja, ist WINAPI.
Du solltest den Returnwert von RegisterHotkey überprüfen, falls er 0 ist, solltest du den Fehler per GetLastError überprüfen. Sehr häufig dürfte er 1409 sein (Hotkey is already registered).
Außerdem erwartet die Funktion als dritten Parameter nur Modifizier wie MOD_ALT, MOD_CONTROL und ähnliches, als vierten einen virtuellen Tastencode wie VK_12, VK_ADD usw..
Ein char_array in einen unsigned int zu casten lässt sich zwar kompilieren, semantisch korrekt ist dies aber nicht.
Du solltest also in der ini-Datei direkt die UINTs speichern und per GetPrivateProfileInt auslesen.Das hier bitte auch noch lesen.
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke an Vicious Falcon für die Antwort,
jedoch ist mir noch schleierhaft was ich in die .ini jetzt genau eintragen soll, bzw ob die Funktion überhaupt stimmt
Also ich lese den UINT aus der .ini per:
UINT key2; key2 = GetPrivateProfileInt("hotkey", "key2", NULL, dir_ini); RegisterHotKey(hWnd, 22022, NULL, key2);
aus, und in der .ini steht:
[hotkey] key1='R'
oder kann ich nur den UINT 0x52 als R-Taste auslesen ?
Btw.: Danke fürs Verschieben und Sorry
Greez~
-
[hotkey] key1=82
Du schreibst die (Dezimal-) Zahl in die ini-Datei und kannst sie dann mit GetPrivateProfileInt direkt auslesen.
Mit 'r' müsste es allerdings auch gehen, wenn auch nicht direkt. 'r' hat einen anderen (ASCII-) Wert (siehe hier). Du könntest also 'r' auslesen und mit VkKeyScan den VK-Code erhalten.
Und der Returnwert sollte wirklich überprüft werden. Ein UnregisterHotkey wäre beim Beenden des Programms nicht verkehrt.Edit:
[hotkey] key1=r
So müsste es natürlich dann dadrin stehen.
Edit2 : Wenn r darin steht, kannst du den Wert nur als String lesen, dessen ASCII-Code per int i = str[0] abfragen und dann die VkKeyScan - Fkt aufrufen.
-
Hat sich erledigt, hab Edit2 gerade gelesen, Danke dir !
Edit: funktioniert leider noch nicht ganz:
char* key1 = new char [1024]; GetPrivateProfileString("hotkey", "key1", NULL, key1, 1024, dir_ini); int i = (int)key1; short kk1 = VkKeyScan((char)key1); RegisterHotKey(hWnd, 22020, NULL, kk1);
in der .ini:
[hotkey] key1=r
Das letzte mal noch
-
Heißt bei dir dir_ini auch wirklich bspw. "./ini.ini". lpDefault sollte auch "\0" sein.
char ccc[12]; if(GetPrivateProfileString("hotkey","key1","\0",ccc,12,"./ini.ini") && ccc[0]) { TCHAR cText[32]; int pi = ccc[0]; int vk = (VkKeyScan(pi)); StringCbPrintf(cText,32,TEXT("%s %d %d)",ccc,pi,vk); MessageBox(0,cText,0,0); }
-
Perfekt, jetzt funktioniert es
Danke !