Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Programm in fernsteuern WinXP geht Win7 nein (https://www.delphipraxis.net/172638-programm-fernsteuern-winxp-geht-win7-nein.html)

delbone 15. Jan 2013 10:14

Programm in fernsteuern WinXP geht Win7 nein
 
Hallo,

ich habe ein kleines Prog geschrieben, dass Daten zur keycard-Programmierung an ein Drittprogramm übergeben soll.

Unter WinXP mit Delphi 2007 programmiert und getestet - funktioniert ohne Probleme.

Aber Programm funktioniert unter Win7 überhaupt nicht. Ich bekomme keine handles kann dem Programm nicht den Focus geben
usw...

Getestet habe ich bereits das Programm als Administrator auszuführen um Probleme mit der UAC zu umgehen ... leider keine
Verbesserung

Dann habe ich spaßeshalber WinSpy probiert und WinSpy bekommt auch ohne Administrator rechte die handles... und ich
frage die handles ja dachte ich genauso ab.

Nun meine Frage - muß ich beim compiler von Delphi 2007 irgendetwas einstellen, damit das Programm auch in Win7
funktioniert oder wo ist hier mein Denkfehler?

meine Codeauszüge sieht so aus:

Code:
procedure tform1.Keyprog;
var myhandle: thandle;
    result: boolean;
    parentwnd, wnd: hwnd;
    i: integer;
    fensterpos: TRect;
    ApNr, Tage, BS: string;
const dialock = 'Dialock Hotel - DIALOCK Hotel';

begin

  // Check ob Dialock Hotel läuft
  if (EXE_Running('dlhw.exe', false)=true) then begin
     // Check in Gast
        sleep(100);
        result:=AppActivate(pchar(dialock)); //sleep(10);
        SendKeys('{ENTER}', true); sleep(10);

        // Raum Nr.
        apnr:=trim(apartmentnr.Text);
        if pos('.',apnr)>0 then delete(apnr,pos('.',apnr),1);
        apnr:='A'+apnr;

        parentwnd:=0; wnd:=0;

        result:=AppActivate(pchar(dialock)); sleep(10);
        parentwnd := FindWindow('ThunderRT6MDIForm','Dialock Hotel - DIALOCK Hotel');
        parentwnd := FindWindowEx(parentwnd, 0, 'MDIClient', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'ThunderRT6FormDC', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'AfxWnd40', nil);
        wnd := FindWindowEx2(parentwnd,'ThunderRT6TextBox', 5); //sleep(10);
        SendMessage(Wnd,WM_SETFOCUS,0,0);
        SendMessage(Wnd,WM_SETTEXT,0,LongInt(PChar(apnr))); sleep(10);

        // Key Nr.
        sendkeys('{TAB}', true); sleep(10);

        i:=strtoint(kartenanzahl.Text);

        if i>1 then for i:=1 to i-1 do SendKeys('{DOWN}', true); sleep(5);

        // Dauer(Tage)
        i:=0; tage:='';
        tage:=inttostr(daysbetween(now,datumbis.DateTime+1));

        parentwnd:=0; wnd:=0;
        result:=AppActivate(pchar(dialock)); sleep(10);
        parentwnd := FindWindow('ThunderRT6MDIForm','Dialock Hotel - DIALOCK Hotel');
        parentwnd := FindWindowEx(parentwnd, 0, 'MDIClient', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'ThunderRT6FormDC', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'ThunderRT6PictureBoxDC', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'ThunderRT6ComboBox', nil);
        wnd := FindWindowEx(parentwnd, 0, 'Edit', nil);
        SendMessage(Wnd,WM_SETFOCUS,0,0);

        for i:=1 to length(tage) do begin
          BS:=copy(tage,i,1);
          sendkeys(pchar(BS),true); sleep(5);
        end;


  end else begin
    showmessage ('Bitte starten Sie zuerst Dialock Hotel');
    BTkartenprog.enabled:=true;
  end;
end;
Tappe im Moment völlig im dunkeln warum unter Win7 nichts funktioniert..

Danke

Ralf

CCRDude 15. Jan 2013 10:39

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Dein schnellster Freund dürfte der Debugger sein. Funktioniert EXE_Running überhaupt?

Dein zweiter Freund ist der Debugger oder eine minimale Fehlerbehandlung, die zumindest per OutputDebugString mitteilt, wenn ein FindWindow(Ex) etc. fehlschlägt.

Kurz: nimm den Debugger, steppe durch das Programm, und teile uns mit, an welcher Stelle Dein Code vom erwarteten Verhalten abweicht, dann fällt es leichter, Fehlerursachen zu vermuten und Tipps zu geben :)

