Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FindWindowEx - SysTabControl32 (https://www.delphipraxis.net/107255-findwindowex-systabcontrol32.html)

eLse-maestro 24. Jan 2008 21:23


FindWindowEx - SysTabControl32
 
Hey Leute,
also ich habe folgendes vor:

Ich habe VNC 4.1, und in den Einstellungen kann man ja sehr viel ändern. (Ports etc.)
Mein Problem ist nur, das dort ein TabControl ist, womit man zwischen verschiedenen Tabs Wechseln kann.
Und ich kann nicht auf ein anderen Tab zugreifen.

Habe das handle von SysTabControl32 mit FindWindowEx schon herausgefunden, aber weiter komme ich nicht - es ist zum Haareausreißen :(


Wollte mal SysTabControl auslesen.. habe aber nichts weiter bekommen als das handle, dass ich eh schon habe..
Delphi-Quellcode:
function EnumChildProc(wnd:hwnd; lparam:integer):bool;stdcall;
var listbox:Tlistbox;
    classname:array[0..127] of char;
begin
  listbox:=TListbox(lparam);
  getclassname(wnd,classname,127);
  listbox.Items.add('$'+inttohex(wnd,8)+'='+classname);
end;
Aber ich will ein Tab "anklicken" z.B. Desktop.
Möchte aber nicht auf die "mausklick" methode umsteigen, sonst hätte ich ja es schon lange geschafft ;O
(sitze seit gestern dran- mit schlaf-schul pause ;D)

danke für eure antworten

bitsetter 24. Jan 2008 22:14

Re: FindWindowEx - SysTabControl32
 
Hi,

ich habe es mal am Dialog "Eigenschaften von Anzeige" ausprobiert also auf dem Desktop rechtsklicken und dann das Menü Eigenschaften wählen.
Delphi-Quellcode:
uses commctrl;

var
  h: HWND;
  Count: integer;
const
  NewIndex= 2;
begin
  h:= FindWindow(nil, 'Eigenschaften von Anzeige');
  if h > 0 then
  begin
    h:= FindWindowEx(h, 0, 'SysTabControl32', nil);
    if h > 0 then
      SendMessage(h, TCM_SETCURFOCUS, NewIndex, 0)
    else
      MessageDlg('SysTabControl Handle = 0', mtError, [mbOk], 0);
  end
  else
    MessageDlg('Handle = 0', mtError, [mbOk], 0);
Damit wird der 3 Tab nach vorne geholt.
Edit: Den Text der Tab kannst du ansonsten noch mit TCM_GETITEM auslesen.

toms 24. Jan 2008 22:20

Re: FindWindowEx - SysTabControl32
 
und beim VNC kannst du es analog machen:

Delphi-Quellcode:
var
  wndVNC, wndSysTabCtrl: HWND;
  iTabNr: ShortInt;
begin
  wndVNC := FindWindow('#32770', 'VNC Server Properties (User-Mode)');
  if wndVNC <> 0 then
  begin
    wndSysTabCtrl := FindWindowEx(wndVNC, 0, 'SysTabControl32', nil);
    if wndSysTabCtrl <> 0 then
    begin
      SendMessage(wndSysTabCtrl, TCM_SETCURSEL, 4, 0); // Tab "Desktop" hat Index 4
    end;
  end;
end;

eLse-maestro 25. Jan 2008 12:56

Re: FindWindowEx - SysTabControl32
 
danke,
ich habe mal toms variante probiert, und sie klappt auch.
Ich kriege den Desktop-tab ausgewählt, aber ich kann immer noch nicht auf die komponenten zugreifen-
Nur wenn ich Manuell drauf drücke dann finde ich auch das handle von den Desktop-Settings.
oder bleibt mir nichts anderes übrig als einen mausklick zu simulieren?

EDIT:
Ok bitsetters variante klappt, auch in der handle hinsicht.. vielen dank :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 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-2025 by Thomas Breitkreuz