Entwickler-Ecke
Windows API - prob mit handle
omega123 - Mi 04.09.02 15:46
Titel: prob mit handle
hi
habe ien prob mit einem handle
ich möchte eien text in ein richedit schicken. nur irgetnwie ist hier was falsch?? bitte um hilfe.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50:
| function FindWindowByTitle(WindowTitle: string): Hwnd; var NextHandle: Hwnd; NextTitle: array[0..260] of char; begin // Get the first window NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); while NextHandle > 0 do begin // retrieve its text GetWindowText(NextHandle, NextTitle, 255); if Pos(WindowTitle, StrPas(NextTitle)) <> 0 then begin Result := NextHandle; Exit; end else // Get the next window NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); end; Result := 0; end; function FindControlByNumber(hApp: HWND; ControlClassName: string; EditNr: Integer): HWND; var i: Word; hEdit: HWND; begin Result := 0; if not IsWindow(hApp) then Exit; for i := 0 to EditNr do begin hEdit := FindWindowEx(hApp, hEdit, PChar(ControlClassName), nil); if hEdit = 0 then Exit; end; Result := hEdit; end;
procedure TForm1.Button1Click(Sender: TObject); var hEdit,h: hwnd; begin hEdit := FindWindowByTitle('test'); if hEdit = 0 then h := FindControlByNumber(FindWindow('test', nil), 'Richedit', 0); if h <> 0 then SendMessage(h, WM_SETTEXT, 0, Integer(PChar('test'))) else ShowMessage('not found.'); end; |
tommie-lie - Mi 04.09.02 19:42
Was ist denn der Fehler?
Wenn er einen Laufzeitfehler meldet, dann tritt das bei mir auch auf.
Aber man solte schon eine Fehlerbeschreibung haben...
Tschüß
Thomas
omega123 - Mi 04.09.02 19:52
sorry aber hab ich wohl im eifer des gefechtes vergessen.
wenn ich den button drücke, soll eigentlich etwas in das fremde richedit geschrieben werden, aber leider passiert dies nicht.
tommie-lie - Do 05.09.02 15:15
Aha.
Und Delphi meldet in seinem Debugger einen Zugriffsfehler?
Das gleiche habe ich auch.
Versuch mal den String als String fester Länge mit einer Länge von 100 zu machen. Das klappte bei mir aus irgendeinem Grund...
Tschüß
Thomas
Moewe2 - Di 08.10.02 23:05
Titel: FindWindow-Parameter
Du hast bei Findwindow immer erst den Fensternamen angegeben, aber ich denke es ist anders rum, erst der Fenster-Tap, dann der Name.
Aber generell weiß ich nicht, warum du so umständlich versuchst, ein Handle von einem Fenster zu bekommen, dessen Titel du kennst. Mach doch einfach so:
Handle:= Findwindow(nil,'Name des Fensters');
Oder irre ich mich da.
Cya, Moe
Delete - Mi 09.10.02 08:43
Dann doch besser den Klassennamen nutzen.
Der Fenstertitel kann sich -aus welchen Gründen auch immer- ändern. Der Klassenname bleibt dagegen immer gleich. Und sprachunabhängig (deutsches Windows, englisches Windows ....) ist es auch noch.
Moewe2 - Mi 09.10.02 12:58
Wo bekommt man denn den Klassennamen her?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!