delbone 15. Jan 2013 11:27

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Hi,

das Problem mit dem Debuggen ist ja, das es in meiner Entwicklungsumgebung XP/Delphi 2007 funktioniert und in Win7
nicht... ich habe schon alle handle mit showmessage in win7 angezeigt, dass ergebnis war immer 0

Ich kann auch nicht auf dem Firmenrechner mein Delphi installieren. Wie gesagt unter XP funktioniert es ohne Probleme.

DeddyH 15. Jan 2013 11:43

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Zitat:

Delphi-Quellcode:
parentwnd := FindWindow('ThunderRT6MDIForm','Dialock Hotel - DIALOCK Hotel');
        parentwnd := FindWindowEx(parentwnd, 0, 'MDIClient', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'ThunderRT6FormDC', nil);
        parentwnd := FindWindowEx(parentwnd, 0, 'AfxWnd40', nil);

Was passiert denn, wenn parentwnd in dieser Kette einmal 0 wird, weil das entsprechende Fenster nicht gefunden wurde? Du solltest nach jeder Zuweisung auf 0 prüfen, dann kann man auch eine entsprechende Meldung bringen, was da ggf. schief läuft. Ob diese Meldung kommen soll, ließe sich z.B. mittels Kommandozeilen-Parameter angeben.

CCRDude 16. Jan 2013 08:47

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Wenn Du auf dem Win7 kein Delphi installieren kannst, nimm doch einfach den Remote-Debugger :) Oder versuche is mit ner virtuellen Maschine (hier ein kleines Hilfsmittel von mir zu Delphi-Remote-Debuggen in VMs).

Außerdem gibt es noch WinDbg, damit bekommst Du Debugausgaben von OutputDebugString mit. Etwas komfortabler als ShowMessage ;)

Wenn Du aber per ShowMessage schon Handles angezeigt bekommen hast, gehe ich davon aus, dass EXE_Running zumindest funktioniert?

Läuft dlhw.exe elevated oder nicht?
Hat Dein Programm ein gültiges Manifest?
Selbsterstellt oder das von Delphi?
Hat das selbsterstellte Manifest auch das UI-Einfluss-Flag gesetzt (eigentlich dachte ich, das wäre hierfür noch nicht notwendig, aber wer weiss...)?

rweinzierl 16. Jan 2013 09:11

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Hallo


Ich glaube mich dunkel zu errinnern das unter Windows 7 die Fernsteuermöglichkeiten aus Sicherheitsgründen (auch mit Adminrechten ) nicht mehr gehen.


Sonst könnte man ja jede Sicherheitswarnung einfach wegdrücken.


(Sicher bin ich aber nicht)

mfg

Reinhold

Sir Rufo 16. Jan 2013 11:35

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Mit WinSpy kann man sich doch auch Quellcode erzeugen lassen.

Funktioniert der auch nicht?

Bummi 16. Jan 2013 11:57

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Zitat:

Ich glaube mich dunkel zu errinnern das unter Windows 7 die Fernsteuermöglichkeiten aus Sicherheitsgründen (auch mit Adminrechten ) nicht mehr gehen.
kann ich nicht bestätigen, wir steuern diverse Anwendungen problemlos...

delbone 21. Jan 2013 12:43

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Hi,

ja auch der von WinSpy erzeugte Code funktioniert nicht - ich bin im moment auch ratlos und setze mir jetzt eine virtuelle maschine mit Win 7 auf und werde mir Delphi dort neu installieren.. und dann werde ich weitersehen...

Danke erst mal für die Ideen

Ralf

Luckie 21. Jan 2013 13:51

AW: Programm in fernsteuern WinXP geht Win7 nein
 
Wie viel Bit hat das Windows 7?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:29 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz