![]() |
String -> Word
Hey,
Ich möchte den im Parameter der Anwendung übergebenen Virtual Keycode als Tastendruck simulieren. Aber wie bekomme ich den Parameter, der ja ein String ist nach Word umgewandelt? Gab es hier schon einige male, aber "strtoint" kann ja nicht klappen, da z.B. "VK_VOLUME_MUTE" nicht aus Zahlen besteht. ;) Leider konnte ich über die Suche nichts gescheites finden, aber ich bin sicher ihr könnt mir helfen! :D |
Re: String -> Word
Zitat:
Delphi-Quellcode:
Nur als Beispiel, ich kenne den Wert nicht auswendig. Du müsstest ihn eigentlich mittels IntToStr anzeigen lassen können oder geht das nicht?
const
VK_VOLUME_MUTE = 5 |
Re: String -> Word
Dafür gibt es nichts Fertiges. ('s gibt einfach zu wenige, die sowas brauchen)
Also selbermachen, wofür du nicht unbedingt wissen mußt, welcher Wert in dem Word steckt. z.B.
Delphi-Quellcode:
If ParamStr(1) = 'VK_VOLUME_MUTE' Then W := VK_VOLUME_MUTE
Else If ParamStr(1) = 'VK_A' Then W := VK_A ... |
Re: String -> Word
Zitat:
Ich kann die Zahl über "inttostr", wie du gesagt hast herausfinden, aber das bringt mir nicht viel, da ich nicht von einem (im Parameter übergebenen) String "VK_VOLUME_MUTE" auf den Bezeichner "VK_VOLUME_MUTE" einer Konstanten komme, oder? Zitat:
Alles was ich schaffen müsste ist ja "dynamisch" von einem String auf die "Virtual Key"-Konstante mit dem Bezeichner zu kommen, welcher im String steht. |
Re: String -> Word
Ja, sowas ist der einzige Weg, denn wo willst du den die nötigen Werte (Word und String) sonst herbekommen?
Also 'ne Liste mit den Strings und den zugehörigen Words brauchst du so, oder so. Aber wie du diese Liste verwaltest, das ist 'ne andere Sache :zwinker: - mit den IF's - am Schnellsten ginge eine Art Hashverfahren es gibt ja nur 'ne "geringe Anzahl an mölichen Werten und wenn es keine doppelten "Hash's" gibt, dann könnte man auch locker damit arbeiten ... also ein bestimmter Hash = ein bestimmes Word - ein Array - 'ne Datei, wo String und die Zahl drinsteht ...
Delphi-Quellcode:
Case MakeHash(ParamStr(1) of
123: Result := VK_A; 456: Result := VK_B; 789: Result := VK_C; ... End;
Delphi-Quellcode:
...
Const X: Array[0..123] of Record
S: String; W: Word; End = ( (S: 'VK_A'; W: VK_A), (S: 'VK_B'; W: VK_B), (S: 'VK_C'; W: VK_C) ... ); For i := 0 to High(X) do If ParamStr(1) = X[i].S Then Result := X[i].W; |
Re: String -> Word
Die Idee mit der Datei gefällt mir.
Aber mir fällt gerade ein, dass es mir eigentlich auch reichen würde statt dem "Virtual Keycode" einfach die Zahl der Konstanten als Parameter zu übergeben: Also ich übergebe dem Programm die Zahl "173" (=VK_VOLUME_MUTE) und es schaltet auf Mute. So ist das Programm dynamisch und ich muss nur die Zahlen der Konstanten vorher herausfinden. So funktioniert das wunderbar:
Delphi-Quellcode:
Danke euch! :)
procedure TForm1.FormActivate(Sender: TObject);
function filter(pString: String): String; //entfernt den Bindestrich vor dem Parameter begin result := copy(pString,2,length(pString)); end; begin PostKeyEx32(strtoint(filter(ParamStr(1))) , [], False); //siehe [url]http://www.swissdelphicenter.ch/de/showcode.php?id=220[/url] close; end; Edit: Man sollte das "close" nicht sofort danach ausführen, sonst funktioniert es nicht. |
Re: String -> Word
Ich sag's ma so, es steht nirgendwo geschrieben, daß man unbedingt 'nen Bindestinch vomt Parameter braucht, oder einen Slash ;)
/param -param param Aber wenn du unbedingt 'nen "-" haben willst ... so gehst auch ^^
Delphi-Quellcode:
PostKeyEx32(-StrToInt(ParamStr(1)) , [], False);
Sleep(...); // ??? Close; |
Re: String -> Word
Zitat:
Das mit Sleep habe ich auch schon versucht, es bringt leider gar nichts, aber ich denke dafür mache ich einen neuen Thread auf. Edit: Mit "sleep" funktioniert es nicht, aber mit negaHs ![]() |
Re: String -> Word
^^
Was das Sleep/Delay angeht ... vermutlich arbeitet PostKeyEx32 über WindowsMessages, welche erst abgearbeitet werden müssen. Kannst es ja mal mit Application.ProgressMessages versuchen (statt Delay). Hagen's Delay ruft dieses sozusagen intern doch auch auf und wartet zusätzlich noch 'ne gewisse Zeit. |
Re: String -> Word
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz